数据结构与算法——时间复杂度

复杂度用于衡量程序的运行效率,复杂度是一个关于数据量n的函数,一般用大O表示法来表示运行的量级,常见的时间复杂度有O(1)、O(logn)、O(n)、O(n2)、O(n3)、O(2n)、O(n!)。

大O表示法表示的复杂度与常系数无关,比如计算后复杂度为O(n)和O(2n)的代码,他们的时间复杂度都是O(n);如果计算后的时间复杂度是多项式级的时间复杂度,那么代码的时间复杂度则以最高次幂为准,比如计算后复杂度为O(n2+n)与O(n2)的两段代码,他们的时间复杂度都是O(n2);对于O(1)的时间复杂度,O(1)指的是代码通过使用有限的可数的资源就能完成,与输入的数据量n无关。

如何计算时间复杂度?

《算法之美》一书在介绍大O表示法的时候介绍过,大O符号是用来测量算法最坏情况的速记法。大O符号的目的不是使用分钟和秒钟来表示算法的性能,而是方便我们讨论问题的规模和程序的运行时间之间的关系。

大O表示法的关于n的函数的计算为代码运行次数的总和,最终的时间复杂度由最大量级的项确定;

对于分多段的代码,总的代码时间复杂度就等于量级最大的那段代码的时间复杂度;对于嵌套代码,时间复杂度等于嵌套的多段代码的时间复杂度的乘积。

对于一个程序中出现的两个不同规模的代码段,如果不能确定大小,那么在累加的时候不能取其中一个作为时间复杂度,比如两段代码的时间复杂度分别为O(m)和O(n),且无法比较m和n的大小,那么程序的时间复杂度应为O(n+m);对于两个无法衡量量级大小的嵌套代码段的复杂度,跟累加的相同&#x

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值