【问题标题】:What is the time complexity for this code? [closed]这段代码的时间复杂度是多少? [关闭]
【发布时间】:2022-01-06 06:30:16
【问题描述】:
#include<iostream>
using namespace std;
int main()
{
   int i=1,n;
   cin>>n;
   for(i;i<=n;i=i*2)
      printf("hey");
   return 0;
}

我很困惑上述代码的时间复杂度是 O(log n) 还是 O(sqrt n)。 我认为它是 O(sqrt n),因为 n=5 和 sqrt(5)~3 的迭代次数为 3,但有些答案显示为 O(logn)。请解释...

【问题讨论】:

  • 怎么看?为什么你这么想?如果我们知道您的想法,那么我们就更容易指出错误(如果有的话),或者确认您的想法。
  • 老兄,你正在迭代循环,所以它只有 O(n/2) 或通常 O(N)。
  • 对不起..我已经编辑了,请再看一遍。
  • int i = n;before n 的值充其量是没有意义的,最坏的情况是会导致 UB。将其移到cin &gt;&gt; n; 之后,循环将是 O(1)(如果 n > 0)或将永远运行(如果 n

标签: c++ time-complexity


【解决方案1】:

让我们忘记5 并假设它只是为了算法而变得足够大。

事实是:

  1. 你从 1 开始

  2. 在每次迭代中,您将索引加倍 (2x)

因此我们可以说n = 2^nit 其中nit 是迭代次数,n 是问题的“大小”,无论它代表什么。

随之而来的是log(n) = nit * log(2)。然后nit = log(n)/log(2)

所以结论是nit ~ O(log(n))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-02-26
    • 2022-11-14
    • 2022-01-13
    • 2015-03-31
    • 2012-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多