跳转到内容

P/NP问题:修订间差异

维基百科,自由的百科全书
删除的内容 添加的内容
Pioneerlike留言 | 贡献
P 和NP:​ 較精確的語言描述
恢复到SDiZ的最后一次编辑
第1行: 第1行:
{{千禧年難題}}
{{千禧年难题}}


<!--Das P/NP-Problem ist ein offenes Problem der theoretischen Informatik, speziell der Komplexitätstheorie und wurde vom Clay Mathematics Institute in die Liste der Millennium-Probleme aufgenommen. Es beinhaltet die Beziehung zwischen den Komplexitätsklassen P und NP. 1971 stellten Stephen Cook und Leonid Levin unabhängig voneinander erstmals die Frage, ob diese beiden Komplexitätsklassen identisch sind-->
<!--Das P/NP-Problem ist ein offenes Problem der theoretischen Informatik, speziell der Komplexitätstheorie und wurde vom Clay Mathematics Institute in die Liste der Millennium-Probleme aufgenommen. Es beinhaltet die Beziehung zwischen den Komplexitätsklassen P und NP. 1971 stellten Stephen Cook und Leonid Levin unabhängig voneinander erstmals die Frage, ob diese beiden Komplexitätsklassen identisch sind-->
'''P/NP問題'''是在[[理論資訊學]]中[[複雜度理]]至今有解問題,它被“[[克雷數學研究所]]”(Clay Mathematics Institute, 簡稱CMI)在[[千禧年大獎難題]]中收。P/NP問題中包含了[[複雜]][[P]][[NP]]的關係。1971年[[史提芬古克]](Stephen A. Cook) 和 [[:en:Leonid Levin|Leonid Levin]] 相對獨立的提出了下面的問題,即是否兩個複雜P和NP是恒等的(P=NP?)。
'''P/NP问题'''是在[[理论信息学]]中[[复杂度理]]至今有解问题,它被“[[克雷数学研究所]]”(Clay Mathematics Institute, 简称CMI)在[[千禧年大奖难题]]中收。P/NP问题中包含了[[复杂]][[P]][[NP]]的关系。1971年[[史提芬·古克]](Stephen A. Cook) 和 [[:en:Leonid Levin|Leonid Levin]] 相对独立的提出了下面的问题,即是否两个复杂P和NP是恒等的(P=NP?)。


