练习题8参考答案

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

3. 简答题

(1)简述顺序查找法、折半查找法和分块查找法对被查找的表中元素的要求。对长度为n 的表来说,三种查找法在查找成功时的平均查找长度各是多少?

答:三种方法对查找的要求分别如下。

① 顺序查找法:表中元素可以任意次序存放。

② 折半查找法:表中元素必须按关键字递增或递减排列,且最好采用顺序存储结构。 ③ 分块查找法:表中元素每块内的元素可以任意次序存放,但块与块之间必须以关键字的大小递增(或递减)排列,即前一块内所有元素的关键字都不能大(或小)于后一块内任何元素的关键字。

三种方法的平均查找长度分别如下。

① 顺序查找法:查找成功的平均查找长度为(n +1)/2。

② 折半查找法:查找成功的平均查找长度为log 2(n +1)-1。

③ 分块查找法:若用顺序查找确定所在的块,平均查找长度为:21(s

n

+s )+1;若用二

分查找确定所在块,平均查找长度为log 2(s n +1)+2

s

。其中,s 为每块含有的元素个数。

(2)折半查找适不适合链表结构的序列,为什么?用折半查找的查找速度必然比线性查找的速度快,这种说法对吗?

答:不适合。虽然有序的单链表的结点是按从小到大(或从大到小)顺序排列,但因其存储结构为单链表,查找结点时只能从头指针开始逐步搜索,故不能进行折半查找。

折半查找的速度在一般情况下是快些,但在特殊情况下未必快。例如所查数据位于首位时,则线性查找快;而二分查找则慢得多。

(3)给定关键字序列为{3,5,7,9,11,13,15,17},回答以下问题:

① 按表中元素的顺序依次插入一棵初始值为空的二叉排序树。画出插入完成后的二叉排序树,并求其在等概率情况下查找成功的平均查找长度。

答:① 按输入顺序构造的二叉排序树如图8.1所示。在等概率情况下查找成功的平均查找长度为:

ASL succ =

8

8

7654321+++++++=4.5

由此可见在同样序列的查找中,平衡二叉树比二叉排序树的平均查找长度要小,查找效率要高。

5

7

图8.1 一棵二叉排序树 图8.2 一棵平衡二叉树

(4)输入一个正整数序列{40,28,6,72,100,3,54,1,80,91,38},建立一棵二叉排序树,然后

删除结点72,分别画出该二叉树及删除结点72后的二叉树。

答:构造的二叉排序树如图8.3所示。为了删除结点72,在其左子树中找到最大结点54(只有一个结点),用其代替结点72

图8.3 二叉排序树图8.4 删除72后的二叉排序树

(6)对一个固定的数据集,用比较两个元素大小的方法在一个给定的序列中查找某个元素的时间复杂度下限是什么?如果要求时间复杂度更小,你采用什么方法?此方法的时间复杂度是多少?

答:查找某个元素的时间复杂度下限,如果理解为最短查找时间,则当关键字值与表头元素相同时,比较1次即可。要想降低时间复杂度,可以改用Hash查找法。此方法对表内每个元素的比较次数都是O(1)。

(7)设有一组关键字{19,01,23,14,55,20,84,27,68,11,10,77},采用哈希函数:

H(key)=key % 13

采用开放地址法的线性探测法解决冲突,试在0~18的哈希地址空间中对该关键字序列构造哈希表,并求成功和不成功情况下的平均查找长度。

解:依题意,m=19,线性探测法计算下一地址计算公式为:

d1=H(key)

d j+1=(d j+1) % m; j=1, 2, ...

其计算函数如下:

H(19)=19 mod 13=6

H(01)=01 mod 13=1

H(23)=23 mod 13=10

H(14)=14 mod 13=1 冲突

H(14)=(1+1) mod 19 =2

H(55)=55 mod 13=3

H(20)=20 mod 13=7

H(84)=84 mod 13=6 冲突

H(84)=(6+1) mod 19=7 仍冲突

H(84)=(7+1) mod 19=8

H(27)=27 mod 13=1 冲突

H(27)=(1+1) mod 19=2 冲突

H(27)=(2+1) mod 19=3 仍冲突

H(27)=(3+1) mod 19=4

H(68)=68 mod 13=3 冲突

H(68)=(3+1) mod 19=4 仍冲突

H(68)=(4+1) mod 19=5

H(11)=11 mod 13=11

H(10)=10 mod 13=10 冲突

H(10)=(10+1) mod 19=11 仍冲突

H(10)=(11+1) mod 19=12

H(77)=77 mod 13=12 冲突

H(77)=(12+1) mod 19=13

因此,构建的哈希表如表8.1所示。

表8.1 哈希表

ASL 成功=(1+2+1+4+3+1+1+3+1+1+3+2)/12=23/12 ASL 不成功=(1+9+8+7+6+5+4+3+2+1+5+4+3)/13=58/13 (8)线性表的关键字集合{87,25,310,08,27,132,68,95,187,123,70,63,47},共有13个元素,已知哈希函数为:

H(k ) = k mod 13

采用拉链法处理冲突。设计出这种链表结构,并计算该表的成功和不成功情况下的平均查找长度。

解:依题意,得到:

H(87)=87 mod 13=9 H(25)=25 mod 13=12 H(310)=310 mod 13=11 H(08)=08 mod 13=8 H(27)=27 mod 13=1 H(132)=132 mod 13=2 H(68)=68 mod 13=3 H(95)=95 mod 13=4 H(187)=187 mod 13=5 H(123)=123 mod 13=6 H(70)=70 mod 13=5 H(63)=63 mod 13=11 H(47)=47 mod 13=8

采用拉链法处理冲突的哈希表如图8.7所示。成功查找的平均查找长度: ASL 成功=(1×10+2×3)/10=1.6 ASL 不成功=(1×7+2×3)/13=1

2 3 4 5 6 7 8 1 0 9

图8.7 采用拉链法处理冲突的哈希表

相关文档
最新文档