目录
顺序查找
略
二分查找
折半查找
https://blog.csdn.net/chushoufengli/article/details/86264455
分块查找
索引顺序查找
将所有元素分块,块内无序,块间有序,建立一张索引表,表中每个元素含有每个块中的最大的元素值和各块中第一个起始元素的地址。查询时,先在索引表中找到块,再在块内顺序查找。
B树
多路平衡查找树
b树中所有节点的孩子节点数的最大值称为b树的阶
树中每个节点至多有m课子树(即有m-1个关键字)
非叶根结点至少有两棵子树(即有一个关键字),其他节点至少有⌈m/2⌉棵子树(即有⌈m/2⌉-1个关键字)
所有节点的平衡因子等于0
B+树
树中每个节点至多有m课子树
非叶根结点至少有两棵子树(即有一个关键字),其他节点至少有⌈m/2⌉棵子树
节点的子树个数和关键字个数相同
所有叶节点包含全部关键字及指向相应记录的指针,且叶节点中将关键字按大小顺序排列,并且相邻叶节点按大小顺序互相连接起来
所有分支节点中仅包含它的各个子节点中关键字的最大值及指向其子节点的指针
通常在b+树中有两个指针:一个指向根结点,另一个指向关键字最小的结点。
因此可以有两种查找:从最小关键字开始顺序查找;从根结点开始多路查找。
散列(Hash)表
几种散列函数:
直接定址法:H(key) = a * key + b
除留余数法:表长为m,取一个不大于m,最接近或等于m的质数p:H(key) = key % p (质数 素数 在大于1的自然数中,除了1和它本身以外不再有其他因数)
还有数字分析、平方取中、折叠等方法
几种处理冲突的方法:
1.开放定址法
线性探测(加1)、平方探测(加平方)、再散列(两个散列函数,第一个冲突,就用第二个)、伪随机序列法(加随机数)
2.拉链法(hashmap中使用的方法)
KMP
略