时间复杂性和硕士定理

时间:2014-04-11 16:27:10

标签: algorithm time-complexity

我试图更好地理解师父的定理和时间复杂性。我在网上找到了一些我正在练习的例子。我的工作是否正确?

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。

2 个答案:

答案 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)

首先让我们详细介绍一下主定理,并分析您的四种情况。

enter image description here

在上图中,它显示了每个级别的复杂度:

enter image description here

然后我们汇总各个级别的所有计算并得出总计:

enter image description here

这时,我们只需要分析由一个乘积因子(或公比)a/b^d决定的,是一个几何级数的总函数即可。

  1. 如果公用比率大于1,则到最后一项将呈指数增长: enter image description here
    a/b^d > 1d<log_b a时是大O。

  2. 如果公共比率小于1,则从第一项n^d开始将发生指数衰减,当a/b^d < 1或{{1 }}。

  3. 如果公共比率等于1,则该级数将是一个恒定序列,我们将所有项相加:
    enter image description here


您的情况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将是:enter image description here

对于案例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。

参考:

  1. https://www.coursera.org/learn/algorithmic-toolbox