输入编码(时间复杂度)

时间:2012-05-02 21:28:15

标签: algorithm encoding clrs

不确定这是否是正确的问题。 在Cormen第1056页,我读到如果算法的运行时间是O(k)并且“k”用一元表示,即k 1s的字符串,那么算法的运行时间是0(n),其中“n”是输入大小(以位为单位),如果“k”表示为二进制,则表示为n = lg k + 1,算法的运行时间变为o(2 ^ n)。

所以我怀疑为什么在这种情况下“一元”表示不是首选的,因为它在其他情况下给出了与指数形成对比的多项式时间。

1 个答案:

答案 0 :(得分:5)

一元时间给出相对于输入大小的多项式时间,但实际运行时间是相同的,无论使用何种表示

问题是复杂性是根据输入计算的。使用一元表示时,可以增加输入的大小,而不会更改运行时间。
由于在一元基数中表示k,您需要n位,O(k)O(n) - 因为它在输入大小上是线性的。但是,对于相同的解决方案,它将为O(k) = O(2^logk) = O(2^n),如果您使用二进制表示,因为您需要logk位来表示k

您所描述的内容与pseudo-polynomial time算法密切相关,例如knapsack使用动态编程的解O(W*n),它是伪多项式,因为它实际上是指数用于表示W的位数