一、哈希表
www.cnblogs.com/lnu161403214/p/8858236.html
O(1)的查找效率,使其在查重和判等价方面用处极大
二、树与二叉树
树的实现:邻接表法(VECTOR)
二叉排序树:左子节点小于自身,右子节点大于自身,中序遍历后即得到升序数列。
哈夫曼二叉树:将信息存储于叶子节点上,访问频率高的节点深度尽量低,以优化效率。例如:前缀编码。
字典树:将所有字符串连在根节点上建一棵树。
三、优先队列与左偏树(可并堆)
动态地维护最大值
四、并查集
将一个连通块看做一种集合,把树根作为这个集合的标志
带权并查集维护相对关系:
每个节点增加一个权值,维护与父节点的相对关系,“查”操作时,顺着父节点递推出与祖父节点(树根)的相对关系,“并”操作时,通过其他节点的相对关系,递推出两个要合并的树根的相对关系(有点绕--)。
具体见经典题:食物链
五、线段树
难点在于研究左右两个区间解如何高效地合并
线段树的常见应用:
1)区间最大值最小值,区间和
2)区间最大连续段
3)矩形面积并,周长并
☆实现区间修改的lazy标志,等到有查询时,标志再下传,有效地将时间复杂度分散了。
六、树状数组
1)动态维护了前缀和,代码很简单,但只可单点修改
2)二维树状数组代码很简单
七、伸展树
(可删除元素、增加元素的线段树
八、分块
待续。。。