2.2 分析算法

知识

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

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


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

  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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值