繁体   English   中英

为什么背包问题的运行时间是 W 的 n 和 2 位数

[英]Why is the runtime of Knapsack Problem in terms of n and 2 number of bits of W

由于这篇文章,我最近开始了解伪多项式的含义。 但是,我的一个迫切问题是,为什么背包问题与动态编程一起使用时的运行时间为在此处输入图像描述 并不是在此处输入图像描述 . 其中 n 是考虑用于背包的物品数量,并且在此处输入图像描述 这是编码 W 所需的位数和在此处输入图像描述 是给定 x 位的可能状态(值)的数量。 考虑到时间复杂度的正式定义将问题的大小定义为

问题输入的大小是写出该输入所需的位数

由于权重的位数不是固定的而是可变的,因此最多有在此处输入图像描述 从 0 到 W 乘以值 n 的所有可能值的总位数在此处输入图像描述 . 话虽如此,为什么背包与动态编程配对时的运行时间为在此处输入图像描述 并不是在此处输入图像描述 . 我知道在此处输入图像描述 但时间复杂度是指输入的大小为位数 我做了什么假设,或者我遗漏了什么可以纠正这种脱节的知识。

这是与背包输入大小相关的解释。

  • 项数n可以用 O(lg n ) 位表示;
  • n项权重:注意每个项的权重必须≤ W (否则我们可以忽略那些权重大于W的项),我们可以使用 O(lg W ) 位表示每个项的权重,总共 O( n lg W ) 位;
  • n项值:设最大值为V 然后,可以使用 O(lg V ) 位来表示每个项目值,总共 O( n lg V ) 位。

因此,总输入大小为 O(lg n + n (lg W +lg V )) = O( n (lg W +lg V ))。

b = lg Wv = lg V 那么输入大小是O( n ( b + v ))。 现在,请注意,在动态规划解决方案 v 的 O( nW ) 运行时间中, v没有明确显示,因此运行时间为 O( nW ) = O( n2^b )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM