演算法運算的結果都是唯一確定的, 這樣的演算法叫做確定的演算法(deterministic algorithm) 。如加減乘除
允許演算法每種運算的結果不是唯一確定的, 而是受限於某個特定的可能性集合。執行這些運算的機器可以根據終止條件選擇可能性集合中的乙個作為結果。這就引出了所謂不確定的演算法
( nondeterministic algorithm)。如求下乙個大質數
式執行不確定演算法的機器稱為不確定機(nondeterministic machine ) 。然而, 這裡所定義的不確定機實際上是不存在的, 因此通過直覺可以感到這類問題不可能用「快速的」確定演算法求解。
p 是所有可在多項式時間內用確定演算法求解的判定問題的集合。
np是所有可在多項式時間內用不確定演算法求解的判定問題的集合。
有些問題很難找到多項式時間的演算法(或許根本不存在),例如「找出無向圖中
哈密頓迴路
」問題。但如果給了該問題的乙個答案,可以在多項式時間內判斷這個答案是否正確。例如說對於哈密頓迴路問題,給乙個任意的迴路,很容易判斷它是否是哈密頓迴路(只要看是不是所有的頂點都在迴路中就可以了)。這裡給出np問題的另乙個定義,這種可以在多項式時間內驗證乙個解是否正確的問題稱為np問題,亦稱為驗證問題類(布林判斷問題)。
令 l1 和l2 是兩個問題, 如果有一確定的多項式時間演算法求解l1 , 而這個演算法使用了乙個在多項式時間內求解l2 的確定演算法, 則稱l1 約化為l2 ( 也可以寫作l1 ∝l2 )。
如果可滿足性約化為乙個問題l,則稱此問題l是np-難度的。如果l是np難度的且l∈np, 則稱問題l是np-完全的。
一切np-完全的問題都是np-難度的問題, 但一切np-難度的問題並不都是np-完全的。
所有的np問題都可以用多項式時間劃歸到他們中的乙個.所以顯然np完全的問題具有如下性質:它可以在
多項式時間
內求解,當且僅當所有的其他的np-完全問題也可以在多項式時間內求解。這樣一來,只要我們找到乙個
npc問題
的多項式解,所有的np問題都可以多項式時間內劃歸成這個npc問題,再用多項式時間解決,這樣np就等於p了. 假如有朝一日某個np-難度的問題可以被乙個多項式時間的演算法求解, 那麼所有的np-完全問題就都可以在多項式時間內求解。
用來證明乙個問題l2 具有np-難度的策略如下:
(1 ) 挑選乙個已知其具有np-難度的問題l1 。
(2 ) 證明如何從l1 的任一例項i (在多項式確定時間內) 獲得l2 的乙個例項i′, 使得從i′的解能( 在多項式確定時間內) 確定l1 例項i 的解。
(3 ) 從( 2) 得出結論l1 ∝l2 。
(4 ) 由( 1) , ( 3) 及∝的傳遞性得出結論l2 是np-難度的。
電腦科學還沒解決的乙個著名問題是不知是否有p = np 或者p≠np。
是說p問題是否等於np問題,也即是否所有在非確定機上多項式可解的問題都能在確定機上用多項式時間求解.
可滿足性在p中當且僅當p=np
演算法中的P問題 NP問題 NP完全問題和NP難問題
在討論演算法的時候,常常會說到這個問題的求解是個p類問題,或者是np難問題等等,於是我特地搜了這方面的資料,自己總結了下,估計研究演算法的大家應該都知道,要是我總結的 不對,歡迎一起 在講p類問題之前先介紹兩個個概念 多項式,時間複雜度。知道這兩概念的可以自動跳過這部分 1 多項式 axn bxn ...
演算法中的P問題 NP問題 NP完全問題和NP難問題
在討論演算法的時候,常常會說到這個問題的求解是個p類問題,或者是np難問題等等,於是我特地搜了這方面的資料,自己總結了下,估計研究演算法的大家應該都知道,要是我總結的 不對,歡迎一起 在講p類問題之前先介紹兩個個概念 多項式,時間複雜度。知道這兩概念的可以自動跳過這部分 1 多項式 axn bxn ...
P問題 NP問題 NP完全問題和NP難問題
在講p類問題之前先介紹兩個個概念 多項式,時間複雜度。知道這兩概念的可以自動跳過這部分 1 多項式 axn bxn 1 c 恩.就是長這個樣子的,叫x最高次為n的多項式.咳咳,別嫌我囉嗦。有些人說不定還真忘了啥是多項式了。例如第一次看到的鄙人 2 時間複雜度 我們知道在計算機演算法求解問題當中,經常...