T(n)> = T(n-1)总是正确吗?

时间:2013-08-11 07:11:49

标签: algorithm big-o time-complexity

我看到了一个证据,可以找到排序算法的复杂性,这个算法就像这样:

Total time complexity for the algorithm = T(n-1) + T(n-2)

Thus, Total time complexity for the algorithm <= 2 * T( n-2 )

并进一步证明了某种关系。

问:我能否安全地假设T(n) >= T(n-1)?当我已经尝试证明某些算法的复杂性时,我怎么能事先做出这个声明呢?

4 个答案:

答案 0 :(得分:6)

不,你不能做这样的说法。

考虑一个函数:

f(0) = 1000000! (factorial of 1000000)
f(n) = 1, for n>0

这里,具有较大参数的函数的时间复杂度小于较低的函数。

一切都取决于细节,特别是 - 在提供的示例中,您已经有了一个声明

Total time complexity for the algorithm = T(n-1) + T(n-2)

相当于

T(n) = T(n-1) + T(n-2)

这是对复杂性的强烈主张,但似乎没有理由假设

Thus, Total time complexity for the algorithm <= 2 * T( n-2 )

因为我们可以从

推迟
T(n) = T(n-1) + T(n-2)

T(n) = T(n-1) + T(n-2) = (T(n-2) + T(n-3)) + T(n-2) >= 2 * T( n-2 )

也许声称是这个?

Thus, Total time complexity for the algorithm >= 2 * T( n-2 )

答案 1 :(得分:2)

不,你不能总是做出这个假设,这取决于函数T。

例如:

T(0) = T(1) = 1 //no important
T(2n) = T(2n-2) //all even numbers are calculated recursivel
T(2n+1) = 1 //all odd numbers

在上面,对于每个奇数n:T(n)&lt; T(N-1)

这可能实际上是复杂性函数的一个实际示例是n必须是偶数,如果不是 - 则返回错误。

答案 2 :(得分:0)

不,取决于算法。

我可以定义这样的算法:对于每个大小为n < 1000的输入,尝试做一些事情。如果n > 1000返回一些确定的决定。

因此,对于每个n < 1000,可能会有一个冗长而累人的计算,但对于n > 1000,它是O(1)

答案 3 :(得分:0)

对于T(n) >= 2*T(n-2),隐含关系n>3隐含

T(n) = T(n-1)+T(n-2)

T(n-1)T(n-2)+T(n-3)

如果T表示算法的成本,则不能为负数。

T(n-3) >= 0隐含T(n-1) >= T(n-2)T(n) >= 2*T(n-2)

这只是特定递归关系的结果,而不是你可以假设的一般结果,尽管对于算法分析中出现的许多递归关系也是如此。