数据结构与算法(二)怎么判断算法的好坏(下)

通过上一篇的了解,我们可以用时间复杂度和空间复杂度来判断算法的快慢和占用内存大小,从而判断算法的好坏.

应用时间复杂度时发现的问题

不过在不同的情况下,同一算法在不同情况下,时间复杂度不一样.举个例子,从数组中找一个变量x,如果数组中第一个元素正好是要查找的变量 x,那就不需要继续遍历剩余n-1个数据,这个时候时间复杂度就是O(1);
如果数组中不存在该元素,那就要把整个数组遍历一遍,时间复杂度就是O(n).

所以为了表示不同情况下的时间复杂度,把时间复杂度又分了四种类型:
最好时间复杂度,最坏时间复杂度,平均时间复杂度,均摊时间复杂度.

最好时间复杂度

即最理想情况执行代码的时间复杂度,
如上个例子中的第一种情况:
数组中第一个元素正好是要查找的变量 x,那就不需要继续遍历剩余n-1个数据,这个时候时间复杂度就是O(1).

最坏时间复杂度

即最糟糕情况执行代码的时间复杂度,
如上个例子中的第二种情况:
数组中不存在该元素,那就要把整个数组遍历一遍,时间复杂度就是O(n).

平均时间复杂度

以上两种情况都太极端了,发生概率比较小,为了表示平均情况的复杂度,引入平均时间复杂度.

时间复杂度是怎么计算的?
1)先考虑有哪些情况,有一次就找到的,有两次找到的,有n次找到的,还有n次没找到的;
总共n+1种情况:在数组的 0~n-1 位置中和不在数组中.
2)考虑每种情况出现的概率,
3)每种情况花费的次数 * 每种情况出现的概率 /总次数.

均摊时间复杂度

这是一种特殊的平均时间复杂度,它的出现需要满足两个条件:
1)当一个算法在大部分情况下时间复杂度都很低,只有个别情况下时间复杂度比较高,
2)这些操作之间存在前后连贯的时序关系.

这个时候我们可以考虑是否可以将较高时间复杂度那次操作的耗时均摊到较低的操作上.这样一来,平均的时间复杂度就往往等于最好时间复杂度.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值