void fn(int n){
int p,q;
for(int i=0;i<n;i++){
p=0;
for(int j=n;j>1;j=j/2)
++p;
for(int k=1;k<p;k=k*2)
++q;
}
}
还请告诉我 - 内部循环在这个函数中是否相互依赖?
答案 0 :(得分:5)
它实际上是未定义的复杂性,因为你使用q未初始化。
忽略那个小错误,外部循环显然是O(n)
。第一个内循环是O(log n)
。第二个内循环是O(log p)
而p
是log n
所以它是O(log log n)
但是它并不重要,因为它是在第一个内部之后顺序执行的循环,因此两个内循环的总和是O(log n)
(当你添加两个复杂性时,整体复杂性是增长最快的一个)。因此,您的整体复杂程度为O(n log n)