【问题标题】:Calculating Runtime计算运行时间
【发布时间】:2018-12-11 02:28:22
【问题描述】:

我被困在以下问题上,我能够解决第一部分,但是,我不确定如何从那里继续:

以下程序打印了多少次“Hi”?也就是说,运行时间是多少? (就 Big-O 表示法而言)

int i = 1;
int j = 1;
while(i <= n )
{
    j+= j;
   int k = 1;
   while (k <= j)
    {
       System.out.println("Hi");
       k = k +1;
    }
    i = i + 1;
}

我能够推断出该程序会产生 从 x = 1 到 n (2^x) 个 Hi 的总和。这也是运行时间还是我应该将代码分解为两个总和,一个是从 i = 1 到 n,另一个是....(我不知道)。感谢您的帮助!

【问题讨论】:

    标签: runtime complexity-theory discrete-mathematics


    【解决方案1】:

    作为总和的运行时间看起来是正确的。那么问题是如何简化它。幸运的是,我们有这个事实:

    20 + 21 + 22 + ... + 2n-1 = 2 n - 1.

    在用这个总和代替你的总和时忽略任何一个错误,我们可以通过大 O 表示法做到这一点,我们看到“你好!”被打印出 Θ(2n) 次。

    【讨论】:

      【解决方案2】:

      那你可以这样试试

          int i = 1;
          int j = 1;
          long startTime = System.nanoTime();
          while(i <= n )
          {
              j+= j;
             int k = 1;
             while (k <= j)
              {
                 System.out.println("Hi");
                 k = k +1;
              }
              i = i + 1;
          }
          long endTime = System.nanoTime();
          System.out.println("time taken in nano seconds" + endTime-startTime);
      

      【讨论】:

      • 感谢您的回复,但是,问题需要采用 Big-O 符号的形式。我将该编辑添加到我的问题中。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多