NP完整性教学-Turing减少vs Karp减少


25

我对如何最好地向计算机科学专业的学生教授NP完整性的问题感兴趣。特别是,我们应该使用Karp缩减还是Turing缩减来教授它?

我觉得NP完全性和约简的概念是每个计算机科学专业都应该学习的东西。但是,在教授NP完整性时,我注意到使用Karp约简法有一些缺点。

首先,对某些学生来说,减少Karp似乎不必要地令人困惑。减少的直观概念是“如果我有解决问题X的算法,那么我也可以使用它来解决问题Y”。这是非常直观的-但映射到Turing缩减比映射Karp缩减要好得多。结果,我看到试图证明NP完整性的学生因直觉而误入歧途,并形成了错误的证明。尝试教授这两种简化方法并强调Karp简化方法的这一方面有时会感觉有点像是不必要的形式主义,并且会占用不必要的课堂时间和学生的注意力,这似乎是无关紧要的技术细节;我们为什么要使用这种更严格的还原概念,这并不是不言而喻的。

我确实了解Karp缩减和Turing(Cook)缩减之间的区别,以及它们如何导致NP完整性的不同概念。我意识到,减少Karp可以使我们更好地区分复杂度等级之间的区别。因此,对于认真研究复杂性理论,减少Karp显然是正确的工具。但是对于仅学习此方法并且永远不会进入复杂性理论的计算机科学专业的学生来说,我不确定这种更好的区分是否对他们至关重要至关重要。

最后,作为一名学生,我记得遇到“重言式”之类的问题时感到困惑-例如,给定一个布尔公式,检查它是否是重言式。令人困惑的是,这个问题显然很难解决:任何多项式时间算法都意味着P=NP; 解决这个问题显然和解决重言式问题一样困难。但是,即使从直觉上讲重言式和可满足性一样难,重言式也不是NP难的。是的,我今天了解为什么会这样,但当时我记得对此感到困惑。(一旦我终于明白了,我的脑海便是:无论如何,我们为什么要区分NP-hard和co-NP-hard?这似乎是人为的,并且在实践中没有很好的动机。为什么我们专注于NP而不是从实际的角度来看,共NP硬度似乎与NP硬度在本质上具有相同的实际结果,所以为什么我们都对这种区别挂了钩?是的,我知道答案,但是作为一名学生,我记得这只是让这个科目变得更加神秘和缺乏动力。)

所以,我的问题是这个。当我们向学生教授NP完全性时,使用Karp归约法或Turing归约法更好吗?有没有人尝试使用图灵归约法来教授NP完全性的概念?如果是这样,情况如何?如果我们使用图灵归约法讲授概念,而跳过与Karp归约法相关的概念性问题,会有任何明显的陷阱或弊端吗?


相关:请参见此处此处,其中提到我们在文献中使用Karp归约法的原因是因为它使我们能够区分NP硬度和共NP硬度。但是,似乎没有给出任何针对该能力是否对每个CS专业都应该学习的算法课程的学习目标至关重要的教学观点的答案。另请参见cstheory.SE上的此处,该讨论也有类似的讨论。


动机观察:图灵减少了在NP的一个问题是不知道暗示XNP

1
@RickyDemer,理解-但是,当我们试图证明一个问题很难时,我们并不在乎是否在NP中,因此这并不会有效地激励我。并且,呈现出的问题是很难被NP,NP完全性,NP-硬度等的主要应用X
DW

1
我看不出太大的区别。Cook提出的“要求解决其他问题”的想法对于编程来说是很自然的,但是对于那些具有更多抽象背景(在他们的皮带下有一些离散数学)的人来说,在问题实例之间进行映射也是自然的。
vonbrand

Answers:


10

我想肯定会教您使用Karp(多对一)简化。无论使用多时间Turing缩减(Cook)的好处如何,Karp缩减都是标准模型。

每个人都使用Karp,而教Cook的主要陷阱是,您最终会遇到一整班学生,每当他们读一本教科书或尝试与您未教过的任何人讨论该主题时,都会感到困惑。

