快速union要画分支图合并
快速find要列表找到代替的点
希尔排序knuth序列是 13-4-1,sedewick序列是(1,5,19,41),横向长度=h(13-->4->1),然后纵向对于每一列插入排序。
计数排序的计数数组中的每一个数都是加上之前的数就是位置数组
merge-sort就是分裂成每个元素再按照大小合并
快速排序找到一个pivot然后从左右找依次比pivot小的数和大的数排序,递归这个步骤
复杂度展开要展开递归方程找规律
huffman代码是贪心算法,每次都找最小的合并,画出二叉树,左0右1,每一个子叶是字母
pre-order是先根再左右子树,
in-order是先遍历先左子树再根再右子树
post-order是先左右子树最后根
最少需要preorder和inorder才能找到原BST,最后用post-order验证
BST从叶插入左小右大,删除节点要找到前序或者后继
BST从根部插入要旋转,插入的反方向旋转,向R/L旋转就把子树的R/L换成父树的L/R
interval-BSt从叶插入左小右大,标明子树的最大值
interval-bst寻找,哪边的max大于[a,b]中的a就向哪边递归
-
一次hash如果collision就+1
***平方hash*** 第几次collision就(j+i^2)mod k,j是第一次collision的值 ***二次hash *** h1=k mod 19 h2=1+k mod 97 h(k)=((k mod 19)+(1+k mod 97))mod 19 注意这里没有乘以collision的次数 比如(45%19+1+45%97)%19= 15 collision! (15%19+1+45%97)%19=4 ok
heapsort每次都要保证最大堆,按顺序插入,先左后右
priority queen删除最大的节点要先把最大的节点和最小的额节点交换后删除,然后再进行最大堆整理-
DFS按照字母表顺序深入搜索,递归时返回的每一步都检查是否有新的路线
被指向的和指出的(A,B)比:/ |A | B
----|----|----
T | > | < |
B | < | >|
F | > | > |
C | < | < |
图算法:
- acyslic无环意思就是DFS没有B标记
最短路径算法
- Dijkstra是每次都找权重最小的边松弛,直到所有定点都被松弛
- bellman是对每条边松弛知道不再变化
最小生成树算法
- prim算法是划线每次都找最短的
- kruskal是找出所有最短的边,直到再找一个就会连成环
- Kosaraju强连通分量,画一个反向图进行DFS得出(discover,endprocessing),在原图根据endpro递减顺序来进行DFS,每一块DFS开始都是一个SCC
对于DAG的拓扑排序
- 从 DAG 图中选择一个 没有前驱(即入度为0)的顶点并输出。
- 从图中删除该顶点和所有以它为起点的有向边。
重复 1 和 2 直到当前的 DAG 图为空或当前图中不存在无前驱的顶点为止。后一种情况说明有向图中必然存在环。