主定理假设T(1)是常数吗?假设我有一个时间复杂度的算法:T(n)= 2T(n / 2)+ O(1)和T(1)= O(logn),这个算法的时间复杂度是多少?
答案 0 :(得分:0)
对于递归关系:T(n) = 2T(n/2) + O(1)
,我们有
T(n)∈Θ(n ^ log2(2))⇒
T(n)∈Θ(n)
递归关系定义基于初始项的序列。如果通过递归关系T(1) = f(n)
解决了大小为1的问题,其中f∈O(logn),则无法确定T(1)的值,即没有意义作为递归关系。
答案 1 :(得分:0)
您的陈述T(1) = O(logn)
没有任何意义。您基本上声明某些不依赖于n
的函数由于某种原因具有对数复杂度(因此以对数方式依赖于n
)。
T(1), T(2), T(532143243)
是边界条件,不能依赖任何参数。它们应该是一个数字(5
,pi/e
,sqrt(5) - i
)
答案 2 :(得分:0)
有时最好只是尝试一下而不是依赖定理。
T(m) = 2T(m/2) + O(1)
T(1) = O(logn)
T(2) = 2T(1) = 2log(n)
T(4) = 2T(2) = 4log(n)
T(8) = 2T(4) = 8log(n)
T(16) = 2T(8) = 16log(n)
T(32) = 2T(16) = 32log(n)
T(m) = 2T(m/2) = mlog(n)
总之,您的初始问题确实是荒谬的,正如其他人指出的那样,因为您在T(n)
中使用相同n
时尝试计算T(1) = O(logn)
。但我们可以回答您作为评论添加的第二个问题。