【发布时间】:2019-03-21 11:10:52
【问题描述】:
我有以下代码,我想了解它的时间复杂度:
for (int i = 1 ; i <= n ; i = i*2)
for (int j = 1 ; j <= n ; j = j*2)
for (int k = 1 ; k <= j ; k++)
我所做的是:
第一个循环运行 log n 次,第二个循环也运行 log n 次,第三个循环是几何级数
所以总的来说我的运行时间是:n*(log(n))^2
这是正确的吗?
谢谢!
【问题讨论】:
-
差不多。正确答案中只有一个因素
log(n)- 你知道为什么吗? -
是不是因为我在计算第三个循环的几何级数时使用了第二个循环? n=log n, q=2,a=1..
-
不确定
n=log n, q=2,a=1是什么,但是是的,第三个循环运行的次数呈几何级数增加——1、2、4、8、16、...、n——总和为以 2n 为界。 -
几何级数之和为a1 * (q^n -1) / q-1。这里 q=2 和 n=log n.. 所以总的来说它是 n-1.. 但我不必将它乘以 log n 两次吗?
-
不,外循环只有一次,因为它独立于其他两个循环。几何级数源于内环和中环的耦合,而不仅仅是内环本身。
标签: loops time-complexity big-o