對P NP NPC與NPH 的理解

2021-10-23 21:16:10 字數 3056 閱讀 5872

npc問題

nph問題

四者總結及圖形表示

定義: 解決問題需要的時間與問題的規模之間是多項式關係。

多項式關係形如,k為某個常數,n是問題的輸入規模。例如,時間複雜度為o(nlog(n))、o(n3)都是多項式時間複雜度。時間複雜度為o(nlog(n))、o(2n)是指數時間複雜度,o(n!)是階乘時間複雜度。像o(an)和o(n!)型的時間複雜度,它是非多項式級的,其複雜度計算機往往不能承受。

為什麼多項式時間複雜度的定義形式呢,它的多項式的多項性體現在哪呢?

因為演算法的時間複雜度的表示式,取指數最高項保留作為時間複雜度的表示式,未刪除低指數項就可以看出多項式的多項性了吧!當然,單項式也算作多項式。

《演算法導論》給出的定義:在多項式時間內可解的問題為p問題(polynomial problem,多項式問題)。

更為具體的是:p問題指可以在多項式時間內求解的問題,例如:時間複雜度為o(nlog(n))的快速排序和堆排序。

定義: np問題((non-deterministic polynomial problem,非確定性多項式問題),指問題只能通過驗證給定的猜測是否正確來求解。所謂多項式指的是驗證猜測可在多項式時間內完成,所謂非確定性指的是問題只能通過驗證猜測來解,而不能直接求解。

如大合數的質因數分解,沒有給定的公式可直接求出乙個合數的兩個質因數是什麼,但是驗證兩個數是否是質因數卻可在多項式時間完成,所以它也是非確定性多項式問題,即np問題。

之所以要定義np問題,是因為通常只有np問題才可能找到多項式的演算法。我們不會指望乙個連多項式地驗證乙個解都不行的問題存在乙個解決它的多項式級的演算法。

簡單的說,存在多項式時間的演算法的一類問題,稱之為p類問題;而像梵塔問題,推銷員旅行問題等問題,至今沒有找到多項式時間演算法解的一類問題,稱之為np問題。同時,p類問題是np問題的乙個子集。也就是說,能多項式時間地解決乙個問題,必然能多項式時間地驗證乙個問題的解。

np與p的關係

目前,人類還未解決的問題是:是否所有的np問題都是p類問題,即p = np ?。這就是註明的世界七大數學難題之首。雖然這個問題尚未解決,但是,乙個總的趨勢和大方向是人們普遍認為,p=np不成立,也就是說,多數人相信,存在至少乙個不可能有多項式級複雜度的演算法的np問題。

人們如此堅信p≠np是有原因的,就是在研究np問題的過程中找出了一類非常特殊的np問題叫做np-完全問題(non-deterministic polynomial complete problem),也即所謂的 npc問題。正是npc問題的存在,使人們相信p≠np。

約化為了說明npc問題,我們先引入乙個概念——約化(reducibility,有的資料上叫「歸約」(reduction)) 。

如果能找到這樣乙個變化法則,對任意乙個程式a的輸入,都能按這個法則變換成程式b的輸入,使兩程式的輸出相同.那麼我們說,問題a可約化為問題b,即可以用問題b的解法解決問題a,或者說,問題a可以「變成」問題b。 如:一元一次方程可以「歸約」為一元二次方程。

約化具有一項重要的性質:約化具有傳遞性。如果問題a可約化為問題b,問題b可約化為問題c,則問題a一定可約化為問題c。

問題a可約化為問題b」有乙個重要的直觀意義:b的時間複雜度高於或者等於a的時間複雜度。也就是說,問題a不比問題b難。

我們所說的「可約化」指的是可「多項式時間地」約化(polynomial-time reducible),即變換輸入的方法是能在多項式的時間裡完成的。約化的過程只有用多項式的時間完成才有意義。

npc問題

npc問題是指滿足下面兩個條件的問題:

(1)它是乙個np問題;

(2)所有的np問題都可以用多項式時間約化到它。

所以顯然np完全問題具有如下性質:它可以在多項式時間內求解,當且僅當所有的其他的np完全問題也可以在多項式時間內求解。這樣一來,只要我們找到乙個npc問題的多項式解,所有的np問題都可以多項式時間內約化成這個npc問題,再用多項式時間解決,這樣np就等於p了。

目前,npc問題還沒有找到乙個多項式時間演算法,因此我們就此可直觀地理解,npc問題目前沒有多項式時間複雜度的有效演算法,只能用指數級甚至階乘級複雜度的搜尋。

第乙個npc問題

邏輯電路問題是第乙個npc問題。邏輯電路問題指的是這樣乙個問題:給定乙個邏輯電路,問是否存在一種輸入使輸出為true。

邏輯電路問題屬於npc問題。這是有嚴格證明的。它顯然屬於np問題,並且可以直接證明所有的np問題都可以約化到它(不要以為np問題有無窮多個將給證明造成不可逾越的困難)。證明過程相當複雜,其大概意思是說任意乙個np問題的輸入和輸出都可以轉換成邏輯電路的輸入和輸出(想想計算機內部也不過是一些0和1的運算),因此對於乙個np問題來說,問題轉化成了求出滿足結果為true的乙個輸入(即乙個可行解)。

有了第乙個npc問題後,一大堆npc問題就出現了,因為再證明乙個新的npc問題只需要將乙個已知的npc問題約化到它就行了。後來,hamilton迴路成了npc問題,tsp問題(旅行商問題)也成了npc問題。現在被證明是npc問題的還有很多,任何乙個npc問題找到了多項式演算法的話所有的np問題都可以完美解決了。因此說,正是因為npc問題的存在,p=np變得難以置信。p=np問題還有許多有趣的東西,有待大家自己進一步的挖掘。

nph問題(np難問題,英文np-hard問題),其滿足npc問題定義的第二條但不一定要滿足第一條(就是說,np-hard問題要比 npc問題的範圍廣,但不一定是np問題)。

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

說明:

p問題屬於np問題,npc問題屬於np問題。

npc問題同時屬於np hard問題,是np與nphard的交集。

關於p類問題,np類問題和npc類的關係描述正確的是()

a. 所有的p問題不一定都是np問題

b. p問題和npc問題都完全包含在np問題內

c. np難問題一定是能夠找到多項式級的演算法

d. p問題和npc問題之間存在交集

正確答案:a、b

P NP NPC和NP hard問題的理解

1 p polynomial 問題 可以在以多項式表達的時間內按部就班的按照步驟求出確切解的問題,也就是說它的計算複雜度是乙個多項式。我們通常用的o n o logn o n2 等等類似的都是這類問題。2 np non deterministicpolynomial 問題 有些計算問題是確定性的,比...

P NP NPC與NP hard問題的定義

p問題 指的是能在多項式時間內解決的問題。np問題 指的是能在多項式時間內驗證的問題。在此,我們可以看出所有的p問題都屬於np問題,但是p是否等於np呢,至今還未得到驗證,即既證明不了p np,也證明不了p ne np。npc問題 np完全問題 是指np問題中最難的一類問題。證明乙個問題是否是npc...

對RESTful Web API的理解與設計思路

眾所周知,http有四個方法,get post put和delete,分別對應資料庫的select insert update和delete,一般的教程說到這裡也就over了,其實光是知道這個還不夠,還不足以把各種業務操作轉變為這四個方法。下面我給出一些設計思路,這是我自行實踐的總結,如有謬誤,請不...