當我們遇到乙個問題時,我們總是很自然的開始恩考求解這個問題的演算法.我們大多數人都沒有注意到問題本身的可解性.其實很多問題很難想出一種有效演算法的,當然,遍歷演算法除外.如果我們有一台超強的計算機,那麼一切演算法都是沒有意義的,因為一切問題都可以用遍歷來解.
演算法的效率其實正是體現在問題的大規模輸入上,所以,我們在比較演算法的好壞時,通常考慮它在大規模輸入時的執行時間,占用空間等.p與np問題正是源自演算法執行的效率.
我想絕大多數學計算機的人都聽過p與np問題,但我覺得,真正能說出它是怎麼回事的,不在多數.至少在我仔細看資料之前,我是說不出p與np問題到底是怎麼回事,以及怎麼證明乙個問題是np或np完全的.所以,我想寫一些自己對p與np問題的理解.
在介紹p與np之前,我想先介紹兩個概念.
1.確定性演算法
設a是求解問題b的乙個演算法,如果在展示問題b的乙個例項時,在整個執行過程中每一步都只有乙個選擇,則稱a是確定性演算法.因此如果對於同樣的輸入,例項一遍又一遍地執行,它的輸出從不改變.
通常我們在寫程式時,用到的都是一些確定性演算法,比如說排序演算法,最優化演算法等.
2.不確定性演算法
乙個不確定性演算法由下列兩個階段組成.
猜測階段:在這個階段產生乙個任意字任串y,它可能對應於輸入例項的乙個解,也可以不對應解.事實上,它甚至可能不是所求解的合適形式,它可能在不確定性演算法的不同次執行中不同.它僅僅要求在多項式步數內產生這個串.
驗證階段:在這個階段,乙個確定性算全證兩件事.首先,它檢查產生的解串y是否有合適的形式,如果不是,則演算法停下並回答no;另一方面,如果y是合適形式,那麼演算法繼續檢查它是否是問題例項x的解,如果它確實是例項x的解,那麼它停下並且回答yes,否則它停下並回答no.我們也要求這個階段在多項式步數內完成.
可能很多人會認為隨機演算法是一種不確定性演算法.其實隨機演算法也是一種確定性演算法,因為它的隨機性也是通過在輸入中加入乙個用於產生隨機值的串實現的,同樣的串得到的隨機值相同.
下面給出p與np的定義:
p是乙個判定問題類,這些問題可以用乙個確定性演算法在多項式時間內判定或解出;
np是乙個判定問題類,這些問題可以用乙個確定演算法在多項式時間內檢查或驗證出它們的解;
p事實上很直觀,我們通常在程式設計中求解的問題大多都是p類問題.比如說排序,找最短路徑等.np這
個類事實上也很有趣,它並不要求給出乙個演算法來求解問題本身,而只是要求給出乙個確定性演算法在多項式時間內驗證它的解.
np完全問題
np完全事實上表求np中判定問題的乙個子類.這類問題也是很有趣的,即如果它們中的乙個被證明
是多項式時間內確定性演算法可解,那麼所有屬於這一類的其它問題也是多項式時間內確定性演算法可解.
多項式時間歸約:
設a和b是兩個判定問題.如果存在乙個確定性演算法c,它的行為如下:當給c展示問題a的乙個例項時,演算法a可以把這個例項變換成問題b的乙個例項,使得a的例項跟b的例項有相同的yes/no應答,並且這個變換在多項式時間內完成.那麼我們說a多項式時間歸約到b.
事實上,我們可以將多項式時間歸約看做是乙個函式的對映,即f(a)=b.並且這個f是多項式時間內可計算的.也就是說問題a實現上可以通過它自身滿足的條件,通過一些形式上的改變而變換到問題b.形象地講,問題a事實上不比b難,而問題b也同樣不比問題a難.
np困難與np完全
乙個判定問題a稱為是np困難的,如果對於np中的每個問題b,b多項式時間歸約到a.
乙個判定問題a稱為是np完全的,如果對於np中的每個問題b,b多項式時間歸約到a,並且a在np類中.
np完全問題的證明:
要證明乙個判定問題是np完全的,只要在np完全類中找到乙個問題a,將這個問題歸約到待證明問題即可.要證明問題是np完全是很困難的,因為很多問題之間的轉化過程是很難想到的.第乙個被證明的np完全問題是可滿足性問題,它是判定乙個合取正規化的布林公式f是否存在真值指派的問題.在很多np完全問題的證明中,我們都可以用這個問題來歸約,這裡不再詳述.
P問題 NP問題 NPC問題 NP難問題的概念
你會經常看到網上出現 這怎麼做,這不是np問題嗎 這個只有搜了,這已經被證明是np問題了 之類的話。你要知道,大多數人此時所說的np問題其實都是指的npc問題。他們沒有搞清楚np問題和npc問題的概念。np問題並不是那種 只有搜才行 的問題,npc問題才是。好,行了,基本上這個誤解已經被澄清了。下面...
P 問題和 NP 問題
p就是能在多項式時間內解決的問題,np就是能在多項式時間驗證答案正確與否的問題。用大白話講大概就是這樣。所以p是否等於np實質上就是在問,如果對於乙個問題我能在多項式時間內驗證其答案的正確性,那麼我是否能在多項式時間內解決它?這個表述不太嚴謹,但通俗來講就是如此。再說說np hardness和np ...
P問題 NP問題 NP完全問題和NP難問題
在講p類問題之前先介紹兩個個概念 多項式,時間複雜度。知道這兩概念的可以自動跳過這部分 1 多項式 axn bxn 1 c 恩.就是長這個樣子的,叫x最高次為n的多項式.咳咳,別嫌我囉嗦。有些人說不定還真忘了啥是多項式了。例如第一次看到的鄙人 2 時間複雜度 我們知道在計算機演算法求解問題當中,經常...