凭经验判断问题是否可以完全解决


26

这个问题的灵感来自对StackOverflow的评论

除了了解Garey Johnson这本书中的NP完全问题,以及其他许多问题之外;有一条经验法则可以知道问题是否看起来像是NP完整的问题吗?

我并不是在寻找严格的东西,而是在大多数情况下都能找到可行的东西。

当然,每次我们必须证明一个问题是NP完全问题,或者是NP完全问题的轻微变体时;但是在急于证明之前,对证明的肯定结果抱有一定的信心会很棒。


8
我的经验法则很简单:如果它闻起来不像我已经熟悉的问题,则可能是NP问题(或更糟)。
JeffE 2012年

12
@JeffE当然,您现在已经熟悉了很多问题……CS的新手可能无法使用相同的规则。
2012年

1
@乔:是的。也许最好这样说:如果您没有从教科书中解决问题,那可能是NP问题。
杰夫(JeffE)2012年

2
换一种说法:当问题不是 NP难题时,而不是问题是NP难题时,这是令人惊讶的。

Answers:


15

这是我个人确定问题(即语言)是否是NP完整的方法。如果这两个条件都得到验证:L

  • 我觉得,如果测试一个实例大号意味着我需要检查某种所有组合IL
  • 而且没有办法将这种组合分成两个较小的组合

L

SSS1S2S1S2

ACBABBC

坦率地说,这种方法非常基础:我尝试为给定的问题找到(多项式)算法。如果我找不到一个,那么按照我的观点,这个问题就变得“棘手”。然后是所有NP完全性推理:我能否将一个现有的NP完全性问题编码为这个问题?(并且由于这通常要困难得多,因此我再次尝试找到一个多项式算法。)

我怀疑这是通常的思维方式。但是,仍然很难将其应用于未知问题。我个人记得我被告知NP完整性的第一个例子:集团问题。检查似乎很简单!因此,我认为经验与它有很大关系。直觉有时也可能是无用的。我记得曾多次被告知两个几乎相同的问题,但一个问题在P中,而另一个变化很小的问题是NP-complete。

我还没有找到一个很好的例子(我在这里需要帮助),但这就像帖子的对应问题:这是一个无法确定的问题,但是某些变体是可以确定的。


7
+1

2
经验法则的一个有趣例外是可以通过线性编程解决的优化问题。如果您还没有听说过窍门,那么很难知道如何在多边形时间内解决诸如赋值问题或图形匹配之类的问题,因为分治法和动态编程等窍门似乎并不适用。
hugomg

一个例子是最长公共子序列问题,该问题在P中有2个序列,但进入NP-Hard的问题更多。
Christian Vielma

14

关于问题难度的另一种观点来自游戏和解谜界,在这里,经验法则是“问题尽可能地困难”(并且例外来自问题中的隐藏结构-Massimo关于行列式的示例)评论是一个很好的例子);然后,技巧就在于了解问题的难易程度:

  • n
  • PSPACE中包含涉及有界状态空间中一系列移动的谜题(因为通常可以以标准深度优先的方式探索“移动树”,只需要存储多项式数量的配置),并且这些谜题往往是PSPACE完整的;一个典型的例子是“尖峰时刻”。
  • 具有多项式边界深度的游戏也位于PSPACE中。这将PSPACE的特征描述为APTIME,因为通常的策略的最小-最大特征完美地模仿了交替的Turing机器,其特征是“玩家A存在一个移动,因此玩家B的每个回复都有一个回复为球员A移动……,等等。他们也往往是PSPACE完整的;十六进制和广义井字游戏都是这方面的例子。
  • 不受树深限制,但在(多项式)有界空间中玩的游戏在EXPTIME中,因为总位置数呈指数级增长,并且可以按时间多项式构建和探索整个图形的位置数(因此指数总值) ; 这些游戏通常都是EXPTIME完成的。国际象棋,跳棋和围棋都属于此类。
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.