第二節 算法

一個算法應該具有如下 5 個特性:
1.有窮性(Finity):一個算法老是在執行有窮步以後結束。
2.肯定性(Unambiguousness):算法的每個步驟都必須有確切的含義,對於相同的輸入只能有相同的輸出。
3.輸入(Input):一個算法具備零個或多個輸入。
4.輸出(Output):一個算法具備一個或多個輸出。
5.能行性(realizability):算法中的每一步均可以經過已經實現的基本運算的有限次運行來實現。算法

評價一個算法優劣的主要標準以下:
1.正確性(Correctness)。
2.可讀性(Readability)。算法主要是爲了人閱讀和交流,其次纔是機器的執行。一個可讀性強的算法也有助於對算法中隱藏錯誤的排除和算法的移植。
3.健壯性(Robustness)。一個算法應該具備很強的容錯能力。
4.運行時間(Running Time)。運行時間是指算法在計算機上運行所花費的時間,通常來講,執行時間越短,性能越好。
5.佔用空間(Storage Space)。佔用空間是指算法在計算機上存儲所佔用的存儲空間,包括存儲算法自己所佔用的存儲空間、算法的輸入及輸出數據所佔用的存儲空間和算法在運行過程當中臨時佔用的存儲空間。算法佔用的存儲空間是指算法執行過程當中所須要的最大存儲空間。實際上,算法的時間效率和空間效率常常是一對矛盾,相互抵觸。函數

一般把算法在運行過程當中臨時佔用的存儲空間的大小叫算法的空間複雜度(Space Complexity)。算法的空間複雜度比較容易計算,它主要包括局部變量所佔用的存儲空間和系統爲實現遞歸所使用的堆棧佔用的存儲空間。性能

計算機的性能由如下因素決定:
一、 硬件。
二、 實現算法所使用的計算機語言。實現算法的語言級別越高,其執行效率相對
越低。
三、 所使用的語言的編譯器/解釋器。通常而言,編譯的執行效率高於解釋,但解釋具備更大的靈活性。
四、 操做系統。操作系統

爲了便於比較同一問題的不一樣算法,一般把算法中基本操做重複執行的次數(頻度)做爲算法的時間複雜度。算法中的基本操做通常是指算法中最深層循環內的語句。
算法中基本操做語句的頻度是問題規模n的某個函數f(n),記做:T(n)=O(f(n))。其中「O」表示隨問題規模n的增大,算法執行時間的增加率和f(n)的增加率相同,或者說,用「O」符號表示數量級的概念。
若是一個算法沒有循環語句,則算法中基本操做的執行頻度與問題規模n無關,記做O(1),也稱爲常數階。若是算法只有一個一重循環,則算法的基本操做的執行頻度與問題規模n呈線性增大關係,記做O(n),也叫線性階。經常使用的還有平方階O(n2)、立方階O(n3)、對數階O(log2n)等。遞歸

例:
T(n)=1/2n(n-1)
1/2n²-1/2n的數量級與n²相同(數量級只看最高次冪)
因此T(n)=0(n²)編譯器

相關文章
相關標籤/搜索