评估算法的时间复杂度(time complexity)的技巧小结

评估算法的时间复杂度的技巧小结

这篇文章献给澳门理工学院一起努力的同学们,祝大家早日摆脱算法学习的苦海,找到一叶扁舟。

什么是时间复杂度

众所周知,程序运行的时间长短跟硬件算法都有关系。当人们想要专注于研究算法的优劣时,就要在某种程度上排除硬件差异带来的评估干扰,这时时间复杂度的概念就被发明出来了。
时间复杂度(time complexity),是评估算法好坏的一个指标,关于它的本质,简单概括就是:时间复杂度是一个算法的输入和它运行所需的时间之间的函数特征
我们把这个输入称之为问题规模,而这个函数特征,并不是一个完全的函数,而是能够表现关系特征的一种函数类型。以下列出了最常见的函数类型,在时间复杂度中,它们表示的效率由高到低:

函数类型 表示
Constant 1
Logarithmic logn
Linear n
Linearithmic nlogn
Quadratic n2
Cubic n3
Exponential 2n

时间复杂度可以写作O( )形式,如O( n ), O( nlogn )

朴素方法分析时间复杂度

最朴素的分析时间复杂度的方法就是计算基础操作次数,算出运行次数关于问题规模的函数,提取出特征并得出结论
基础操作大抵包括调用,判断,赋值,读值,等等,其中读值一般特指从列表等数据结构中读取。其他在此不详细讲述了,实际操作中往往不需要使用这种分析方法。
例子:

def list_max(a,n):        # 基础操作次数
	m = a[0]					2			【赋值,读值】
	i = 1						1
	while i < n:				1*n		【n是输入的**问题规模**if a[i] > m:			2*(n-1)	【判断,读值】
			m = a[i]			2*(n−1)
			i = i +1			2*(n−1)
	return m					1
								total:7n−2

提取特征可得时间复杂度为O(n)
可以发现,所谓提取特征,就是提取原函数中

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值