重學資料結構之第二章 演算法

2021-10-09 22:36:43 字數 1536 閱讀 7813

4、演算法設計的要求

5、演算法效率的度量方法

6、函式的漸近增長

7、演算法的複雜度

8、推到大o階的方法

演算法是解決特定問題求解步驟的描述,在計算機中表現為指令的有限序列,並且每條指令表示乙個或多個操作。

舉個例子,求1+2+3+…+100之和,我們來看兩段**:

**片段1:

int sum =

0,n =

100;

for(

int i =

1; i < n ; i ++

)//sum結果5050

system.out.

println(""

+ sum)

;

**片段2:

int sum =

0, n =

100;

sum =(1

+ n )

* n /2;

//sum結果5050

system.out.

println(""

+ sum)

;

同樣的結果,我們可以明顯的看出**片段2執行速度要快得多,這就是演算法的優勢和好處。

演算法具體五個基本特性:輸入、輸出、有窮性、確定性、可行性。

演算法具有零個或多個輸入。演算法至少有乙個或多個輸出。

指演算法在執行有限的步驟之後,自動結束而不會出現死迴圈,並且每乙個步驟在可接受的時間內完成。

演算法的每一步驟都具有確定的含義,不會出現二義性。在一定條件下,演算法只有一條執行路徑,相同的輸入只能由唯一的輸出結果。

演算法的每一步都必須是可行的,就是說,每一步都能通過執行有限次數完成。

演算法設計要求主要包含四個方面:正確性、可讀性、健壯性、時間效率高和儲存量低。

主要有兩種:事後統計方法和事前分析估算方法

給定兩個函式f(n)和g(n),如果存在乙個整數n,使得對於所有的n>n總是比g(n)大,那麼我們說f(n)的增長漸近快於g(n)。

主要包括兩個方面:時間複雜度和空間複雜度。

時間複雜度:在進行演算法分析時,語句總的執行次數t(n)是關於問題規模n的函式,進而分析t(n)隨n的變化情況並確定t(n)的數量級。演算法的時間複雜度,也就是演算法的時間度量,記作:t(n)=o(f(n))。它表示隨問題規模n的增大,演算法執行時間的增長率和f(n)的增長率相同,稱作演算法的漸近時間複雜度,簡稱為時間複雜度,其中f(n)是問題規模n的某個函式。

空間複雜度:通過計算演算法所需的儲存空間實現,演算法空間複雜度的計算公式記作:s(n)=o(f(n)),其中,n為問題的規模,f(n)為語句關於n所佔儲存空間的函式。

常數階o(1),線性階o(n),對數階o(logn),平方階o(n²)

原創不易,求個關注。

裡面有很多想對大家說的話,就像和朋友聊聊天。

寫**,做設計,聊生活,聊工作,聊職場。

我見到的世界是什麼樣子的?

搜尋關注我吧。

第二章 資料結構 二

知識點 trie樹 並查集,堆的操作 高效地儲存和查詢字串集合的資料結構 const int n 100010 int son n 26 cnt n idx 插入 void insert char str cnt p 以這個點結尾的字元數 查詢 intquery char str return cn...

第二章 演算法 (資料結構筆記)

我自己寫的累加演算法 1 100 int i,count 0 for i 0 i 100 i cout0 高斯的累加演算法 int n 100,count 0 count n n 1 2 cout 演算法是解決特定問題求解步驟的描述,在計算機中表現為指令的有限序列,並且每條指令表示乙個或多個操作。演...

第二章 資料結構與演算法基礎

資料 描述客觀事物的數值 字元已經能輸入機器且能被處理的各種符號集合。資料元素 資料的基本單位,是資料集合的個體。資料物件 性質相同的資料元素的集合,是資料的子集。資料結構 相互之間存在一種或多種特定關係的資料元素的集合。邏輯結構 資料結構的邏輯層面。按照元素之間的相互關係的特性,分為 集合 線性結...