我试图更好地理解师父的定理和时间复杂性。我在网上找到了一些我正在练习的例子。我的工作是否正确?
T(N) = 3T(N/3) + O(N)
将具有时间复杂度Θ(n),因为log(base 3)3 = 1.因此,Θ(n ^ 1)+ O(N)被简化为Θ(n)。
T(N) = 3T(2N/3) + O(1)
这个我不明白。我知道它是stooge排序算法,但是如果使用master's定理,a和b都不是3,使log(base 3)3 = 1,使得Θ(n)?我知道这是不正确的,但我很难理解主人的定理。
T(N) = 4T(N/2) + O(N)
将具有时间复杂度Θ(n ^ 2),因为log(base 2)4 = 2.然后,N ^(log(base 2)4)= N ^ 2
T(N) = 2T(N/2) + O(N log(N))
这里我认为它只是O(N log(N)),因为2的log(基数2)是1。
答案 0 :(得分:0)
: -
if
T(n) = aT(n/b) + f(n^k)
if loga/logb > k then T(n) = O(n^(loga/logb))
if loga/logb < k then T(n) = O(n^k)
else T(n) = O(n*logn)
1. a = 3 b = 3 k=0 loga/logb = 1 = k hence T(n) = O(nlogn)
2. a = 3 b = 3/2 k=0 log3/log(3/2) > 1 > k hence T(n) = O(n^(log3/log(3/2)))
3. a = 4 b = 2 k = 1 log4/log2 = 2 > 1 hence T(n) = O(n^2)
答案 1 :(得分:0)
首先让我们详细介绍一下主定理,并分析您的四种情况。
在上图中,它显示了每个级别的复杂度:
然后我们汇总各个级别的所有计算并得出总计:
这时,我们只需要分析由一个乘积因子(或公比)a/b^d
决定的,是一个几何级数的总函数即可。
如果公共比率小于1,则从第一项n^d
开始将发生指数衰减,当a/b^d < 1
或{{1 }}。
在您的情况1 中,d > log_b a
,我们首先看到公用比率T(N) = 3T(N/3) + O(N)
。
对于您的情况2 a/b^d = 3/3^1=1
,它将为T(N) = 3T(2N/3) + O(1)
(其中a = 3,b = 3/2和d = 0),因此大O将是:。
对于案例3 a/b^d = 3/(3/2)^0 = 3 > 1
,a为4,b为2,d为1。
对于您的第四种情况 T(N) = 4T(N/2) + O(N)
,自T(N) = 2T(N/2) + O(N log(N))
到a/b^d = 2/2^1.x
以来,公共比率将小于1,则几何级数将呈指数衰减。因此,第一项d > 1
将主导该系列,因此它将是一个大O。
参考: