2.2 分析算法

来源:互联网 发布:在淘宝上开店步骤 编辑:程序博客网 时间:2024/04/16 15:27

知识

算法的运行时间依赖于输入规模以及每行语句的执行代价

执行代价被常量化,现在只考虑输入规模增加带来的增长量级,取影响最大的一项作为算法的执行时间。


分析一个算法的运行时间:

  1. 假设每一行代码的执行代价
  2. 算出每一行代码的执行次数
  3. 每一行代码的执行次数*代价的总和就是运行时间
  4. 取最差情况下的运行时间作为算法的预测运行时间

习题

2.2-1 用Θ形式表示函数 n³/1000-100n²-100n+3。

答:取最高次项,Θ(n³)


2.2-2 考虑对数组A中的n个数进行排序的问题:首先找出A中的最小元素,并将其与A[1]中元素进行交换。接着,找出A中的次最小元素,并将其与A[2]中的元素进行交换。对A中头n-1个元素继续这一过程。写出这个算法的伪代码,该算法称为选择排序(selection)。对这个算法来说,循环不变式是什么?为什么它仅需要在头n-1个元素上运行,而不是在所有n个元素上运行?以O形式写出选择排序的最佳和最坏情况下的运行时间。

答:

伪代码:

for i = 1 to n-1c1

n
    v = ic2

n-1
    for j = i to nc3

Σ(n-1,i=1)ti
        if A[j] < A[v] do v = jc4

Σ(n-1,i=1)(ti-1)
    temp = A[v]c5

n-1
    A[v] = A[i]c6

n-1
    A[i] = tempc7

n-1







为什么不用对最后一项做?因为倒数第二项的时候,只剩下两个元素,操作后最后一项必为最大值。

循环不变式:

  • 初始化:循环开始前,i=1时,1..i有序,成立
  • 保持:循环中,对于每一个i来说,1..i的部分都是有序的,成立
  • 终止:循环结束,1..n-1的部分有序,加上推理n为最大,所以成立

这种算法,最好的和最坏情况一样的,因为找出最小的那个元素必须遍历数组。简单计算可以得知,最高次项为n²。所以是Θ(n²).

2.2-3 再次考察线性查找问题(见练习2.1-3)。在平均情况下,需要检查输入序列中的多少个元素?假定待查找的元素是数组中任何一个元素的可能性是相等的。在最坏情况下又是怎么样?用Θ形式表示的话,线性查找的平均情况和最坏情况运行时间怎样?对你的答案加以说明。

答:如果是等可能的话,需要检查的元素数量就是1..n的平均数,(n+1)/2

2.2-4 应如何修改任何一个算法,才能使之具有良好的最好情况运行时间?

答:判断最好情况后特殊处理。

0 0
原创粉丝点击