从最正式的意义上讲,输入的大小是参考该算法的Turing Machine实现来测量的,它是对输入进行编码所需的字母符号的数量。
这当然是相当抽象的,并且在实践中很难操作,或者至少非常烦人-我们将需要考虑如何指定分度数等。然后,在实践中通常会发生的是寻找一个代理输入的测量尺寸-这是更方便和容易,但不引起我们的分析任何数学问题。
以您的“ abcde”示例为例,通常情况下,我们用于输入的字母很小,因此即使使用字符的代理度量,我们也知道即使在Turing Machine上,只要打扰一下,指定一个输入编码,它将“ abcde”转换为某种编码形式,对于某些常数,其长度最多为。由于我们通常会抛弃常数因子,因此常数的扩展通常不会对我们的渐近分析产生任何影响。55×c c
在另一种情况下,我们通常通过顶点数来衡量输入图的大小。显然,如果我们要指定任意大的图,则编码输入的大小不只是例如,边缘发生了什么?我们所知道的是,我们可以使用一种合理的编码方案,以位表示图。与常量相比,这更多的是扩展,但是在很多有趣的情况下,我们仅以多项式的粒度处理事物,并且多项式的组合方式非常好-特别是例如我们确定运行时间为,其中是一个多项式,那么我们知道存在一些多项式nnN=c⋅n2lognO(p(n))pp′使得,所以当我们回到输入的形式度量时,我们仍处于多项式时间。O(p(n))=O(p′(N))
当您使用数字时,这可能会下降。由于大小为的数字可以编码为比特,因此如果我们的运行时间为,则将为 -实际输入大小的指数-将使幅度为输入尺寸的代理一个不错的选择,如果我们要谈论的成员例如(当你来到Strongly- -完整和Weakly-完成,请记住这一点。另一方面,如果我们只对可判定性感兴趣,那么这将是一个足够好的代理度量。mn=O(logm)O(m)O(2n)mPNPNP
因此,虽然没有为输入大小选择代理度量的明确规则,但要求是代理大小相对于输入大小的扩展或收缩应与您要证明的兼容。根据经验,恒定因数的变化几乎无关紧要,较小的多项式因数通常很好,并且适用于您所看到的大多数基本理论,较大的多项式因数可能仍适用于理论,但在实践中可能令人讨厌,指数变化通常太极端了。