演算法的效率

2021-08-29 11:11:49 字數 734 閱讀 4787

首先要說明一下,我們知道大o表示法把演算法的效率分為四個級別:o(1),o(logn),o(n),o(n^2),分別對應優,良,中,差。

接下來我對三種排序演算法做了測試(執行環境:jdk6.0,windows xp命令提示符下執行,amd 速龍3800+ 2.0ghz,記憶體512mb ddrii 667兩條,雙通道。):

2、上面測試的結果中差距不是很大吧,那麼把這三個陣列擴大10倍,長度加到10萬,我們看看結果:

這下消耗的時間差很多了。

3、測試最理想情況下(陣列已經是公升序排序了),各演算法的消耗時間(此時各陣列長度為1萬):

選擇排序消耗的時間居然比氣泡排序法多!!插入排序法幾乎不需要時間!這是為什麼呢??

原來在氣泡排序法中,最理想的情況下比較的效率為o(n^2),選擇排序法也一樣,而插入排序法只需要比較n-1次,也就是說它的效率是o(n)級別的。理想情況下氣泡排序法的交換次數是0。而選擇排序法雖然沒有交換資料,但每次都對臨時變數賦值消耗了時間,所以在最理想情況下,它的效率反而比冒泡低了。插入排序法的情況和選擇排序法一樣,需要每次比較時進行賦值,但最理想情況下,它的比較次數本來就少,是o(n)級別的,它在比較次數上省下來的資源完全足夠用來執行o(n)賦值操作。這樣一分析,執行結果就可以解釋了。

4、最糟糕情況下(陣列已經是降序排序好了的,我們需要把它反過來用公升序排序),各演算法的消耗時間(此時各陣列長度為1萬):

可以先猜測一下結果:氣泡排序消耗時間最多,選擇排序和插入排序消耗時間差不多。

執行一下看看:

演算法效率的衡量

假設對於同一問題,我們給出了兩種解決演算法,在兩種演算法的實現中,我們對程式執行的時間進行了測算,發現兩段程式執行的時間相差懸殊,由此我們可以得出結論 實現演算法程式的執行時間可以反應出演算法的效率,即演算法的優劣。單靠時間值絕對可信嗎?假設我們將第二次嘗試的演算法程式執行在一台配置古老效能低下的計...

演算法的效率衡量

演算法效率衡量 先來看一道題 如果 a b c 1000,且 a 2 b 2 c 2 a,b,c 為自然數 如何求出所有a b c可能的組合?執行時間反應演算法效率 對於同一問題,我們給出了兩種解決演算法,在兩種演算法的實現中,我們對程式執行的時間進行了測算,發現兩段程式執行的時間相差懸殊 214....

演算法效率的度量

常見時間複雜度 當演算法的時間複雜度為 即使n的值很小,實際的程式執行時間也是不可接受的!大o的n的3次方是工程開發時時間複雜度的臨界點。當演算法在最壞情況下仍能滿足需求時,可以推斷演算法的最好情況和平均情況都滿足需求。空間複雜度 推導時間複雜度的方法同樣適用於空間複雜度。空間與時間的策略 多數情況...