如果乙個問題能找到在多項式時間內解決它的演算法,那麼我們說該問題是p類問題。p是多項式(polynomial)的第乙個字母。比如排序問題就是乙個p問題,因為我們可以找到乙個時間複雜度為o(n
2)'>o(n2)
o(n2)的氣泡排序演算法。
一些問題我們很難在多項式時間內找到解決問題的演算法, 但是如果別人給了我乙個解,我可以很快地驗證該解是不是問題的正確答案。比如在漢密爾頓迴路問題中,我想驗證一條路徑是否正確,則驗證路徑是否正確的時間複雜度為o(n
)'>o(n)
o(n),為多項式級的時間複雜度。o(
n)'>也就是說直接找np問題的乙個解可能很慢,當驗證np問題的解卻很快。o(
n)'>所有p問題都是np問題,因為能在多項式時間內解決的問題也能夠在多項式時間內驗證解的正確性。o(
n)'>是否所有的np問題都是p問題,這就是著名的「p對np問題(p=np?)」。在2023年美國的clay數學研究所公布的七個千年數學難題中,p對np問題位居榜首,可見解決該問題的難度。由於直接證明p對np問題過於複雜,人們引入了另一類問題--npc問題(np -complete,np-完全問題)。o(
n)'>假設有兩個問題a和b,對問題a的輸入a經過某種規則轉換為對問題b的輸入b,而a(a)和b(b)的結果相同,也就是說我們可以將求解a問題轉換為求解b問題,或者說可以用解決問題b的方法解決問題a,那我們稱a可以歸約(reducibility,或「約化」)到b。o(
n)'>是否可以將若干相對不那麼複雜np問題不斷歸約,從而得到乙個最難的「超級np問題」,所有的np問題都可以歸約到這個「超級np問題」,只要解決了這個「超級np問題」,那麼也就意味著所有np問題都可以被解決。事實上,存在這樣的一類「超級np問題」,這也就是我們所說的npc問題。o(
n)'>npc問題的定義如下:如果乙個問題q,它滿足以下兩條性質:
(1). q是np問題
(2). 任一np問題都可在多項式時間內歸約到問題q
那麼我們說問題q是npc問題。o(
n)'>如果我們給npc問題找到了乙個多項式時間複雜度的演算法,那麼也就意味著我們給所有的np問題找到了多項式時間複雜度的演算法,從而np=p,因為p=np,所以「p對np問題」就可以被解決。比如揹包問題是npc問題,如果我們給揹包問題找到了乙個多項式時間複雜度的演算法,那麼就證明了p=np,但給npc問題找乙個多項式時間複雜度的演算法太難了,所以現在人們普遍相信p≠np。o(
n)'>
上面我們介紹了npc問題需要滿足兩條性質,當乙個問題僅滿足性質(2),而不滿足性質(1)時,我們說該問題時nph問題(np-hard,np-難問題)。
面試 什麼是P NP NPC NPH問題
p 乙個問題可以在多項式 o n k 的時間複雜度內解決 計算機比較容易算出答案的問題.np 問題的解可以在多項式的時間內被驗證 已知答案以後計算機可以比較容易地驗證答案的問題。nph 任意np問題都可以在多項式時間內歸約為該問題,但該問題本身不一定是np問題 給出乙個答案,計算機可能驗證也可能驗證...
Mark問題 URI 和 URL的區別
uri 是統一資源識別符號,而 url 是統一資源定位符。因此,籠統地說,每個 url 都是 uri,但不一定每個 uri 都是 url。這是因為 uri 還包括乙個子類,即統一資源名稱 urn 它命名資源但不指定如何定位資源 uri可以分為url,urn或同時具備locators 和names特性...
mysql的 和 的區別 和 的區別
他們之間的區別用最直接的話來說就是 相當於對資料 加上 雙引號,相當於直接顯示資料。1 對傳入的引數視為字串,也就是它會預編譯select from user where name 比如我傳乙個csdn,那麼傳過來就是select from user where name csdn 2 將不會將傳入...