P, NP, NP-Complete, NP-Hard

何謂難題?

  • 在解題的時候用電腦計算往往能大幅增加效率
  • 但有些題目就算用電腦計算也需要花非常久的時間
  • Ex: n-puzzle

Decision problem

  • 這一類型的問題只會有yes/no兩種答案
  • Ex:
    • 給一個數字陣列,某個數字是否在裡面
    • 給兩個數字x與y,x是否可以整除y
    • 給一個數字,判斷他是不是質數

Alan Mathison Turing

  • 計算機科學與人工智慧之父
  • 於1936年提出Turing Machine

deterministic finite automaton

可以解決世界上所有可計算的問題

P 問題

  • 滿足以下條件的問題
    1. 是Decision problem
    2. 可以被Turing Machine在Polynomial time解出來
O(N^{100}+99999999N+N \log N)
O(2^{N})

Not Polynomial time

Nondeterministic Turing machine

  • 未來正規語言課程會有更詳細的解釋
  • 可以先把他想成可以無限平行化的Turing machine

NP 問題

  • 滿足以下條件的問題
    1. 是Decision problem
    2. 可以被Nondeterministic Turing Machine在Polynomial time解出來
  • 注意NP的N不是Not的意思
  • Ex:
    1. 給一顆亂掉魔術方塊,問有沒有方法能把他轉回來
    2. n-puzzle
    3. 倒水問題

NP 問題

  • 另一種等價定義方式
    1. 是Decision problem
    2. 該問題的一組解可以可以被Turing Machine在Polynomial time驗證是否正確
  • ​Ex:
    • ​給一張地圖,是否存在一條路徑能走過圖上所有城市
    • 給一條路徑,判斷他是否走過圖上所有城市

Reduction(歸約)

問題A的input

問題B的input

問題B的output

用問題B的演算法解

Polynomial time轉換

問題A的output

Polynomial time轉換

A \le_p B

NP-hard

  • 比NP還要難的問題
  • 如果所有NP問題都可以在Polynomial time歸約到某個問題,則稱該問題為NP-hard
  • Ex:
    • 給一張地圖,請你找出一條最短且可以走過圖上所有城市的路徑

NP-complete

  • 一個問題,同時是NP-hard也是NP
  • Ex:
    1. SAT問題(第一個被發現是NP-complete)
    2. 給一堆數字,問你能不能從中選擇一些數字是其加起來等於0
    3. 給一張地圖,問你能不能找到一條路徑或是回路可以走過圖上所有的城市
    4. 背包問題

P = NP?

解出來可以拿圖靈獎+100w美金

停機問題(halting problem)

  • 給一台圖靈機T和他的Input P
  • 請判斷這台圖靈機會不會進入無限迴圈

構造反例

bool H(T, P); //如果會停機就return true
bool GG(P){
    if ( H(P,P)==false ){
        return 0;
    }
    while(true);
}

H(GG, GG); //會發生什麼事呢?

NP

By jacky860226

NP

  • 242