数据结构第七章小结

查找

1.平均查找长度ASL=ΣPiCi,查找成功时,Pi为第i个记录的概率,Ci为已比较过关键字的次数

查找方法

1.顺序查找:从表的一端开始依次比较

可用于线性表和链表

数据结构第七章小结_第1张图片

 

通过设置哨兵可以降低时间复杂度,使查找更简洁。

2.二分查找:首先查找表要有序

初始使low为1,high为表长,mid=low+high /2

在mid不大于high的情况下:

若mid

若mid>key,low=low,high=mid-1......

直到high>low时结束,此时为没有找到

注意判断条件必须是在low<=high时成立,若去掉=则会在一些情况下出错

二分查找也可以改写成递归的形式,需要了解

二分查找一般只适用于线性表,如果用于链表并不会很快

3.分块查找

数据结构第七章小结_第2张图片

 

每块的最大关键字处需要有序,块内可以无序

树表的查找:

1.二叉排序树

数据结构第七章小结_第3张图片

 

与顺序表的二分查找类似

优点在于可以自由地插入和删除结点,可以用于数据动态存储的情况下

最优时查找时间复杂度可达O(log2n)但受树的形态影响,往往达不到

2.平衡二叉树

是二叉排序树的优化

平衡因子只为0,-1,1(一个结点左右子树深度之差)

可由普通二叉排序树进行变换得到

3.B树

数据结构第七章小结_第4张图片

 

 

 深度远小于二叉排序树,在I/O时可以节省大量时间

4.B+树可以进行顺序查找也可以像B树一样查找

散列表的查找

散列函数的构造方法

数字分析法、平方取中法、折叠法、留取余数法(一般情况下用第四种,类似H(key)=key%p的形式)

冲突:两个不同的key对应的散列地址相同的情况

解决冲突的方法

1.开放地址法,即冲突时寻找下一个空的散列地址存放数据,寻找可用线性勘测法,二次探测法,伪随机探测法

2.链地址法,将相同散列地址的数据存在一个单链表中

查找时需要知道散列函数和解决冲突的方式

装填因子α=表中填入的记录数/散列表的长度

α的值会影响平均查找长度ASL

 

你可能感兴趣的:(数据结构第七章小结)