解决特定NP-Complete问题时,最快的算法是什么?例如,travelling salesman的朴素实现是O(n!),但是通过动态编程,它可以在O(n ^ 2 * 2 ^ n)中完成。是否有任何“更容易”的NP-Complete问题有更好的运行时间?
我对确切的解决方案感到好奇,而不是近似。
答案 0 :(得分:4)
NP-Complete问题的一个特征是NP中的任何问题都可以机械地转换为最多为多项式时间的任何NP完全问题。
因此,无论对于任何给定的NP-Complete问题的最佳解决方案是什么,它对于任何其他NP问题自动是一个类似的好解决方案。
鉴于动态规划可以解决2 ^ n时间和2 ^ n空间中的旅行商问题,所有其他NP问题必须同样如此[加上应用转换的时间,我猜 - 所以它可以是2 ^(n + 1)]。
答案 1 :(得分:4)
[...]动态编程可以在O(n ^ 2 * 2 ^ n)中完成。是否有任何“更容易”的NP-Complete问题有更好的运行时间?
排序。您可以通过创建在多项式较大输入中对相同解进行编码的人为问题来消除任何多项式因子。只要输入只是多项式变大,产生的问题仍然是NP完全的。由于复杂性是按照定义将输入大小映射到运行时间的函数,如果输入大小增加,函数会进入较低的O类。
因此,在TSP上运行的相同算法,输入填充n ^ 2个无用位,将具有复杂度O(1 * 2 ^ sqrt(n))。
答案 2 :(得分:0)
一般情况下,如果不尝试所有组合(可能存在负距离等),您无法找到通用旅行商问题的最佳解决方案。
通过添加其他限制并放宽获取最佳解决方案的要求,您可以加快相当的速度。
例如,如果问题中的距离服从“不再直接从A到B,而不是从A到C到B”(即快捷方式永远不会更长),则可以获得多项式可执行时间,< em>和你可以将结果最大化为最佳值的1.5倍。见http://en.wikipedia.org/wiki/Travelling_salesman_problem#Metric_TSP