算法的时间、空间、性能分析

一.想要预估算法的运行时间,可以先计算测试样例的时间;然后将测试样例翻倍,记录时间;然后再翻倍……得到如下模型:

样例(N)运行时间(T(N))
Nx1
2Nx2
4Nx3
8Nx4
16N?

做图像x轴为lgN,y轴为lg(T(N))。我们一般可以得到一个斜率为b的直线。
lg(T(N)) = blgN + c

同时取2的幂,就可以得到 T(N) = aN^b (a = 2 ^ c)

二.我们想要知道算法内部具体发生了什么,导致了这样的运行时间。

我们可以知道,每条单独的指令,例如a > b ,的运行时间。那么程序的运行时间 = sum(指令时间i * 指令频率i)。

如果这样计算的话,我们需要着眼很多的细节。实际上我们可以不用专注于所有细节。我们可以只考虑,频率最多开销最大的基本操作,来估算作为整个程序的运行时间。一般我们认为,实际的运行时间就是常数乘以这个操作的运行时间;而这个操作的运行时间又是其频率的整数倍;因此实际的运行时间就是常数乘以这个操作的频率。

由以上可知,算法频率可以用来预估算法的性能,也就是所说的时间复杂度。算法频率为N^2 + N + 16时, N 和16可以忽略。这是因为当N趋于无穷时,(N ^ 2 + N + 16 ) /(N ^ 2)的极限为1。可以用N ^ 2 + N + 16 ~ N ^ 2来表示。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值