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?
提前谢谢你。
答案 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 )。