algorithm - 我无法理解在这两种情况下如何计算时间复杂度

标签 algorithm time-complexity

这是第一个算法。它没有任何正确的语法:

for(i=1;i<=n;i++)
  {for(j=1;j<=i;j++)
       for(k=1;k<=100;k++)
        {printf("hello")
         }
        }
      }

在这种情况下,我们通过查看 printf 语句将执行的总次数来计算时间复杂度为 O(n^2)。因此,我们添加 k 循环将为每个 i 从 1 到 n 运行的次数。

第二个代码:

{int n=(2)^(2)^k //read as 2 to the power 2 to the power k
 for (i=1;i<=n;i++)
 {j=2
  while(j<=n)
  {j=j^2
   printf("hello")
  }
 }
}

这里我们得到的时间复杂度为 O(n(loglogn))。我们看到第 n 个循环将执行 n(k+1) 次。代入k的值,得到时间复杂度。

我不明白为什么我们不像在第一个代码中那样在第二个代码中添加打印语句执行的总次数来计算时间复杂度。我们只看到它在第 n 次循环中运行了多少次来计算答案。

最佳答案

您需要清除基础知识。第一个循环的时间复杂度为O(N^2),与printf语句完全无关。它是关于最内层循环的总迭代次数

code 1 中的最内层循环运行 100*(N^2) ,即 O(N^2) ,答案是即使您的代码 1 是:

for(i=1;i<=n;i++)
  {for(j=1;j<=i;j++)
       for(k=1;k<=100;k++)
        {
         }
        }
      }

因此,只要您的最内层循环没有语句或需要 O(1) 时间的语句,答案就保持不变。

对于您的第二个代码:while 循环总是运行 log(logn) 次,而外部循环总是运行 n 次,因此时间复杂度为 O(nlog( logn)) ,因为那是最内层(while)循环的总迭代次数。

关于algorithm - 我无法理解在这两种情况下如何计算时间复杂度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43153892/

相关文章:

c++ - 递归算法的实现

algorithm - 加权无向图中的最长路径

c# - 在 C# 中寻找用于超大型项目的文本文件搜索算法

algorithm - 寻找图的偏序的原因

python - 0-1背包如何具有数学指数时间复杂度?

javascript - 如何优化编辑距离来检查距离为 1?

algorithm - 高效计算容器哈希码

string - Knuth–Morris–Pratt (KMP) 与使用 Ukkonen 时间复杂度算法的后缀树之间的区别。

algorithm - O(n) 解决问题的解决方案

java - 为什么具有链表的哈希表被认为具有恒定的时间复杂度?