这个函数的运行时复杂性是什么?

时间:2017-03-20 16:13:10

标签: c algorithm runtime complexity-theory

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;

    }

}
  1. 我认为它的复杂性是nlogn
  2. 我的朋友说它的nlog(登录)
  3. 还请告诉我 - 内部循环在这个函数中是否相互依赖?

1 个答案:

答案 0 :(得分:5)

它实际上是未定义的复杂性,因为你使用q未初始化。

忽略那个小错误,外部循环显然是O(n)。第一个内循环是O(log n)。第二个内循环是O(log p)plog n所以它是O(log log n)但是它并不重要,因为它是在第一个内部之后顺序执行的循环,因此两个内循环的总和是O(log n)(当你添加两个复杂性时,整体复杂性是增长最快的一个)。因此,您的整体复杂程度为O(n log n)