02| 复杂度分析(下):最好、最坏、平均、均摊时间复杂度


在硬件越来越发达的今天,人们越来越注重程序的性能,那怎么去评估程序的性能呢?那就要用到上一篇的内容,时空复杂度,如果你感兴趣可以前往合集查看。说到时间复杂度,它又被分为了四种: 最好情况时间复杂度最坏情况时间复杂度平均情况时间复杂度均摊时间复杂度。本篇博客都有描述哦,相信你都能掌握。

一、最好、最坏情况时间复杂度

试着分析一下下面这段代码的时间复杂度吧,如果你会不会分析的话,可以用笔者上一篇的文章。

int find(int[] array,int n,int x){
	int i = 0;
	int pos = -1;
	for(;i<n;++i){
	if(array[i] == x) {
		pos =i;
		break;
		}
	}
	return pos;
}

不难发现,这段代码是在数组array中查找x元素,如果存在则返回索引,不存在就返回-1。但是你有没有发现,这段代码大部分情况下不需要遍历完整个数组,元素为数组最后一个的情况很少,找到了元素就结束循环。也就意味着数组中数据分布情况不同,代码执行的次数也就不一样。

为了描述不同情况下不同的时间复杂度,需要使用三个概念名词:最好情况时间复杂度、最坏情况时间复杂度以及平均情况时间复杂度。

见名知意,最好情况时间复杂度,就是在最理想的情况下,执行这段代码的时间复杂度。对应到上面的例子,当要查询的元素刚好为第一个时,代码只需要执行一次就结束,时间复杂度为O(1)。

最坏情况时间复杂度,就是在最糟糕的情况下,执行这段代码的时间复杂度。对应到上面的例子,当要查询的元素不在数组中时,需要从头到尾遍历数组,时间复杂度为O(n)。

经过上面的分析,可以发现最好、最坏情况时间复杂度都对应的是比较极端的情况,发生的概念非常低,为了比较精确地表示代码在大部分情况下的时间复杂度,我们需要引入下面这个例子"平均情况时间复杂度".

二、平均情况时间复杂度

三、均摊时间复杂度

四、内容小结

五、课后思考

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值