1. 程式人生 > >演算法分析與設計 —— NP完全性理論

演算法分析與設計 —— NP完全性理論

確定性演算法和非確定性演算法

(1)確定性演算法:整個執行過程中每一步都只有一個選擇,則稱A是確定性演算法。對同樣的輸入,輸出結果一定相同。

(2)非確定性演算法:在每一時刻,根據當時的狀態和輸入,若機器有多個動作可供選擇,第一個獲得結束的成功選擇使演算法終止,此時稱演算法為非確定性的。

P類問題

用一個確定性演算法在多項式時間內可解的問題。

(1) P類問題是NP問題的子集(如果P類問題既然能在多項式時間內求解,也必然能在多項式時間在驗證它的解)

NP類問題

能在多項式時間內驗證得出一個正確解的問題。

(1)對於哈密爾頓迴路問題,如果給出一個任意的迴路,我們可以很容易的判斷出該回路是否是哈密爾頓迴路(看是不是所有頂點都在迴路中),故哈密爾頓迴路是NP問題。

約化

(1)一個問題A可以約化成問題B的含義即是,可以用解決問題B的解法來解決問題A,或者說,問題A可以“變成”問題B。如:一元一次方程可以“約化”為一元二次方程

(2)問題A可“約化”為問題B的直觀意義:B的時間複雜度高於或等於A的時間複雜度。也就是說,問題A不比問題B難

(3)約化具有傳遞性:如果問題A可約化成問題B,問題B可約化成問題C,則問題A一定可約化成問題C

(4)約化需要在多項式時間內完成

NP完全問題(NPC)

存在這樣一個NP問題,所有的NP問題都可以在多項式時間內約化成它,則這個問題是NPC問題。換句話說,只要解決了這個問題,那麼所有的NP問題都解決了。

(1)NPC問題是NP問題的子集。

(2)目前為止我們還不能證明NPC問題有多項式演算法(即NP等於P),也不能證明NPC問題沒有多項式演算法(即NP不等於P)。因此,我們一般認為NPC問題是難解問題。

(3)如何證明一個新問題A是NPC問題

  1. 證明A∈NP;

  2. 選取一個已知的NPC問題B;

  3. 構造一個從B到A的變換f;

  4. 證明f為一個多項式變換。

(4)哈密爾頓迴路也是NPC問題,但尚未被解決。(通過上述證明過程可被證明) 在這裡插入圖片描述

NP難問題(NPH)

存在這樣一個NPC問題,所有的NPC問題都可以在多項式時間內約化成它,則這個問題是NPH問題 在這裡插入圖片描述