P類問題: 即可以找到多項式級別的算法來解決它。
NP類問題: 不能找到多項式級別或者不知道能否找到多項式級別的算法來解決它,但是可以對其一個問題的解在多項
式時間內進行驗證,此類問題稱爲NP類問題。顯然,P類問題屬於NP類問題,但兩者是否相等,即P=NP?是尚未解
決的難題。
NPC類問題:即NP-complete問題,此類問題包含兩個條件。(1)首先它是一個NP問題;(2)所有的NP問題均可以歸化
爲這個問題。證明過程應該先證明此類問題是一個NP問題,然後其中一個已知的NPC問題都可以歸化爲它即可。對
於第二步,主要是利用的歸化的傳遞性,一個已知的NPC問題,肯定是由所有的NP問題可以歸化而來的,若這個已
知的NPC問題可以歸化爲另一個問題,那麼這個問題一定也是NPC問題。
既然所有的NP問題都能歸化爲NPC問題,那麼只要任意一個NPC問題找到了一個多項式的算法,那麼所有的NP
問題都能用這個算法解決了(可根據歸化的定義得到)。但是,給NPC問題找到一個多項式算法幾乎不可能,所以“正是
NPC問題的存在,使多數人相信P≠NP”。NPC問題只能用指數級甚至階乘級複雜度搜索。
NP-hard問題: 它滿足NPC問題定義的第二條但是不滿足第一條,即NP-hard問題要比NPC問題的範圍廣。NP-hard問
題同樣難以找到多項式級的算法,且它不一定是NP問題。即使NPC問題發現了多項式級的算法,NP-hard問題可能仍
然無法得到多項式級的算法。
歸化(Reducibility)的概念:如果能找到一個變化規則,對任意一個程序A的輸入,都能按這個法則變化成程序B的輸
入,且兩程序的輸出相同。那麼可以說問題A可歸化(或者說“約化”)爲問題B。歸化具有傳遞性:若問題A可歸化爲問題
B,問題B可歸化爲問題C,則問題A可歸化爲問題C。
另外,歸化的一個重要的意義是:歸化問題的時間複雜度往往不低於被歸化問題的時間複雜度。即對於上述描述,有O(A)≤O(B)≤O(C)。