NP完全性理論


 與NP相關的總共有四類問題:P問題、NP問題、NPC問題和NP hard問題,是計算復雜度理論中研究的主要內容之一。

 先介紹下多項式時間:在計算復雜度理論中,指的是一個問題的計算時間m(n)不大於問題大小n的多項式倍數。通俗點來說,多項式時間就是指時間復雜度是個多項式,或者說,就是這個程序運行的時間隨着數據規模n變化的函數為f(n),那么,f(n)是個多項式函數,那么就可以說是控制在多項式之內。舉個例子,現在從n階圖中找兩點的最短路徑,復雜度為n^2級別(即O(n^2),O是大寫歐),而n^2對於n是多項式(單項式當然也算),這就稱為是多項式復雜度,或者多項式時間,其中問題(算法)的規模是n。如果某一個算法的規模是n,但是復雜度比如是2^n,寫不成n的多項式,那就不是多項式時間。

P類問題所有可以在多項式時間內求解的判定問題構成P類問題。判定問題:判斷是否有一種能夠解決某一類問題的能行算法的研究課題。

NP類問題:所有的非確定性多項式時間可解的判定問題構成NP類問題。非確定性算法:非確定性算法將問題分解成猜測和驗證兩個階段。算法的猜測階段是非確定性的,算法的驗證階段是確定性的,它驗證猜測階段給出解的正確性。設算法A是解一個判定問題Q的非確定性算法,如果A的驗證階段能在多項式時間內完成,則稱A是一個多項式時間非確定性算法。有些計算問題是確定性的,比如加減乘除之類,你只要按照公式推導,按部就班一步步來,就可以得到結果。但是,有些問題是無法按部就班直接地計算出來。比如,找大質數的問題。有沒有一個公式,你一套公式,就可以一步步推算出來,下一個質數應該是多少呢?這樣的公式是沒有的。再比如,大的合數分解質因數的問題,有沒有一個公式,把合數代進去,就直接可以算出,它的因子各自是多少?也沒有這樣的公式。這種問題的答案,是無法直接計算得到的,只能通過間接的“猜算”來得到結果。這也就是非確定性問題。而這些問題的通常有個算法,它不能直接告訴你答案是什么,但可以告訴你,某個可能的結果是正確的答案還是錯誤的。這個可以告訴你“猜算”的答案正確與否的算法,假如可以在多項式(polynomial)時間內算出來,就叫做多項式非確定性問題

 NPC問題:NP中的某些問題的復雜性與整個類的復雜性相關聯.這些問題中任何一個如果存在多項式時間的算法,那么所有NP問題都是多項式時間可解的.這些問題被稱為NP-完全問題(NPC問題)。NPC包含了NP中最難的問題解決了這個NPC問題。所有NP 問題都能夠被解決了。

NPC問題相當廣泛,包括來自操作系統(調度和安全)、數據庫系統、運籌學、邏輯學、特別是圖論等不同領域的問題。

可滿足性問題、哈密頓圈問題、巡回售貨員問題、最長路徑問題都是NPC問題 裝箱(bin packing)問題、背包(knapsack)問題、圖的着色(graph coloring)問題以及團(clique)的問題都是著名的NPC問題。NPC問題相當廣泛,包括來自操作系統(調度和安全)、數據庫系統、運籌學、邏輯學、特別是圖論等不同領域的問題。

NP hard問題:Non-deterministic Polynomial hard problem(NPH)問題,如果所有NP問題可在多項式時間內轉化(歸約,意思是解決了后者也就相應的解決了前者)成某個問題,則該問題稱為NP難問題。

這里規約的意思是將一個特殊問題一般化,即將原問題推廣為一個最一般的、最有概括性、也更難的、計算復雜度更高的問題,這個問題具有最高的計算復雜度,如果這個最一般的問題也能有多項式時間求解算法,那么那些特殊的原問題也能有多項式時間求解算法。
解決了這個NP hard問題,所有NP問題都能夠被解決了。

       以上四個問題之間的關系如下圖所示:
Loading...

    總結:

  • P問題能夠保證存在多項式時間求解算法;NP問題不確定是否存在多項式時間求解算法,但確定存在多項式時間驗證算法
  •  P問題是NP問題的子集,因為存在多項式時間求解算法的問題,一定能夠在多項式時間內被驗證
  •  NP hard問題不一定是NP問題,有可能是不可判定問題。這時候說明原問題也是不可判定的
  •  NPC問題既是NP問題的子集,又是NP hard問題的子集,所以NPC問題是NP問題和NP hard問題的交集。
  •  NP hard問題和NPC問題都要求能夠在多項式時間內規約成另外一個問題。這里規約的意思是將一個特殊問題一般化,即將原問題推廣為一個最一般的、最有概括性、也更難的、計算復雜度更高的問題,這個問題具有最高的計算復雜度,如果這個最一般的問題也能有多項式時間求解算法,那么那些特殊的原問題也能有多項式時間求解算法。
  •  假設 N P = P 猜想不成立,那么計算復雜度的相對關系為(按照由低到高):P <N P< N P C<N P h a r d 。
  •  假設 N P = P 猜想成立,那么說明所有存在多項式時間驗證算法的問題都存在多項式時間求解算法,而NPC本身屬於NP問題,因此NPC也存在多項式時間求解算法,所以N P C = P ,所以 P = N P = N P C,屬於NP hard問題的一個子集。

參考:https://blog.csdn.net/qq_29176963/article/details/82776543

          https://blog.csdn.net/liufeng_king/article/details/8475508?depth_1-

          https://blog.csdn.net/sinat_21591675/article/details/86521190?depth_1-


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM