NP完全問題 NP-Completeness


原創翻譯加學習筆記,方便國人學習算法知識!

原文鏈接http://www.geeksforgeeks.org/np-completeness-set-1/

 

我們已經找到很多很高效的算法來解決很難得問題,例如最短路徑(shortest path),一筆畫問題(Euler graph),最小生成樹(minimum spanning tree)等等。這些都是算法設計者的勝利。在這一篇文章中,我們來討論一下一些失敗的例子。

 

是不是所有的計算問題都可以用計算機解決?

有一切計算問題是沒法用算法解決的,即使可以用無限的時間,例如停機問題(給定一個程序P和輸入w,程序P在輸入w下是否能夠最終停止。)艾倫·圖靈證明了,不存在解決停機問題的通用算法。這個證明的關鍵在於對計算機和程序的數學定義。

 NP完全問題就是一個失敗的例子,沒人發現NP完全問題的多項式解法,但是也沒人可以證明NP完全問題一定沒有多項式解法,有趣的是,如果有人能找到一個NP完全問題的多項式時間解法,那么所有的NP完全問題就都有多項式時間解法。(因為所有的NP 完全問題都可以歸約成一個問題)

 

什么是 P, NP, NP-complete, NP-Hard 問題?

P就是可以在確定型圖靈機(deterministic Turing machine)上找到多項式時間解。

NP是一系列決定性問題(decision problem),可以在非確定型圖靈機(Non-deterministic Turing Machine)上找到多項式時間解。P問題是NP的子集,也就是說在確定型圖靈機上能找到多項式時間解的在非確定型圖靈機上同樣能找到解。

NP-complete NP完全問題使一些最難的NP 問題,滿足以下條件的話,一個問題L就是NP完全問題:

1. L問題是NP問題(給出一個解,可以在多項式時間里來驗證(verified)這個解是否正確,但是沒法用多項式時間內找到解)

2. 已知的NP-complete問題可以在多項式時間內歸約成L問題

如果滿足條件2的話,我們就稱之為NP-hard問題,但是不需要滿足條件1。所以NP-complete 是NP-hard的子集。

下面這個圖可以看到P, NP, NP-complete, NP-Hard 之間的關系:

什么是歸約?What is Reduction?

假設L1, L2是兩個決定性問題(decision problem : 結果只有可能是Yes or No), 算法A2可以解決L2, 如果input Y是L2的輸入,運行A2算法時,根據Y的輸入是不是和L2相關來給出結果Yes or No。

想法是找到從L1問題到L2問題的轉化,這樣A2就可以成為A1解法的一部分去解決L1問題。

學習如何歸約是很重要的。如果我們有一些庫函數(library function)去解決一些特定問題,這樣我們把新的問題規約到這個已解決的問題,這樣可以解決很多時間。例如找最小乘積路徑,在一個有向圖里路徑上權重的最小乘積。如果我們有一個找最短路徑的DIjkstra算法的代碼,我們可以用log一下所有權重,然后用dijkstra算法找最短路徑,這樣比重新寫一個代碼快的多。

 

怎么樣證明一個問題是不是NP-complete?

從NP-complete問題的定義來看,看似很難證明一個問題L是NP-complete。因為根據定義,我們需要證明是否能把所有的NP問題都可以在多項式時間內規約到L。幸運的是我們有另外一條路可以走,就是把一個已知的NP-complete問題規約到L,如果可以在多項式時間內歸約,我們就可以證明這個問題L是NP-complete。(如果一個NPC可以歸約到L,那么所有的問題都可以在多項式時間內歸約到L 有點繞!)

 

第一個被證明的NP-complete的問題是什么?

一定存在第一個NP-complete通過定義被證明是NP-complete問題。SAT(boolean satisfiablilty problem 布爾可滿足性問題)就是第一題個被證明的NP-complete(查看算法導論)

了解NP完全問題對於工程師來說都是很有用的。假設在公司里你被要求寫一個高效率的算法來解決一個非常重要的問題。經過了很多思考,你只能想到一個沒啥用的指數時間的解法,如果你不知道NP完全,你只能說我想不出一個高效的算法,但當你知道NP完全問題並且能證明這個問題就是NP-complete,你可以很自豪的說基本上不存在多項式時間解。如果存在的話,那么這個解可以解決一個科學教研究了幾十年的大問題。


免責聲明!

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



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