算法就是一組有窮的規則,它規定了解決某一特定類型問題的一系列運算。
算法是一系列解決問題的明確指令,也就是說,對於符合一定規範的輸入,能夠在有限時間內獲得要求的輸出。
算法的基本特性:
- 有窮性:必須在有限步驟之後終止
- 確定性:每個步驟必須精確定義,無歧義
- 輸入:0個或多個輸入(輸入是從特定的對象集合中取出)
- 輸出:一個或多個輸出
- 可行性:它的所有運算都是基本的運算,理論上可用紙和筆在有限時間內精確完成
算法學習的基本內容
- 設計算法:基本設計策略
- 表示算法:用語言表示出來
- 確認算法:合法輸入後能夠輸出正確答案
- 分析算法:佔用CPU的時間和佔用存儲器的空間
- 測試程序:調試
爲什麼分析算法?
可以知道該算法的好壞、促進設計出更好算法。
運行時間的度量單位:
- 找出算法中最重要的操作(對總運行時間貢獻最大的操作)--基本操作
- 然後計算在該算法中基本操作運行的次數
計算時間的漸進表示
n:問題的規模 f(n):算法的計算時間 g(n):形式簡單的函數
以下三種符號表示g(n)對f(n)的漸進:
- O:如果存在兩個正常數c和n0,對於所有的n≥ n0,有|f(n)|≤ c| g(n) |,則記做f(n)=O(g(n))--->g(n)是f(n)的一個上界函數
- Ω:如果存在兩個正常數c和n0,對於所有的n≥ n0,有|f(n)|≥ c | g(n) |,則記做f(n) =Ω(g(n)).
- :如果存在正常數c1, c2和n0,對於所有的n≥n0,有c1 |g(n)|≤|f(n)|≤c2 |g(n)|,則記做f(n)= (g(n)).
以上三個符號具有以下性質:
- 傳遞性:比如:f (n)= O(g(n)),g(n)=O(h(n)) Þ f (n)=O(h(n))
- 反身性:比如:f(n)=O(f(n))
- 對稱性:f(n)= (g(n)) <=> g(n)= (f(n)) 只有這一條
- 互對稱性:f(n)=O(g(n)) <=> g(n)=Ω(f(n)) 只有這一條