与NP-hard相比,为什么NP-Complete类很重要?


19

我正在研究计算复杂性,我想知道为什么NP-Complete(NPC)问题根本上是一门重要的课。我发现很明显,为什么我们有兴趣展示给定的NP问题是NP难题。

我也理解NPC的定义,并且知道给定的决策问题在NP中是很困难的,知道它在NP中就是NPC的意思。

但是,我不明白的是:为什么这个概念如此重要?当然,如果我们发现这在时间P运行(不论是否是在NP)任何NP-硬算法,我们已经表明,ñP=P

为什么这个概念如此重要?


3
我删除了您的第二个问题,因为它与第一个问题完全分开。但是,这是一个很好的问题,我鼓励您作为一个新问题提出。要恢复文本,请单击“已编辑的[在任何时间]”链接,该链接将向您显示编辑历史记录,并允许您复制粘贴文本。
David Richerby

Answers:


16

NPC有趣的原因至少有几个:

  • NP类包含许多有趣的问题(无论是在理论上还是在理论上),而且其中许多问题被证明是NP困难的(因此是NP完全的),但是NP之外的许多问题几乎肯定很难解决。 NPC不仅提供理论上的关注,还提供了一组(粗略的)问题,这些问题看似很难,但又不难,我们无法尝试对它们做点什么。
    换句话说,NPC可能是我们希望可以是多项式时间可解的极限,例如,尝试PSPACE = P似乎很费力。
  • NP类在结构上很有趣。这是“我们是否能从不确定性中获得更多的计算”速度”的基本示例。因此,我们对是否P = NP感兴趣,而NPC(可能)是解决这一问题的重要组成部分。
  • NP硬性(作为一个类)确实太大且种类繁多,无法作为一个整体来处理,它可以简化为NP完全性问题,包括NP之外的大量内容,因此从尝试开发总体结果和技术的观点,没有什么可抓住的。

由于我原来的问题已经过编辑以反映标题,因此也许您也应该隐藏第二个问题的答案。
失忆

1
NP-hard不是“ NP之外的所有事物”,因为它(至少)包括NP中的NP完全问题。我理解您的意思,但不知道如何简洁地陈述它。
vonbrand,2015年

@vonbrand,是的,我疯狂地夸大了这一点(也许是精神错乱?)。新版本是准确的,但是不幸的是它并没有完全的感觉。
卢克·马西森

9

从某人为谋生编写代码的角度来看,对NP完整性有很好的了解对于以下方面很重要:

1.识别何时树错树皮

NP完全问题是NP困难问题中最简单的问题,但是据我们所知,解决此类决策问题需要花费与输入量成指数关系的时间。因此,实际上,如果您可以证明您要解决的问题是NP难题的(通常是通过显示一个有效的解决方案也可以为某些NP完全问题提供有效的解决方案),则您知道通常,您可以停止寻找有效的算法来准确解决它。取而代之的是,您可以从已知的算法中进行选择,这些算法可以很好地解决NP困难的优化问题,并继续进行项目的其余部分。

2.找到合适的树

由于计算机通常用于攻击NP难题,因此已经开发出可以有效解决某些 NP难题实例的专用求解器。认识到您的问题是NP完全的,这是找到现有工具(SAT,ILP,SMT,CSP等)的第一步,该工具在某些情况下可能会帮助您找到确切的解决方案,而在这些情况下,您本来必须解决一个问题。近似。


-4

“当然,如果我们发现任何在时间P上运行的NP硬算法(无论是否在NP中),我们就表明NP = P。为什么这个概念如此重要?”

每个NP问题都可以归结为任何NPC问题,但并不是每个NP问题都可以归结为任何NP-hard问题,因此并不是真的,因此证明NP-hard在P中的算法根本不能证明P = NP。但是,对于NPC问题,情况恰恰是“减少”的含义。因此,如果找到针对​​NPC问题的P算法,那么我们将证明P = NP。


3
XX
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.