定義與理解
形式化定義
常用的定義是所謂的“關係定義式”。即對於一個語言L,L在NP中,那么存在多項式時間
圖靈機M,和多項式p使得:
NP的理解
理解NP有兩個角度:一個角度是作為確定性圖靈機的一個推廣,另一個角度是作為
多項式時間可驗證解的算法問題的集合。
NP困難問題和NP完全問題
要理解這幾個概念,首先要明白幾件事:
對於NP問題是否存在確定的多項式時間的解,還不清楚(即有可能有一天可以證明NP問題=P問題,但還證明不出來、也不能證明NP問題≠P問題,結論只是NP問題集⊇P問題集
問題之間可以規約,即如果某個NP問題存在確定的多項式時間解,那么另一個NP問題也存在確定的多項式時間解。這個過程是可以證明的、並且已經被證明。
例子
比如說,我們不知道81,785,036,517是否為
素數,但是要確定277,877是否為81,785,036,517因數,我們可以直接拿去除。針對277,877來驗證8,178,503,651是否為質數的動作可在多項式時間內完成,故針對某可能解來驗證某數是否為質數的問題是一個P問題。
再取一個例子,假如一件問題要處理的時間非常大,不是多項式時間內可以完成的,但是他可以透過無限的計算器去算,最終計算時間
複雜度只有O(n),那么它就是NP(非確定性多項式時間)問題。
所謂的非確定性是指,用極大的數量去解決來達成多項式時間解決的問題。還有一個典型的例子,就是輸出n個元素的全排列。即使是非確定機,也不能在多項式時間內解決,這是一個NP-hard問題。