[TOC]python
这里主要是算法的介绍以及一些判断算法好坏的标准和方式算法
若是a+b+c = 1000,且a^2 + b^2 = c^2,如何求出全部a,b,c可能的组合?app
import time print("开始") 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:%d,%d,%d" % (a, b, c)) end_time = time.time() print("time:{}".format(end_time - start_time)) print("结束") # 时间复杂度:T(n) = n^3 *2
开始 a,b,c:0,500,500 a,b,c:200,375,425 a,b,c:375,200,425 a,b,c:500,0,500 time:140.17622900009155 结束
算法是独立存在的一种解决问题的方法和思想函数
提示:c=1000-a-b性能
import time print("开始") 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:%d,%d,%d" % (a, b, c)) end_time = time.time() print("time:{}".format(end_time - start_time)) print("结束") # 时间复杂度:T(n) = n^2 *3
开始 a,b,c:0,500,500 a,b,c:200,375,425 a,b,c:375,200,425 a,b,c:500,0,500 time:1.0204615592956543 结束
解决一个问题有多个算法,每一个算法的效率仍是有差距的,如何判断算法的效率呢?测试
时间复杂度:算法进行了多少个基本操做(即花费了多少个时间单位),渐进函数优化
timeit模块能够用来测试一小段Python代码的执行速度。code
class timeit,Timer(stmt="pass",setup='pass',timer= <.timer function> )
timeit.Timer.timeit(number=1000000)orm
Timer类中测试语句执行速度的对象方法。number参数是测试代码时的测试次数,默认为1000000次。方法返回执行代码的平均耗时,一个float类型的秒数。对象
下面是timeit模块的使用方式
from timeit import Timer def t1(): li1 = [] for i in range(10000): li1.append(i) def t2(): li = [] for i in range(10000): # li= li+[i] # 两个列表相加放到一个新的列表中 li += [i] # 这个作过优化,速度比相加快的多 def t3(): li = [i for i in range(10000)] def t4(): li = list(range(10000)) def t5(): li = [] for i in range(10000): li.extend([i]) # 放到li列表中 def t6_end(): li1 = [] for i in range(10000): li1.append(i) # 在列表最后加元素 def t6_start(): li1 = [] for i in range(10000): li1.insert(0,i) # 在列表最前面加元素 timer = Timer("t1()","from __main__ import t1") print("t1",timer.timeit(1000)) timer = Timer("t2()","from __main__ import t2") print("t2",timer.timeit(1000)) timer = Timer("t3()","from __main__ import t3") print("t3",timer.timeit(1000)) timer = Timer("t4()","from __main__ import t4") print("t4",timer.timeit(1000)) timer = Timer("t5()","from __main__ import t5") print("t5",timer.timeit(1000)) timer = Timer("t6_start()","from __main__ import t6_start") print("t6_start",timer.timeit(1000)) timer = Timer("t6_end()","from __main__ import t6_end") print("t6_end",timer.timeit(1000))
t1 0.8016083359998447 t2 211.04629018700052 t3 0.43422231000022293 t4 0.17026640999938536 t5 1.0775756929997442 t6_start 0.7481699620002473 t6_end 25.572036152000692