考研复试——数据结构第七章

第七章查找

1、对各种查找方法的概括?
查找分为静态查找表和动态查找表,静态查找表包括:顺序查找、折半查找、分块查找;动态查找包括:二叉排序树和平衡二叉树。
(1)**顺序查找:**把待查关键字Key放入哨兵位置(i=0),再从后往前依次把表中元素和key比较,如果返回值为0则查找失败,表中没有这个key值,如果返回值为元素的位置i,则查找成功,设置哨兵的位置是为了加快执行速度。他的时间效率为O(n),其特点是:结构简单,对顺序结构和链式结构都适用,但是查找效率太低。
(2)**折半查找:**要求查找表为顺序存储结构并且有序,若关键字在表中则返回关键字的位置,若关键字不在表中时停止查找的典型标志是:查找范围的上界<=查找范围的下界。
(3)**分块查找:**先把查找表分为若干子表,要求每个子表的元素都要比他后面的子表的元素小,也就是保证块间是有序的,把各子表中的最大关键字构成一张索引表,表中还包含各子表的起始地址。他的特点是:块间有序,块内无序,查找时块间进行索引查找,块内进行顺序查找。
(4)**二叉排序树:**二叉排序树的定义为:或者是一颗空树,或者是一颗具有如下特点的树:如果该树有左子树,则其左子树的所有结点值小于根的值;若该树有右子树,则其右子树的所有结点值均大于根的值;其左右子树也分别为二叉排序树。在查找时可以进行动态的插入,插入结点要符合二叉排序树的定义,这也是动态查找和静态查找的区别,静态查找不能进行动态插入。
(5)**平衡二叉树:**平衡二叉树又称AVL树,它或者是一棵空树或者具有如下特点:他的左子树和右子树的高度差的绝对值不能大于1,且他的左右子树也都是平衡二叉树。
2、B树和B+树:
(1)B树,又称多路平衡二叉树,B树中所有结点的孩子个数的最大值称为B树的阶,通常用m表示。一棵m阶B树或为空树,或为满足如下特性的m叉树:
1>树中每个结点至多有m棵子树,即至多含有m-1个关键字。
2>若根结点不是终端结点,则至少有两棵子树。
3>除根结点外的所有非叶结点至少有m/2棵子树,即至少含有m/2-1个关键字。
4>所有的叶结点都出现在同一层次上,并且不带信息。
B树是所有结点的平衡因子均等于0的多路平衡二叉树。
(2)B+树是应数据库所需而出现的一种B树的变形树。
一棵m阶的B+树需满足下列条件:
1>每个分支结点最多有m棵子树。
2>非叶根结点至少有两棵子树,其他每个分支结点至少有m/2棵子树。
3>结点的子树个数与关键字个数相等。
4>所有叶结点包含全部关键字及指向响应记录的指针,叶结点中将关键字按大小顺序排列,并且相邻叶结点按大小顺序相互链接起来。
5>所有分支结点中仅包含它的各个子结点中关键字的最大值及指向其子结点的指针。
m阶的B+树与m阶的B树的主要差异如下:
1>在B+树中,具有n个关键字的结点只含有n棵子树,即每个关键字对应一棵子树;而在B树中,具有n个关键字的结点含有n+1棵子树。
2>在B+树中,每个结点的关键字个数n的范围是m/2<=n<=m;在B树中,每个结点的关键字个数n的范围是m/2-1<=n<=m-1.
3>在B+树中,叶结点包含信息,所有非叶结点仅起索引作用,非叶结点中的每个索引项只含有对应子树的最大关键字和指向该子树的指针,不含有该关键字对应记录的存储地址。
4>在B+树中,叶结点包含了全部关键字,即在非叶结点中出现的关键字也会出现在叶结点中;在B树中,叶结点包含的关键字和其他结点包含的关键字是不重复的。
3、哈希表的概念、哈希函数的构造方法、哈希冲突的解决办法?
哈希表又称为散列表,是根据关键字码的值直接进行访问的数据结构,即它通过把关键码的值映射到表中的一个位置以加快查找速度,其中映射函数叫做散列函数,存放记录的数组叫做散列表。
哈希函数的构造方法包括:直接定址法,除留余数法,数字分析法,平方取中法,折叠法,随机数法。
(1)直接定址法:取关键字的某个线性函数值作为散列地址。
(2)除留余数法:取关键字对p取余的值作为散列地址,其中p<m,即H(key)=key%p(p<m)。
(3)数字分析法:当关键字的位数大于地址的位数,对关键字的各位分布进行分析,选出分布均匀的任意几位作为散列的地址,适用于所有关键字都已知的情况。
(4)平方取中法:对关键字求平方,再取结果中的中间几位作为散列地址。
(5)折叠法:将关键字分为位数相同的几部分,然后取这几部分的叠加和作为散列地址。适用于关键字位数较多,且关键字中每一位上数字分布大致均匀。
(6)随机数法:选择一个随机数,把关键字的随机函数值作为散列地址。适合于关键字的长度不相同时。
哈希冲突的解决方法包括,开放定址法和拉链法,当冲突发生时,使用某种探测技术形成一个探测序列,然后沿此序列逐个单元查找,直到找到该关键字或者碰到一个开放的地址为止,探测到开放的地址表明该表中没有此关键字,若要插入,则探测到开放地址时可将新节点插入该地址单元。其中开放地址包括:线性探查法、二次探查法、双重散列法。
(1)线性探查法:基本思想,探查时从地址d开始,首先探查T[d],在探查T[d+1]…,直到查到T[m-1],此后循环到T[0],T[1]…直到探测到T[d-1]为止。
(2)二次探查法:基本思想,探查时从地址d开始,首先探查T[d],在探查T[d+1],T[d+2]…等,直到探查到有空余地址或者探查到T[d-1]为止,缺点是无法探查到整个散列空间。
(3)双重散列法:基本思想,使用两个散列函数来确定地址,探查时从地址d开始,首先探查T[d],在探查T[d+h1(d)],T[d+2*h1(d)]…
链接法:将所有关键字为同义词的结点链接在同一个单链表中,若选定的散列表长度为m,则可将散列表定义为一个由m个头指针组成的指针数组,凡是散列地址为i的结点均插入到头指针为i的单链表中。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值