摘要:參數是要測試的代碼語句參數是運行代碼時需要的設置參數是一個定時器函數,與平臺有關。類中測試語句執行速度的對象方法。參數是測試代碼時的測試次數,默認為次。方法返回執行代碼的平均耗時,一個類型的秒數。
[TOC]
這里主要是算法的介紹以及一些判斷算法好壞的標準和方式
引入如果a+b+c = 1000,且a^2 + b^2 = c^2,如何求出所有a,b,c可能的組合?
第一次嘗試: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 結束算法 算法的概述
算法是獨立存在的一種解決問題的方法和思想
算法的五大特性:輸入: 0個或多個輸入
輸出: 1個或多個輸出
有窮性: 有限步驟,可接受時間范圍內完成
確定性: 每一步具有確定的意義,不會出翔二義性
可行性: 能不能實現
第二次嘗試:提示: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 結束
解決一個問題有多個算法,每個算法的效率還是有差距的,如何判斷算法的效率呢?
算法的效率衡量 時間復雜度和大O記法時間復雜度:算法進行了多少個基本操作(即花費了多少個時間單位),漸進函數
時間復雜度的幾條基本計算規則基本操作,即只有常數項,時間復雜度為O(1)
順序結構,時間復雜度按加法進行計算
循環結構,時間復雜度按乘法計算
分支結構,時間復雜度取最大值
判斷一個算法的效率時,往往只需要關注操作數量的最高次項,其他次要項和常數項可以忽略
在沒有特殊說明時,我們所分析的算法的時間復雜度都是指最壞時間復雜度
python內置類型性能分析 timeit模塊timeit模塊可以用來測試一小段Python代碼的執行速度。
class timeit,Timer(stmt="pass",setup="pass",timer= <.timer function> )
Timer是測量小段代碼執行速度的類。
stmt參數是要測試的代碼語句(statment);
setup參數是運行代碼時需要的設置;
timer參數是一個定時器函數,與平臺有關。
timeit.Timer.timeit(number=1000000)
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
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/44150.html
摘要:選擇排序算法實現實現選擇排序,記錄最小元素的索引,最后才交換位置說明交換兩個數組中的元素,在中有更簡單的寫法,這是的語法糖,其它語言中是沒有的。和語言中比較器的實現前面我們說到了,我們為了突出排序算法的思想,將所有的例子僅限在數組排序中。 showImg(https://segmentfault.com/img/remote/1460000017909538?w=1949&h=1080...
摘要:算法是一種數據分類算法,以距離樣本個最鄰近數據的類別代表樣本的類別,因此也叫作近鄰算法。排序后訪問元素的方式與訪問二維數組元素的方式一致 KNN算法是一種數據分類算法,以距離樣本k個最鄰近數據的類別代表樣本的類別,因此也叫作k-近鄰算法。KNN算法是數據挖掘中最簡單的方法之一,大致可分為以下幾個步驟: 訓練數據:原數據集中所有數據類別的數據。 測試數據:我們將要拿來測試的數據樣本。 ...
摘要:分詞的算法中文分詞有難度,不過也有成熟的解決方案。例如通過人民日報訓練的分詞系統,在網絡玄幻小說上,分詞的效果就不會好。三的優點是開源的,號稱是中,最好的中文分詞組件。 showImg(https://segmentfault.com/img/remote/1460000016359704?w=1350&h=900); 題圖:by Lucas Davies 一、前言 分詞,我想是大多數...
閱讀 2804·2021-11-19 11:35
閱讀 2582·2021-11-02 14:40
閱讀 1396·2021-09-04 16:48
閱讀 3009·2019-08-30 15:55
閱讀 1756·2019-08-30 13:11
閱讀 1956·2019-08-29 11:12
閱讀 1088·2019-08-27 10:52
閱讀 3157·2019-08-26 18:36