一、平均查找长度
关键字比较次数的数学期望:ASL=p1c1+p2c2+...
p:查找第i个记录的概率。c:查找成功时的比较次数。
二、折半查找(有序表)
low mid high
判定树
Tbest=O(1)、Tworst=O(log2n)
三、分块查找
将关键字分块、建立所有块的索引表
四、二叉排序树(二叉查找树)(BST)
(1)若左子树非空,则左子树中所有结点的值小于根结点的值。
(2)若右子树非空,则右子树中所有结点的值大于根结点的值。
(3)它的左右子树均为二叉排序树。
比较次数最少为1,最多为树的高度。
Tbest=O(1) Tworst=O(n)
(4) AVL树(平衡二叉树)
左、右子树均为平衡二叉树,左右子树深度之差不超过1。
平衡因子:左子树的深度-右子树的深度
Tworst=O(log n)
B-树:
一颗m阶B-树要么为空树,要么满足下列条件:
(1)每个节点最多有m个子树
(2)若根节点不是叶子结点,则至少有两颗子树
(3)若除根节点之外的所有非终端结点至少有[m/2]颗子树
(4)所有非终端结点包含下列信息:
(n,A0,K1,A1,K2...,Kn,An)
n:关键字的个数,Ai:指针 Ki:关键字
K左侧的指针指向结点的关键字均小于K,右侧指针指向的关键字均大于K。
(5)所有的叶子结点都出现在同一层次上,不带信息。
B+树:
(1)有n棵子树的结点含有n个关键字。
(2)所有叶子结点包含了全部关键字的信息,以及指向这些关键字记录的指针。叶子结点按照关键字从小到大排序。
五、哈希查找
哈希函数:计算关键字的存储地址。
T=O(1)
哈希冲突:key1!=key2, f(key1)=f(key2)
构造哈希函数的方法:
直接定址法:H(key)=a*key+b (a!=0)
数字分析法:分析关键字的每一位,选择若干随机位,构成哈希地址。
平方取中法:取关键字平方后的中间若干位为哈希地址。
折叠法: 将关键字分成若干段,然后各段叠加求和。
余数法:H(key)=key MOD p (p<=表长)
解决哈希冲突:
开放地址法:H(key)=(H(key)+di) MOD m // di=i、di=(+-)K*k
再哈希法:出现哈希冲突时,采用其他哈希函数。
链地址法:将关键字的同义词存储在各自的单链表中。
公共溢出区法:遇到哈希冲突时,将所有同义词存储到公共溢出区中。