參考教材《資料結構c語言版》嚴蔚敏 著
一、演算法的五大重要特性
有窮性:在有窮時間內執行完成任何合法輸入;
確定性:無二義性,演算法對於相同的輸入只能得到相同的輸出;
可行性:演算法中描述的操作都可以通過已實現的基本操作有限次完成;
輸入:0或多;
輸出:1或多;
二、演算法設計要求
正確性:4個層次:a.程式無語句錯誤;b.對幾組輸入資料滿足;c.對精心挑選的、典型的、苛刻的資料滿足;d.對一切滿足;程式到c即可算作正確;
可讀性:演算法是為了給程式設計師看的,其次才是機器執行;
健壯性:當輸入非法資料時,演算法要適當給出反應或處理,而不是莫名其妙的輸出結果;
效率和低儲存要求
三、演算法的效率度量
(1)事後統計的方法:缺點a.必須先執行依據演算法編制的程式;b.依賴於計算機的硬體、軟體等環境因素,易掩蓋演算法本身的優劣;
(2)事前分析估算:a.演算法選用策略;b.問題的規模;c.程式的語言,同一演算法,實現的語言級別越高,執行效率越低;
d.編譯程式所產生的機器**的質量;e.機器執行指令的速度;撇開其他因素,可以認為演算法只依賴問題的規模。
四、時間複雜度
為了便於比較同一問題的不同演算法,通常選取一種對於問題的基本操作,以基本操作的重複次數作為演算法的時間度量。
(1)時間複雜度 一般情況下,演算法中基本操作重複執行的次數是問題規模n的某個函式,用t(n)表示,若有某個輔助函式f(n),使得當n趨近於無窮大時,t(n)/f(n)的極限值為不等於零的常數,則稱f(n)是t(n)的同數量級函式。記作t(n)=o(f(n)),稱o(f(n)) 為演算法的漸進時間複雜度,簡稱時間複雜度。
(2)漸進時間複雜度評價演算法時間效能 主要用演算法時間複雜度的數量級(即演算法的漸近時間複雜度)評價乙個演算法的時間效能。
(3)時間複雜度的求解(根據定義,可以歸納出基本的計算步驟 )
計算出基本操作的執行次數t(n)
基本操作即演算法中的每條語句(以;號作為分割),語句的執行次數也叫做語句的頻度。在做演算法分析時,一般預設為考慮最壞的情況。
計算出t(n)的數量級
用大o來表示時間複雜度
當n趨近於無窮大時,如果lim(t(n)/f(n))的值為不等於0的常數,則稱f(n)是t(n)的同數量級函式。記作t(n)=o(f(n))。
以上步驟可以簡化為:
a. 找到執行次數最多的語句
b. 計算語句執行次數的數量級
c. 用大o來表示結果
複雜度與時間效率的關係:
c < log2n < n < n*log2n < n2 < n3 < 2n < 3n < n! (c是乙個常量)
五、空間複雜度
定義:乙個演算法在執行過程中臨時占用儲存空間大小的量度;包括以下:
儲存演算法本身所占用的儲存空間;(與演算法書寫的長短成正比,要壓縮這方面的儲存空間,就必須編寫出較短的演算法。)
演算法的輸入輸出資料所占用的儲存空間;(由要解決的問題決定 的,是通過參數列由呼叫函式傳遞而來的,它不隨本演算法的不同而改變。)
演算法在執行過程中臨時占用的儲存空間;(隨演算法的不同而異,有的演算法只需要占用少量的臨時工作單元,而且不隨問題規模的大小而改變,我們 稱這種演算法是「就地"進行的,是節省儲存的演算法;有的演算法需要占用的臨時工作單元數與解決問題的規模n有關,它隨著 n的增大而增大,當n較大時,將占用較多的儲存單元)
資料結構與演算法分析
資料結構與演算法分析可以稱得上是程式設計師必須修煉的內功心法。資料的儲存結構 資料元素在計算機中的儲存方式 資料的操作集合 對一種資料型別的資料所有操作,例如對資料的增刪改查等等!演算法分析主要分析 下面是一些常用資料結構 一 線性表 1.陣列實現 2.鍊錶 二 棧與佇列 三 樹與二叉樹 1.樹2....
資料結構與演算法分析
資料結構 大量資料的組織方法 演算法分析 演算法執行時間的估算。涉及到計算效率。設想,如果能把時間限制從16年減至不到1秒,不很神奇嗎?在很多問題中,乙個重要的觀念是 寫出乙個可以工作的程式並不夠。如果這個程式在巨大的資料集上執行,執行時間就成了重要的 問題。演算法,是為求解乙個問題需要遵循的 被清...
資料結構與演算法分析 note
1 explicit建構函式是用來防止隱式轉換的。請看下面的 class test1 普通建構函式 private int num class test2 explicit 顯式 建構函式 private int num int main test1的建構函式帶乙個int型的引數,23行會隱式轉換成...