算法--1.估计算法运行效率与时间复杂度

一.时间复杂度

  • 时间复杂度是用来评估算法运行时间的一个式子(单位);
  • 一般来说,时间复杂度高的算法比复杂度低的算法慢;
  • 括号中的数字不论是1还是n,或是n的n次方,这些都是单位,一个衡量单位。
  • 可以使用时间复杂度来判断一个程序的运行快慢。
 1.print('hello')
	时间复杂度为O(1) 
 2.  for i in range(n):  	
    		print('hello')
	时间复杂度为O(n)
3.for i in range(n):
	for i in range(n):
		print('hello')
	时间复杂度为O(n^2)
4.for i in range(n):
	for i in range(n):
		for i in range(n):
			print('hello')
	时间复杂度为O(n^3)

二. 对时间复杂度的判断

1.print('hello')
 print('hello')
 print('hello')

请判断上面代码的时间复杂度是多少?肯定有人会认为时间复杂度是O(3),因为每行的时间复杂度都是O(1),那加起来不就是O(3)了嘛。在这里我可以认真负责的告诉你,sorry,you are wrong.不论这里有多少行打印(行数>=1),它的时间复杂度就只是0(1)。

2.while n > 1:
	print(n)
	n = n // 2

如果这里给n赋值为64,那么请问这段代码的时间复杂度是多少?我的猜想是有的人会说:n=64,那这时间复杂度不得是O(64)嘛,还有人会说,n=64,但是n后来有整除了2,那这时间复杂度应该是O(32),都有道理,又都没道理,时间复杂度远不是这么简单的去判断,在这里,分析如下:
当n=64时,这段代码的输出是:
64
32
16
8
4
2
可以看到这段代码在循环的过程中会对n进行一个除以2的操作,而且是每循环一次就会除以2一次,就是循环一次n的值就折半,那么这段代码的时间复杂度就是O(6),因为2^6=64,log64=6,所以。。。注:只要代码中出现折半,循环减半或是项目规模减半,就会出现需要使用log来计算时间复杂度。

三.附常见的时间复杂度(按效率排序)

O(1) < O(logn) < O(n) < O(nlogn) < O(n^2) < O(n^2logn) < O(n^3)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值