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 演算法是解決特定問題求解步驟的描述,在計算機中表現為指令的有限序列,並且每條指令表示乙個或多個操作。演...
第二章 資料結構與演算法基礎
資料 描述客觀事物的數值 字元已經能輸入機器且能被處理的各種符號集合。資料元素 資料的基本單位,是資料集合的個體。資料物件 性質相同的資料元素的集合,是資料的子集。資料結構 相互之間存在一種或多種特定關係的資料元素的集合。邏輯結構 資料結構的邏輯層面。按照元素之間的相互關係的特性,分為 集合 線性結...