2.2-1
用Θ记号表示函数n^3/1000 - 100n^2 - 100n +3
解答:
这个就很简单了,这里我们真正感兴趣的运行时间是增长率,也就是直接控制函数图像斜率的因素。
这里就是Θ(n^3)
2.2-2
考虑排序存储在数组A中的n个数:首先找出A中的最小元素并将A[1]中的元素进行交换。
接着,找出A中的次最小元素并将其与A[2]中的元素进行交换。
对A中前n-1个元素按该方式继续。该算法称为选择算法。
①写出其伪代码
②该算法维持的循环不变式是什么?
③为什么它只要对前n-1个元素,而不是对所有n个元素运行?
④用Θ记号给出选择排序的最好情况与最坏情况运行时间。
解答:
①②
伪代码参考:http://blog.csdn.net/lxiaoxiaot/article/details/6684727
for i from to n - 1:
minIndex = i
for j from i + 1 to n:
if A[i] < A[minIndex] :
minIndex = i
swap A[i] and A[minIndex]
④我这个写法,个人感觉最好和最坏的情况都是Θ(n^2)。这里第二个循环执行的次数是不变的,为n(n+1)/2 - 1 次,这里与原始list是如何放置元素好像没有关系。
希望有算法比较好的同学给我指正下错误,或者指正一下伪代码。
2.2-3
再次考虑线性查找问题。假定要查找的元素等可能地为数组中的任意元素,平均需要检查输入序列的多少元素?最坏情况又如何?用Θ记号给出线性查找的平均情况和最坏运行时间。证明你的答案。
解答:
平均需要检查n/2个元素
最坏的情况,需要检查n个元素
两种情况都是Θ(n)
2.2-4
我们可以如何修改几乎任意算法来使之具有良好的最好情况运行时间?
解答:
将数据一开始就排列成我们想要顺序(升序或降序)就可以了。