- 如果一個問題存在一個能在多項式的時間里解決它的算法,那么這個問題就屬於P問題,如冒泡排序。
- NP問題不是非P類問題,是指可以在多項式的時間里驗證一個解是否正確的問題。
- P問題存在多項式時間的算法來找到問題答案,因此肯定可以在多項式時間內驗證一個解是否正確,所以P問題集合肯定是NP問題集合子集。
- 但是,是不是所有NP問題都存在能在多項式時間內尋找到答案的算法呢?也就是NP是不是包含於P,繼而NP=P呢?如,漢密爾頓回路,目前而言,能在多項式時間內驗證一個解是否正確,但是,目前尚未發現能在多項式時間內找到回路的算法。所以,該問題目前來講是個NP問題,尚未進入P問題的行列。未來,能否找到該問題的多項式時間算法,尚不可知。
- NPC問題的出現,使得很多研究者認為NP!=P。
- 約化:如果一個問題p1能夠將其“放大”成為一個更為一般的問題p2,則如果找到了p2的解法,則p1可解。比如如果知道一元二次方程的解法,一元一次方程解法也就有了,因為只要把一元二次方程二次項的系數設置為0,就是一元一次方程的解法了。這個從“小”到“大”,從“特例”到“一般”的過程就是約化。顯然,大問題時間復雜度肯定比小問題時間復雜度高。
- 實際上,是能夠找到通吃若干小NP問題的大NP問題的,甚至是通吃所有NP問題的超級NP問題,這些超級NP問題就是NPC問題,NPC問題數量很多。找到一個NPC問題的多項式時間解法,則所有NP問題就都找到了多項式時間解法。
- NPC問題的定義:一、它是一個NP問題;二、“所有”NP問題都可以約化到它。
- NPC問題的證明:第一步,證明其是一個NP問題;第二步,證明一個“已知的NPC問題”能夠約化到它。邏輯電路問題是一個已證明的NPC問題(給定一個邏輯電路,問是否存在一種輸入使輸出為True,這即邏輯電路問題),隨后就衍生了一大堆NPC問題。
- NP-hard問題:滿足NPC問題定義的第二條,但不滿足第一條。即使NPC問題發現了多項式級的算法,NP-Hard問題有可能仍然無法得到多項式級的算法。事實上,由於NP-Hard放寬了限定條件,它將有可能比所有的NPC問題的時間復雜度更高從而更難以解決。