嵌套循环渐近分析
Nested Loops Asymptotic analysis
需要帮助解决这个硬件示例。
该示例说明 0(n) 运行 时间。
我看到外循环是 O(logn)
我不知道如何描述与 n 有关的内部循环。
非常感谢您的帮助。
for (int i = 1; i <= N; i = i*2) // log n
for (int j = 0; j < i; j++) // less than n i don't know how to describe the growth
sum++;
答案:: 0(n)
内循环是O(n)时间,因为它会遍历每个元素一次。如果i为1000,则1000次,如果i为10000,则10000次等
最简单的方法可能是分析 运行 代码段在聚合中的时间。在外循环的第一次迭代中,内循环将 运行 一次。在外循环的第二次迭代中,内循环将 运行 2 次。在外循环的第三次迭代中,内循环将 运行 4 次。更一般地,在外循环的第 k 次迭代中,内循环将 运行 2k 次。一旦 i 变得大于 N,外循环就会停止,这发生在 log2 N 次迭代之后。
如果我们总结完成的总工作量,我们会发现它是
1 + 2 + 4 + 8 + ... + 2log2 N = 2log2 N + 1 - 1 = 2n - 1
(这使用了 1 + 2 + 4 + 8 + ... + 2k = 2k+1 - 1).因此,整段代码(即包括两个循环)的总工作量为 O(n)。
需要帮助解决这个硬件示例。 该示例说明 0(n) 运行 时间。 我看到外循环是 O(logn) 我不知道如何描述与 n 有关的内部循环。 非常感谢您的帮助。
for (int i = 1; i <= N; i = i*2) // log n
for (int j = 0; j < i; j++) // less than n i don't know how to describe the growth
sum++;
答案:: 0(n)
内循环是O(n)时间,因为它会遍历每个元素一次。如果i为1000,则1000次,如果i为10000,则10000次等
最简单的方法可能是分析 运行 代码段在聚合中的时间。在外循环的第一次迭代中,内循环将 运行 一次。在外循环的第二次迭代中,内循环将 运行 2 次。在外循环的第三次迭代中,内循环将 运行 4 次。更一般地,在外循环的第 k 次迭代中,内循环将 运行 2k 次。一旦 i 变得大于 N,外循环就会停止,这发生在 log2 N 次迭代之后。
如果我们总结完成的总工作量,我们会发现它是
1 + 2 + 4 + 8 + ... + 2log2 N = 2log2 N + 1 - 1 = 2n - 1
(这使用了 1 + 2 + 4 + 8 + ... + 2k = 2k+1 - 1).因此,整段代码(即包括两个循环)的总工作量为 O(n)。