算法复杂度分析(上)


数据结构和算法本身解决的是“快”和“省”的问题。所以,执行效率是算法一个非常重要的考量指标。如何衡量编写的代码的执行效率?可以通过时间、空间复杂度分析。

为什么需要复杂度分析?

事后统计法的局限性

我们可以把代码跑一遍,通过统计、监控就能得到算法执行的时间和占用的内存大小。这种方法叫做事后统计法。但是这种方法有非常大的局限性。

1.测试结果非常依赖测试环境

测试环境中硬件的不同会对测试结果有很大的影响。比如,同一段代码在不同代CPU处理器(如i3和i9)执行速度相差很大。还有,比如原本在这台机器上a代码比b代码的执行速度要快,等我们换到另一台机器上时,可能会有截然相反的结果。

2.测试结果受数据规模的影响很大

对同一个排序算法,待排序数据的有序度不一样,排序的执行时间就会有很大的差别。极端情况下,如果数据已经是有序的,那排序算法不需要做任何操作,执行时间就会非常短。除此之外,如果测试数据规模太小,测试结果可能无法真实地反映算法的性能。比如,对于小规模的数据排序,插入排序可能会比快速排序要快。

所以,我们需要一个不用具体的测试数据来测试,就可以粗略地估计算法的执行效率的方法。这就是下面介绍的时间、空间复杂度分析方法。

大O复杂度表示法

算法的执行效率,粗略地讲就是算法代码的执行的时间。但是,如何在不运行代码的情况下,用“肉眼”得到一段代码的执行时间?

下面有段代码,我们可以估算一下这段代码的执行时间:

public int sum(int n) {
   
	int sum = 0;  // 一个unit_time
	int i = 1;	  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值