非穷举的最坏情况NP完全求解算法

时间:2015-07-02 09:41:14

标签: algorithm optimization np

Disclamer: 首先,我知道并非所有NP完全问题都有一个庞大的搜索空间'他们必须寻找解决方案,但是大量最知名的解决方案,所以我会做出这个假设,因为这是一个关于(已知)算法的问题,而不是复杂性理论。所以它可能更多地适用于离散优化问题,但我不会将它局限于它们。

上下文:我所知道的大多数用于解决此类NP完全问题的算法通常都会在算法运行时在搜索空间中抛出可能的解决方案(想想分支 - 并在这里绑定例如)。然而,虽然在平均和最好的情况下,这总是产生效率或多或少的减少,在我能想到的所有例子中,有一种方法可以构建最坏情况的问题,你必须在搜索中查看所有点空间。这么多,我的一位同事认为这至少是NP完全问题的基本属性(当然,如果P = NP那么整个讨论都是微不足道的)。

问题:我认为必须有一个NP完全问题的例子和解决它的算法,你可以始终找到减少的问题搜索空间,即使在最坏情况运行算法时也是如此,即使这可能只会使您在最坏情况运行时与常设搜索算法相比经常(或更常见的是多项式)减少。当然,我可以想到你综合扩展搜索空间的简单例子,但你可以减少它先验,所以我正在寻找一个真正的算法来解决一个真正的问题,这意味着你通常可以只在执行算法时减少空间。

示例:我将通过示例说明这一切。已知混合整数线性编程是NP难的。然而,对分支结构中的松弛使用的单纯形算法的大量研究通常允许您丢弃大部分搜索空间。一个非常简单的例子是:

max x_1 + ... x_n
w.r.t.
0 <= x_1 <= x_2 <= x_n <= N*Pi
x_2,x_4,x_6,..., x_(floor(n/2)*2) integers

很明显,你总是想要最大的x_i,所以你可以省略其余部分。从最初的放松开始,您可以选择最大的x_n,并将其余的全部留出。但是,你可以想到它没有的例子:

max v_1 * x_1 + ... + v_n * x_n
w.r.t.
0 <= x_1,x_2, ..., x_n <= 1
w_1 * x_1 + ... + w_n * x_n <= W
x_1, ..., x_n integers

这是0-1背包问题。根据权重,值和分支和界限的顺序,您可能必须测试x_i的每个组合以找到最大值。

1 个答案:

答案 0 :(得分:0)

我不确定“非详尽无遗”有一个很好的定义。无论如何,我会试着回答。

problem of finding a maximum clique。我们可以通过布尔向量来参数化搜索空间,该布尔向量指示每个顶点是否属于集团,使得2 n 可能性,没有先验可排除,但每个n顶点图最多有3个 n / 3 ≤1.5 n 最大派系,甚至像Bron-Kerbosch这样的相当简单的算法也能达到多项式因子。 (维基百科文章描述了指数基数的后续改进。)

另一个例子是Hamiltonian path。有n!完整图中的不同解,没有先验可排除的,但是存在一个动态程序来找到一个运行时间为2 n poly(n)的程序。

另一方面,Strong Exponential Time Hypothesis是我们不能比2 n 做得更好的n变量可满足性,它排除了一个已知的算法更好的最坏情况运行时间。在实践中,启发式是如此之好以至于我们使用可满足性作为减少目标,例如,检查组合电路的有效性。就我而言,“NP-hard意味着穷举搜索就像它一样好”是一种有害的过度简化。