数据结构与算法知识点归纳

数据结构

并查集

  • 并查集
    • 确定元素属于哪一个集合,将两个子集合并成同一个集合
    • 最小生成树
    • 无向图才能正确处理强联通分量

散列表(哈希表)

哈希表

  • 缓存管理,快速实现变量在内存中的读取
  • DNS 解析,快速转化
  • 扩容时间:O(n)

哈希函数

  • 文件校验,key的快速查询
  • 加密
  • 分布式,一致性哈希

一致性哈希

  • 分布式哈希算法,主用用来解决分布式系统中的负载均衡问题
  • 为了解决增加候选集的时候,哈希的值尽可能不变
  • 没有固定的顺逆时针

散列表平均查找长度:

  • 先对所有元素取余
  • 不存在冲突的长度为 1,存在冲突的从 1 开始累加
  • 平均查找长度 = 所有元素的查找长度之和 / 元素个数
  • 访问时间复杂度 O(1),查找时间复杂度 O(n)

队列

队列

  • 先进新出
  • 用于广度优先搜索

堵塞

  • 在队满时插入
  • 在队空时删除

循环队列

  • front 是队头,rear 是队尾

线性表

线性表分类

  • 顺序表
  • 链表
    • 指针实现
      • 单链表
      • 双链表
      • 循环链表
    • 数组实现
      • 静态链表

单向链表

  • 相交,则尾节点一定相同
  • 快慢指针判断环,有环的和无环的不可能相交

链表

  • 适合实现稀疏图的邻接关系

不存在环的图

Trie 树

  • 用于统计和排序大量字符串
  • 可以进行深度优先,不适合广度优先

算法

各种算法

  • Floyd-Warshall 算法
    • 用于解决带权图中任意两点之间的最短路径问题
  • Dijsktra 算法
    • 用于求带权图中某一点到其他所有点的最短路径
    • 挑选离源点最近的点,然后更新其他点到源点的距离
  • Prim 算法
    • 用于求加权连通图的最小生成树,适用于稠密图
  • Kruskal 算法
    • 用于求加权连通图的最小生成树,适用于稀疏图

遍历

  • 先序遍历
    • 中左右
  • 中序遍历
    • 左中右
  • 后序遍历
    • 左右中
  • 层次遍历
    • 类比广度优先遍历

排序

有序数组用堆排序最快。

  • 不稳定排序
    • 快排
    • 堆排序

分治

一定要独自子问题。

  • 使用分治法
    • 二分查找
    • 排序算法
      • 快排
      • 归并

动态规划

  • 最长公共子序列时间复杂度 O(mn)
  • KMP 时间复杂度 O(m+n)