算法导论之算法分析

算法分析

1、前提:计算机模型
使用RAM模型,即指令一条接一条执行,并没有并发操作。并且每条指令执行时间为常量 C j C_{j} Cj

2、实例:插入排序算法的分析。伪代码如下:
在这里插入图片描述
时间为每条指令运行时间总和。对应原始之积求和:
T ( n ) = C 1 n + C 2 ( n − 1 ) + C 4 ( n − 1 ) + C 5 ∑ j = 2 n t j + C 6 ∑ j = 2 n ( t j − 1 ) + C 7 ∑ j = 2 n ( t j − 1 ) + C 8 ( n − 1 ) T(n)=C_{1}n+C_{2}(n-1)+C_{4}(n-1)+C_{5}\sum_{j=2}^{n}t_{j}+C_{6}\sum_{j=2}^{n}(t_{j}-1)+C_{7}\sum_{j=2}^{n}(t_{j}-1)+C_{8}(n-1) T(n)=C1n+C2(n1)+C4(n1)+C5j=2ntj+C6j=2n(tj1)+C7j=2n(tj1)+C8(n1)
3、最好情况和最坏情况分析
最好情况:数组已经排好序,最短运行时间为
T ( n ) = C 1 n + C 2 ( n − 1 ) + C 4 ( n − 1 ) + C 5 ( n − 1 ) + C 8 ( n − 1 ) T(n) = C_{1}n+C_{2}(n-1)+C_{4}(n-1)+C_{5}(n-1)+C_{8}(n-1) T(n)=C1n+C2(n1)+C4(n1)+C5(n1)+C8(n1)
= ( C 1 + C 2 + C 4 + C 5 + C 8 ) n − ( C 2 + C 4 + C 5 + C 8 ) =(C_{1}+C_{2}+C_{4}+C_{5}+C_{8})n-(C_{2}+C_{4}+C_{5}+C_{8}) =(C1+C2+C4+C5+C8)n(C2+C4+C5+C8)
则可得:T(n)=an+b
因此最佳情况是关于n的线性函数。
最坏情况:数组反向排序,最长运行时间
T ( n ) = C 1 + C 2 ( n − 1 ) + C 4 ( n − 1 ) + C 5 ( n ( n − 1 ) 2 − 1 ) + C 6 ( n ( n − 1 ) 2 ) + C 7 ( n ( n − 1 ) 2 ) + C 8 ( n − 1 ) T(n)=C_{1}+C_{2}(n-1)+C_{4}(n-1)+C_{5}(\frac{n(n-1)}{2}-1)+C_{6}(\frac{n(n-1)}{2})+C_{7}(\frac{n(n-1)}{2})+C_{8}(n-1) T(n)=C1+C2(n1)+C4(n1)+C5(2n(n1)1)+C6(2n(n1))+C7(2n(n1))+C8(n1)
T ( n ) = ( C 5 2 + C 6 2 + C 7 2 ) n 2 + ( C 1 + C 2 + C 4 + C 5 2 − C 6 2 − C 7 2 ) n − ( C 2 + C 4 + C 5 + C 8 ) T(n) = (\frac{C_{5}}{2}+\frac{C_{6}}{2}+\frac{C_{7}}{2})n^2+(C_{1}+C_{2}+C_{4}+\frac{C_{5}}{2}-\frac{C_{6}}{2}-\frac{C_{7}}{2})n-(C_{2}+C_{4}+C_{5}+C_{8}) T(n)=(2C5+2C6+2C7)n2+(C1+C2+C4+2C52C62C7)n(C2+C4+C5+C8)
则可得: T ( n ) = a n 2 + b n + c T(n) = an^2+bn+c T(n)=an2+bn+c
因此最长时间是关于n的2次函数。

4、增长量级:
最坏情况表示为: T ( n ) = a n 2 + b n + c T(n) = an^2+bn+c T(n)=an2+bn+c
我们关心的是运行时间的增长率增长量级,所以我们之考虑公式中的总要项(例如: a n 2 an^2 an2),因为当n很大时,低阶项相对来说不太总要。我们也忽略重要项的常数系,因为对于大的输入,在确定计算效率时常量因子不如增长率重要。所有只剩下重要项中的 n 2 n^2 n2,即最坏情况运行时间为 Θ ( n 2 ) \Theta (n^2) Θ(n2)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在有关算法的书中,有一些叙述非常严谨,但不够全面;另一些涉及了大量的题材,但又缺乏严谨性。《算法导论(原书第3版)/计算机科学丛书》将严谨性和全面性融为一体,深入讨论各类算法,并着力使这些算法的设计和分析能为各个层次的读者接受。全书各章自成体系,可以作为独立的学习单元;算法以英语和伪代码的形式描述,具备初步程序设计经验的人就能看懂;说明和解释力求浅显易懂,不失深度和数学严谨性。   《算法导论(原书第3版)/计算机科学丛书》全书选材经典、内容丰富、结构合理、逻辑清晰,对本科生的数据结构课程和研究生的算法课程都是非常实用的教材,在IT专业人员的职业生涯中,《算法导论(原书第3版)/计算机科学丛书》也是一本案头必备的参考书或工程实践手册。   第3版的主要变化:   ·新增了van Emde Boas树和多线程算法,并且将矩阵基础移至附录。   ·修订了递归式(现在称为“分治策略”)那一章的内容,更广泛地覆盖分治法。   ·移除两章很少讲授的内容:二项堆和排序网络。   ·修订了动态规划和贪心算法相关内容。   ·流网络相关材料现在基于边上的全部流。   ·由于关于矩阵基础和Strassen算法的材料移到了其他章,矩阵运算这一章的内容所占篇幅更小。   ·修改了对Knuth-Morris-Pratt字符串匹配算法的讨论。   ·新增100道练习和28道思考题,还更新并补充了参考文献。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值