【发布时间】:2015-02-01 17:53:14
【问题描述】:
我一直在搜索伪多项式时间。 我对此有未解决的问题。 例如,0-1 背包算法的时间复杂度为 O(NW)。 N 是物品的数量,W 是背包的大小。 它是伪多项式,因为时间复杂度是 O(N X 2bits in W)。
那么,我认为 O(2bits in N X 2bits in W) 对于时间复杂度是可能的。但是为什么0-1背包算法是伪多项式只是因为'W'而不是'N'?
【问题讨论】:
标签: algorithm
我一直在搜索伪多项式时间。 我对此有未解决的问题。 例如,0-1 背包算法的时间复杂度为 O(NW)。 N 是物品的数量,W 是背包的大小。 它是伪多项式,因为时间复杂度是 O(N X 2bits in W)。
那么,我认为 O(2bits in N X 2bits in W) 对于时间复杂度是可能的。但是为什么0-1背包算法是伪多项式只是因为'W'而不是'N'?
【问题讨论】:
标签: algorithm
因为它是关于输入的大小,而不是它的值。 N 是数组的大小。 W 只是一个值。
我喜欢认为它是伪多项式,因为如果我们将W 编码为二进制(或更大)表示形式,它的行为呈指数级,但如果我们将W 编码为unary representation,它的行为“多项式”。
但对于N,这不是真的。无论我们对输入数组进行哪种表示编码,时间函数都将始终表现为多项式。
这有一个实际结果,即创建一个处理时间过长的输入是多么容易。如果我们想攻击N,我们必须创建一个包含N元素的数组。但是如果我们选择W,那么就像创建一个具有单个大值的数组一样简单(使用log2 W 位)。
【讨论】:
请注意,N 表示您拥有的元素数量,每个元素表示为 (w_i,c_i)(重量,成本) - 因此总体输入大小为 Omega(n) - 因为它必须包含所有 n 元素。
不过W是一个大小,输入只包含数字,但由于需要log(W)位来表示大小,所以输入大小为Omega(log(W))
总之,我们说背包(例如)是伪多项式 - 因为它在 INPUT 的大小上不是多项式,它是指数的,因为它需要 O(N*2^b) 时间,输入大小是 @987654328 @ - 所以它需要相对于输入大小的指数时间。
【讨论】: