算法分析與設計:緒論

● 算法與程序

算法是指解決問題的一種方法或一個過程
算法是若干指令的有窮序列,滿足性質:
(1) 輸入:有外部提供的量作爲算法的輸入。
(2) 輸出:算法產生至少一個量作爲輸出。
(3) 確定性:組成算法的每條指令是清晰無歧義的。
(4) 有限性:算法中每條指令的執行次數有限的,執行每條指令的時間也是有限的。

程序算法用某種程序設計語言的具體實現程序可以不滿足算法的性質,例如操作系統

● 設計算法的步驟

理解問題:在設計一個算法前,我們需要做的第一件事就是完全理解所給出的問題。同時,嚴格確定算法需要處理的實例範圍是非常重要的。一個正確的算法不僅應該能處理大多數的情況,而且應該能正確處理所有合法的輸入。
瞭解計算機設備的性能:今天使用的大多數算法仍然要運行於馮·諾依曼計算機上。它最主要的隨機存取機設想是:指令逐條運行,每次執行一步操作,稱爲順序算法。一些更新式的計算機可以在同一時間執行多條操作,即並行計算
在精確和近似間做選擇:精確的解法稱爲精確算法,近似的解法稱爲近似算法。無法求得精確解或由於某些問題固有的複雜性,用已知的精確算法來解決該問題可能會慢得無法接受。
確定適當的數據結構算法數據結構是計算機編程重要基礎程序=算法+數據結構

● 分析算法的指標

對於一個任何一個算法或解決方案,有下面的兩個問題:
(1) 問題能解決嗎?
(2) 問題解決的好嗎?

效率分析並不是算法分析的唯一目的。雖然算法追求的目標是速度,但算法必須首先正確纔有存在的意義。設計算法時,或者對多個算法進行比較時,就要分析它們的正確性時間效率。這種對算法進行解剖而獲得其正確性和時間效率的操作就是算法分析。如果兩個算法的時間效率一樣,我們就要對算法實現所使用的空間進行比較,空間使用較少的爲優。
因此,算法分析可以分爲如下3個方面:
(1) 正確性分析
(2) 時空效率分析
(3) 時空特性分析

算法複雜性 = 算法所需要的計算機資源
算法的時間複雜性T(n)算法的空間複雜性S(n)
其中n問題的規模(輸入大小)。

算法的時間複雜性有如下分析方法:
(1)最壞情況下的時間複雜性
Tmax(n) = max{ T(I) | size(I)=n }
(2)最好情況下的時間複雜性
Tmin(n) = min{ T(I) | size(I)=n }
(3)平均情況下的時間複雜性
Tavg(n) =在這裏插入圖片描述
其中I是問題的規模爲n的實例,p(I)是實 例I出現的概率

若對 T(n) →∞ , as n→∞ ;
有(T(n) - t(n) )/ T(n) →0 ,as n→∞;
則稱t(n)是T(n)的漸近性態,爲算法的漸近複雜性
在數學上, t(n)是T(n)的漸近表達式,是T(n)略去低階項留下的主項。它比T(n) 簡單。

漸近分析的記號:在下面的討論中,對所有n,f(n) ≥ 0,g(n) ≥ 0。
(1) 漸近上界記號O
O(g(n)) = { f(n) | 存在正常數c和n0使得對所有n≥ n0有:0 ≤ f(n) ≤ cg(n) }
(2) 漸近下界記號Ω
Ω(g(n)) = { f(n) | 存在正常數c和n0使得對所有n≥ n0有:0 ≤ cg(n) ≤ f(n) }
(3) 非緊上界記號o
o(g(n)) = { f(n) | 對於任何正常數c>0,存在正數和n0 >0使得對所有n≥ n0有:0 ≤ f(n) < cg(n) }
等價於 f(n) / g(n) →0 ,as n→∞。
(4) 非緊下界記號ω
ω(g(n)) = { f(n) | 對於任何正常數c>0,存在正數和n0 >0使得對所有n ≥ n0有:0 ≤ cg(n) < f(n) }
等價於 f(n) / g(n) →∞ ,as n→∞。
f(n) ∈ ω (g(n)) 等價於 g(n) ∈ o (f(n))
(5) 緊漸近界記號Θ
Θ(g(n)) = { f(n) | 存在正常數c1,c2和n0使得對所有n ≥ n0有:c1g(n) ≤ f(n) ≤ c2g(n) }

對於算法的時間函數f(n),如果f(n)g(n)同一數量級的(同階),可用f(n)=O(g(n))的形式來表示。稱上式爲算法的時間複雜度,或稱該算法的時間複雜度爲O(g(n))
一般常用的時間複雜度有如下的關係:
O(1) ≤O (log2n) ≤O (n) ≤O (n*log2n) ≤O (n2) ≤O (n3) ≤ … ≤O (nk) ≤O (2n)<O(n!)

● 算法的分類

算法大致分爲以下三類:
(1) 有限的、確定性算法
這類算法在有限的一段時間內終止。它們可能要花很長時間來執行指定的任務,但仍將在一定的時間內終止。這類算法得出的結果常取決於輸入值
(2) 有限的、非確定算法
這類算法在有限的時間內終止。然而,對於一個(或一些)給定的數值,算法的結果並不是唯一的或確定的
(3) 無限的算法
指那些由於沒有定義終止條件,或定義的條件無法由輸入的數據滿足而不終止運行的算法。通常,無限算法的產生是由於未能確定地定義終止條件。

經典算法
1.窮舉搜索法
2.迭代算法
3.遞推算法
4.遞歸算法
5.分治算法
6.貪心算法
7.動態規劃算法
8.回溯算法
9.分支限界算法

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章