如果Y在多项式时间内可简化为X,那么X至少与Y一样硬是怎么回事?

时间:2017-03-21 04:50:33

标签: algorithm computer-science complexity-theory np-complete np-hard

我很难理解两类问题的复杂性之间的关系,比如NP-hard和NP-complete问题。

https://stackoverflow.com/a/1857342/的回答:

  

直观地说,这些问题至少与NP完全问题一样难以解决。请注意,NP-hard问题不必在NP 中,而它们不一定是决策问题

     

这里的确切定义是问题X是NP难的,如果存在NP完全问题Y,那么Y可以简化为{{ 1}}在多项式时间

如果问题X可以在多项式时间缩短为Y,我们是否应该说X至少与Y一样难?如果问题X在多项式时间内可缩减为Y,则求解X所需的时间是多项式时间+求解Y所需的时间。因此,在我看来,问题X至少与Y一样难。

但上面引用的文字恰恰相反。它说,如果NP完全问题X可以简化为NP难问题Y,则NP难问题至少与NP完全问题一样难。

这有什么意义?我在哪里思考错误?

2 个答案:

答案 0 :(得分:2)

你的错误是假设你必须解决X以解决Y.Y实际上可能更容易,但解决它的一种方法是将其更改为X问题的实例。由于我们处于大O符号和NP类中,我们已经超越了线性算法,您可以随时安全地丢弃算法的任何线性部分。哎呀你几乎可以安全地丢弃任何多项式部分,直到P = NP问题得到解决。这意味着O(f(n) + n) = O(f(n))其中n=O(f(n))

示例(显然既没有NP-hard或NP-complete问题,只是一个例子):你要找到n个未排序数组中的最小数字。有一个明显的解决方案来迭代整个列表,并记住你找到的最低数字,非常直接和坚实的O(n)。

其他人来了,说,好吧,让我们改变它来排序数组,然后我们可以拿第一个数字,它将是最低的。请注意,这个问题的转换是O(1),但是我们可以假设必须对数组进行一些预处理才能使它成为O(n)。整体解决方案是O(n + n * log(n))= O(n * log(n))。

在这里你也将容易的问题改为难题,从而证明难题确实与简单问题相同或更难。

基本上NP难问题的定义意味着,X至少和NP完全Y问题一样难。如果你发现一个NP-complete Y问题可以通过解决X问题来解决,那就意味着要么X比Y更难或更难,那么它确实是NP难的,或者如果它更简单,就意味着你发现了算法比以前的算法更快地解决Y,甚至可能将它从NP-complete类中移出。

另一个例子:让我们假装卷积在我的“完整”集中,通常需要O(n²)。然后你用O(n * log(n))提出快速傅里叶变换,你会发现你可以通过将其转换为FFT问题来解决卷积问题。现在你想出了一个卷积解决方案,它是o(n²),更具体地说是O(n * log(n))。

答案 1 :(得分:0)

设I_X为X的指标函数(即,如果输入在X中则为1,否则为0)并且I_Y是Y的指示函数。如果Y通过可以在多项式中计算的函数f减少到X-时间,然后I_Y = I_X。 f,在哪里。表示功能组成。 X至少和Y一样硬,因为给定I_X的算法,上面的公式给出了I_Y的算法,对于在多项式替换(例如,多项式,指数,有限)下关闭的任何运行时类,如果算法为I_X属于该类,那么I_Y的算法也是如此。该陈述的对立面是,如果Y没有快速决策程序,则X没有快速决策程序。