研究生課程 演算法分析筆記

2021-07-25 16:58:48 字數 3338 閱讀 3031

演算法分析有四大經典的思想,分治法、貪心法、動態規劃,最後乙個是回溯法和分支限界法,後面會針對性都出一篇部落格總結。這篇博文先總結一下除了四大演算法之外的,雜七雜八的筆記。

複雜度分析涉及一些比較麻煩的符號,主要是五個:上界符號

o ,下界符號

ω,準確界

θ ,非緊上界

o ,非緊下界

ω,不過感覺主要用的多的還是上界符號

o ,理解乙個,其他的符號也就好理解了。詳細介紹如下。

定義:對於要研究的函式 f(

n),我們嘗試找到這樣乙個函式 g(

n),若存在自然數 n0

和正的常數

c ,使得對所有的 n≥

n0,都有 f(

n)≤c

g(n)

那麼就稱函式 f(

n)的階至多是 o(

g(n)

) 的。

含義:f(n

) 的增長最多像 g(

n)那樣快。稱 o(

g(n)

) 是 f(

n)的上界

舉例:若 t(

n)=12.5n2

,那麼可以取 c=

13 , 令 g(

n)=n

2 , 有 t(

n)<=cg

(n) ,找到乙個上界,那麼 o(

g(n)

)=o(

n2) 。 注意這裡其實如果取 g(

n)=n

3 也是可以的。

定義:和上界符號

o 正好相反,有 f(

n)≥c

g(n)

那麼就稱函式 f(

n)的階至少是 ω(

g(n)

) 的。

含義:f(n

) 的增長最像 g(

n)那樣快。稱 o(

g(n)

) 是 f(

n)的下界。

舉例:若 t(

n)=n

2+435

n+24 ,那麼可以取 c=

1 , 令 g(

n)=n

2 , 有 t(

n)>=cg

(n) ,找到乙個下界,那麼 ω(

g(n)

)=ω(

n2) .

對於函式 f(

n),我們想找到這樣的函式 g(

n),對於自然數 n0

和常數 0≤

c1≤c

2 ,都有 c1

g(n)

≤f(n

)≤c2

g(n)

就稱 f(

n)的準確界是 θ(

g(n)

) 的。用 o

表示,和上界記號

o很像,但是無法取等於號,即 f(

n)(n)

用 ω表示,和下界記號

ω 很像,但是無法取等於號,即 f(

n)>cg

(n)

用分治法之類的方法,常常要分析遞迴方程的複雜度,如漢諾塔問題、斐波那契數列問題等,需要從遞迴方程的複雜度中計算出演算法整體的複雜度。這裡介紹了三種方法,用生成函式,特徵方程和遞推的方法。

講的不是很詳細,全當考試複習的筆記了。

構造生成函式 -> 求解生成函式 -> 得到遞迴方程表示式

k 階常係數線性齊次遞迴方程

待定係數法的通解表示式

用初始條件解出係數

k 階常係數線性非齊次遞迴方程

np 完全問題,屬於計算複雜度理論,可以參考 wiki 上的 計算複雜性理論。

能在以多項式時間內解決的問題是p 類問題(polynomial problem)。易知,所有的易解問題都是 p 類問題。

能在多項式時間內驗證的問題是np 問題(non-deterministic polynomial problem),但是一般還找不到多項式時間的演算法解決此類問題。

乙個 np 類問題的重要的子類,叫做npc 問題(np complete problem),或 np 完全問題。定義如下:如果所有的 np 問題都能在多項式時間內規約(reduction)成某個 np 問題,那麼這個 np 問題就是個 npc 問題。

若 p != np,這三類問題的關係如下圖:

很多複雜的問題都是 np 問題,即很容易給出乙個判定,但是找不到多項式的演算法來解決這個問題,但是又無法得到知否能夠得出多項式時間的解法。考慮 乙個 npc 問題如果能在多項式時間內得到解決,那麼 np 類中的每個問題都可以在多項式時間內規約到該問題,也就相應的都可以在多項式時間內得到解決。即 p = np 成立!意思就是解決了乙個 npc 問題,所有的 np 問題就都解決了。

然而究竟 p = np 是否正確,始終懸而未決。參考維基百科 np 完全 詞條。

除此之外,還有一種np 難問題(non-deterministic polynomial hard problem,np-hard problem),是比 np 問題更難的問題,因為都不知道能不能在多項式時間內驗證乙個解的正確性,更不用提解決了。所以 np-hard 至少和 npc 問題一樣難。

這四類問題的關係如下圖:

那麼 npc 問題和 np-hard 問題的關係是什麼呢?

滿足下面兩個條件的問題就是 npc 問題。首先,它得是乙個 np 問題;然後,所有的 np 問題都可以約化到它。np-hard 問題是這樣一種問題,它滿足 npc 問題定義的第二條但不一定要滿足第一條(就是說,np-hard 問題要比npc問題的範圍廣)。

約化(reducibility):乙個問題a可以約化為問題b的含義即是,可以用問題b的解法解決問題a,問題a可約化為問題b」有乙個重要的直觀意義:b的時間複雜度高於或者等於a的時間複雜度。

圖靈機的四個組成部分:

停機問題:邏輯數學中可計算理論的乙個問題。通俗的說,就是判斷任意乙個程式是否能夠在有限的時間之內結束執行的問題。停機問題在圖靈機上是不可判定的。

和停機問題類似的乙個不可判定的悖論是理髮師悖論:村子裡有個理髮師,這個理髮師有條原則是,對於村里所有人,當且僅當這個人不自己理髮,理髮師就給這個人理髮。如果這個人自己理髮,理髮師就不給這個人理髮。無法回答的問題是,理髮師給自己理髮麼?

研究生課程 演算法分析筆記

演算法分析有四大經典的思想,分治法 貪心法 動態規劃,最後乙個是回溯法和分支限界法,後面會針對性都出一篇部落格總結。這篇博文先總結一下除了四大演算法之外的,雜七雜八的筆記。複雜度分析涉及一些比較麻煩的符號,主要是五個 上界符號 o 下界符號 準確界 非緊上界 o 非緊下界 不過感覺主要用的多的還是上...

研究生課程 演算法分析 貪心法

在求解一些最優化問題的時候,一般會分成多個步驟,每一步都有乙個選擇。貪心演算法的思想在於,先不從整體考慮,每次都只做當前看來最優的思想,即區域性最優解,期望通過一步步的區域性最優解,最後構造出全域性最優解。貪心演算法是很多問題的最優解,當然也有很多問題只是區域性最優,或者近似最優解,在構造貪心演算法...

研究生規劃 筆記

今天是開學第一天。明確了畢業要求,兩個專利或者一篇sci 有點小焦慮,網上找了找資料,摘了一些要點,記錄如下。數學 數學的知識不需要都學會了再去做問題,在解決問題的過程中去學習數學是最快的學習方法。即,研究過程中若遇到什麼數學知識再去學相關的知識,學習起來會更有興趣,掌握起來會更快更紮實 其他學科 ...