估算程序的运行效率

算法的时间复杂度

有事后统计法和事前统计法,事后统计法一般不使用。

事后统计法:
比较不同算法对同一组输入数据的运行处理时间
缺陷:
为了获得不同算法的运行时间必须编写相应程序, 运行时间严重依赖硬件以及运行时的环境因素,算法的测试数据的选取相当困难
事后统计法虽然直观,但是实施困难且缺陷多,一般不予考虑。

事前分析估算:
依据统计的方法对算法效率进行估算

影响算法效率的主要因素:

  • 算法采用的策略和方法
  • 问题的输入规模
  • 编译器所产生的代码,C比java要快
  • 计算机执行速度

简单估算,如下图所示:
这里写图片描述

这里写图片描述

这里写图片描述

判断一个算法的效率时,往往只需要关注操作数量的最高次项,其它次要项和常数项可以忽略。

大O表示法

算法效率严重依赖于操作(Operation)数量
在判断时首先关注操作数量的最高次项
操作数量的估算可以作为时间复杂度的估算
O(5) = O(1)
O(2n + 1) = O(2n) = O(n)
O(n2 + n + 1) = O(n^2)
O(3n3+1) = O(3n3) = O(n^3)

常见时间复杂度类型 和 大小关系:

这里写图片描述

他们之间的大小关系为:
这里写图片描述

上述各式中,n表示输入的数据的规模的大小

在没有特殊说明时,我们所分析的算法的时间复杂度都是指最坏时间复杂度

算法的空间复杂度

算法的空间复杂度通过计算算法的存储空间实现:
S(n) = O(f(n))
其中,n为问题规模,f(n)为在问题规模为n时所占用存储空间的函数。

大O表示法同样适用于算法的空间复杂度。
当算法执行时所需要的空间是常数时,空间复杂度为O(1)。

举例说明:
这里写图片描述

空间与时间的策略
多数情况下,算法执行时所用的时间更令人关注。

如果有必要,可以通过增加空间复杂度来降低时间复杂度,同理,也可以通过增加时间复杂度来降低空间复杂度。

在实现算法时,需要分析具体问题对执行时间和空间的要求。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值