python数据结构与算法(2)
算法效率衡量
執?時間反應算法效率
對于同?問題,我們給出了兩種解決算法,在兩種算法的實現中,我們對程 序執?的時間進?了測算,發現兩段程序執?的時間相差懸殊(214.583347 秒相?于0.182897秒),由此我們可以得出結論:實現算法程序的執?時間 可以反應出算法的效率,即算法的優劣。
單靠時間值絕對可信嗎?
假設我們將第?次嘗試的算法程序運?在?臺配置古?性能低下的計算機 中,情況會如何?很可能運?的時間并不會?在我們的電腦中運?算法?的 214.583347秒快多少。
單純依靠運?的時間來?較算法的優劣并不?定是客觀準確的!
程序的運?離不開計算機環境(包括硬件和操作系統),這些客觀原因會影 響程序運?的速度并反應在程序的執?時間上。那么如何才能客觀的評判? 個算法的優劣呢?
時間復雜度與“?O記法”
我們假定計算機執?算法每?個基本操作的時間是固定的?個時間單位,那 么有多少個基本操作就代表會花費多少時間單位。顯然對于不同的機器環境 ??,確切的單位時間是不同的,但是對于算法進?多少個基本操作(即花 費多少時間單位)在規模數量級上卻是相同的,由此可以忽略機器環境的影 響?客觀的反應算法的時間效率。
對于算法的時間效率,我們可以?“?O記法”來表示。
“?O記法”:對于單調的整數函數f,如果存在?個整數函數g和實常數c>0, 使得對于充分?的n總有f(n)<=c*g(n),就說函數g是f的?個漸近函數(忽略 常數),記為f(n)=O(g(n))。也就是說,在趨向?窮的極限意義下,函數f的 增?速度受到函數g的約束,亦即函數f與函數g的特征相似。
時間復雜度:假設存在函數g,使得算法A處理規模為n的問題示例所?時間 為T(n)=O(g(n)),則稱O(g(n))為算法A的漸近時間復雜度,簡稱時間復雜 度,記為T(n)
如何理解“?O記法”
對于算法進?特別具體的細致分析雖然很好,但在實踐中的實際價值有限。 對于算法的時間性質和空間性質,最重要的是其數量級和趨勢,這些是分析 算法效率的主要部分。?計量算法基本操作數量的規模函數中那些常量因? 可以忽略不計。例如,可以認為3n 和100n 屬于同?個量級,如果兩個算法 處理同樣規模實例的代價分別為這兩個函數,就認為它們的效率“差不多”, 都為n 級。
最壞時間復雜度
分析算法時,存在?種可能的考慮:
算法完成?作最少需要多少基本操作,即最優時間復雜度 算法完成?作最多需要多少基本操作,即最壞時間復雜度 算法完成?作平均需要多少基本操作,即平均時間復雜度
對于最優時間復雜度,其價值不?,因為它沒有提供什么有?信息,其反映 的只是最樂觀最理想的情況,沒有參考價值。
對于最壞時間復雜度,提供了?種保證,表明算法在此種程度的基本操作中 ?定能完成?作。
對于平均時間復雜度,是對算法的?個全?評價,因此它完整全?的反映了 這個算法的性質。但另???,這種衡量并沒有保證,不是每個計算都能在 這個基本操作內完成。?且,對于平均情況的計算,也會因為應?算法的實
例分布可能并不均勻?難以計算。
因此,我們主要關注算法的最壞情況,亦即最壞時間復雜度。
時間復雜度的?條基本計算規則
空間復雜度
類似于時間復雜度的討論,?個算法的空間復雜度S(n)定義為該算法所耗費 的存儲空間,它也是問題規模n的函數。
漸近空間復雜度也常常簡稱為空間復雜度。
空間復雜度(SpaceComplexity)是對?個算法在運?過程中臨時占?存儲空間 ??的量度。
算法的時間復雜度和空間復雜度合稱為算法的復雜度。
算法分析
時間復雜度:
T(n) = O(nnn) = O(n )
for a in range(0, 1001): for b in range(0, 1001-a): c = 1000 - a - b if a**2 + b**2 == c**2: print("a, b, c: %d, %d, %d" % (a, b, c))
時間復雜度:
T(n) = O(nn(1+1)) = O(n*n) = O(n )
由此可?,我們嘗試的第?種算法要?第?種算法的時間復雜度好多的。
常?時間復雜度
注意,經常將log n(以2為底的對數)簡寫成logn
常?時間復雜度之間的關系
所消耗的時間從?到?
O(1) < O(logn) < O(n) < O(nlogn) < O(n ) < O(n ) < O(2 ) < O(n!) < O(n )
練習: ```
時間復雜度練習( 參考算法的效率規則判斷 ) O(5) O(2n + 1) O(n2+ n + 1) O(3n3+1)
轉載于:https://blog.51cto.com/13517854/2322678
總結
以上是生活随笔為你收集整理的python数据结构与算法(2)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JavaScript- BOM, DO
- 下一篇: ElementUI的表单验证及常用规则