You are on page 1of 9

Q15:

共执行了 n^3 次的乘法运算 i (0 ~ n-1) j (0 ~ n-1) n (0 ~ n-1)


所以总共执行了 n*n*n 次乘法运算

Q16:

同理 此处 i (0~m) j (0~p) k(0~n) 所以总共执行了 m*p*n 次乘法运算

Q18:
很显然 第一个程序为依次遍历数组 进行比较 数组中有 n 个元素
因为 有两个并列的条件分支语句,所以都进行了两次比较
因此进行了 2*(n-1) 次比较

在 2-27 中 利用 else 简化了比较 原理是 最小的肯定不可能是最大的


最好的情况是递减数列 最小值每次比较都进行了更新 此时的比较次数为 n-1 次
最坏的情况是递增数列 最大值每次比较都进行了更新 此时的比较次数为 2*(n-1)次
Q20.

最坏情况下是找不到该数字 i (0~n-1)执行了 n 次比较


程序 2-1 中 在最坏情况下 x 与 a 执行的比较次数相同 均为 n 次 但是在 2-1 中需要执行两次
比较 还有一次是 i 与 n 的比较 在最坏情况下 i 与 n 还需要比较 n+1 次 所以程序 2-1 的运营
时间应该更长 程序 2-28 在开头定义 a[n]=x 其实是以空间换比较的时间

Q24:

s/e 频率 总步数
语句 (最坏)/平均

1 n+1 (j) n+1(j)


1 n (j) N(j)
1 n (j-1) N(j-1)
3n+1
(3j-1)

最坏情况(未找到) 的执行步数 为 3n + 1 次
最好情况 的执行步数 为 2 次
设第 j 次可以找到 即 a[n-j]=x 执行步数为 3j-1 步 所以平均执行步数为

(2)

s/e 频率 总步数
语句 平均

1 1 1
1 1 1
1 j+1 j+1
1 1 1
1 1 1

j+5

最坏情况(未找到) 总步数 n+4


最好情况 直接找到 总步数 5
设第 a[j] = x 则 执行的步数为 j+5 则平均步数为

(3)

s/e 频率 总步数
语句 平均

1 1 1
1 j+1 j+1
1 j j
1 1 1
1 1 1

2j+4

最好情况 在末尾就插入 执行 4 步
最坏情况 在头部插入 执行 2n+4 步
正常情况 执行 2j+4 步 所以平均步数为
2 4 6 7 8 9 13

2)
s/e 频率 总步数
语句 2-26

1 1 Θ(1)
1 1 Θ(1)
1 n+1 Θ(n)
1 n Θ(n)
1 n Θ(n)
1 1

Θ(n)

4)
s/e 频率 总步数
语句 2-24
1 n+1 Θ(n)
1 (n+1)*(n+1) Θ(n^2)
1 (n+1)*(n+1) Θ(n^2)
1 Θ(n^3) Θ(n^3)
1 Θ(n^3) Θ(n^3)
1 Θ(n^2) Θ(n^2)

Θ(n^3)

6)
s/e 频率 总步数
语句 1-31

1 1 Θ(1)
1 n Θ(n)
1 n-1 Θ(n)
1 n-1 Θ(n)
1 1 Θ(1)

Θ(n)

7)
s/e 频率 总步数
语句 2-3

1 1 Θ(1)
1 n+1 Θ(n)
1 n Θ(n)
1 n Θ(n)
1 1 Θ(1)
Θ(n)

8)
s/e 频率 总步数
语句 2-4

1 1 Θ(1)
1 n+1 Θ(n)
1 n Θ(n)
1 1 Θ(1)

Θ(n)

9)
s/e 频率 总步数
语句 2-5

1 n Θ(n)
1 n-1 Θ(n)

1 n Θ(n)
1 Θ(n^2) Θ(n^2)

1 Θ(n^2) Θ(n^2)
1 Θ(n^2) Θ(n^2)

Θ(n^2)

13)
s/e 频率 总步数
语句 2-14

1 n Θ(n)
1 n*n +1 Θ(n^2)
1 n*n Θ(n^2)
1 n Θ(n)

1 n+1 Θ(n)
1 n Θ(n)
1 n Θ(n)

Θ(n^2)

You might also like