如何在多项式时间内验证旅行商问题的解决方案?


Answers:


20

更确切地说,我们知道TSP是否在。即使可能普遍认为PN P,也有可能在多项式时间内求解。现在,回想一下问题是N P- Hard和N P -complete 意味着什么,例如,请参阅此处的答案。我相信您的困惑源于以下定义:N P不一定是N P难题。PPNPNPNPNPNP

当您和您链接到的Wikipedia页面上声明时,决策问题 -complete:给定成本和整数x,请确定游览是否比x便宜。解决问题的一种方法是在N P中查看给定解,可以轻松地在多项式时间内验证该解是否比x便宜。你该怎么做?只需按照给出的导览,记录其总费用,最后将总费用与x进行比较即可。NPxxNPxx


“只需遵循给出的游览,记录其总成本,最后将总成本与x进行比较即可。” ->是的,但是要检查的旅行数目成倍增加!
拉泽

2
看来我只是有点太慢了。;-)
Niel de Beaudrap 2012年

3
@Lazer不,只有一次旅行需要检查。您将进行一次游览,并记录其长度。如果小于,则输出yes,否则输出nox
Juho 2012年

“决定是否要游览”绝对意味着我们没有得到游览。我想念什么?
拉泽

3
@Lazer不,在问题中,您将得到一个加权图和一个目标成本。证书是一次旅行。有关其他说明,请参见Niel的答案。正如SUBSET-SUM的Wiki中的示例一样,我们没有被赋予零,而是被赋予了特定的子集作为证书。
Juho 2012年

34

问题的关键在于您必须考虑决策问题:

旅行商问题(决策版)。给定一个加权图G和一个目标成本C,在G中是否存在一个哈密顿循环,其权重最大为C

对于“是”实例,证书只是权重最大为C的某个哈密顿循环。如果您可以有效地解决此问题,则可以通过二分查找来找到最小游览的成本,首先以整个网络的权重为上限。


3

您可能正在考虑确定给定TSP解决方案是否是最佳解决方案的问题。但是,尚无已知的多项式解决方案,这意味着此问题属于NP难问题,但不一定是NP完全问题。

TSP 决策问题实际上是确定图中任何解决方案的权重是否G最多C(如Niel的答案中所述),这在多项式时间内肯定是可验证的。


5
对不起,这个学堂很难,但是TSP并不是NP难的,因为有游览。例如,尽管有n个,但排序仍在P中以及可能的排列。庞大或快速增长的搜索空间并不总是暗示硬度。O(n!)n!
Juho 2012年

@Juho可以通过简单地检查来验证序列是否已排序。但是,要知道某种东西是TSP的最佳解决方案,就必须知道成本是最低成本,这必然要求知道所有其他成本。n0<=n1<=...
Casey Kuball 2012年

4
不,即使不计算所有其他行程的长度,您也可以获得最佳。是的,有可能证明这实际上是最佳的,而无需计算所有其他行程。例如,考虑分支和绑定。
Juho

7
我要说的是,巨大的搜索空间并不一定意味着这个问题很困难。例如,即使我们不知道比列举所有可能性的蛮力更好的算法,也并不意味着它是唯一的算法。即使在这里,动态编程也是一个很好的例子:Held-Karp算法是在时间运行的TSP的精确算法。抱歉,可以说这只是挑剔,但我只是想提醒一下:)O(n22n)
Juho 2012年

@Juho好点。我已经更新了答案,不再将蛮力作为唯一选择(只是没有任何多项式解)。
Casey Kuball 2012年

2

您可以证明这是最佳的,这是通过查询是否存在更短的解决方案来解决多项式时间内的决策问题(请参阅其他答案)的预言。如果您的目标是根据给定的Oracle构建最佳解决方案,请执行以下操作。通过二分查找找到最小的总权重(或者,如果存在非整数的边缘权重,则找到与最小的总权重相差小于两个边缘权重之间的最小差的总权重)。调用此值。对于图中的每个边,删除边,然后查询预言机,以查看是否仍然存在最多M的解。如果是这样,请忽略边缘,然后继续。如果没有,将边缘放回去,然后继续。处理完所有边缘后,将剩下最小权重的哈密顿循环。MM

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.