Java 嵌套循环时间复杂性

Java 嵌套循环时间复杂性,java,data-structures,time-complexity,big-o,Java,Data Structures,Time Complexity,Big O,对于给定的代码,大O表示法的时间复杂度是多少 for(i = 1; i <= n; i *= 2) for(j = 0; j <= i; j++) some_constant_statement for(i=1;i外循环是O(logn),因为它的运行次数与logn(一些数字n)成比例 内部循环(仅由其自身执行)是O(n),因为它的运行次数与某个数字n成正比。这对于外部循环的每次迭代都是如此,因为时间复杂度保持不变,即它总是与调用时n的值成正比 整个代码

对于给定的代码,大O表示法的时间复杂度是多少

for(i = 1; i <= n; i *= 2)
    for(j = 0; j <= i; j++)
          some_constant_statement 
for(i=1;i外循环是
O(logn)
,因为它的运行次数与logn(一些数字n)成比例

内部循环(仅由其自身执行)是
O(n)
,因为它的运行次数与某个数字n成正比。这对于外部循环的每次迭代都是如此,因为时间复杂度保持不变,即它总是与调用时
n
的值成正比

整个代码是
O(n log(n))
。通常表示“在某个数字n乘以log(n)的顺序上”


大O表示法用于分类,而不是量化。它给出了所讨论的函数在不同大小的数据集上如何执行的一些概念。两个被描述为具有
O(n log(n))
性能的函数在
n

的给定值下可能会有很大的变化。时间复杂度将是O(nlog(n)),但这是一个渐进的复杂性。如果你想要它运行的实际次数,它将比上界小一点。 你能做的是把它可视化,就是用N的小值来追踪整个过程

在这种情况下,假设N=8

i = 1: j = 0  => 2 times
       j = 1
i = 2: j = 0  => 3 times
       j = 1
       j = 2
i = 4: j = 0  => 5 times
       j = 1
       j = 2
       j = 3
       j = 4
i = 8: j = [0,8] => 9 times
等等,以获得更大的N值


因此,它不是线性增加,而是以某种指数方式增加,在绘制一个较大值的图并找到上界函数时,如果你在数学上倾向于证明它,你会证明它有一个上界O(nlog(n))。

那么时间复杂度是O(n.logn)还是O(n)?在这本书中,复杂度是O(n)那么哪个是correct@H.Das
O(n.log(n))
内部循环本身的复杂性是
O(n)
。你到底在问什么?内部代码的复杂性还是整个代码的复杂性?我在问整个代码的复杂性
O(n.log(n))
,但它有所不同。当
n
为16时,内部循环运行31次。当
n
为15时,内部循环运行15次。