P,NP,NPc

P,NP,NPc

首先說個基本概念----時間複雜度:並不是表示一個程序解決問題需要花多少時間,而是當問題規模擴大後,程序需要的時間長度增長得有多快。具有O(1)的時間複雜度,也稱常數級複雜度;數據規模變得有多大,花的時間也跟着變得有多長,這個程序的時間複雜度就是O(n),比如找n個數中的最大值;而像冒泡排序、插入排序等,數據擴大2倍,時間變慢4倍的,屬於O(n^2)的複雜度。還有一些窮舉類的算法,所需時間長度成幾何階數上漲,這就是O(a^n)指數級複雜度,甚至O(n!)階乘級複雜度。不會存在O(2*n^2)的複雜度,因爲前面的那個“2”是係數,根本不會影響到整個程序的時間增長。同樣地,O(n^3+n^2)的複雜度也就是O(n^3)的複雜度。因此,我們會說,一個O(0.01*n^3)的程序的效率比O(100*n^2)的效率低,儘管在n很小的時候,前者優於後者,但後者時間數據規模增長得慢,最終O(n^3)的複雜度將遠遠超過O(n^2)。我們也說,O(n^100)的複雜度小於O(1.01^n)的複雜度。前面的幾類複雜度被分爲兩種級別,其中後者的複雜度無論如何都遠遠大於前者:一種是O(1),O(log(n)),O(n^a)等,我們把它叫做多項式級的複雜度,因爲它的規模n出現在底數的位置;另一種是O(a^n)O(n!)型複雜度,它是非多項式級的,其複雜度計算機往往不能承受。人們會想到一個問題:會不會所有的問題都可以找到複雜度爲多項式級的算法呢?很遺憾,答案是否定的。

    Ppolynomial)問題:如果一個問題可以找到一個能在多項式的時間裏解決它的算法,那麼這個問題就屬於P問題.

    NP(nondeterministic polynomial)問題:是指可以在多項式的時間裏驗證一個解的問題。NP問題的另一個定義是,可以在多項式的時間猜出一個解的問題Hamilton迴路問題是這樣的:給你一個圖,問你能否找到一條經過每個頂點一次且恰好一次(不遺漏也不重複)最後又走回來的路(滿足這個條件的路徑叫做Hamilton迴路),我要找一個圖的哈密頓路徑,隨便給我一個解,我都可以在P時間內檢查它是不是哈密頓路徑,P問題是屬於NP問題的,因爲給定一個P問題,我可以在P時間內找到答案,那麼任意給我一個解,我簡單的比較解和答案是不是相同,就可以回答yes/no,整個時間是P,符合定義。

     NPC(nondeterministic polynomial complete)問題:是這樣的一類問題,首先他是屬於NP的,而且他是NP問題裏面最難解決的問題,難到什麼程度?只要其中某個問題可以在P時間內解決,那麼所有的NP問題就都可以在P時間內解決了。證明一個問題是NPC問題也很簡單,先證明它至少是一個NP題,再證明其中一個已知NPC問題能約化到它.

    NP-hard(nondeterministic ponomial hard)問題:是這樣的問題,只要其中某個問題可以在P時間內解決,那麼所有的NP問題就都可以在P時間內解決了。NP-c問題就是NP-hard問題。但注意NP-hard問題不一定NP問題,比如,下圍棋就是NP-hard問題,但不是NP問題,我們要在一個殘局上找一個必勝下法,告訴我們下一步下在哪裏。顯然,我們找不這個解,而且更難的是,就算有人給我了一個解,我們也無法在P時間內判斷它是不是正確的。NP-Hard問題滿足NPC問題定義的第二條但不一定要滿足第一條(就是說,NP-Hard問題要比NPC問題的範圍廣)。NP-Hard問題同樣難以找到多項式的算法,但它不列入我們的研究範圍,因爲它不一定是NP問題。即使NPC問題發現了多項式級的算法,NP-Hard問題有可能仍然無法得到多項式級的算法。事實上,由於NP-Hard放寬了限定條件,它將有可能比所有的NPC問題的時間複雜度更高從而更難以解決。

 

發佈了103 篇原創文章 · 獲贊 5 · 訪問量 37萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章