for(int i=1; i<n; i=2*i)
// simple addition performed here...
我理解O(n)运行时单循环和O(n ^ 2)嵌套循环但是这个循环的运行时也是n log n,因为乘法?
谢谢,
答案 0 :(得分:6)
不,你是正确的,这里有乘法,但它可以减少增加的运行时间,而不是增加。
您必须根据输入值n
查看循环的完成速度。对于n = 128
,您将获得i = 1, 2, 4, 8, 16, 32, 64, 128
。如果你加倍n
,那么它不会像O(n)那样加倍,并且它肯定不会像O(n 2 )那样乘以4。它只是在循环中添加了一个迭代。
这就是所谓的O(log N)时间复杂度。运行时间随着输入值的对数而上升,并且常见于平衡二叉树搜索,您可以在每次迭代时删除剩余搜索空间的一半。
答案 1 :(得分:1)
如@paxdiablo所述,这是一个O(log n)
的循环O(n log n)将是
for(int i=0;i<n;i++)
for(int j=i;j>0;j/=2)
何时是O(n)和O(log n)的嵌套循环