假设有一些数学背景,您如何对天真的计算复杂性理论进行概述?
我正在寻找P = NP问题的解释。什么是P?什么是NP?什么是NP-Hard?
有时维基百科的写作就好像读者已经理解所涉及的所有概念一样。
答案 0 :(得分:61)
Hoooo,博士学位闪回。好的,这就是。
我们从一个决策问题的想法开始,一个算法总能回答“是”或“否”的问题。我们还需要两种计算机模型(图灵机,真的)的概念:确定性和非确定性。确定性计算机是我们一直在思考的常规计算机;一个非确定性的计算机就像我们习惯的那样,除了它具有无限的并行性,因此无论何时你来到一个分支,你都会产生一个新的“过程”并检查双方。就像Yogi Berra说的那样,当你来到路上的叉子时,你应该接受它。
如果有一个已知的多项式时间算法来得到答案,则决策问题在P中。如果存在用于非确定性机器的已知多项式时间算法以获得答案,则在NP中存在决策问题。
在P中已知的问题在NP中是非常简单的 - 非确定性机器从不会麻烦自己分叉另一个过程,并且就像确定性过程一样。已知存在P和NP都不存在的问题;一个简单的例子是枚举长度为n的所有位向量。无论如何,这需要2个 n 步骤。
(严格地说,如果节点终极机器可以在多时间内得到答案,则决策问题在NP中,并且确定性机器可以验证在聚合时间内解决方案是正确的。)< / p>
但是在NP中已知存在一些问题,其中没有多时间确定性算法;换句话说,我们知道他们在NP中,但不知道他们是否在P中。传统的例子是旅行商问题(decision-TSP)的决策问题版本:给定城市和距离,是否有一条覆盖所有城市的路线,返回起点,在 x 距离以内?在一个不确定性的机器上这很容易,因为每当不确定性的旅行推销员来到路上的叉子时,他就会接受它:他的克隆人前往他们没有去过的下一个城市,最后他们比较笔记,看看是否任何克隆的距离都小于 x 。
(然后,成倍数量的克隆人会争取解决哪些克隆必须被杀死。)
目前尚不清楚决策TSP是否在P中:没有已知的多时间解决方案,但没有证据证明这种解决方案不存在。
现在,还有一个概念:给定决策问题P和Q,如果算法可以在多项式时间内将P的解转换为Q的解,那么可以说Q是多时间可缩减的 (或者只是简化)到P。
如果你能证明(1)它在NP中,并且(2)表明它的多时间可以简化为已知为NP完全的问题,则问题是NP完全的。 (其中最难的部分是提出NP完全问题的第一个示例:这是由Steve Cook在Cook's Theorem完成的。)
所以真的,它说的是,如果有人找到一个NP完全问题的多时间解决方案,他们会自动得到一个所有 NP完全问题;这也意味着P = NP。
问题是NP难的,当且仅当它“至少与NP完全问题一样难”时。寻找最短路线的传统旅行商问题是NP难的,而不是严格的NP完全。
答案 1 :(得分:5)
Michael Sipser的Introduction to the Theory of Computation是一本很棒的书,非常易读。另一个伟大的资源是Scott Aaronson的Great Ideas in Theoretical Computer Science课程。
使用的形式主义是查看决策问题(是/否答案的问题,例如“这个图表是否具有汉密尔顿循环”)作为“语言” - 字符串集 - 输入的答案是是的。有一个关于“计算机”是什么的正式概念(图灵机),如果存在用于在图灵机上确定该问题(给定输入字符串,说是或否)的多项式时间算法,则存在问题。
如果在多项式时间可检查,则问题出现在NP中,即如果对于答案为是的输入,则给出(多项式大小)证书,您可以检查该证书在多项式时间内答案为是。 [例如。给定哈密顿循环作为证书,您显然可以检查它是否为。]
它没有说明如何找到该证书。显然,您可以尝试“所有可能的证书”,但这可能需要指数时间;目前尚不清楚你是否总是 要多于多项式时间来决定是或否;这是P vs NP问题。
如果能够解决该问题意味着能够解决NP中的所有问题,那么问题就是NP难。
另见这个问题: What is an NP-complete in computer science?
但实际上,所有这些可能只对你含糊不清;值得花时间阅读,例如西普尔的书。这是一个美丽的理论。
答案 2 :(得分:5)
这是对查理的帖子的评论。
如果你能证明(1)它在NP中,那么问题是NP完全的 (2)表明它的多时间可以减少到已知的问题 是NP完全的。
第二个条件有一个微妙的错误。实际上,你需要证明的是一个已知的NP完全问题(比如 Y )是多项式时间可以减少到这个问题(我们称之为问题 X )。
这种证据背后的原因是,如果你可以减少 NP - 完成这个问题的问题并以某种方式设法在多时间解决这个问题,那么你也成功了找到 NP - 完成问题的多时间解决方案,这将是一个了不起的(如果不是不可能)的事情,从那以后你将成功地解决长期存在的 P = NP 问题。
另一种看待这种证据的方法是将其视为使用反对证明技术,该技术基本上表明如果 Y - > X ,然后 ~X - &gt; 〜ÿ。换句话说,不能在多项式时间内解决 Y 也不可能意味着在多时间内也不能解决X.另一方面,如果你可以在多时间内解决X,那么你也可以在多时间内解决Y.此外,您可以通过传递性解决在多时间内减少到Y的所有问题。
我希望我上面的解释足够清楚。一个很好的资料来源是Kleinberg和Tardos的算法设计第8章或Cormen等人的第34章。
答案 3 :(得分:4)
不幸的是,我所知道的最好的两本书(Garey and Johnson和Hopcroft and Ullman)都是从研究生证明导向的数学水平开始的。这几乎肯定是必要的,因为整个问题很容易被误解或错误描述。杰夫nearly got his ears chewed off当他试图以过于粗鲁/诙谐的语气来处理此事时。
也许最好的方法是使用big-O表示法using lots of examples and exercises进行大量的动手操作。另见this answer。但请注意,这不是完全相同的事情:单个算法可以通过渐近线来描述,但是说问题具有一定的复杂性是关于每个可能的算法的声明为它。这就是证明如此复杂的原因!
答案 4 :(得分:2)
我记得Papadimitriou的“计算复杂性”(我希望我的名字拼写正确)作为一本好书
答案 5 :(得分:1)
非常简化:如果解决问题的唯一方法是枚举所有可能的答案并检查每个答案,那么问题就是NP难题。
答案 6 :(得分:1)
以下是有关该主题的一些链接:
你熟悉集合基数的概念,即集合中元素的数量,那么人们就可以看到像P代表整数的基数这样的问题,而NP则是一个谜:它是相同的还是它像所有真实数字的基数一样大吗?
答案 7 :(得分:0)
我简化的答案是:“计算复杂性是分析当你添加更多元素时问题变得多难。”
在那句话中,“更难”这个词是故意模糊的,因为它可以指处理时间或记忆用法。
答案 8 :(得分:0)
在计算机科学中,仅仅能够解决问题是不够的。它必须在合理的时间内解决。因此,在纯数学中,你想出了一个等式,在CS中你必须改进这个等式,这样你才能在合理的时间内解决问题。
这是我能想到的最简单的方法,这可能对你的目的来说太简单了。
答案 9 :(得分:0)
根据你有多长时间,也许最好从DFA,NDFA开始,然后表明它们是等效的。然后他们理解ND与D,并且会更好地理解正则表达式作为一个很好的副作用。