【问题标题】:What is a standard calculation that takes O(log N) in Big O notations?在大 O 表示法中采用 O(log N) 的标准计算是什么?
【发布时间】:2020-08-03 19:01:53
【问题描述】:

我是一名计算机科学专业的学生,​​我必须编写对不同的大 O 算法执行的分析。为了方便我们,我们的教授给了我们一些方法来覆盖来监控我们实现的时间。

第一种方法应该包含所分析的 Big O 算法的实现,而第二种方法应该包含标准的“控制”行。

例如,二次时间

  public void method1(int n) {
    for (int i = 0; i < n; i++) {
      for (int j = 0; j < n; j++) {
        analyser();
      }
    }
  }

控制:

  public int method2(int n) {
    return n*n;
  }

现在是对数函数:

  public void method1(int n) {
    for (int i = 1; i < n; i = i*2) {
        analyser();
    }
  }


  @Override
  public int method2(int n) {
    return (int) Math.log(n);
  }

不幸的是,第二种方法返回无限值,我不明白为什么。我可以使用任何其他简单的计算来代替Math.log(n) 用作“控制”来比较两种方法的时间? 谢谢。

【问题讨论】:

    标签: java algorithm performance big-o


    【解决方案1】:

    method2 将返回未定义的 n=0,因为 log(0) 的定义是未定义的。您可以简单地通过在方法中断言n 大于0 来更改它。如果此断言失败,堆栈跟踪上的调用和/或调试中的单步执行将有助于确定method2n=0 一起调用的位置。

    【讨论】:

    • 不幸的是没有帮助。应该存在我可以在 method2 中使用的另一个函数
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-11
    • 2015-12-03
    • 1970-01-01
    相关资源
    最近更新 更多