== P 和NP ==
== P 和NP ==
<!--Die Komplexitätsklasse P beinhaltet alle Probleme, welche von deterministischen Turingmaschinen in polynomiell beschränkter Zeit gelöst werden können. Dagegen beinhaltet NP die Menge aller von nichtdeterministischen Turingmaschinen in polynomialzeit lösbaren Probleme. Aus diesen beiden Definitionen geht hervor, dass P eine Teilmenge von NP ist, unklar ist aber, ob NP ebenfalls eine Teilmenge von P ist und die beiden Klassen somit identisch wären.-->
<!--Die Komplexitätsklasse P beinhaltet alle Probleme, welche von deterministischen Turingmaschinen in polynomiell beschränkter Zeit gelöst werden können. Dagegen beinhaltet NP die Menge aller von nichtdeterministischen Turingmaschinen in polynomialzeit lösbaren Probleme. Aus diesen beiden Definitionen geht hervor, dass P eine Teilmenge von NP ist, unklar ist aber, ob NP ebenfalls eine Teilmenge von P ist und die beiden Klassen somit identisch wären.-->
複雜'''[[P (複雜)|P]]'''包含所有那些可以由一[[圖靈機|定型圖靈機]]在多式表時間內問題'''[[NP (複雜度)|NP]]'''由所有其肯定解可以在定正確資訊的多時間內驗證問題組成,或者等效的,那些解可以在[[非圖靈機]]上在[[多時間]]找出的問題的集合。很可能,[[算理]]最大的未解決問題就是關於這兩類關係的:
复杂'''[[P (复杂)|P]]'''包含所有那些可以由一[[图灵机|定型图灵机]]在多式表时间内问题'''[[NP (复杂度)|NP]]'''由所有其肯定解可以在定正确信息的多时间内验证问题组成,或者等效的,那些解可以在[[非图灵机]]上在[[多时间]]找出的问题的集合。很可能,[[算理]]最大的未解决问题就是关于这两类关系的:
:'''P'''和'''NP'''相等?
:'''P'''和'''NP'''相等?
在2002年對於100研究者的調查,61人相信答案是否定的,9相信答案是肯定的,22定,而8相信該問題可能和在所接受的公理立,所以不可能明或否。[http://www.cs.umd.edu/~gasarch/papers/poll.ps] 對於的解答,有一[[Clay Mathematics Institute|$1,000,000美元的獎勵]]。
在2002年对于100研究者的查,61人相信答案是否定的,9相信答案是肯定的,22定,而8相信该问题可能和在所接受的公理立,所以不可能明或否。[http://www.cs.umd.edu/~gasarch/papers/poll.ps] 对于的解答,有一[[Clay Mathematics Institute|$1,000,000美元的奖励]]。


[[NP-完全]]問題(或者叫'''NPC''')的集合在這個討論中有重大作用,它可以大致被描述為 — 在'''NP'''集合包含於'''P'''的元素,請注意這只是一個假設。(切定義細節請參看[[NP-完全]])理[[電腦家]]在相信'''P''', '''NP''',和'''NPC'''關係中所示,其中'''P'''和'''NPC'''不交。
[[NP-完全]]问题(或者叫'''NPC''')的集合在这个讨论中有重大作用,它可以大致被描述为那些在'''NP'''中像在'''P'''的。(切定义细节请参看[[NP-完全]])理[[计算机家]]在相信'''P''', '''NP''',和'''NPC'''关系中所示,其中'''P'''和'''NPC'''不交。
[[Image:Complexity classes (en).svg|thumb|250px|假'''P''' &ne; '''NP'''的複雜解.如'''P''' = '''NP'''個類相同.]]
[[Image:Complexity classes (en).svg|thumb|250px|假'''P''' &ne; '''NP'''的复杂解.如'''P''' = '''NP'''个类相同.]]


簡單來說,'''P''' = '''NP'''問題問道:如果是/不是問題的正面答案可以很快''驗證'',其答案是否也可以很快''算''?這裏有一個給你找點這個問題的感的例子。定一''Y'',我可以''Y''是否是[[合|]]。例如,我可能53308290611是否有非平凡的因。回答是肯定的,然手工找出一很麻另一方面,如果有人聲稱答案是",因224737可以整除53308290611",可以很快用一除法來驗證驗證個數是除比首先找出除數來簡單得多。用於驗證正面答案所需的資訊稱為''證書''。所以我結論是,定 正證書問題的正面答案可以很快的(也就是,在多時間內)驗證,而就是這個問題屬於'''NP'''的原因。這個特定的問題,最近被也在'''P'''中(看[[#外部鏈結考|下面的]]關於"質數在P中"的考),也不明,而且有很多似的問題相信不屬於類'''P'''。
簡單來說,'''P''' = '''NP'''问题问道:如果是/不是问题的正面答案可以很快''验证'',其答案是否也可以很快''算''?这里有一个给你找点这个问题的感的例子。定一''Y'',我可以''Y''是否是[[合|]]。例如,我可能53308290611是否有非平凡的因。回答是肯定的,然手工找出一很麻另一方面,如果有人声称答案是",因224737可以整除53308290611",可以很快用一除法来验证验证个数是除比首先找出除数来简单得多。用于验证正面答案所需的信息称为''证书''。所以我结论是,定 正证书问题的正面答案可以很快的(也就是,在多时间内)验证,而就是这个问题属于'''NP'''的原因。这个特定的问题,最近被也在'''P'''中(看[[#外部链接考|下面的]]关于"质数在P中"的考),也不明,而且有很多似的问题相信不属于类'''P'''。


限制到是/不是問題並沒有改變問題;即使我複雜的答案,最問題(是否[[FP (複雜度)|FP]] = [[FNP (複雜度)|FNP]])是等的。
限制到是/不是问题并没有改变问题;即使我复杂的答案,最问题(是否[[FP (复杂度)|FP]] = [[FNP (复杂度)|FNP]])是等的。


==形式化定==
==形式化定==


更正式一些,一''問題''是一取一些[[字串]]為輸要求是或否的問題。若有一[[算法]](譬如[[圖靈機]],或一[[Lisp言|LISP]]或[[Pascal言|Pascal]]的程式並限的記憶體)能在最多''n''<sup>''k''</sup>步內對''n''的出正答案,其中''k''是某不依賴於輸入串的常們稱該問題可以在''多時間''它置入'''P'''。直,我們將'''P'''中的問題視為可以快解問題
更正式一些,一''问题''是一取一些[[字串]]为输要求是或否的问题。若有一[[算法]](譬如[[图灵机]],或一[[Lisp言|LISP]]或[[Pascal言|Pascal]]的程序并限的内存)能在最多''n''<sup>''k''</sup>步内对''n''的出正答案,其中''k''是某不依赖于输入串的常们称该问题可以在''多时间''它置入'''P'''。直,我们将'''P'''中的问题视为可以快解问题


在假有一個演算法A(''w'',''C'')取兩個參數,一串''w'',也就是我問題入串,而另一串''C''是“建議證明”,且使得A在最多''n''<sup>''k''</sup>步之內產生“是/否”答案(其中''n''是''w''的度而''k''不依賴於''w'')。一步假
在假有一算法A(''w'',''C'')取两个参数,一串''w'',也就是我问题入串,而另一串''C''是“建议证明”,且使得A在最多''n''<sup>''k''</sup>步之内产生“是/否”答案(其中''n''是''w''的度而''k''不依赖于''w'')。一步假
: ''w''是一答案“是”的例子,僅當,存在''C''使得A(''w'',''C'')返回“是”。
: ''w''是一答案“是”的例子,仅当,存在''C''使得A(''w'',''C'')返回“是”。
們稱這個問題可以在''非定性多時間'',且它放入'''NP'''。我算法A作所建明的檢驗器,它行足快。(注意縮寫'''NP'''代表“'''N'''on-deterministic(非定性)'''P'''olynomial(多式)”而''不是''代表“'''N'''on-'''P'''olynomial(非多式)。)
们称这个问题可以在''非定性多时间'',且它放入'''NP'''。我把算法A作所建明的检验器,它行足快。(注意缩写'''NP'''代表“'''N'''on-deterministic(非定性)'''P'''olynomial(多式)”而''不是''代表“'''N'''on-'''P'''olynomial(非多式)。)


==NP完全==
==NP完全==


要解'''P''' = '''NP'''問題,[[NP完全|'''NP'''完全]]的概念非常有用。不格的,'''NP'''完全問題是'''NP'''中“最”的問題,也就是是最可能不屬於'''P'''的。是因''任何'''''NP'''中的問題可以在多時間內變換任何特定'''NP'''完全問題的一特例。例如,[[旅行商問題]]的判定問題版本是'''NP'''完全的。所以'''NP'''中的''任何''問題的''任何''特例可以在多時間內機械地轉換成旅行商問題的一特例。
要解'''P''' = '''NP'''问题,[[NP完全|'''NP'''完全]]的概念非常有用。不格的,'''NP'''完全问题是'''NP'''中“最”的问题,也就是是最可能不属于'''P'''的。是因''任何'''''NP'''中的问题可以在多时间内变换任何特定'''NP'''完全问题的一特例。例如,[[旅行商问题]]的判定问题版本是'''NP'''完全的。所以'''NP'''中的''任何''问题的''任何''特例可以在多时间内机械地转换成旅行商问题的一特例。
所以若旅行商問題在'''P''''''P ''' = '''NP'''!旅行商問題是很多這樣的'''NP'''完全的問題之一。若任何一'''NP'''完全的問題在'''P'''可以推出'''P''' = '''NP'''。不幸的是,很多重要的問題'''NP'''完全,但有一有已知快速的算法。
所以若旅行商问题在'''P''''''P ''' = '''NP'''!旅行商问题是很多这样的'''NP'''完全的问题之一。若任何一'''NP'''完全的问题在'''P'''可以推出'''P''' = '''NP'''。不幸的是,很多重要的问题'''NP'''完全,但有一有已知快速的算法。


==更問題==
==更问题==


然是否'''P'''='''NP'''是未知的,在'''P'''之外的問題是已知道存在的。找[[國際象棋]]或[[棋]]最佳走法(在''n''乘''n''棋上)是[[指數時間完全]]的。因可以明P &ne; EXPTIME(指數時間),問題'''P'''之外,所以需要比多時間更多的時間。判定[[Presburger算]]中的命是否真的問題更加困。Fischer和[[Michael O. Rabin|Rabin]][[1974年]]明每個決定Presburger命的真性的算法有最少2^(2^(''cn''))的時間,''c''這裏,''n''是Presburger命度。因此,已知需要比指數時間更多的時間。不可判定問題是更加困的,例如[[停機問題]]。它們無法在任何時間內
然是否'''P'''='''NP'''是未知的,在'''P'''之外的问题是已知道存在的。找[[国际象棋]]或[[棋]]最佳走法(在''n''乘''n''棋上)是[[指数时间完全]]的。因可以明P &ne; EXPTIME(指数时间),问题'''P'''之外,所以需要比多时间更多的时间。判定[[Presburger算]]中的命是否真的问题更加困。Fischer和[[Michael O. Rabin|Rabin]][[1974年]]明每个决定Presburger命的真性的算法有最少2^(2^(''cn''))的时间,''c''这里,''n''是Presburger命度。因此,已知需要比指数时间更多的时间。不可判定问题是更加困的,例如[[停机问题]]。它们无法在任何时间内


==P真的容易?==
==P真的容易?==


上面所有的討論了'''P'''表示“容易”而“不在'''P'''中”表示“困”。是一複雜度理中常而且有一定準確性的假,它在實踐是真的,原因包括如下幾點
上面所有的讨论了'''P'''表示“容易”而“不在'''P'''中”表示“困”。是一复杂度理中常而且有一定准确性的假,它在实践是真的,原因包括如下几点
*它忽略了常。一需要10<sup>1000</sup>''n''時間問題屬於'''P'''的(它是時間的),但是事上完全理。一需要10<sup>-10000</sup>2<sup>''n''</sup>時間問題不是在'''P'''中的(它是指數時間的),但是對於''n'' 取值直到時還是很容易理的。
*它忽略了常。一需要10<sup>1000</sup>''n''时间问题属于'''P'''的(它是线时间的),但是事上完全理。一需要10<sup>-10000</sup>2<sup>''n''</sup>时间问题不是在'''P'''中的(它是指数时间的),但是对于''n'' 取值直到时还是很容易理的。
*它忽略了指的大小。一個時間複雜度''n''<sup>1000</sup>屬於'''P''',但是很難對付。已經證明在'''P'''中存在需要任意大的指問題看[[時間定理]])。一個時間複雜度2<sup>''n''/1000</sup>的問題屬於'''P''',但對與''n''直到是容易應對的。
*它忽略了指的大小。一个时间复杂度''n''<sup>1000</sup>属于'''P''',但是很难对付。已经证明在'''P'''中存在需要任意大的指问题看[[时间定理]])。一个时间复杂度2<sup>''n''/1000</sup>的问题属于'''P''',但对与''n''直到是容易应对的。
*它只考了最複雜度。可能現實世界中的有些問題在多數時候可以在時間''n''中解,但是很偶看到需要時間2<sup>''n''</sup>的特例。這個問題可能有一式的平均時間,但最是指式的,所以該問題屬於'''P'''。
*它只考了最复杂度。可能现实世界中的有些问题在多数时候可以在时间''n''中解,但是很偶看到需要时间2<sup>''n''</sup>的特例。这个问题可能有一式的平均时间,但最是指式的,所以该问题属于'''P'''。
*它只考慮確定性解。可能有一個問題你可以很快解如果你可以接受出點誤差的可能,但是保正的答案會難得多。這個問題會屬於'''P''',然事上它可以很快求解。這實際上是解決屬於'''NP'''而不知道是否屬於'''P'''的問題的一個辦法(看'''[[RP (複雜度)|RP]]''', '''[[BPP]]''')。
*它只考虑确定性解。可能有一个问题你可以很快解如果你可以接受出点误差的可能,但是保正的答案会难得多。这个问题会属于'''P''',然事上它可以很快求解。这实际上是解决属于'''NP'''而不知道是否属于'''P'''的问题的一个办法(看'''[[RP (复杂度)|RP]]''', '''[[BPP]]''')。
*新的如[[量子電腦]]這樣算模型,可能可以快速的解一些尚未知道是否屬於'''P'''的問題;但是,有一已知能問題是'''NP'''完全的。不,必注意到'''P'''和'''NP'''問題的''定''是用象圖靈機這樣算模型的屬於表述的。所以,即使一量子電腦演算法被發現有效的解'''NP'''完全問題,我只是有了一快速解難問題實際方法,而不是數學類'''P'''和'''NP'''相等的明。
*新的如[[量子计算机]]这样算模型,可能可以快速的解一些尚未知道是否属于'''P'''的问题;但是,有一已知能问题是'''NP'''完全的。不,必注意到'''P'''和'''NP'''问题的''定''是用象图灵机这样算模型的属于表述的。所以,即使一量子计算机算法被发现有效的解'''NP'''完全问题,我只是有了一快速解难问题实际方法,而不是数学类'''P'''和'''NP'''相等的明。


==電腦麼認為P &ne; NP?==
==计算机么认为P &ne; NP?==


數電腦家相信'''P'''&ne;'''NP'''。信念的一個關鍵原因是經過數十年對這問題的研究,有人能夠發現NP完全問題的多時間演算法。而且,人早在NP完全的概念出前就算法了([[Karp的21NP完全問題]],在最早發現的一批中,有所有著名的已存在的問題]])。一步地,P = NP這樣會導出很多人的果,那些在被相信是不成立的,例如NP = [[NP]]和P = [[PH (複雜度)|PH]]。
数计算机家相信'''P'''&ne;'''NP'''。信念的一个关键原因是经过数十年对这问题的研究,有人能够发现NP完全问题的多时间算法。而且,人早在NP完全的概念出前就些算法了([[Karp的21NP完全问题]],在最早发现的一批中,有所有著名的已存在的问题]])。一步地,P = NP这样会导出很多人的果,那些在被相信是不成立的,例如NP = [[NP]]和P = [[PH (复杂度)|PH]]。


也有這樣論證的:問題較難求解(NP)但容易驗證(P),和我日常經驗是相符的。
也有这样论证的:问题较难求解(NP)但容易验证(P),和我日常经验是相符的。


另一方面,某些研究者認為們過於相信'''P''' &ne; '''NP''',而應該也去找'''P''' = '''NP'''的明。例如,2002年中有這樣明: [http://www.cs.umd.edu/~gasarch/papers/poll.ps]
另一方面,某些研究者认为们过于相信'''P''' &ne; '''NP''',而应该也去找'''P''' = '''NP'''的明。例如,2002年中有这样明: [http://www.cs.umd.edu/~gasarch/papers/poll.ps]
: 向P&ne;NP的主要論據是在窮盡搜索的域完全有本質進展。也就是,以我的觀點,一很弱的論據算法的空是很大的,而我只是在始探索的起。[ . . . ] [[費馬定理]]的解示非常簡單的[sic]問題可能只有用非常深刻的理才能解
: 向P&ne;NP的主要论据是在穷尽搜索的域完全有本质进展。也就是,以我的观点,一很弱的论据。算法的空是很大的,而我只是在始探索的起。[ . . . ] [[费马定理]]的解示非常简单的[sic]问题可能只有用非常深刻的理才能解
: &mdash; Moshe Vardi,[[斯大]]
: &mdash; Moshe Vardi,[[斯大]]
: 分依不是規劃研究的一好的引。我須總嘗試個問題兩個方向。偏可能致著名的數學法解答案和他預計相反的著名問題然他們發展了所有所需的方法。
: 分依不是规划研究的一好的引。我须总尝试个问题两个方向。偏可能致著名的数学法解答案和他预计相反的著名问题然他们发展了所有所需的方法。
: &mdash; Anil Nerode, [[康奈]]
: &mdash; Anil Nerode, [[康奈]]


==關於證明的度的果==
==关于证明的度的果==


然百美元的金和大量投入巨大卻沒實質果的研究足以該問題是困的,有一些形式化的麼該問題可能很
然百美元的金和大量投入巨大却没实质果的研究足以该问题是困的,有一些形式化的么该问题可能很




最常被引用的果之一設計[[神喻器|神喻]]。假想你有一魔法器可以解決單個問題,例如定一個給定的字是否為質數,但可以瞬決這個問題。我的新問題是,若我被允任意利用這個機器,是否存在我可以在多時間內驗證法在多時間內問題果是,依賴於機器能解問題,'''P''' = '''NP'''和'''P''' &ne; '''NP'''二者都可以明。這個結論果是,任何可以修改來證該機器的存在性的果不能解決問題。不幸的是,乎所有典的方法和大部分已知的方法可以這樣修改(我們稱在''相化'')。
最常被引用的果之一设计[[神喻器|神喻]]。假想你有一魔法器可以解决单个问题,例如定一个给定的字是否为质数,但可以瞬决这个问题。我的新问题是,若我被允任意利用这个机器,是否存在我可以在多时间内验证法在多时间内问题果是,依赖于机器能解问题,'''P''' = '''NP'''和'''P''' &ne; '''NP'''二者都可以明。这个结论果是,任何可以修改来证该机器的存在性的果不能解决问题。不幸的是,乎所有典的方法和大部分已知的方法可以这样修改(我们称在''相化'')。


如果這還不算太糟的,1993年Razborov和Rudich明的一個結果表明,定一特定的可信的假,在某下“自然”的明不能解'''P''' = '''NP'''問題。[http://www-2.cs.cmu.edu/~rudich/papers/natural.ps] 表明一些在似乎最有希望的方法不太可能成功。隨著更多這類的定理得到明,定理的可能明有越越多的陷阱要避。
如果这还不算太糟的,1993年Razborov和Rudich明的一个结果表明,定一特定的可信的假,在某下“自然”的明不能解'''P''' = '''NP'''问题。[http://www-2.cs.cmu.edu/~rudich/papers/natural.ps] 表明一些在似乎最有希望的方法不太可能成功。随着更多这类的定理得到明,定理的可能明有越越多的陷阱要避。


這實際上也是NP完全問題有用的原因:若有一時間演算法,或者有一個這樣算法,對於NP完全問題存在,這將用一相信不被上述果排除在外的方法'''P''' = '''NP'''問題
这实际上也是NP完全问题有用的原因:若有一时间算法,或者有一个这样的算法,对于NP完全问题存在,这将用一相信不被上述果排除在外的方法'''P''' = '''NP'''问题


==多時間演算法==
==多时间算法==


人知道多時間演算法對於NP完全問題是否存在。但是如果這樣算法存在,我知道其中的一些了!例如,下面的算法正的接受了一NP完全言,但是人知道通常它需要多久行。它是一時間演算法僅當'''P''' = '''NP'''。
人知道多时间算法对于NP完全问题是否存在。但是如果这样的算法存在,我知道其中的一些了!例如,下面的算法正的接受了一NP完全言,但是人知道通常它需要多久行。它是一时间算法仅当'''P''' = '''NP'''。


// 接受NP完全言的一個演算法[[子集和問題|子集和]]。
// 接受NP完全言的一算法[[子集和问题|子集和]]。
//
//
// 是一時間演算法僅當P=NP。
// 是一时间算法仅当P=NP。
//
//
// “多時間”表示它在多時間內返回“是”,若
// “多时间”表示它在多时间内返回“是”,若
// 果是“是”,否遠運行。
// 果是“是”,否远运行。
//
//
// 入:S = 一自然的有限集
// 入:S = 一自然的有限集
// 出:"是" 如果某S的子集加起0。
// 出:"是" 如果某S的子集加起0。
// 否,它永遠運出。
// 否,它永远运出。
// 注意: "程式數P" 是你P寫為進位,然
// 注意: "程序数P" 是你P写为进制,然
// 串考慮為
// 位串考虑为
// 每可能的程都可以這樣產生,
// 每可能的程都可以这样产生,
// 然多也不做因錯誤
// 然多也不做因错误
// <br>
// <br>
FOR N = 1...infinity
FOR N = 1...infinity
FOR P = 1...N
FOR P = 1...N
以S為輸行程式數P N步
以S为输行程序数P N步
IF 程式輸出一不同的整的列表
IF 程序输出一不同的整的列表
AND 所有整都在S中
AND 所有整都在S中
AND 整的和0<br>
AND 整的和0<br>
THEN
THEN
OUTPUT "是"
OUTPUT "是"


若'''P''' = '''NP''',則這是一接受一NP完全言的多時間演算法。“接受”表示它在多時間內給出“是”的答案,但允在答案是“否”的候永遠運行。
若'''P''' = '''NP''',则这是一接受一NP完全言的多时间算法。“接受”表示它在多时间内给出“是”的答案,但允在答案是“否”的候永远运行。


可能我想要“解”子集和問題,而不是僅僅“接受”子集和言。表示我想要它是停機並返回一“是”或“否”的答案。是否存在任何可能在多時間內決這個問題算法?有人知道。但是如果這樣算法存在,那知道其中的一些了!只要上面的算法中的IF句替成下面的句:
可能我想要“解”子集和问题,而不是仅仅“接受”子集和言。表示我想要它是停机并返回一“是”或“否”的答案。是否存在任何可能在多时间内决这个问题的算法?有人知道。但是如果这样的算法存在,那知道其中的一些了!只要上面的算法中的IF句替成下面的句:


IF 程式輸出一完整的數學證
IF 程序输出一完整的数学证
AND 明的每一步合法
AND 明的每一步合法
AND 結論是S確實有(或者有)一0的子集
AND 结论是S确实有(或者有)一0的子集
THEN
THEN
OUTPUT "是" (或者"不是"如果那被明了)
OUTPUT "是" (或者"不是"如果那被明了)


==邏輯表述==
==逻辑表述==


P=NP問題可以用邏輯的特定的可表性的術語來重新表述。所有P中的言可以用[[一階邏輯]]加上[[最小不動點]]操作(實際上,遞迴的定似地,NP是可以用存在性[[二階邏輯]]&mdash;也就是,在關係、函、和子集上排除了[[全域量]]的二階邏輯。[[多式等]],[[PH (複雜度)|PH]]中的對應與所有的[[二階邏輯]]。這樣,“P是NP的真子集這樣問題可以表述“是否存在性二階邏輯達帶最小不動點操作的一階邏輯的所不能表言?”
P=NP问题可以用逻辑的特定的可表性的术语来重新表述。所有P中的言可以用[[一阶逻辑]]加上[[最小不动点]]操作(实际上,递归的定似地,NP是可以用存在性[[二阶逻辑]]&mdash;也就是,在关系、函、和子集上排除了[[全域量]]的二阶逻辑。[[多式等]],[[PH (复杂度)|PH]]中的对应与所有的[[二阶逻辑]]。这样,“P是NP的真子集这样问题可以表述“是否存在性二阶逻辑达带最小不动点操作的一阶逻辑的所不能表言?”


==花絮==
==花絮==
[[普林斯]]電腦樓將[[二進位碼]]表述的“P=NP?”問題進頂樓西面的磚頭上。如果明了P=NP,磚頭可以很方便的成表示“P=NP!”。[http://www.princeton.edu/~taubetap/tours/handbook.pdf]
[[普林斯]]计算机楼将[[二进制代码]]表述的“P=NP?”问题进顶楼西面的砖头上。如果明了P=NP,砖头可以很方便的成表示“P=NP!”。[http://www.princeton.edu/~taubetap/tours/handbook.pdf]


[[康奈]]的Hubert Chen博士提供了這個玩笑式的P不等NP的明:“<i>反法。P = NP。令yP = NP的明。明y可以用一合格的電腦家在多時間內驗證,我們認這樣的科家的存在性真。但是,因P = NP,該證明y可以在多時間內這樣的科發現。但是這樣發現還沒生(這樣的科試圖發現這樣的一個證明),我得到矛盾。</i>"[http://www.cs.cornell.edu/hubes/pnp.htm]
[[康奈]]的Hubert Chen博士提供了这个玩笑式的P不等NP的明:“<i>反法。P = NP。令yP = NP的明。明y可以用一合格的计算机家在多时间内验证,我们认这样的科家的存在性真。但是,因P = NP,该证明y可以在多时间内这样的科发现。但是这样发现还没生(这样的科试图发现这样的一个证明),我得到矛盾。</i>"[http://www.cs.cornell.edu/hubes/pnp.htm]


==看==
==看==
*[[P (複雜度)]]
*[[P (复杂度)]]
*[[NP (複雜度)]]
*[[NP (复杂度)]]
*[[NP完全]]
*[[NP完全]]


==外部鏈結考==
==外部链接考==


* [http://www.claymath.org/prizeproblems/index.htm The Clay Math Institute Millennium Prize Problems]
* [http://www.claymath.org/prizeproblems/index.htm The Clay Math Institute Millennium Prize Problems]
第130行: 第130行:
* [http://www.complexityzoo.com Scott Aaronson's Complexity Zoo]
* [http://www.complexityzoo.com Scott Aaronson's Complexity Zoo]


<!--{{複雜}}-->
<!--{{复杂}}-->




[[Category:複雜]]
[[Category:复杂]]
[[Category:猜想]]
[[Category:猜想]]
[[Category:數學中未解問題]]
[[Category:数学中未解问题]]


[[ca:P versus NP]]
[[ca:P versus NP]]

2006年7月11日 (二) 03:50的版本

P/NP问题是在理论信息学计算复杂度理论领域里至今没有解决的问题,它被“克雷数学研究所”(Clay Mathematics Institute, 简称CMI)在千禧年大奖难题中收录。P/NP问题中包含了复杂度类PNP的关系。1971年史提芬·古克(Stephen A. Cook) 和 Leonid Levin 相对独立的提出了下面的问题,即是否两个复杂度类P和NP是恒等的(P=NP?)。

P 和NP

复杂度类P包含所有那些可以由一个确定型图灵机在多项式表达的时间内解决的问题;类NP由所有其肯定解可以在给定正确信息的多项式时间内验证的决定问题组成,或者等效的说,那些解可以在非确定图灵机上在多项式时间内找出的问题的集合。很可能,计算理论最大的未解决问题就是关于这两类的关系的:

PNP相等吗?

在2002年对于100研究者的调查,61人相信答案是否定的,9个相信答案是肯定的,22个不确定,而8个相信该问题可能和现在所接受的公理独立,所以不可能证明或证否。[1] 对于正确的解答,有一个$1,000,000美元的奖励

NP-完全问题(或者叫NPC)的集合在这个讨论中有重大作用,它们可以大致的被描述为那些在NP中最不像在P中的。(确切定义细节请参看NP-完全)理论计算机科学家现在相信P, NP,和NPC类之间的关系如图中所示,其中PNPC类不交。

File:Complexity classes (en).svg
假设PNP的复杂度类的图解.如P = NP则三个类相同.

簡單來說,P = NP问题问道:如果是/不是问题的正面答案可以很快验证,其答案是否也可以很快计算?这里有一个给你找点这个问题的感觉的例子。给定一个大数Y,我们可以问Y是否是复合数。例如,我们可能问53308290611是否有非平凡的因子。回答是肯定的,虽然手工找出一个因子很麻烦。从另一个方面讲,如果有人声称答案是"对,因为224737可以整除53308290611",则我们可以很快用一个除法来验证。验证一个数是除数比首先找出除数来简单得多。用于验证一个正面答案所需的信息也称为证书。所以我们的结论是,给定 正确的证书,问题的正面答案可以很快的(也就是,在多项式时间内)验证,而这就是这个问题属于NP的原因。虽然这个特定的问题,最近被证明为也在P类中(参看下面的关于"质数在P中"的参考),这一点也不明显,而且有很多类似的问题相信不属于类P

限制到是/不是问题并没有改变问题;即使我们允许更复杂的答案,最后的问题(是否FP = FNP)是等价的。

形式化定义

更正式一些,一个决定问题是一个取一些字符串为输入并要求输出为是或否的问题。若有一个算法(譬如图灵机,或一个LISPPascal的程序并有无限的内存)能够在最多nk步内对一个串长度为n的输入给出正确答案,其中k是某个不依赖于输入串的常数,则我们称该问题可以在多项式时间内解决,并且将它置入类P。直观的讲,我们将P中的问题视为可以较快解决的问题。

现在假设有一个算法A(w,C)取两个参数,一个串w,也就是我们的决定问题的输入串,而另一个串C是“建议证明”,并且使得A在最多nk步之内产生“是/否”答案(其中nw的长度而k不依赖于w)。进一步假设

w是一个答案为“是”的例子,当且仅当,存在C使得A(w,C)返回“是”。

则我们称这个问题可以在非决定性多项式时间内解决,且将它放入NP类。我们把算法A作为一个所建议的证明的检验器,它运行足够快。(注意缩写NP代表“Non-deterministic(非确定性)Polynomial(多项式)”而不是代表“Non-Polynomial(非多项式)。)

NP完全

要解决P = NP问题,NP完全的概念非常有用。不严格的讲,NP完全问题是NP类中“最难”的问题,也就是说它们是最可能不属于P类的。这是因为任何NP中的问题可以在多项式时间内变换成为任何特定NP完全问题的一个特例。例如,旅行商问题的判定问题版本是NP完全的。所以NP中的任何问题的任何特例可以在多项式时间内机械地转换成旅行商问题的一个特例。 所以若旅行商问题被证明为在P内,则P = NP!旅行商问题是很多这样的NP完全的问题之一。若任何一个NP完全的问题在P内,则可以推出P = NP。不幸的是,很多重要的问题被证明为NP完全,但没有一个有已知快速的算法。

更难的问题

虽然是否P=NP还是未知的,在P之外的问题是已经知道存在的。寻找国际象棋围棋最佳走法(在nn棋盘上)是指数时间完全的。因为可以证明P ≠ EXPTIME(指数时间),这些问题位于P之外,所以需要比多项式时间更多的时间。判定Presburger算术中的命题是否为真的问题更加困难。Fischer和Rabin1974年证明每个决定Presburger命题的真伪性的算法有最少2^(2^(cn))的运行时间,c为某个常数。这里,n是Presburger命题的长度。因此,该命题已知需要比指数时间更多的运行时间。不可判定问题是更加困难的,例如停机问题。它们无法在任何给定时间内解决。

P真的容易处理吗?

上面所有的讨论假设了P表示“容易”而“不在P中”表示“困难”。这是一个在复杂度理论中常见而且有一定准确性的假设,它在实践中却不总是真的,原因包括如下几点:

  • 它忽略了常数因子。一个需要101000n时间的问题是属于P的(它是线性时间的),但是事实上完全无法处理。一个需要10-100002n时间的问题不是在P中的(它是指数时间的),但是对于n 取值直到几千时还是很容易处理的。
  • 它忽略了指数的大小。一个时间复杂度n1000属于P,但是很难对付。已经证明在P中存在需要任意大的指数的问题(参看时间等级定理)。一个时间复杂度2n/1000的问题不属于P,但对与n直到几千还是容易应对的。
  • 它只考虑了最坏情况的复杂度。可能现实世界中的有些问题在多数时候可以在时间n中解决,但是很偶尔你会看到需要时间2n的特例。这个问题可能有一个多项式的平均时间,但最坏情况是指数式的,所以该问题不属于P
  • 它只考虑确定性解。可能有一个问题你可以很快解决如果你可以接受出现一点误差的可能,但是确保正确的答案会难得多。这个问题不会属于P,虽然事实上它可以很快求解。这实际上是解决属于NP而还不知道是否属于P的问题的一个办法(参看RPBPP)。
  • 新的诸如量子计算机这样的计算模型,可能可以快速的解决一些尚未知道是否属于P的问题;但是,没有一个它们已知能够解决的问题是NP完全的。不过,必须注意到PNP问题的定义是采用象图灵机这样的经典计算模型的属于表述的。所以,即使一个量子计算机算法被发现能够有效的解决一个NP完全问题,我们只是有了一个快速解决困难问题的实际方法,而不是数学类PNP相等的证明。

计算机科学家为什么认为P ≠ NP?

多数计算机科学家相信PNP。该信念的一个关键原因是经过数十年对这些问题的研究,没有人能够发现一个NP完全问题的多项式时间算法。而且,人们早在NP完全的概念出现前就开始寻求这些算法了(Karp的21个NP完全问题,在最早发现的一批中,有所有著名的已经存在的问题]])。进一步地,P = NP这样的结果会导出很多惊人的结果,那些结果现在被相信是不成立的,例如NP = 余NP和P = PH

也有这样论证的:问题较难求解(NP)但容易验证(P),这和我们日常经验是相符的。

从另一方面讲,某些研究者认为我们过于相信PNP,而应该也去寻找P = NP的证明。例如,2002年中有这样的声明: [2]

倾向P≠NP的主要论据是在穷尽搜索的领域完全没有本质进展。也就是说,以我的观点,一个很弱的论据。算法的空间是很大的,而我们只是在开始探索的起点。[ . . . ] 费马最后定理的解决也显示非常简单的[sic]问题可能只有用非常深刻的理论才能解决。
— Moshe Vardi,莱斯大学
过分依赖某种投机不是规划研究的一个好的导引。我们必须总是尝试每个问题的两个方向。偏见可能导致著名的数学家无法解决答案和他们的预计相反的著名问题,虽然他们发展了所有所需的方法。
— Anil Nerode, 康奈尔大学

关于证明的难度的结果

虽然百万美元的奖金和大量投入巨大却没有实质性结果的研究足以显示该问题是困难的,还有一些形式化的结果证明为什么该问题可能很难解决。


最常被引用的结果之一设计神喻。假想你有一个魔法机器可以解决单个问题,例如决定一个给定的数字是否为质数,但可以瞬间解决这个问题。我们的新问题是,若我们被允许任意利用这个机器,是否存在我们可以在多项式时间内验证但无法在多项式时间内解决的问题?结果是,依赖于机器能解决的问题,P = NPPNP二者都可以证明。这个结论的后果是,任何可以修改来证明该机器的存在性的结果不能解决问题。不幸的是,几乎所有经典的方法和大部分已知的方法可以这样修改(我们称它们在相对化)。

如果这还不算太糟的话,1993年Razborov和Rudich证明的一个结果表明,给定一个特定的可信的假设,在某种意义下“自然”的证明不能解决P = NP问题。[3] 这表明一些现在似乎最有希望的方法不太可能成功。随着更多这类的定理得到证明,该定理的可能证明有越来越多的陷阱要规避。

这实际上也是为什么NP完全问题有用的原因:若有一个多项式时间算法,或者没有一个这样的算法,对于NP完全问题存在,这将用一种相信不被上述结果排除在外的方法来解决P = NP问题。

多项式时间算法

没人知道多项式时间算法对于NP完全问题是否存在。但是如果这样的算法存在,我们已经知道其中的一些了!例如,下面的算法正确的接受了一个NP完全语言,但是没人知道通常它需要多久运行。它是一个多项式时间算法当且仅当P = NP

   // 接受NP完全语言的一个算法子集和。
   //
   // 这是一个多项式时间算法当且仅当P=NP。
   //
   // “多项式时间”表示它在多项式时间内返回“是”,若
   // 结果是“是”,否则永远运行。
   //
   // 输入:S = 一个自然数的有限集
   // 输出:"是" 如果某个S的子集加起来等于0。
   //         否则,它永远运行没有输出。
   // 注意:  "程序数P" 是你将一个整数P写为二进制,然后
   //         将位串考虑为一个程序。
   //         每个可能的程序都可以这样产生,
   //         虽然多数什么也不做因为有语法错误。
   //         
FOR N = 1...infinity FOR P = 1...N 以S为输入运行程序数P N步 IF 程序输出一个不同的整数的列表 AND 所有整数都在S中 AND 整数的和为0
THEN OUTPUT "是" 并 停机

P = NP,则这是一个接受一个NP完全语言的多项式时间算法。“接受”表示它在多项式时间内给出“是”的答案,但允许在答案是“否”的时候永远运行。

可能我们想要“解决”子集和问题,而不是仅仅“接受”子集和语言。这表示我们想要它总是停机并返回一个“是”或“否”的答案。是否存在任何可能在多项式时间内解决这个问题的算法?没有人知道。但是如果这样的算法存在,那么我们已经知道其中的一些了!只要将上面的算法中的IF语句替换成下面的语句:

           IF 程序输出一个完整的数学证明
               AND 证明的每一步合法
               AND 结论是S确实有(或者没有)一个和为0的子集
           THEN
               OUTPUT "是" (或者"不是"如果那被证明了)并停机

逻辑表述

P=NP问题可以用逻辑命题的特定类的可表达性的术语来重新表述。所有P中的语言可以用一阶逻辑加上最小不动点操作(实际上,这允许了递归函数的定义)来表达。类似地,NP是可以用存在性二阶逻辑来表达—也就是,在关系、函数、和子集上排除了全域量词的二阶逻辑。多项式等级PH中的语言对应与所有的二阶逻辑。这样,“P是NP的真子集吗”这样的问题可以表述为“是否存在性二阶逻辑能够表达带最小不动点操作的一阶逻辑的所不能表达的语言?”

花絮

普林斯顿大学计算机系楼将二进制代码表述的“P=NP?”问题刻进顶楼西面的砖头上。如果证明了P=NP,砖头可以很方便的换成表示“P=NP!”。[4]

康奈尔大学的Hubert Chen博士提供了这个玩笑式的P不等于NP的证明:“反证法。设P = NP。令y为一个P = NP的证明。证明y可以用一个合格的计算机科学家在多项式时间内验证,我们认定这样的科学家的存在性为真。但是,因为P = NP,该证明y可以在多项式时间内由这样的科学家发现。但是这样的发现还没有发生(虽然这样的科学家试图发现这样的一个证明),我们得到矛盾。"[5]

参看

外部链接及参考