练习
2.2-1 用
Θ
Θ
Θ记号表示函数
n
3
/
1000
–
100
n
2
–
100
n
+
3
n^3/1000 – 100n^2 – 100n + 3
n3/1000–100n2–100n+3。
解
Θ
(
n
3
)
Θ(n^3)
Θ(n3)。
2.2-2 考虑排序存储在数组
A
A
A中的
n
n
n个数:首先找出
A
A
A中的最小元素并将其与
A
[
1
]
A[1]
A[1]中的元素进行交换。接着,找出
A
A
A中的次最小元素并将其与
A
[
2
]
A[2]
A[2]中的元素进行交换。对
A
A
A中前
n
−
1
n-1
n−1个元素按该方式继续。该算法称为选择算法,写出其伪代码。该算法维持的循环不变式是什么?为什么它只需要对前
n
−
1
n-1
n−1个元素,而不是对所有
n
n
n个元素运行?用
Θ
Θ
Θ记号给出选择排序的最好情况与最坏情况运行时间。
解
无论对于什么情况的输入,内层for循环的次数都是一样的。所以该算法没有最好情况与最坏情况之分,对所有情况的运行时间都为
Θ
(
n
2
)
Θ(n^2)
Θ(n2)。
2.2-3 再次考虑线性查找问题(参见练习2.1-3)。假定要查找的元素等可能地为数组中的任意元素,平均需要检查输入序列的多少元素?最坏情况又如何呢?用
Θ
Θ
Θ记号给出线性查找的平均情况和最坏情况运行时间。证明你的答案。
解
线性查找问题,最坏情况是要查找的元素位于数组的最后一个位置,或要查找的元素在数组中不存在,这种情况下算法需要比较数组中的每一个元素,因此最坏情况运行时间为
Θ
(
n
)
Θ(n)
Θ(n)。
平均来看,算法需要比较数组中一半的元素,因此平均情况运行时间也为
Θ
(
n
)
Θ(n)
Θ(n)。
2.2-4 应如何修改一个算法,才能使之具有良好的最好情况运行时间?
略
本节代码链接:https://github.com/yangtzhou2012/Introduction_to_Algorithms_3rd/tree/master/Chapter02/Section_2.2