科普P-NP

大多數決策問題是不能用程序解決的

決策問題:對於輸入的問題,它的回答要麼是YES要麼是NO算法

  • 計算機程序:計算機程序的集合是可數的。集合形如
\epsilon,0,1,00,01,10...

想一想程序都是"人"一個一個寫下來的,他們存在硬盤上實際也是一系列的0 1 組合,也就是說它是一個可數的數。這裏須要去掉錯誤的程序,錯誤的程序自己是沒法解決問題的。數組

\epsilon表示空串函數

  • 決策問題:決策函數的集合是不可數的。

每個決策問題能夠看作是一個輸入是有限的字符串,輸出是0 1的函數。全部的這些函數組成的集合假設他是可數的spa

f(\epsilon),f(0),f(1),f(00),f(01),f(10)...

全部集合的元素爲 \alpha_1,\alpha_2,\alpha_3...\alpha_i,這樣的構造是能夠無限進行下去。定義一個新的無限長的字串:\delta=\delta_1\delta_2\delta_3..,其中.net

\delta_i=\lbrace^{0\space 若是(\alpha_i)_i=1 }_{1\space 若是(\alpha_i)_i=0}

其中(\alpha_i)表示原集合中的一個結果,(\alpha_i)_i表示(\alpha_i)的第i個比特。這樣獲得的\delta_i確定和\alpha_i不同,也就是說它不在集合裏頭,那麼意味着包含全部無限字符串的集合自己是不可數的。3d

不可數的集合原數確定是比可數的集合要大,這就意味着大多數的決策問題是沒法用程序解決的。cdn

證實出處,見第3小節blog

不可用程序解決的一個問題示例

好比最後一個進來的人把門關上,實際上每一個進來的人都不知道本身是否是最後一我的,由於未來任什麼時候候都有可能有人進來,這種狀況,實際上就沒法用程序的方式寫下來。若是你知道一共有多少我的,那麼是明白本身是不是最後一個進來的人,但關鍵是你不知道一共有多少我的,因此你只能讓這個程序一直跑下去,可是跑不出結果字符串

科普P和NP

  • P: 多項式時間內可以解決的問題
  • EXP: 指數時間內可以解決的問題
  • R: 可以在有限時間內解決的問題,R指recursive

halt problem,運行一段代碼,它會中止嗎?它在有限的時間內可以解決,只要一直運行這個程序就知道get

  • NP: nondeterministic polynomial。它的答案能在多項式時間內驗證。它經過某種「運氣成分」的算法來在多項式時間內解決決策問題。

驗證是指若是決策問題的答案是YES,可以證實它是正確的,而且證實的驗證所花的時間在多項式時間以內。

所謂的運氣就是說只須要一次嘗試就找到了解決問題的方法。

nondeterministic model指算法自己來猜想,最終獲得一個YES或者NO的回答,獲得的猜想自己若是問題自己是YES,那麼它的回答必定是YES

NP先關的一些概念

P!=NP: 證實問題要比驗證問題要難

去證實一個問題須要不少的「靈光」一現,而驗證問題只要描述的夠精確,按照特定的步驟去執行,保證上下連貫,基本是沒有問題。這裏的「靈光」也就是說的「運氣」

對於P的問題能夠在任何計算機上面作實現,可是NP須要機器可以神奇的知道那種方法可以得到正確的解答。而這種機器可以神奇的知道正確答案的是不存在的。也就是說不存在"工程上的幸運"

從集合上來講就是存在這樣的問題,它屬於NP,可是不屬於P

NP-hard: 起碼和在NP裏頭的問題同樣的難
NP-complete: NP\bigcap NP-hard

好比 俄羅斯方塊問題

NP-complete問題之間均可以互相轉化(reduce)

問題轉換(Reduction)

轉換一個問題A到一個問題B,這樣表示B起碼和A同樣難

好比把沒有權重的最短路徑問題,轉換成有權重的最短路徑問題

相關文章
相關標籤/搜索