常用数据结构

Posted by jabin on September 26, 2018

队列

  1. FIFO原则

集合

无重复元素, map key

链表、数组

List, array

字典、关联数组

map

二叉树

What: 每个节点的子节点小等于2 Why: 有序数组的优势在于二分查找(O(lgn), 插入:O(n)),链表的优势在于插入和删除(O(1), O(n)), 折中的话会用到二叉树 https://juejin.im/post/5ab5a01d518825555c1d9a24

完全二叉树

What: 只有最后一层的节点不满,并且最后一层的节点都集中在改成最左边的若干位置的二叉树;按顺序一维数组存储 Why: 最大堆(父节点都比子节点大)和最小堆(父节点都比子节点小) 优先队列的实现(最大堆)。 N个节点的高度d=logn 建堆O(n) 插入和删除O(logn) http://wiki.jikexueyuan.com/project/easy-learn-algorithm/amazing-priority-array.html

二叉搜索树

  1. 左子树所有节点的值都小于根节点, 右子树所有节点的值都大于根节点的值
  2. 可升级为平衡二叉树(avl) 和 红黑树

平衡二叉树

  1. 二叉搜索树 & 左右子树的高度差不超过1, 插入和删除是若超过1, 则需要进行旋转,使其恢复平衡
  2. 查找和复杂度为O(logn)

红黑树

  1. 是一个平衡二叉树, 但不是完美平衡二叉树。 对数时间(logn)内查找、插入、删除
  2. 特征:每个节点要么红,要么黑; 根节点都是黑色; 红色节点的,子节点都是黑色;从任一节点到每个叶节点的包含的黑色节点的数目一样
  3. Map, set 底层都是红黑树实现

B、B+、B*树

  1. B树:多叉树,又名平衡多路查找树; 数据库的索引中应用广泛; 全局遍历需要中序遍历
  2. B+树:所有关键字都在叶子节点,叶子节点间从小到大链接, 所以扫库只要遍历叶子节点, 同样的范围查找也是方便。 由于树的层级少,所以查询的速度比B树快; 关键字都存储在叶子节点,所以查询速度更稳定。
  3. B树:增加了兄弟指针, B+树在一个节点满时,直接创建新的节点,而B则先看下个兄弟节点,没满则复制一部分到兄弟节点,所以空间利用率更高。

LSM树 (LOG STRUCT MERGE-TREES)

将大树分解成若干小树, 牺牲读的性能,提高写的性能。

bitset

大规模数据的排重和检查