C語言 如何衡量算法的優(yōu)劣
如何來衡量一個算法的好壞,通常要從以下幾個方面來分析,如圖所示。
1.正確性
正確性是指所寫的算法能滿足具體問題的要求,即對任何合法的輸入,算法都會得出正確的結(jié)果。
2.可讀性
可讀性是指算法被寫好之后,該算法被理解的難易程度。一個算法可讀性的好壞十分重要,如果一個算法比較抽象,難于理解,那么這個算法就不易交流和推廣,對于修改、擴(kuò)展、維護(hù)都十分不利。所 以在寫算法的時候,要盡量將該算法寫得簡明易懂。
3.健壯性
—個程序完成后,運行該程序的用戶對程序的理解因人而異,并不能保證每個人都能按照要求進(jìn)行輸入,健壯性就是指當(dāng)輸入的數(shù)據(jù)非法時,算法也會做出相應(yīng)的判斷,而不會因為輸入的錯誤造成程序癱瘓。
4.時間復(fù)雜度與空間復(fù)雜度
時間復(fù)雜度,簡單地說就是算法運行所需要的時間。一個程序在計算機中運行時間的長短與很多因素相關(guān),這些因素主要有:
?問題規(guī)模的大小。例如,求10的階乘和求100的階乘所花費的時間是有明顯差異的,顯然,求100的階乘所花費的時間要比求10的階乘花費的時間多得多。
?源程序編譯功能的強弱以及經(jīng)過編譯后產(chǎn)生的機器代碼質(zhì)量的優(yōu)劣。
?機器執(zhí)行一條目標(biāo)指令所需要的時間。這個因素是與計算機系統(tǒng)的硬件息息相關(guān)的,隨著硬件技術(shù)的提高,硬件性能越來越好,執(zhí)行一條目標(biāo)指令所花費的時間也會相應(yīng)地越來越少。
?程序中語句的執(zhí)行次數(shù)。這個因素與算法本身有直接關(guān)系,一個好的算法應(yīng)該使程序中語句執(zhí)行次數(shù)盡量少。
由于同一個算法使用不同的計算機語言實現(xiàn)的效率會不相同,使用不同的編譯器編譯效率也不相同,運行于不同的計算機系統(tǒng)中效率也不相同,因此使用前3個因素來衡量一個算法的時間復(fù)雜度通常是不恰當(dāng)?shù)?。因此我們使用?個因素,即將程序中語句的執(zhí)行次數(shù)作為一個算法的時間復(fù)雜度的度量。
不同的算法具有不同的時間復(fù)雜度,當(dāng)一個程序較小時,往往感覺不到時間復(fù)雜度的重要性,當(dāng)一個程序特別大時,便會察覺到時間復(fù)雜度實際上是十分重要的,所以如何寫出更高速的算法一直是算法不斷改進(jìn)的目標(biāo)。
空間復(fù)雜度是指算法運行所需的存儲空間的大小。一個算法在計算機存儲器上所占用的存儲空間包括算法本身所占的存儲空間、算法的輸入/輸出數(shù)據(jù)所占的存儲空間,以及算法運行過程中所占用的臨時存儲空間。隨著計算機硬件的發(fā)展,空間復(fù)雜度已經(jīng)顯得不再那么重要了,但在編程時也應(yīng)該注意。
點擊加載更多評論>>