【看了就懂】P問題、NP問題、NP完全問題和NP難問題

爲了避免對這四個問題有一定理解基礎的人看的很煩,個人簡單理解的四個問題:

P問題:有多項式時間算法,算得很快的問題。

NP問題:算起來不確定快不快的問題,但是我們可以快速驗證這個問題的解。

NP-complete問題:屬於NP問題,且屬於NP-hard問題。

NP-hard問題:比NP問題都要難的問題。

詳細說一下這四個問題:

P類問題:存在多項式時間算法的問題。(P:polynominal,多項式)。

我們爲什麼要研究這個P類問題呢?當計算機處理的數據達到100萬個的時候,時間複雜度分別爲 O(n2)O(n^2)O(en)O(e^n)的算法,運行時間簡直就是天壤之別。所以我們纔要研究一個問題是否具有多項式時間的算法。

NP問題:能在多項式時間內驗證得出一個正確解的問題。(NP:Non deterministic polynominal,非確定性多項式)。

這裏可以清楚的看出P類問題是NP類問題的子集(即存在多項式時間算法的問題,總能在多項式時間內驗證它)。

個人理解NP類問題就是,不知道這個問題存不存在一個多項式時間的算法,所以叫非確定性(non-deterministic)。但是我們可以在多項式時間內驗證並得出這個問題的一個正確解。舉個例子:

著名的NP類問題:旅行家推銷問題(TSP)。即有一個推銷員,要到n個城市推銷商品,他要找出一個包含所有n個城市的環路,這個環路路徑小於a。我們知道這個問題如果單純的用枚舉法來列舉的話會有(n-1)! 種,已經不是多項式時間的算法了,(注:階乘算法比多項式的複雜)。那怎麼辦呢?我們可以用猜的,假設人品爆炸猜幾次就猜中了一條小於長度a的路徑,TSP問題解決了,皆大歡喜。可是,我不可能每次都猜的那麼準,也許我要猜完所有種方案呢?所以我們說,這是一個NP類問題。也就是,我們能在多項式的時間內驗證並得出問題的正確解,可是我們卻不知道該問題是否存在一個多項式時間的算法,每次都能解決他(注意,這裏是不知道,不是不存在)。

所以這就引出了這類討論的一個千年問題:是否 NP類問題=P類問題

爲了證明這個千古難題,科學家想出了很多辦法。其中之一就是問題的約化。所謂問題約化就是,可以用問題B的算法來解決A ,我們就說問題A可以約化成問題B。舉個例子:一元一次方程的求解,跟二元一次方程的求解,我們知道,只要能求解二元一次方程,那就可以用二元一次方程的解法來求解一元一次方程,只需要將一元一次方程加上y,並附加一個方程y=0就可以將一元一次方程變形爲一個二元一次方程,然後用二元一次方程的解法來求解這個方程。注意,這裏二元一次方程的解法會比一元一次的複雜。所以我們說,只需要找到解二元一次方程的規則性解法,那就能用這個規則性解法來求解一元一次方程。從這裏也可以看出,約化是具有傳遞性的,如A約化到B,B約化到C,A就可以約化到C,同時不斷約化下去,我們會發現一個很驚人的特性,就是他一定會存在一個最大的問題,而我們只需要解決了這個問題,那其下的所有問題也就解決啦!這就是我們所說的NPC問題的概念!!!

3.NPC類問題(Non deterministic Polynomial complete):

存在這樣一個NP問題,所有的NP問題都可以約化成它。換句話說,只要解決了這個問題,那麼所有的NP問題都解決了。其定義要滿足2個條件:

首先,它得是一個NP問題;然後,所有的NP問題都可以約化到它。

要證明npc問題的思路就是: 先證明它至少是一個NP問題,再證明其中一個已知的NPC問題能約化到它。

4.NP難問題(NP-hard問題):

NP-Hard問題是這樣一種問題,它滿足NPC問題定義的第二條但不一定要滿足第一條(就是說,NP-Hard問題要比 NPC問題的範圍廣,NP-Hard問題沒有限定屬於NP),即所有的NP問題都能約化到它,但是它不一定是一個NP問題。

以上四個問題他們之間的關係可以用下圖來表示:

在這裏插入圖片描述

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