Answers:
当数字以二进制数给出时,背包问题是。在这种情况下,动态编程将以指数级的步数(输入的大小,即输入中的位数)完成†。
另一方面,如果输入中的数字以一元给出,则动态编程将在多项式时间内(以输入的大小)工作。
这种问题称为弱。
:另一个了解用于提供输入的编码的重要性的很好示例是考虑常用算法,以查看从到 √的数字是否为质数并检查它们是否除以。这是多项式,但不一定是输入大小。如果以二进制形式给出,则输入的大小为,并且算法在时间,它在输入大小上呈指数关系。问题的通常计算复杂度取决于输入的大小。
这种算法,即作为输入一部分的最大数量的多项式,但输入长度呈指数形式的算法称为伪多项式。
m
(包装大小)与n
(物品数量)之间的关系是完全未知的,对吗?并重新“当数字以二进制数形式给出时” ...但是您不能一味地说出来吗?对于大多数算法,我们以10为基础讨论输入大小。为什么在这里谈论二进制?以及是否以二进制,八进制,十进制等进行编码... actual
遍历主算法循环的次数直接取决于n
和W
。
主要的混淆在于“ 大小 ”和“ 值 ” 之间的差异。
“ 多项式时间 ”表示多项式与输入大小有关。
“ Pseudopolynomial Time ”隐含输入值的多项式。可以显示(下),这等效于输入大小的指数。
换句话说:让代表输入和的大小Ñ v 一个升表示输入的值。
多项式时间: 为X ∈ Ñ
伪垄断。时间: 为X ∈ Ñ
现在,背包问题有了一个拟多项式解决方案,而不是多项式解决方案,因为动态编程解决方案给出的运行时间取决于一个值,即,其中W是代表最大容量的值。