关于背包的大O的定义

时间:2014-11-17 22:29:10

标签: algorithm time-complexity knapsack-problem

所以我读到背包问题的时间复杂度是指数级的,因为它是O(nW),并且时间相对于W的位串的长度呈指数增长。

但如果是这种情况,那并不意味着一个算法将一个整数N作为输入并打印0到N之间的每个数字也会以指数时间(而不是线性)运行,相对于N?

的位串长度

1 个答案:

答案 0 :(得分:1)

这是正确的。将整数N作为输入,打印从0到N的所有整数的算法将以N的位数指数运行。因此,当我们说算法是“多项式”或“指数”时,我们的意思取决于我们正在使用什么单位。

通常,单位对应于输入的大小(这解释了我们根据背包情况下的位数进行测量的原因)。你的第二个例子看起来很奇怪的原因是,通常当我们需要迭代N个东西时,输入的大小也是N阶。例如,要求N个数,我们需要读N个数,这个数量占主导地位计算它需要读取数字N本身。

顺便说一句,我们通常也认为读取数字时需要花费一些时间,但这并不完全准确,因为用对数表示许多位来表示数字。但是,出于实际目的,它并不重要,因为计算机通常具有以与1000000000相同的方式处理1的硬件。这里有一些相关的讨论:http://en.wikipedia.org/wiki/Random-access_machine