P類問題:所有可以在多項(xiàng)式時(shí)間內(nèi)求解的判定問題構(gòu)成P類問題。判定問題:判斷是否有一種能夠解決某一類問題的能行算法的研究課題。
NP類問題:所有的非確定性多項(xiàng)式時(shí)間可解的判定問題構(gòu)成NP類問題。非確定性算法:非確定性算法將問題分解成猜測(cè)和驗(yàn)證兩個(gè)階段。算法的猜測(cè)階段是非確定性的,算法的驗(yàn)證階段是確定性的,它驗(yàn)證猜測(cè)階段給出解的正確性。設(shè)算法A是解一個(gè)判定問題Q的非確定性算法,如果A的驗(yàn)證階段能在多項(xiàng)式時(shí)間內(nèi)完成,則稱A是一個(gè)多項(xiàng)式時(shí)間非確定性算法。有些計(jì)算問題是確定性的,例如加減乘除,只要按照公式推導(dǎo),按部就班一步步來,就可以得到結(jié)果。但是,有些問題是無法按部就班直接地計(jì)算出來。比如,找大質(zhì)數(shù)的問題。有沒有一個(gè)公式能推出下一個(gè)質(zhì)數(shù)是多少呢?這種問題的答案,是無法直接計(jì)算得到的,只能通過間接的“猜算”來得到結(jié)果。這也就是非確定性問題。而這些問題的通常有個(gè)算法,它不能直接告訴你答案是什么,但可以告訴你,某個(gè)可能的結(jié)果是正確的答案還是錯(cuò)誤的。這個(gè)可以告訴你“猜算”的答案正確與否的算法,假如可以在多項(xiàng)式(polynomial)時(shí)間內(nèi)算出來,就叫做多項(xiàng)式非確定性問題。
NPC問題:NP中的某些問題的復(fù)雜性與整個(gè)類的復(fù)雜性相關(guān)聯(lián).這些問題中任何一個(gè)如果存在多項(xiàng)式時(shí)間的算法,那么所有NP問題都是多項(xiàng)式時(shí)間可解的.這些問題被稱為NP-完全問題(NPC問題)。
在一個(gè)周六的晚上,你參加了一個(gè)盛大的晚會(huì)。由于感到局促不安,你想知道這一大廳中是否有你已經(jīng)認(rèn)識(shí)的人。你的主人向你提議說,你一定認(rèn)識(shí)那位正在甜點(diǎn)盤附近角落的女士羅絲。不費(fèi)一秒鐘,你就能向那里掃視,并且發(fā)現(xiàn)你的主人是正確的。然而,如果沒有這樣的暗示,你就必須環(huán)顧整個(gè)大廳,一個(gè)個(gè)地審視每一個(gè)人,看是否有你認(rèn)識(shí)的人。
生成問題的一個(gè)解通常比驗(yàn)證一個(gè)給定的解時(shí)間花費(fèi)要多得多。這是這種一般現(xiàn)象的一個(gè)例子。與此類似的是,如果某人告訴你,數(shù)13,717,421可以寫成兩個(gè)較小的數(shù)的乘積,你可能不知道是否應(yīng)該相信他,但是如果他告訴你他可以因式分解為3607乘上3803,那么你就可以用一個(gè)袖珍計(jì)算器容易驗(yàn)證這是對(duì)的。人們發(fā)現(xiàn),所有的完全多項(xiàng)式非確定性問題,都可以轉(zhuǎn)換為一類叫做滿足性問題的邏輯運(yùn)算問題。既然這類問題的所有可能答案,都可以在多項(xiàng)式時(shí)間內(nèi)計(jì)算,人們于是就猜想,是否這類問題,存在一個(gè)確定性算法,可以在多項(xiàng)式時(shí)間內(nèi),直接算出或是搜尋出正確的答案呢?這就是著名的NP=P?的猜想。 不管我們編寫程序是否靈巧,判定一個(gè)答案是可以很快利用內(nèi)部知識(shí)來驗(yàn)證,還是沒有這樣的提示而需要花費(fèi)大量時(shí)間來求解,被看作邏輯和計(jì)算機(jī)科學(xué)中突出的問題之一。它是斯蒂文·考克于1971年陳述的。