我有以下代码
int sum = 0;
for (int i = 1; i <= n; i = i*2)
{
for (int j = 1; j <=n; ++j)
{
++sum;
}
}
我有以下分析,即使答案是正确的,根据某些人的说法是错误的,但我不明白为什么。
所以,我做了以下,
n = 1; i = 1; j is being executed 1 time
n = 2; i = 2; j is being executed 2* 1 time
n = 3; i = 4; j = 4 * 3 times
n = 4; i = 8; j = 8 * 4 times
n = 5; i = 16; j = 16 * 5 times
......
n = k; i = 2^k; j = n * 2^k times
因为2 ^ k是log(n)
该函数的增长顺序是nlog(n),它是线性增长率。
我在分析中做错了什么?如果我有任何错误,请告诉我,因为这让我很困惑。谢谢!我想将这个分析应用于更复杂的嵌套循环,但在我这样做之前,我需要知道我做错了什么。
更新:我花了很多时间自己试图找出我的分析错误的原因。感谢@YvesDaoust,我想我已经开始多了解它了。
答案 0 :(得分:0)
内循环的主体执行n
次。
对于从1到n的2的所有幂,执行外循环的主体,并且它们大约是log2(n),因此全局复杂度
O(n.log(n))