第二章2.2分析算法

来源:互联网 发布:java视频播放器的制作 编辑:程序博客网 时间:2024/04/30 06:07

2.2-1用θ记号表示函数n3/1000100n2100n+3
θ(n3
2.2-2考虑排序存储在数组A中的n个数:首先找到A中的最小元素并将其与A[1]中的元素进行交换。接着,找出A中的次最小元素并将其与A[2]中的元素进行交换。对A中前n-1个元素按该方式继续。该算法称为选择算法,写出其伪代码。该算法维持的循环不变式是什么?为什么它只需对前n-1个元素,而不是对所有n个元素运行?用θ记号给出选择排序的最好情况与最坏情况的运行时间。
1)选择算法的伪代码

for(int k=0;k<A.length;k++){    small=A[k];    num=k;    'k以前的被固定,从k到A.length之间选择最小元素与A[k]交换'    for(j=k+1;j<A.length;j++)    {        if(small>A[j])        {            small=A[j];            num=j;        }    }    tmp=A[k];    A[k]=small;    A[num]=tmp;}

2)

循环不变性:有序性始终得到保持,这就是所谓的“循环不变 (loop invariant)”了。

1、初始时:A[0]~A[j],是有序的
2、迭代过程中:每次取最小元素,替换到A[j]位置,A[0]~A[j]是有序的
3、结束时:j=length-1,跳出循环之前最后一步,A[0]~A[j]是有序的

3)需要有一个元素拿出来作为比较,上面我拿的A[i]个,而前面排好序的也无需比较,所以在后n-i中取值比较最小。
4)最好情况:(遍历次数n(n-1)/2,替换次数为0),所以θ(n2
最坏情况:(遍历n(n-1)/2,替换了n(n-1)/2),所以θ(n2

2.2-3 再次考虑线性查找问题(参见联系2.1-3)。假定要查找的元素等可能地为数组中地任意元素,平均需要检查输入序列地多少元素?最坏情况又如何呢?用θ记号给出线性朝朝地平均情况和最坏情况地运行时间。证明你的答案。
最好是第一个就找到=1
最坏是比较到底n个=n
平均值就是(n+1)/2
θ(n)
2.2-4我们可以如何修改几乎任意算法来使之具有良好的最好情况运行时间
通过比较算法的增长量级,如果一个算法的最坏情况运行时间具有比另一个算法更低的增长量级,那么我们通常认为前者比后者更有效。由于常量因子和低阶项,对于小的输入,运行时间具有较高增长量级的一个算法与运行时间具有较低增长量级的另一个算法相比,其可能需要较少的时间。但是对足够大的输入,例如,-个θ(n2)的算法在最坏情况下比另一个θ(n3)的算法要运行得更快。

0 0
原创粉丝点击