Orion's Studio.

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

2024/04/08

数据结构

并查集

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

散列表(哈希表)

哈希表

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

哈希函数

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

一致性哈希

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

散列表平均查找长度:

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

队列

队列

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

堵塞

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

循环队列

  • front 是队头,rear 是队尾

线性表

线性表分类

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

单向链表

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

链表

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

不存在环的图

Trie 树

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

算法

各种算法

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

遍历

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

排序

有序数组用堆排序最快。

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

分治

一定要独自子问题。

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

动态规划

  • 最长公共子序列时间复杂度 O(mn)
  • KMP 时间复杂度 O(m+n)
CATALOG
  1. 1. 数据结构
    1. 1.1. 并查集
    2. 1.2. 散列表(哈希表)
    3. 1.3. 队列
    4. 1.4. 线性表
    5. 1.5.
  2. 2. 算法
    1. 2.1. 各种算法
    2. 2.2. 遍历
    3. 2.3. 排序
    4. 2.4. 分治
    5. 2.5. 动态规划