0

主定理是否假设 T(1) 是常数?假设我有一个时间复杂度的算法:T(n) = 2T(n/2) + O(1) and T(1) = O(logn),这个算法的时间复杂度是多少?

4

3 回答 3

0

你的说法T(1) = O(logn)没有任何意义。您基本上说某些由于某种原因不依赖的函数具有对数复杂度(因此以对数方式n依赖)。n

T(1), T(2), T(532143243)是边界条件,不能依赖于任何参数。它们应该是一个数字 ( 5, pi/e, sqrt(5) - i)

于 2016-01-30T23:37:31.373 回答
0

对于递归关系:T(n) = 2T(n/2) + O(1),我们有

  • a = 2
  • b = 2
  • 在递归之外工作的 O(1) 时间成本

因此主定理案例 1 适用,我们有:

T(n) ∈ Θ(n ^ log2(2)) ⇒</p>

T(n) ∈ Θ(n)

递归关系基于初始项定义序列。如果大小为 1 的问题通过递推关系解决T(1) = f(n),其中 f ∈ O(logn),则无法确定 T(1) 的值,即作为递推关系没有任何意义。

于 2016-01-30T22:00:00.180 回答
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)在. 但是我们可以回答您作为评论添加的第二个问题。nT(1) = O(logn)

于 2016-06-27T23:05:00.797 回答