我尝试了这两种算法的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))?
答案 0 :(得分:0)
首先:由于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^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都没有错,有更好的界限。