目录
1.跳跃表
跳跃表让已排序的数据分布在多层次的链表结构中,默认是将Key值升序排列的,以 0-1 的随机值决定一个数据是否能够攀升到高层次的链表中。它通过容许一定的数据冗余,达到 “以空间换时间” 的目的。
在一定量数据中查找数据的方法:
- 有序数组。这种方式的存储结构,优点是支持数据的随机访问,并且可以采用二分查找算法降低查找操作的复杂度。缺点同样很明显,插入和删除数据时,为了保持元素的有序性,需要进行大量的移动数据的操作。
- 二叉查找树。如果需要一个既支持高效的二分查找算法,又能快速的进行插入和删除操作的数据结构,那首先就是二叉查找树莫属了。缺点是在某些极端情况下,二叉查找树有可能变成一个线性链表。
- 平衡二叉树。二叉树表示不服,于是基于二叉查找树的优点,对其缺点进行改进,引入了平衡的概念。根据平衡算法的不同,具体实现有AVL树 /
- B树(B-Tree) / B+树(B+Tree) / 红黑树 等等。但是平衡二叉树的实现多数比较复杂,较难理解。
- 跳跃表。同样支持对数据进行高效的查找,插入和删除数据操作也比较简单,最重要的就是实现比较平衡二叉树真是轻量几个数量级。缺点就是存在一定数据冗余。
一个跳跃表应该有若干个层(Level)链表组成;
跳跃表中最底层的链表包含所有数据; 每一层链表中的数据都是有序的;
如果一个元素X出现在第i层,那么编号比 i 小的层都包含元素X;
第 i 层的元素通过一个指针指向下一层拥有相同值的元素;
在每一层中,-∞ 和 +∞两个元素都出现(分别表示INT_MIN 和 INT_MAX);
头指针(head)指向最高一层的第一个元素;
所以其结点模型是:含有1个数据data,4个指针:left, right, up, down
来源参考
2.并查集
3.哈夫曼树与编码
4.AVL树
5.B树和B+ 树
6.前缀树
7.红黑树
8.线段树
9.图的表示:邻接矩阵和邻接表
10.图的遍历:深度搜索和广度搜索
11. 最短路径算法:Floyd 与 Dijkstra
12. 最小生成树算法: Prim, Kruskal
13.关键路径、拓扑排序
14.模式匹配:KMP, Boyer-Moore