左圖在假設P≠NP的情況下有效,右圖在假設P=NP的情況下有效
在假定P≠NP的情況下, 有
NP問題:可以在多項式時間內被驗證的問題。或者說,可以在非確定性多項式時間內被解決的問題。
即可以在非確定型圖靈機上在多項式時間內找出解的問題。NP問題可以在多項式時間內被驗證,但是不確定是否可以在多項式時間內找出解。
P問題:可以在多項式時間內被解決的問題。
即可以在確定性圖靈機上在多項式時間內找出解的問題。如果一個問題是P問題,那么毫無疑問我們可以在多項式時間內驗證它。
NP-Hard問題:如果可以證明某問題有一個子問題是NP-Hard問題,那么該問題是一個NP-Hard問題。
即已知一個NPC問題L',如果我們可以把L'歸約為L,則L是NP-Hard。通俗的講,已經有一個很難的問題L',而L問題比L'更難解決,那么該問題就是NP-Hard問題。NP-Hard問題不確定是否可以在多項式時間內被驗證。
NP-Complete問題:如果一個問題已經被證明是一個NP-Hard問題,并且可以證明該問題是一個NP問題,那么該問題是NPC問題。
即已知一個NPC問題L',如果我們可以把L'歸約為L,且L可以在多項式時間內被驗證,那么L是一個NPC問題。
其中,P, NP, NP-Hard, NP-Complete是不同的復雜性類,用于將所有的算法問題進行分類,以確定當前算法的難度。
多項式時間可解的問題:如果對于某個確定的常數k,存在一個能在O(nk)時間內求解出某具體問題的算法,就說該具體問題是一個多項式時間可解問題。
多項式時間內可被驗證的問題:是一個判定問題,答案只有是或否。例如,存在某具體問題,我們猜想該問題有一個可行解x,如果對于某個確定的常數k,存在一個能在O(nk)時間內驗證x是否是該具體問題可行解的算法,就說該具體問題是一個多項式時間可被驗證的問題。
一般來說,大家往往將多項式時間內可解的問題稱作易處理的問題,將超多項式時間內解決的問題稱作不易處理的問題。
NPC問題的鼻祖SAT問題:著名的古克-李芬定理(由Leonid Levin與Cook獨立證出SAT問題是NPC問題,簡化過但依舊艱深的證明在此)。
References:
維基百科:P/NP問題
維基百科:NP-Complete
維基百科:NP-hardness
維基百科:計算復雜性理論
《算法導論》第3版 第34章
tips: 上下標的markdown語法
上標: <sup>上標內容</sup>
下標: <sub>下標內容</sub>