c 資料結構(1 2演算法)

2021-08-21 09:41:02 字數 2213 閱讀 8312

「程式=資料結構+演算法」

可見演算法的重要程度。下面只從演算法的特性、演算法的評價標準和演算法的時間複雜度等三個方面進行介紹。

乙個演算法應該具備以下 5 個特性:

1、有窮性(finity):乙個演算法總是在執行有窮步之後結束,即演算法的執行時間是有限的。

2、確定性(unambiguousness):演算法的每乙個步驟都必須有確切的含義,即無二義,並且對於相同的輸入只能有相同的輸出。

3、輸入(input):乙個演算法具有零個或多個輸入。它即是在演算法開始之前給出的量。這些輸入是某資料結構中的資料物件。

4、輸出(output):乙個演算法具有乙個或多個輸出,並且這些輸出與輸入之間存在著某種特定的關係。

5、能行性(realizability):演算法中的每一步都可以通過已經實現的基本運算的有限次執行來實現。

1、正確性(correctness)。演算法的執行結果應當滿足預先規定的功能和效能的要求,這是評價乙個演算法的最重要也是最基本的標準。演算法的正確性還包括對於輸入、輸出處理的明確而無歧義的描述。

2、可讀性(readability)。演算法主要是為了人閱讀和交流,其次才是機器的執行。所以,乙個演算法應當思路清晰、層次分明、簡單明瞭、易讀易懂。即使演算法已轉變成機器可執行的程式,也需要考慮人能較好地閱讀理解。同時,乙個可讀性強的演算法也有助於對演算法中隱藏錯誤的排除和演算法的移植。

3、健壯性(robustness)。乙個演算法應該具有很強的容錯能力,當輸入不合法的資料時,演算法應當能做適當的處理,使得不至於引起嚴重的後果。健壯性要求表明演算法要全面細緻地考慮所有可能出現的邊界情況和異常情況,並對這些邊界情況和異常情況做出妥善的處理,盡可能使演算法沒有意外的情況發生。

4、執行時間(running time)。執行時間是指演算法在計算機上執行所花費的時間,它等於演算法中每條語句執行時間的總和。對於同乙個問題如果有多個演算法可供選擇,應盡可能選擇執行時間短的演算法。一般來說,執行時間越短,效能越好。

5、占用空間(storage space)。占用空間是指演算法在計算機上儲存所占用的儲存空間,包括儲存演算法本身所占用的儲存空間、演算法的輸入及輸出資料所占用的儲存空間和演算法在執行過程中臨時占用的儲存空間。演算法占用的儲存空間是指演算法執行過程中所需要的最大儲存空間,對於乙個問題如果有多個演算法可供選擇,應盡可能選擇儲存量需求低的演算法。實際上,演算法的時間效率和空間效率經常是一對矛盾,相互牴觸。我們要根據問題的實際需要進行靈活的處理,有時需要犧牲空間來換取時間,有時需要犧牲時間來換取空間。

總結:如果5 條標準評價的結果相同的情況下,**量越少越好。實際上,**量越大,占用的儲存空間會越多,程式的執行時間也可能越長,出錯的可能性也越大,閱讀起來也越麻煩。

乙個演算法的時間複雜度(time 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)等。

C 資料結構與演算法揭秘12

這節,我們來重點討論一下 這個樹形結構的相應的源 的實現了。真的我們首先介紹一下無向圖鄰接錶類的實現來說明圖的鄰接錶類的實現。無向圖鄰接表的鄰接表結點類 adjlistnode有兩個成員字段,乙個是1adjvex,儲存鄰接頂點的資訊,型別是整型 乙個是 next,儲存下乙個鄰接表結點的位址,型別是 ...

12 資料結構

1.資料結構 有特殊關係的資料的集合 它們之間的關係。2.陣列 array 相同型別元素的有序集合。適合查詢和檢索,不適合插入和刪除。二維陣列 two dimensional arry 的儲存方式 3.記錄 record 可能是不同型別元素的集合。記錄名 記錄 物件 的名字,網域名稱 記錄中各個域 ...

資料結構與演算法分析 1 2章

遞迴原則1.總是要有一種基準情形 基準情形比結束條件的叫法更確切 2.總是要朝著基準情形的方向推進 3.假設所有的遞迴呼叫都能正常執行 4.在求解乙個問題的同乙個例項時,不要在不同的遞迴呼叫中做重複的工作 舉例 def fib n if n 1 return 1else return fib n 1...