背包的多项式时间近似

时间:2014-09-15 17:52:59

标签: algorithm complexity-theory knapsack-problem np

knapsack problem可以在O(n²V)时间内解决,其中V = max(v[i], i = 1,..,n)表示任何项目的最大值。如果我们通过舍入参数θ = ε/n * V“更改单位”并考虑修改后的值y[i] = ceil(v[i]/θ),我们会为任何修复 {{1}获得O(n³/ε)的运行时间}。

Jon Kleinberg 算法设计一书中,他们说:

  

对所需精度ε > 0的依赖不是多项式的,因为   运行时间包括ε而不是1/ε

首先,对于我来说,伪多项式这个术语背后的整个想法并不完全清楚,尽管我已经阅读了一些关于它的文章。但是,除了这个知识差距之外,我主要问自己,如果运行时间包括log 1/ε而不是ε,那么对log 1/ε的依赖性将是多项式的。

1 个答案:

答案 0 :(得分:1)

问题是否是多项式时间取决于其实例的编码方式。例如,我可以定义一个问题PADDED-SATISFIABILITY,其有效实例由一个布尔公式组成,其中包含n个变量,后跟2 ^ n个垃圾位。由于填充,PADDED-SATISFIABILITY可以在多项式时间内解决(不像,可能是SATISFIABILITY,它是NP难的)。

当实例涉及整数时,通常假定编码,其中用于表示正整数的位数约为该整数的log2。在这种情况下,伪多项式时间算法意味着,如果我们从正整数的二进制表示切换到一元,那么它们需要指数(!)更多位来表示,那么算法是多项式时间。

如果我们(频繁)假设1 /ε是正整数,那么Kleinberg指出多项式依赖性将在log 1 /ε上,因为这大约是指定该参数所需的位数在二进制。一元表示中的比特数约为1 /ε。