3D矩阵遍历Big-O

时间:2014-07-11 04:57:03

标签: big-o complexity-theory time-complexity pseudocode

我尝试了这两种算法的Big-O ..

1)算法threeD(矩阵,n)

//大小为n x n x n

的3D矩阵
layer ← 0 
while (layer < n)
     row ← 0 
     while (row < layer) 
           col ← 0 
           while (col < row) 
               print matrix[layer][row][col] 
               col ← col + 1 
       done 
       row ← row + 1 
  done 
  layer ← layer * 2 
done

O((n ^ 2) log(n))因为两个外环都是O(N)而最里面的一个似乎是O(log n)

2)算法Magic(n)

//整数,n&gt; 0

i ← 0 
while (i < n) 
     j ← 0 
     while (j < power(2,i)) 
          j ← j + 1 
    done 
    i ← i + 1 
done
外部循环的

O(N),内部的O(2 ^ n)? = O(n(2 ^ n))?

1 个答案:

答案 0 :(得分:0)

1。算法

首先:由于layer以零开始,此算法永不终止。 layer只会被2乘以所以它永远不会大于零,特别是不大于n。 要完成这项工作,您必须从layer > 0开始。

让我们从layer = 1开始。

时间复杂度可写为T(n) = T(n/2) + n^2 您可以通过这样的方式获得此结果:最后,图层最多设置为n。然后内循环执行n^2步骤。 Bevor认为,这一层只有一半那么大。因此,您必须在外循环的最后一个步骤上执行n ^ 2步骤,并将圆形bevor的所有步调为T(n/2)

masters theorem让你Theta(n^2)

2。算法

你可以算一下步骤:

2^0 + 2^1 + 2^2 + ... + 2^(n-1) = sum_(i=0)^(n-1)2^i = 2^n-1

为了简化这一过程,请查看二进制数:步数之和对应于仅包含1的二进制数(如1111 1111)。此数字等于2^n-1

所以时间复杂度为Theta(2^n)

注意:你的Big-O都没有错,有更好的界限。