红黑树
性质:1.结点红或黑
2.根结点黑
3.叶结点黑
4.红结点,子两黑
5.从某结点到叶子节点上黑结点的数目相同
黑高度bh(x):路径上黑结点的数目
根到叶结点的任意条简单路径上至少有一半的结点是黑色的。
左旋 y旋转到x处,x旋转到左下角
右旋 x旋转到y处,y旋转到右下角
插入:z作为红色结点插入二叉树,然后进行红黑树性质调整。
B树 平衡查找树
关键字数 最小度数 t
1.每个非根的结点必须至少有t-1个关键字,每个非根的内结点至少有t个子女
2.每个结点可包含至多2t-1个关键字,所以一个内结点至多可有2t个子女
搜索:多路(二叉树 两路分支)
插入:插入到2t-1个叶结点中,出现2t个结点后,将结点分裂成两个t
二项树
共有2(k)个结点
树高度为k
在深度i处 恰有(k,i)个结点
根的度数为k,它大于任何其他结点度数
Bk=Bk-1 + Bk-1 即 Bk=Bk-1+Bk-2+Bk-3+…+B0
二项堆 由二项树组成 一种二项树在二项堆中只存在一个
斐波那契堆
hash_map
基于hash_table 基本原理 使用一个下标范围比较大的数组来存储元素。
可以设计一个函数(哈希函数,也叫做散列函数),使得每个元素的关键字
都与一个函数值(即数组下标,hash值)相对应,于是用这个数组单元来存
储这个元素;也可以简单的理解为,按照关键字为每一个元素“分类”,然后
将这个元素存储在相应“类”所对应的地方,称为桶。
插入过程:
1. 得到key
2. 通过hash函数得到hash值
3. 得到桶号(一般都为hash值对桶数求模)
4. 存放key和value在桶内。
取值过程:
1. 得到key
2. 通过hash函数得到hash值
3. 得到桶号(一般都为hash值对桶数求模)
4. 比较桶的内部元素是否与key相等,若都不相等,则没有找到。
5. 取出相等的记录的value。
一大片内存分成多个”桶”,然后将值hash后放入桶中
hash_map && map
构造函数。hash_map需要hash函数,等于函数;map只需要比较函数(小于函数).
存储结构。hash_map采用hash表存储,map一般采用红黑树(RB-Tree)实现
set 所有元素根据键值自动被排序,键值就是实值 RB-tree作为底层机制
multiset 差别 允许键值重复
hash_set hashtable作为底层机制 没有自动排序,实值就是键值
Bit-map 用一个bit位来标记某个元素对应的Value, 而Key即是该元素
采用了Bit为单位来存储数据,存储空间大大节俭