【问题标题】:Time complexity of a triple nested loop function [duplicate]三重嵌套循环函数的时间复杂度
【发布时间】:2020-07-24 13:19:33
【问题描述】:

在此处寻求有关如何查找时间复杂度的帮助:

void f(int n)
{
 for(int i=0; i<n; ++i)
     for(int j=0; j<i; ++j)
         for(int k=i*j; k>0; k/=2)
             printf("~");
}

到目前为止,我尝试注意到对于每个收到的i,j 组合,内部循环运行log(i*j)O(1)。所以我得到了:

log(n(n-1))+log(n(n-2))+...+log(n)+log((n-1)(n-2))+...+log(n-1)+...+...+log(1) but I can't find how to simplify it.

【问题讨论】:

    标签: time-complexity


    【解决方案1】:

    我不是这个领域的专家,但也许我的考虑会有所帮助。

    两个外循环导致n*(n - 1)/2 执行最内循环。 这使得O(n^2)

    的复杂性

    最里面的循环具有对数复杂度。从log(n^2) = 2log(n) 开始,它将类似于O(log(n)),产生O(n^2 log(n)) 的总复杂度。

    如果您查看对数和,您会发现大多数参数都大于n。事实上,有(n - 1)^2 参数超过了n,只有n - 1arguments 小于n

    如果您不相信我上面的推理,那么考虑log(a) + log(b) = log(ab) 可能会有所帮助。 IOW 你的总和等于log(n(n - 1)!)

    【讨论】:

      猜你喜欢
      • 2013-01-17
      • 2021-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多