i <-- 1
while(i < n)
j <--1
while(j < i)
j <-- j * 2
i <-- i + 1
done
对于内循环,我的镜头为O(log n)
。我猜测外环是O(n)
,总体复杂度为O(n log n)
。确认?
答案 0 :(得分:8)
答案 1 :(得分:1)
是的,你是对的,但要弄清楚它并不是那么简单:)。
内环很简单log n
,无需进一步解释。
然而外循环并不那么简单,因为在每个循环中它都会改变内循环的执行时间。
如果您考虑一下,内部循环将会运行(随着i
增加):
log 1 + log 2 + log 3 + log 4 + log 5 .... + log n
由于logharitms的一些定律,它与log (1*2*3*4*....*n)
相同,与
log (n!)
法律n!
具有相同的复杂性(谨防,它是复杂性,在代数中不同)n^n
因此log (n!) = O(log (n^n))
现在我们可以切换回代数,因为log (n^k) = k*log (n)
我们得到了结果
log (n^n)
= n log n
结果:
时间复杂度为O(n log n)