【问题标题】:Is the Time Complexity of this function O(n * (n * log n² ))这个函数的时间复杂度是 O(n * (n * log n² ))
【发布时间】:2019-09-26 05:30:27
【问题描述】:

下面函数的时间复杂度是多少? n > 0

Function fun(n){
    Let count = 0;

    For( I = 0; I < n; I++){

        For(j = 0; j < n; j /= 2) {

            For(h = 0; h < n; h /= 2) {

                Count = count + 1;
            }
        }
    }
    Return count;
}

我有 O(n * (n * log n² )) ,但有些事情告诉我我可能错了。

【问题讨论】:

  • 绝对不止二次。你需要特别精确吗?
  • 请注意log(n^2) 基本上是log(n)
  • @mangusta 我怀疑两个内部循环的边界错误。修正后,您的评论是正确的。
  • 好的,为了避免混淆:如果 OP 暗示 j*=2h*=2 循环更新而不是 j/=2h/=2 那么复杂度是 O(n * logn * logn)

标签: time-complexity big-o notation


【解决方案1】:

上面的循环是一个无限循环。除非正确更新问题陈述,否则无法确定时间复杂度!

Function fun(n){
    Let count = 0;

    For( I = 0; I < n; I++){
        // will run infinitely even if you change j /= 2 to j *= 2, because initial value is 0
        For(j = 0; j < n; j /= 2) {
            // will run infinitely even if you change h /= 2 to h *= 2, because initial value is 0
            For(h = 0; h < n; h /= 2) {

                Count = count + 1;
            }
        }
    }
    Return count;
}

【讨论】:

  • 为什么这是一个无限循环?
  • @gue,因为零除以任何东西都会导致零。因此,根据第二个循环,当 j 的初始值为零时,它除以 2 将导致零。因此条件 j
  • 你是对的。我的错。 (如果您编辑,我只能撤消我的反对票,抱歉。)
  • 天哪。我的错。我非常专注于其他事情,但对于其他人来说,确实没有很多大 o 函数的例子,你每次迭代都除以一个数字,因为如果 n 是 100 并且 j
猜你喜欢
  • 2011-07-09
  • 1970-01-01
  • 1970-01-01
  • 2015-06-12
  • 2015-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-11
相关资源
最近更新 更多