我同意,从某种角度来说,库克削减措施更为明智,而且从实际意义上讲,NP硬度和coNP硬度之间没有区别,从某种意义上来说,它们都意味着“这个问题非常艰巨,您将无法获得解决方案”。可以处理大型实例的通用,高效,精确的算法。” 另一方面,NP和coNP之间的区别并不完全是基于Karp约简的理论的产物:您不会经常谈论非3色性的图形,或者其中每组  个顶点包含至少一个边缘。不知何故,问题的“自然”版本通常似乎是NP,而不是coNP。k


7

最好两个都教!计算机科学专业的人应该都知道这两个方面。

我不知道有人使用Cook归约法来教授NP完整性,复杂性理论家显然没有,非复杂性理论家通常遵循自Karp论文以来的标准定义,并且在所有教科书中使用(据我所知)。如果您不遵循标准术语,将在以后给他们带来很多困惑。

减少Cook实质上是使用黑盒子例程解决问题。如果您的学生有一定的编程经验,他们很容易解释和激励。它们是必不可少的,因为如果没有Cook归约法,就无法讨论搜索问题,优化问题等之间的归约。

我将介绍减少Cook减少之后的减少Karp以及作为一种特殊的Cook减少。我认为它们对于研究N P必不可少的。这就是N PP N P之间的区别。我认为,很显然,ñ P更加自然考虑其验证定义。NPNPPNPNP

当我们查看c o N PNPcoNP 与发现的目标(确定性)的算法来解决这些问题没有它们之间的任何差异。我认为这种观点是您认为减少Karp并不是那么重要的原因。但这不是考虑的正确方法。思考N P的正确方法是作为一种非常强大且自然的问题说明语言。如果你把有效的核查,问题的规范语言观点当真,那么你无法脱身与库克减少和替换卡普减少 ň PP ñ PNPNPNPPNP

xAf(x)B


2
有趣!如果我们采用问题说明语言视图,您能否详细说明为什么我们不能摆脱用库克减少法代替卡普减少法的问题? 仍然可以是自然类(基于问题说明语言的观点),并且仍然可以使用Karp归约证明NP问题的难度。因此,我不明白为什么NP是自然复杂性类这一事实会阻止我们使用Karp归约来推理语言中的语言。NPNPNPNP

@DW在您的评论中是不是用“ Cook”代替了(第二个和第三个)“ Karp”?您仍然可以证明使用Cook很难解决问题,这不是问题。问题在于,NP并未在其下关闭,即,减少Cook不能有效保留问题的可验证性。
卡夫(Kaveh)2014年

2
糟糕,是我的意思是库克,而不是卡普。(嗯!)我知道在Cook归约法下NP不是封闭的,但是您可以从我们向本科生教授算法的角度来详细说明为什么这是个问题吗?这会产生什么教学或概念问题?如果我们教这样的算法,并且仅仅承认/接受NP在Cook归约法下没有封闭,那将会带来什么负面后果?例如,这会引起学生在概念上的误解吗?
DW

-3

减少的直观概念是“如果我有解决问题X的算法,那么我也可以使用它来解决问题Y”。

解决此特定教学问题的一种有趣方式是认识到NP完整性与不可判定性具有相似性和相似性,这也是不直观的。学生只有在听说过算法停止后才上课。但是TCS的原理定理是存在无法保证解决的问题,即停顿问题。实际上,不可思议的问题似乎远非人为的,显然有些无所适从。

因此,该理论告诉我们从根本上将计算视为在某些情况下可能返回答案的过程的方法。在其他情况下,可能不会。对于NP的完整性和可判定性,最基本和最普遍的问题是“是否有一种算法可以Y在P时间内返回”。但这并没有说明N以P时间返回的算法。一种算法可以Y在一个实例中以P时间返回,而在其他实例中不返回答案。理论告诉我们,这里确实确实存在明显的区别,我们必须密切注意。如果它不直观,则意味着我们的基本直觉需要重新调整(这在理论教学中经常是这种情况)。


换句话说,显然存在一些算法,这些算法可以Y在P时间返回,但比P时间返回花费更长的时间,N并且该理论基于/定向/集中于其所需的响应时间Y
vzn13年

1
任何写过五个以上程序的学生都将从直接的个人经验中熟悉“一种不会停止的算法”的概念。
David Richerby

只是试图根据日常经验/类比尝试以更直观的方式定义coNP。我自己也总是觉得它不直观。有谁有更好的方法?
vzn13年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.