【问题标题】:Calculating the time complexity计算时间复杂度
【发布时间】:2016-09-19 13:52:46
【问题描述】:

有人可以帮助解决以下代码的时间复杂度吗:

for(i = 0; i <= n; i++)
{
   for(j = 0; j <= i; j++)
      {
         for(k = 2; k <= n; k = k^2)
              print("")
      }

a/c 对我来说,第一个循环将运行 n 次,第二个将运行 (1+2+3...n) 次,第三个将运行 loglogn 次。 但我不确定答案。

【问题讨论】:

  • SO 不适用于家庭作业。请发布您尝试过的内容
  • 完成...........

标签: time-complexity


【解决方案1】:

我们从内部开始并进行锻炼。考虑最里面的循环:

for(k = 2; k <= n; k = k^2)
    print("")

print("") 执行了多少次迭代?首先注意n 是常量。 k 假定的值序列是什么?

iter | k
--------
   1 | 2
   2 | 4
   3 | 16
   4 | 256

我们可以通过多种方式找到这个公式。我用猜测和证明得到iter = log(log(k)) + 1。由于如果值已经大于n,则循环不会执行下一次迭代,因此为n 执行的迭代总数为floor(log(log(n)) + 1)。我们可以用几个值来检查它,以确保我们做对了。对于n = 2,我们得到一个正确的迭代。对于n = 5,我们得到两个。以此类推。

下一个级别执行i + 1 迭代,其中i 从0 变化到n。因此,我们必须计算总和 1, 2, ..., n + 1,这将给出最外层和中间循环的总迭代次数:这个总和是 (n + 1)(n + 2) / 2 我们必须将其乘以内循环的成本才能得到答案,@987654337 @ 获取 sn-p 的总成本。扩展中增长最快的项是n^2 log(log(n)),因此这通常被称为渐近复杂度。

【讨论】:

    猜你喜欢
    • 2021-03-03
    • 1970-01-01
    • 2011-06-21
    • 2021-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多