admin 管理员组

文章数量: 1086019


2024年3月14日发(作者:js定义全局变量)

第9章 查找

教材中练习题及参考答案

1. 设有5个数据do、for、if、repeat、while,它们排在一个有序表中,其查找概率分别

是p

1

=0.2,p

2

=0.15,p

3

=0.1,p

4

=0.03,p

5

=0.01。而查找它们之间不存在数据的概率分别为

q

0

=0.2,q

1

=0.15,q

2

=0.1,q

3

=0.03,q

4

=0.02,q

5

=0.01,该有序表如下:

do

q

0

p

1

for

q

1

p

2

if

q

2

p

3

repeat

q

3

p

4

while

q

4

p

5

q

5

(1)试画出对该有序表分别采用顺序查找和折半查找时的判定树。

(2)分别计算顺序查找的查找成功和不成功的平均查找长度。

(3)分别计算折半查找的查找成功和不成功的平均查找长度。

答:(1)对该有序表分别采用顺序查找和折半查找时的判定树分别如图9.2和9.3所示。

(2)对于顺序查找,成功查找到第i个元素需要i次比较,不成功查找需要比较的次

数为对应外部结点的层次减1:

ASL

成功

=(1p

1

+2p

2

+3p

3

+4p

4

+5p

5

)=0.97。

ASL

不成功

=(1q

0

+2q

1

+3q

2

+4q

3

+5q

4

+5q

5

)=1.07。

(3)对于折半查找,成功查找需要比较的次数为对应内部结点的层次,不成功查找需

要比较的次数为对应外部结点的层次减1:

ASL

成功

=(1p

3

+2(p

1

+p

4

)+3(p

2

+p

5

))=1.04。

ASL

不成功

=(2q

0

+3q

1

+3q

2

+2q

3

+3q

4

+3q

5

)=1.3。

do

q

0

(-∞,do)

q

1

(do,for)

q

2

(for,if)

q

3

p

1

for

p

2

p

3

p

4

repeat

(if,repeat)

while

p

5

if

q

4

(repeat,while)

(while,∞)

q

5

2 数据结构教程学习指导

9.2

有序表上顺序查找的判定树

if

p

1

do

p

2

q

0

(-∞,do)

for

q

3

(if,repeat)

q

4

q

1

(do,for)

q

2

(for,if)

(repeat,while)

p

3

repeat

p

4

p

5

while

q

5

(while,∞)

9.3

有序表上折半查找的判定树

2. 对于A[0..10]有序表,在等概率的情况下,求采用折半查找法时成功和不成功的平

均查找长度。对于有序表(12,18,24,35,47,50,62,83,90,115,134),当用折半

查找法查找 90时,需进行多少次查找可确定成功;查找47时需进行多少次查找可确定成

功;查找100时,需进行多少次查找才能确定不成功。

答:对于A[0..10]有序表构造的判定树如图9.4(a)所示。因此有:

ASL

成功

=

11224344

=3

11

4384

=3.67

12

ASL

不成功

=

对于题中给定的有序表构造的判定树如图9.4(b)所示。查找 90时,关键字比较次

序是50、90,比较2次。查找47时,关键字比较次序是50、24、35、47,比较4次。查

找100时,关键字比较次序是50、90、115,比较3次。

5 50

2 8 24 90

0 3 6 9 12 35 62 115

1 4 7 10 18 47 83 134

(a)

9.4

两棵判定树

(b)

3. 有以下查找算法:

int fun(int a[],int n,int k)


本文标签: 查找 有序 折半 顺序