NP-hard問題:比NPC更難,通常在多項式時間內無法驗證一個解的正確性。幾個複雜度的區別可以看NPC介紹。
常見證明
我們要證明一個問題A是NP-hard問題一般可以分爲兩步:
1) 對問題A給定限制條件得到一個特例B問題
2)證明問題B是NPC問題。
以下羅列四個較直觀簡單的例子:
- Dense Induced Subgraph
問題:給定圖,正整數和,是否存在個點的生成子圖包含最少條邊。
證明:令,那麼該問題變成Clique問題(NPC問題)
解釋:個點的完全子圖最多的邊包含,所以當,那麼原問題變成尋找個點的子圖且是完全圖,那麼就是Clique問題。
- Edge Packing
問題:給定圖,正整數和,圖是否存在條邊與最多個點相鄰。
證明:令,那麼該問題變成Clique問題(NPC問題)
解釋:個點的完全子圖最多的邊包含,那麼當,最少需要個點,此時原問題變成Clique問題。
- Hitting Rectangles
問題:平面上有一組長方形,一組點,和一個正整數,是否可以從中選擇個點,使得任意一個長方形上都有點。
證明:特例是點覆蓋。
解釋:繪製一個圖G,和是中的兩個點,和之間如果有邊,則表示一個長方形。那麼在這種情況下,需要覆蓋所有的邊,該問題就成了點覆蓋問題。
- Eulerian Subgraph
問題:給定圖,正整數,圖中是否存在Eulerian子圖恰好包含條邊。
證明:對於Cubic Graphs(所有點的度都等於3),令,那麼該問題就等價成哈密爾頓迴路問題,是NPC複雜度。
解釋:時,可以證明所有的點都只經過一次,因爲每個點的度數都不超過3,如果經過兩次,度數就爲4。