P問題 NP問題 NPC和NPhard問題

2021-10-23 21:22:26 字數 1632 閱讀 3738

p問題是指的存在多項式時間複雜度演算法去求解的問題,那麼什麼是多項式時間複雜度呢?

乙個多項式:

我們知道氣泡排序的時間複雜度是o(n^2),這就是乙個多項式時間複雜度的演算法。

p問題是指的存在多項式時間複雜度演算法去求解的問題,當然這都是對於計算機來說的。通常對於普通的問題,我們力求時間複雜度能控制在o(n^2)這樣類似的多項式時間複雜度內,若是乙個問題求解的時間複雜度比多項式時間複雜度還要大,那麼求解起來非常困難,例如時間複雜度是o(e ^ n),求解起來十分困難。

np問題是比較複雜的問題,我們不知道這個問題能否在多項式時間內求得最優解,但是可以在多項式時間內驗證乙個可能解的正確性。沒錯,所以求解np問題的演算法重要性是如何根據當前解以最快速度得到最優解。

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

既然是不知道,那麼到底有沒有呢?如果有那麼np問題就可以在多項式時間複雜度內解決,如果沒有,那麼。。。

這就是np=?p

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

對於np問題有的是有的存在,有的不存在多項式時間複雜度。

那麼怎麼證明的呢?

對於同一類的所有的np類問題,若他們都可以在多項式時間內約化成最難的乙個np類問題,當我們針對這個時間複雜度最高的超級np問題要是能找到他的多項式時間演算法的話,那就等於變向的證明了其下的所有問題都是存在多項式演算法的。

定義:

1、得是乙個np問題;2、所有的np問題都可以約化到它。

即他是某類np問題中最複雜的問題。

np-hard問題滿足npc問題定義的第二條但不一定要滿足第一條,即所有的np問題都能約化到它,但是他不一定是乙個np問題。

np-hard問題要比 npc問題的範圍廣,np-hard問題沒有限定屬於np.

其實類似於tsp,哈密爾頓哈密爾頓迴路就是np-hard問題。我們已經有了遺傳演算法、模擬退火等來優化這種問題的解,但是我們無法知道得到的解就是最優的。

證明該問題是np-hard問題:

我們要證明乙個問題是np-hard的時候,我們通常要做的是找到乙個已被證明了的npc問題,並把這個npc問題歸約到該問題上去(即npc<=np-hard)

下圖就是四種的關係:

參考:

P問題 NP問題和NPC問題

p就是能在多項式時間內解決的問題 np就是能在多項式時間驗證答案正確與否的問題。p是否等於np實質上就是在問,如果對於乙個問題我能在多項式時間內驗證其答案的正確性,那麼我是否能在多項式時間內解決它?再說說np hardness和np completenes.這裡涉及乙個概念,不妨稱為問題之間的歸約。...

P問題 NP問題 NPC問題和NPH問題

理解p問題需要了解的知識 多項式 時間複雜度。多項式 ax n bx n 1 c,就是在數學上經常見到的式子。時間複雜度 指執行演算法所需要的計算工作量,它定性描述該演算法的執行時間。時間複雜度常用大o表述,例如o n 2 代表其時間複雜度為n 2。p問題 存在多項式時間演算法的問題。p polyn...

NP問題和NPC問題

什麼叫做np問題,什麼叫做npc問題?首先說明一下問題的複雜性和演算法的複雜性的區別,下面只考慮時間複雜性。演算法的複雜性是指解決問題的乙個具體的演算法的執行時 間,這是演算法的性質 問題的複雜性是指這個問題本身的複雜程度,是問題的性質。比如對於排序問題,如果我們只能通過元素間的相互比較 來確定元素...