算法設計與分析1——緒論

一、算法理論的兩大論題:算法設計、算法分析

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  若存在兩個正的常數cn0,對於任意nn0,都有T(n)≤c×f(n),則稱T(n)=O(f(n)),或稱算法在O(f(n)中。

2、大Ω符號:定義1.2  若存在兩個正的常數cn0,對於任意nn0,都有T(n)≥c×g(n),則稱T(n)=Ω(g(n))

3、大Θ符號:定義1.3 若存在三個正的常數c1c2n0,對於任意nn0都有c1×f(n)≥T(n)≥c2×f(n),則稱T(n)=Θ(f(n))

 

最好、最壞和平均情況

最好情況:出現概率較大時分析
最差情況:實時系統
平均情況:已知輸入數據是如何分佈的,通常假設等概率分佈

 

算法:非遞歸算法遞歸算法

非遞歸算法分析的一般步驟

關鍵:建立一個代表算法運行時間的求和表達式,然後用漸進符號表示這個求和表達式。

1. 決定用哪個(或哪些)參數作爲算法問題規模的度量

2. 找出算法中的基本語句

3. 檢查基本語句的執行次數是否只依賴於問題規模

4. 建立基本語句執行次數的求和表達式

5. 用漸進符號表示這個求和表達式

遞歸算法分析
 
關鍵:根據遞歸過程建立遞推關係式,然後求解這個遞推關係式。
 
1、猜測技術   2、擴展遞歸技術   3、通用分治遞推式
 
算法的後驗分析:算法的後驗分析(Posteriori)也稱算法的實驗分析,它是一種事後計算的方法,通常需要將算法轉換爲對應的程序並上機運行。
 

一般步驟:

  1. 明確實驗目的 
  2. 決定度量算法效率的方法,爲實驗準備算法的程序實現
  3. 決定輸入樣本,生成實驗數據
  4. 對輸入樣本運行算法對應的程序,記錄得到的實驗數據
  5. 分析得到的實驗數據
 
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章