第八章查找补充作业解答(Java版)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第八章查找 作业解答
1.画出对长度为10的有序表进行折半查找的判定树,并求其等概率时查找成功的平均
查找长度。 解:求得的判定树如下:
5
710
9
6
4
3
1
8
2
ASL 成功=(1+2*2+4*3+3*4)/10 =2.9
2.已知如下所示长度为12的表
(Jan,Feb,Mar,Apr,May,June,July,Aug,Sep,Oct,Nov,Dec )
(1)试按表中元素的顺序依次插入一查初始为空的二叉排序树,画出插入完成之后的二
叉排序树,并求其在等概率的情况下查找成功的平均查找长度。
(2)若对表中元素先进行排序构成有序表,求在等概率的情况下对此有序表进行折半查
找时查找成功的平均查找长度。 解:(1)求得的二叉排序树如下图所示:
Jan
Feb Mar
Apr Aug Dec June July
May
Sept
Oct
Nov
在等概率情况下查找成功的平均查找长度为:
ASL 成功=(1+2*2+3*3+4*3+5*2+6*1)/12=42/12=3.5
(2)
分析:对表中元素进行排序后,其实就变成了对长度为12的有序表进行折半查找了,那么在等概率的情况下的平均查找长度只要根据折半查找的判定树就很容易求出。
长度为12的有序表进行折半查找的判定树如下图所示:
6
8
12
11
7
5
4
1
9
32
10
所以可求出:
ASL 成功=(1+2*2+4*3+4*4)/12=33/12
3. 基于SeqList 类,设计带监视哨的顺序查找算法,要求把监视哨设置在n 号单元(其
中n 为查找表的表长)。 解:
int seqSearchwithGuard(Compareable key) { int n=length();
r[n].setKey(key); //置哨兵
for (i=0; r[i].getKey().coppareTo(key)!=0; i++); if (i==n)
return -1; //查找失败
else
return i;; //查找成功
}
4. 设散列表的长度为13,散列函数为H(K )=K%13,给定的关键字序列为: 19,14,23,01,68,20,84,27,55,11,10,79。试画出分别用拉链法和线性探查法解决冲突时所构造的散列表,并求出在等概率情况下,求这两种方法的查找成功和查找不成功的平均查找长度。 解:(1)用拉链法处理冲突:
因为:H(19)=6;H(14)=1;H(23)=10;H(01)=1;H(68)=3;H(20)=7;
H(84)=6;H(27)=1;H(55)=3;H(11)=11;H(10)=10;H(79)=1
所以,构造的哈希表如下图所示:
0 1 2 3 4 5 6 7
ASL 不成功=(4+2*3+1*2)/13=12/13 (2)用线性探测再散列法处理冲突: 因为: H(19)=6; H(14)=1; H(23)=10;
H(01)=1; H 1(01)=2; H(68)=3; H(20)=7;
H(84)=6; H 1(84)=2; H 2(84)=3;
H(27)=1;H 1(27)=2; H 2(27)=3; H 3(27)=4; H(55)=3; H 1(55)=4; H 2(55)=5; H(11)=11;
H(10)=10; H 1(10)=11; H 2(10)=12;
H(79)=1; H 1(79)=2; H 2(79)=3; H 3(79)=4; H 4(79)=5; H 5(79)=6; H 6(79)=7; H 7(79)=8; H 8(79)=9
所以,构造的哈希表如下图所示:
并求得:
ASL 成功=(1*6+2+3*3+4+9)/12=30/12
ASL 不成功=(1+13+12+11+10+9+8+7+6+5+4+3+2)/13=7
5. 在地址空间为0~16的散列区中,对以下关键字序列构造两哈希表: (Jan,Feb,Mar,Apr,May,June,July,Aug,Sep,Oct,Nov,Dec ) (1)用线性探测开放定址法处理冲突; (2)用链地址法处理。
并分别求这两个哈希表在等概率情况下查找成功和不成功时的平均查找长度。设哈希函数为H(x)=i/2取整,其中i 为关键字中第一个字母在字母表中的序号。
解:(1)因为:
H(Jan)=5;
H(Feb)=3;
H(Mar)=6;
H(Apr)=0;
H(May)=6; H1(May)=7;
H(June)=5;H1(June)=6;H2(June)=7;H3(June)=8
H(July)=5;H1(July)=6;H2(July)=7;H3(July)=8;H
4
(July)=9;
H(Aug)=0; H
1
(Aug)=1
H(Sep)=9; H
1
(Sep)=10
H(Oct)=7; H
1(Oct)=8;H
2
(Oct)=9; H
3
(Oct)=10; H
4
(Oct)=11;
H(Nov)=7; H
1(Nov)=8;H
2
(Nov)=9; H
3
(Nov)=10; H
4
(Nov)=11;H
5
(Nov)=12;
H(Dec)=2
所以,用线性探测开放定址法处理冲突构造的哈希表如下图所示:
并求得:ASL成功=(1*5+2*3+4+5*2+6)/12=31/12
ASL不成功=(5+4+3+2+1+9+8+7+6+5+4+3+2+1)/14=60/14