[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