P問題、NP問題、NP完全問題、NP難問題的基本概念

P類問題:

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

爲什麼我們要研究這個?因爲計算機處理的輸入常常不是那麼幾十個幾千個那麼一點點,想象一下,當計算機處理的數據達到100萬個的時候,時間複雜度爲o(n^2)和o(e^n)的算法,所需的運行次數簡直是天壤之別,o(e^n)指數級的可能運行好幾天都沒法完成任務,所以我們纔要研究一個問題是否存在多項式時間算法。而我們也只在乎一個問題是否存在多項式算法,因爲一個時間複雜度比多項式算法還要複雜的算法研究起來是沒有任何實際意義的。

 

NP類問題:

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

P類問題是NP問題的子集,因爲存在多項式時間解法的問題,總能在多項式時間內驗證他。

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

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

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

即,是否所有能在多項式時間內驗證得出正確解的問題,都是具有多項式時間算法的問題呢?

太讓人震驚了,要是解決了這個問題,那豈不是所有的NP問題都可以通過計算機來解決?

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

引到NP問題裏就是,對於同一類的所有的NP類問題,若他們都可以在多項式時間內約化成最難的一個NP類問題,(我們直觀的認爲,被約化成的問題應具有比前一個問題更復雜的時間複雜度)當我們針對這個時間複雜度最高的超級NP問題要是能找到他的多項式時間算法的話,那就等於變向的證明了其下的所有問題都是存在多項式算法的,即NP=P!!!!給出NPC問題定義。

(3)NPC類問題(Nondeterminism 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問題。

    NP-Hard問題同樣難以找到多項式的算法,但它不列入我們的研究範圍,因爲它不一定是NP問題。即使NPC問題發現了多項式級的算法,NP-Hard問題有可能仍然無法得到多項式級的算法。事實上,由於NP-Hard放寬了限定條件,它將有可能比所有的NPC問題的時間複雜度更高從而更難以解決。

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