NP 問題
定義:
可以在多項式時間裏驗證一個解的問題。
延伸:
問題屬於 問題,但 問題是否等於 問題,目前仍然是一個世界難題。所以請注意 問題絕不是指在多項式時間內找不到解的問題,切勿混淆概念。
P 問題
定義:
可以在多項式時間裏解決的問題。
延伸:
通常來說, 問題在生活中更有意義。因爲可以在多項式時間裏解決就意味着問題複雜度不會隨着數據規模的擴大而指數爆炸,在生活中更容易被解決。
補充一句,所有的 問題都是 問題。
約化(Reducibility)
要引出 問題,就必須提到約化。
定義:
問題可以約化成 問題,代表可以用 問題的解法解決 問題。
舉例:
“求解一元一次方程” 問題可以約化成 “求解一元二次方程” 問題,只需要令 “求解一元二次方程” 問題中二次項係數爲 即可解決 “求解一元一次方程” 問題。
因此可以發現,約化的過程是難度升級的過程。問題 可約化成問題 ,代表 問題的時間複雜度高於或者等於 問題的時間複雜度,即 問題不比 問題難。因此一個問題約化成另一個問題,時間複雜度增加了,問題的應用範圍也擴大了。
繼續思考還可以發現約化具有傳遞性。如果 問題可以約化成 問題, 問題可以約化成 問題,則 問題一定可以約化成 問題。而且如果 問題可以解決,那麼 、 問題均可被解決。
NPC 問題
問題即 問題、 完全問題。
定義:
問題即爲所有 問題可以約化到的一個問題,是所有 問題中最複雜的問題。
NPC 問題滿足條件:
- 該問題是一個 問題。
- 該問題可以由一個已知的 問題約化到它。
第一個 NPC 問題:
第一個 問題是邏輯電路問題,即 “給定一個邏輯電路,是否存在一種輸入使輸出爲 ”。
該問題屬於 問題的證明十分複雜,如果感興趣可以自行查閱相關資料。引用一篇文章中對於其證明過程的大致表述,本文的內容也主要參考該篇文章。
邏輯電路問題屬於 問題的證明過程相當複雜,其大概意思是說任意一個 問題的輸入和輸出都可以轉換成邏輯電路的輸入和輸出(想想計算機內部也不過是一些 和 的運算),因此對於一個 問題來說,問題轉化爲了求出滿足結果爲 的一個輸入(即一個可行解)。
常見的旅行商問題、 迴路問題也都屬於 問題。
NP-hard 問題
問題即滿足 問題的第二個條件但不一定滿足第一個條件,因此 問題要比 問題範圍廣, 問題不一定是 問題。
即使 問題發現了多項式時間內的算法, 問題可能仍然無法在多項式時間內解決,甚至 問題有可能比所有的 問題的時間複雜度更高且更難解決。
後記
本文只能算是簡單的介紹了一些 、、、 這幾個概念,感興趣的讀者可以繼續查閱相關知識體會該 這一世界難題的魅力。
願 早日得以解決,我們可以早日攀登上這計算機科學的頂峯。💪💪💪