跳转到内容

P/NP问题:修订间差异

维基百科,自由的百科全书
删除的内容 添加的内容
SDiZ留言 | 贡献
P 和NP:​ "本质上"一詞不合適。多項式時間不等於"很快" .
Pioneerlike留言 | 贡献
无编辑摘要
第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:35的版本

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]

參看

外部鏈結及參考