初识数据结构

一、哈希表

  www.cnblogs.com/lnu161403214/p/8858236.html

  O(1)的查找效率,使其在查重和判等价方面用处极大

二、树与二叉树

  树的实现:邻接表法(VECTOR)

  二叉排序树:左子节点小于自身,右子节点大于自身,中序遍历后即得到升序数列。

  哈夫曼二叉树:将信息存储于叶子节点上,访问频率高的节点深度尽量低,以优化效率。例如:前缀编码。

  字典树:将所有字符串连在根节点上建一棵树。

三、优先队列与左偏树(可并堆)

  动态地维护最大值

四、并查集

  将一个连通块看做一种集合,把树根作为这个集合的标志

  带权并查集维护相对关系:

  每个节点增加一个权值,维护与父节点的相对关系,“查”操作时,顺着父节点递推出与祖父节点(树根)的相对关系,“并”操作时,通过其他节点的相对关系,递推出两个要合并的树根的相对关系(有点绕--)。

  具体见经典题:食物链

五、线段树

  难点在于研究左右两个区间解如何高效地合并

  线段树的常见应用:

  1)区间最大值最小值,区间和

  2)区间最大连续段

  3)矩形面积并,周长并

  ☆实现区间修改的lazy标志,等到有查询时,标志再下传,有效地将时间复杂度分散了。

六、树状数组

  1)动态维护了前缀和,代码很简单,但只可单点修改

  2)二维树状数组代码很简单

七、伸展树

  (可删除元素、增加元素的线段树

八、分块

  待续。。。

原文地址:https://www.cnblogs.com/lnu161403214/p/8946763.html