一、算法理論的兩大論題:算法設計、算法分析
1. 算法設計---對於一個問題如何設計一個有效的算法
2. 算法分析---如何評價或判斷一個算法的優劣
二、爲什麼要學習算法
理由1:算法——程序的靈魂
分析問題→設計算法→編寫程序→整理結果
算法→方法學→語言→工具
理由2:提高分析問題的能力
算法的形式化→思維的邏輯性、條理性
三、算法五大特性:輸入、輸出、有窮性、確定性、可行性
四、算法的幾種描述方法:
⑴ 自然語言
優點:容易理解
缺點:冗長、二義性
使用方法:粗線條描述算法思想
注意事項:避免寫成自然段
⑵ 流程圖
優點:流程直觀
缺點:缺少嚴密性、靈活性
使用方法:描述簡單算法
注意事項:注意抽象層次
⑶ 程序設計語言
優點:能由計算機執行
缺點:抽象性差,對語言要求高
使用方法:算法需要驗證
注意事項:將算法寫成子函數
⑷ 僞代碼——算法語言
僞代碼(Pseudocode):介於自然語言和程序設計語言之間的方法,它採用某一程序設計語言的基本語法,操作指令可以結合自然語言來設計。
優點:表達能力強,抽象性強,容易理解
五、算法設計的一般過程
1.理解問題
2.預測所有可能的輸入
3. 在精確解和近似解間做選擇
4. 確定適當的數據結構
5.算法設計技術
6.描述算法
7.跟蹤算法
8.分析算法的效率
9.根據算法編寫代碼
六、算法分析
算法分析:對算法所需要的兩種計算機資源——時間和空間進行估算
時間複雜性分析的關鍵:
成正比的語句
for (i=1; i<=n; i++) 問題規模:n
for (j=1; j<=n; j++) 基本語句:x++
x++;
算法分析的目的:
漸進符號
1、大O符號:定義1.1 若存在兩個正的常數c和n0,對於任意n≥n0,都有T(n)≤c×f(n),則稱T(n)=O(f(n)),或稱算法在O(f(n)中。
2、大Ω符號:定義1.2 若存在兩個正的常數c和n0,對於任意n≥n0,都有T(n)≥c×g(n),則稱T(n)=Ω(g(n))
3、大Θ符號:定義1.3 若存在三個正的常數c1、c2和n0,對於任意n≥n0都有c1×f(n)≥T(n)≥c2×f(n),則稱T(n)=Θ(f(n))
最好、最壞和平均情況
算法:非遞歸算法和遞歸算法
非遞歸算法分析的一般步驟
關鍵:建立一個代表算法運行時間的求和表達式,然後用漸進符號表示這個求和表達式。
1. 決定用哪個(或哪些)參數作爲算法問題規模的度量
2. 找出算法中的基本語句
3. 檢查基本語句的執行次數是否只依賴於問題規模
4. 建立基本語句執行次數的求和表達式
5. 用漸進符號表示這個求和表達式
一般步驟:
- 明確實驗目的
- 決定度量算法效率的方法,爲實驗準備算法的程序實現
- 決定輸入樣本,生成實驗數據
- 對輸入樣本運行算法對應的程序,記錄得到的實驗數據
- 分析得到的實驗數據