資料結構與演算法

2022-07-13 18:51:13 字數 2240 閱讀 8651

引言

發現不寫筆記,不造輪子,學習效率太低,資料結構和演算法又很重要,每次看都看不完,這次下定決心總結一下,主要的方法是,看書了解概念和原理,每看完一部分做一些練習題,參考書籍有:《演算法》,《資料結構與演算法分析 c語言描述》,還有本王道的單科資料結構。

github:

一、資料結構

資料結構是什麼?是存在特定關係的資料元素的集合(比如線性表,相同資料型別的有限序列,除第乙個元素外,每個元素有且僅有乙個直接前驅,除最後乙個元素外,每個元素有且僅有乙個直接後繼)。

資料結構包括三個方面:邏輯結構,儲存結構,資料的運算。乙個演算法的設計取決於選定的邏輯結構,而實現則依賴於採用的儲存結構。

1. 邏輯結構:描述元素之間的邏輯關係,分為線性和非線性結構。

資料邏輯結構分類圖:

2. 儲存結構:也稱物理結構,主要有一下幾種型別:順序儲存,鏈式儲存,雜湊(hash)儲存和索引儲存。

(1)順序儲存:底層使用陣列實現,邏輯上相鄰的,物理位置上也相鄰。優點,隨機訪問;缺點,使用一塊相鄰的儲存單元,可能產生碎片。

(2)鏈式儲存:使用元素的儲存位址表示元素之間的邏輯關係。優點,不產生碎片,充分利用儲存單元;缺點,指標多占用乙個儲存單元,只能順序訪問。

(3)雜湊儲存:根據元素的關鍵字直接計算出該元素的儲存位址,優點,檢索,增加,刪除節點的操作都很快;缺點,hash函式不好,會產生衝突。

(4)索引儲存:儲存元素時,維護乙個索引表(關鍵字,位址)。優點:檢索速度快;缺點:較多的儲存空間,增刪元素需修改索引表。

3. 資料運算:運算的定義和實現

運算的定義是針對邏輯結構的,指出功能;運算的實現針對儲存結構,指出具體的步驟。

二、 演算法(algorithm)

演算法對特定問題求解步驟的描述,與程式語言無關,是一種適合電腦程式解決問題的方法。

演算法5個重要的特性:

1)有窮性:乙個演算法必須總是(對任何合法的輸入值)在執行有窮步後結束,且每一步都可在有窮時間內完成;

2)確定性:演算法中每一條指令在理解時不會產生二義性,即對於相同輸入只能得到相同的輸出;

3)可行性:演算法的描述的操作可以通過已實現的基本運算執行有限次實現;

4)輸入:乙個演算法有零個或多個輸入;

5)輸出: 乙個演算法有零個或多個輸出,同輸入有特定的關係。

乙個好的演算法應該有以下幾點:可讀的,正確的,健壯的(一些邊界和非法值的檢查),高效率低儲存(執行時間快,所需最大儲存空間小,與問題的規模有關)。

1. 演算法的時間複雜度

演算法中所有語句的頻度(重複執行的次數)之和記作t(n),它是演算法問題規模n的函式,時間複雜度就是分析t(n)的資料量級。演算法中基本運算(最深層迴圈的語句)的頻度和t(n)同數量級,所有通常採用演算法中基本運算的頻度f(n)來分析演算法的時間複雜度,即: t(n) = o(f(n))

注:時間複雜度不僅依賴問題的規模,也取決於輸入資料的性質。

常見的漸近時間複雜度:

o(1) < o(log2n) < o(n) < o(nlog2n) < o(n2) < o(n3) < o(2n) < o(n!) < o(nn)

計算方法:

(1)迴圈主體中的變數參與迴圈條件的判斷

找出主體句與t(n)成正比的迴圈變數,代入條件計算即可。

比如,

int i = 1; 

while(i

其中i乘以2的次數即是t(n)(即i=2t(n)),故2t(n)

<=n => t(n)<= log2n;

int y = 5; 

while((y+1)*(y+1)

其中y加1的次數是t(n),又y初值為5,所以,y=t(n)+5,代入條件得出t(n)

(2)迴圈主體中的變數與迴圈條件無關

主要計算方法有:直接累計迴圈次數;巢狀迴圈從內到外分析,忽略單步和條件判斷語句,只關注主體語句的執行次數。此類問題又可分為遞迴(用公式進行遞推)和非遞迴(直接累計次數)。

2. 演算法的空間複雜度

定義該演算法耗費的儲存空間,記為s(n)。

演算法原地工作所需輔助空間是常量,即o(1)

資料結構與演算法 演算法 演算法和資料結構

資料結構與演算法 演算法 好吧,在這裡,您被優秀或優秀的軟體開發人員所隔開。在這種情況下,我會告訴您一開始或至少在我的情況下,並且我知道大多數時候,對於我認識的大多數人,您會覺得自己是乙個無能的人或白痴。基本上,我怎麼可能不理解這一點,然後您會感到沮喪。在這種情況下,我會告訴您情況並不像您想的那麼糟...

資料結構 資料結構與演算法01

1 求一組整數中的最大值。演算法 基本操作是 比較兩個數的大小 模型 仔細想想 你並不知道這個整數到底是多大?整數過大你該怎麼去表示?2 足協的資料庫管理的程式 演算法 需要管理的專案?如何管理?使用者介面?模型 3 資料與資料結構 資料 所有能被輸入到計算機中,並被計算機處理的符號的集合計算機操作...

資料結構 資料結構與演算法02

1 演算法設計的原則 設計演算法時,通常應考慮達到以下目標 1,正確性 2,可讀性 3,健壯性 4,高效率與低儲存量需求 1,正確性 規格說明 四個層次 a,程式中不含語法錯誤 b,程式對於幾組輸入資料能夠得出滿足要求的結果 c,程式對精心選擇的 典型 苛刻切帶有刁難性的幾組輸入資料能夠得出滿足要求...