我看到了一个证据,可以找到排序算法的复杂性,这个算法就像这样:
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)
?当我已经尝试证明某些算法的复杂性时,我怎么能事先做出这个声明呢?
答案 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)
。
这只是特定递归关系的结果,而不是你可以假设的一般结果,尽管对于算法分析中出现的许多递归关系也是如此。