一位算法工程师的自我修养

数据结构与算法

  • 基本算法思想

    • 动态规划
    • 贪心算法
    • 回溯算法
    • 分治算法
    • 枚举算法

算法基础

  • 时间复杂度
  • 空间复杂度
  • 最大复杂度
  • 平均复杂度

基础数据结构

数组

  • 动态数组
  • 树状数组
  • 矩阵

栈与队列

  • 队列
  • 阻塞队列
  • 并发队列
  • 双端队列
  • 优先队列
  • 多级反馈队列

线性表

  • 顺序表
  • 链表

    • 单链表
    • 双向链表
    • 循环链表
    • 双向循环链表
  • 跳跃表
  • 并查集

哈希表(散列表)

  • 散列函数
  • 碰撞解决办法:

    • 开放地址法
    • 链地址法
    • 再次哈希法
    • 建立公共溢出区
  • 布隆过滤器
  • 位图
  • 动态扩容

  • 二叉树: 各种遍历,递归与非递归

    • 二叉查找树
    • 平衡二叉树
    • 平衡二叉搜索树

      • AVL
      • 红黑树
    • 完全二叉树
  • 多路查找树

    • B
    • B+
    • 2-3
    • 2-3-4
  • 哈夫曼树与编码
  • 前缀树
  • 线段树
    • 小顶堆
    • 大顶堆
    • 二项堆
    • 优先队列
    • 斐波那契堆

  • 图的存储

    • 邻接矩阵
    • 邻接表
  • 关键路径
  • 最小生成树
  • 最短路径
  • 拓扑排序

常见算法

十大排序算法

  • 简单排序:

    • 插入排序
    • 选择排序
    • 冒泡排序
  • 分治排序:

    • 快速排序 : 注意轴的选取方式
    • 归并排序
  • 分配排序:

    • 桶排序
    • 基数排序
  • 树状排序:

    • 堆排序
  • 计数排序
  • 希尔排序

    图论算法

  • 图的表示:

    • 邻接矩阵
    • 邻接表
  • 遍历算法:

    • 深度搜索
    • 广度搜索
  • 查找算法:

    • 二分查找
    • 散列表查找
    • 树结构查找
  • 最短路径算法:

    • Floyd
    • Dijkstra
  • 最小生成树算法:

    • Prim
    • Kruskal
  • 实际常用算法:

    • 关键路径
    • 拓扑排序
  • 二分图匹配:

    • 配对算法
    • 匈牙利算法
  • 拓展:

    • 中心性算法
    • 社区算法
    • 并查集

      搜索与回溯算法

  • 贪心算法
  • 启发式搜索算法:

    • A*寻路算法
  • 地图着色算法
  • N皇后问题
  • 最优加工算法
  • 旅行商问题

    动态规划

  • 树形DP:

    • 01背包问题
  • 线性DP:

    • 最长公共子序列
    • 最长公共子串
  • 区间DP:

    • 矩阵最大值
    • 矩阵最大和
    • 矩阵最大积
  • 数位DP:

    • 数字游戏
  • 状态压缩DP:

    • 旅行商

      字符串匹配算法

  • 正则表达式
  • 暴力匹配算法
  • 模式匹配:

    • KMP
    • Boyer-Moore
    • Trie

      流相关算法

  • 最大流:

    • 最短增广路
    • Dinic算法
  • 最大流最小割:

    • 最大收益问题
    • 方格取数问题
  • 最小费用最大流:

    • 最小费用路
    • 消遣

你可能感兴趣的:(算法)