你怎么知道k对于子集和中的O(n ^ k)是否是常数?

时间:2016-04-25 13:18:46

标签: algorithm input np polynomials subset-sum

子集和问题:给定一组数字S和目标数字,请说0。目的是找到S’的子集S,使其中的元素加起来为0。我听说如果给出S’的大小,这个问题就变成多项式了 例如,如果您有3个元素加起来0的线索,我们就会提出复杂性O(n^3)

P类由多项式时间内可解决的问题组成。例如,它们可以在O(n^k)中针对某个常量k求解,其中n是输入的大小。 (n^k)表示k的大小[n]的子集数量;或者,等价地,我们可以从k - 元素集中选择n个不同元素的方式。 使用n元素; k - 集合的子集是具有k元素的子集。

因此,假设在多项式时间内有一个算法可以找到或找到k - 从0元素求和到n的子集。我的意思是,如果k是算法的输入,k也可以大于3。我们可以说k是常数还是什么?

1 个答案:

答案 0 :(得分:1)

如果某个输入的某些问题的算法的运行时间受O(n^k)的限制,则取决于各种事情,这个运行时边界是否被认为是多项式,伪多项式或者没有这些。如果k是某些特定的常量,如k=3,则绑定是多项式。如果k是输入的一部分,则运行时绑定被视为多项式限制。

简要解释了运行时边界的概念here;但是请注意,术语“多项式运行时”的非正式用法会限制'通常有点草率。在最精确的意义上,解决问题 P 的算法 A 可以具有在其输入的编码长度中多项式限制的运行时界限 。这意味着,对于 A P 实例的特定编码,也可以看到该边界。

此外,由于数字的二进制编码通常用于算法,因此编码数字的编码长度可能呈指数增长。如果 A 的运行时绑定在其输入的数值中以多项式为界,但在输入的编码长度内没有限制,则该边界称为伪多项式,简要解释为here

我希望这会有所帮助,具体细节在非正式解释中通常有点不准确。