演算法分析與設計 王秋芬 1 演算法及基礎知識

2021-10-11 18:07:41 字數 1504 閱讀 4406

定義指的是對特定問題求解步驟的一種描述,是若干指令的有窮指令

特性

輸入——有零個或多個輸入,**於外界提供或自己產生

輸出——有乙個或多個輸出

確定性——組成演算法的每條指令必須有確定的含義,無歧義

有限性——演算法中每條指令的執行次數都是有限的,執行每條指令的時間也是有限的

可行性——乙個演算法是可行的,即演算法中描述的操作都可以通過已經實現的基本運算執行有限次後實現

演算法的描述方式:常用的描述方式有自然語言、圖形、程式語言、偽**

演算法與程式的區別

演算法是程式設計的精髓,程式是演算法用某種程式語言的具體實現,程式設計的實質就是構造解決問題的演算法

資料結構+演算法=程式,資料結構是演算法的基礎

充分理解要解決的問題

數學模型擬制

演算法詳細設計

演算法描述

演算法思路的正確性驗證

演算法分析

演算法的計算機實現和測試

文件資料的編制

空間複雜性

乙個演算法在執行過程中所占用的儲存空間大小的度量,一般記為s(n)

時間複雜性

是對演算法執行時間長短的度量。度量的方法通常有兩種:時候統計法和事前分析估計法

事後統計法事前分析估算法

*漸進複雜性態(當問題規模足夠大時近似於時間複雜性)

o(f(n)),演算法執行時間的上界,也就是最壞情況下的時間複雜度; 

ω(f(n)),演算法執行時間的下界,也就是最好情況下的時間複雜度; 

θ(f(n)),這裡θ(f(n))是漸近的確界, 有的演算法沒有θ(f(n))。

關於n的乙個m多項式,t(n)=o(n^m),t(n)=ω(n^m),t(n)=θ(n^m)

o(1)詳見書p10

子程式(或函式)直接呼叫自己或通過一系列呼叫語句間接呼叫自己,稱為遞迴

直接或間接呼叫自身的演算法稱為遞迴演算法

演算法的基本思想自己呼叫自己

求解問題的步驟

1)分析問題,尋找遞迴關係。找出大規模問題和小規模問題的關係。

2)找出停止條件,該停止條件用來控制遞迴何時終止

3)設計遞迴演算法、確定引數,即構建遞迴體

常用數學公式:書p27

演算法分析與設計 王秋芬 1 貪心法

每個階段面臨選擇時,貪心法都做出對眼前情況的最優解,不考慮後續影響。每個階段的決策一旦做出,不可以更改,不能回溯 貪心法是根據貪心策略來逐步構造問題的解,策略不同結果不同 貪心法具有高效性和不穩定性,它可以很快得到解,但不一定是最優解。貪心演算法的好壞關鍵在於貪心策略的選擇 貪心法的基本要素 適合的...

演算法設計與分析 1

實驗題目 生成兩個隨機的圖,乙個有向圖乙個無向圖。有向圖兩千條邊左右,無向圖一千條邊左右,邊的數量是大概的。100個頂點。要求能算出每個頂點的度。要求每次圖是隨機生成的,並且有良好的結構。今後的實驗都基於這個圖結構。任意語言和環境。建議鍊錶描述。然後基於這個圖實現乙個廣度優先搜尋。參考文獻 c 中的...

演算法設計與分析作業(1)

1.dijkstra求單源最短路徑 先進行存圖操作,將帶權有向圖用鄰接矩陣來表示 for int i 0 i u v dist map u v dist 用dis陣列來儲存0點到其他每乙個點的最短距離,初始時dis i map 0 i 接下來進行鬆弛操作,找出最短距離 首先0點為q集合中的點,0 1...