导语:时间复杂度的基本概念
很多同学在程序开发和算法调优的过程中,经常会接触到时间复杂度的概念,那究竟什么是时间复杂度呢?
在回答这个问题之前,我们先举一个例子,我们把编写一个程序的过程类比成指挥一场战役,程序开发人员就扮演着指挥者的角色,编写的代码就是被指挥的战士,那么算法就是指挥战役的"兵法"。
在实际开发过程中,为了满足业务需求,实现业务目的的各种方法和思路就是算法,而时间复杂度是衡量算法在处理输入数据时所需的时间量级的参数。它是用来描述算法执行时间效率的指标,是衡量"兵法"好坏的重要指标。
如果我们的业务目的是获取5个4的和,那么有两种实现思路:
算法1: 4+4+4+4+4=20
算法2: 4*5=20
同样的数据,同样的目的,不同yi的算法,不同的方法和思路,效率就会不同,而在实际开发过程中,实现目的时所需时间越短的算法相对而言越有优势,而时间的度量标准就是时间复杂度。
一.算法的时间效率衡量
在解释时间复杂度如何计算之前,我们来看一下算法的时间效率衡量标准,现有需求:
如果 a+b+c=1000,且 a^2+b^2=c^2(a,b,c 为自然数),如何求出所有a、b、c可能的组合?
解题算法一:穷举法
将问题的所有可能的答案一一列举,然后根据条件判断此答案是否合适,合适就保留,不合适就丢弃
#列举a,b,c的所有可能的数值
for a in range(0,1001):
for b in range(0,1001):
for c in range(0,1001):
#判断是否满足条件
if a**2+b**2+c**2 and a+b+c==1000:
print('a,b,c:%d,%d,%d' % (a,b,c))
解题算法二:
知道a,b,c他们三者是有一个关系的,就可以不用对c进行遍历,直接把c列成一个条件即可:
#注意这里是两层循环
for a in range(0,1001):
for b in range(0,1001):
c=1000-a-b

最低0.47元/天 解锁文章
2613





