具有for x + = 2和h * = n增量的循环的时间复杂度

时间:2018-03-11 04:14:41

标签: java algorithm time-complexity

for ... {
    for (int x = 0; x < n; x+=2 {
        for ( int h = 1; h < n; h *= n ) {
        \\some constant operation
        }
    }
}

我觉得第一个循环的复杂性是n-2,而第二个for循环的复杂性是最后一个循环的log_ {n}(n),但是不只是1?

提前谢谢你。

1 个答案:

答案 0 :(得分:1)

for ... {
    for (int x = 0; x < n; x+=2 {
        for ( int h = 1; h < n; h *= n ) {
            //some constant operation
        }
    }
}

我会注意到第一个循环是运行 k 迭代,因为你没有指定。
下一个循环运行ceil( n / 2)次(例如,如果n = 5,则循环x = 0,2,4)。您可以将其理解为循环处理(基本上)每个其他元素,因此它会跳过其中的一半 下一个循环运行一次。在第一次迭代之后,递增语句立即导致循环的条件评估为false。

此片段的运行时因此为O( kn )。