子集和问题:给定一组数字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
是常数还是什么?
答案 0 :(得分:1)
如果某个输入的某些问题的算法的运行时间受O(n^k)
的限制,则取决于各种事情,这个运行时边界是否被认为是多项式,伪多项式或者没有这些。如果k
是某些特定的常量,如k=3
,则绑定是多项式。如果k
是输入的一部分,则运行时绑定不被视为多项式限制。
简要解释了运行时边界的概念here;但是请注意,术语“多项式运行时”的非正式用法会限制'通常有点草率。在最精确的意义上,解决问题 P 的算法 A 可以具有在其输入的编码长度中多项式限制的运行时界限 。这意味着,对于 A 的 P 实例的特定编码,也可以看到该边界。
此外,由于数字的二进制编码通常用于算法,因此编码数字的编码长度可能呈指数增长。如果 A 的运行时绑定在其输入的数值中以多项式为界,但在输入的编码长度内没有限制,则该边界称为伪多项式,简要解释为here。
我希望这会有所帮助,具体细节在非正式解释中通常有点不准确。