算法 是独立存在的一种解决问题的方法和思想。
算法的五大特征
(1) 输入性:有零个或多个外部量作为算法的输入
(2) 输出性: 算法至少有一个量作为输出
(3) 确定性:算法中每条指令清晰,无歧义
(4) 有穷性:算法中每条指令的执行次数有限,执行每条指令时间也有限
(5) 可行性:算法原则上能够精确的运行,而且人们用纸和笔做有限次运算后即可
完成
一个经典的例子:
import time
start_time=time.time()
for a in range(1001):
for b in range(1001):
for c in range(1001):
if a+b+c==1000 and a**2+b**2==c**2:
print('a,b,c:',a,b,c)
end_time=time.time()
print('所用时间:',(end_time-start_time))
这个执行,我的电脑要花103秒才能完成。如果优化一下算法,0.7秒,如下:
import time
start_time=time.time()
for a in range(1001):
for b in range(1001):
c=1000-a-b
if a**2+b**2==c**2:
print('a,b,c:',a,b,c)
end_time=time.time()
print('所用时间:',(end_time-start_time))
这两个时间,话费截然不同。但是,只看时间长短,就能认定算法的优劣吗? 算法在不同计算机上运行,时间是不同的。这就是要依赖执行的环境。所以,这里引入两个概念:时间复杂度 和 空间复杂度
语句执行次数多,话费时间多! 所以看次数
时间复杂度就是 算法执行的次数来衡量算法的优劣
最坏时间复杂度
如下 要升序排序,而这个情况,就是最坏。。。
反之,这个是最优。。。
平均时间复杂度