決策問題:對於輸入的問題,它的回答要麼是YES要麼是NO算法
想一想程序都是"人"一個一個寫下來的,他們存在硬盤上實際也是一系列的0 1 組合,也就是說它是一個可數的數。這裏須要去掉錯誤的程序,錯誤的程序自己是沒法解決問題的。數組
表示空串函數
每個決策問題能夠看作是一個輸入是有限的字符串,輸出是0 1的函數。全部的這些函數組成的集合假設他是可數的spa
![]()
全部集合的元素爲
,
,
...
,這樣的構造是能夠無限進行下去。定義一個新的無限長的字串:
,其中.net
![]()
其中
表示原集合中的一個結果,
表示
的第i個比特。這樣獲得的
確定和
不同,也就是說它不在集合裏頭,那麼意味着包含全部無限字符串的集合自己是不可數的。3d
不可數的集合原數確定是比可數的集合要大,這就意味着大多數的決策問題是沒法用程序解決的。cdn
證實出處,見第3小節blog
好比最後一個進來的人把門關上,實際上每一個進來的人都不知道本身是否是最後一我的,由於未來任什麼時候候都有可能有人進來,這種狀況,實際上就沒法用程序的方式寫下來。若是你知道一共有多少我的,那麼是明白本身是不是最後一個進來的人,但關鍵是你不知道一共有多少我的,因此你只能讓這個程序一直跑下去,可是跑不出結果字符串
halt problem,運行一段代碼,它會中止嗎?它在有限的時間內可以解決,只要一直運行這個程序就知道get
驗證是指若是決策問題的答案是YES,可以證實它是正確的,而且證實的驗證所花的時間在多項式時間以內。
所謂的運氣就是說只須要一次嘗試就找到了解決問題的方法。
nondeterministic model指算法自己來猜想,最終獲得一個YES或者NO的回答,獲得的猜想自己若是問題自己是YES,那麼它的回答必定是YES
P!=NP: 證實問題要比驗證問題要難
去證實一個問題須要不少的「靈光」一現,而驗證問題只要描述的夠精確,按照特定的步驟去執行,保證上下連貫,基本是沒有問題。這裏的「靈光」也就是說的「運氣」
對於P的問題能夠在任何計算機上面作實現,可是NP須要機器可以神奇的知道那種方法可以得到正確的解答。而這種機器可以神奇的知道正確答案的是不存在的。也就是說不存在"工程上的幸運"
從集合上來講就是存在這樣的問題,它屬於NP,可是不屬於P
NP-hard: 起碼和在NP裏頭的問題同樣的難
NP-complete:
好比 俄羅斯方塊問題
NP-complete問題之間均可以互相轉化(reduce)
轉換一個問題A到一個問題B,這樣表示B起碼和A同樣難
好比把沒有權重的最短路徑問題,轉換成有權重的最短路徑問題