【问题标题】:Big-Oh Notation?? Approximating the value of sum after the following code fragment, in terms of variable n大哦符号??在以下代码片段之后,根据变量 n 逼近 sum 的值
【发布时间】:2013-12-08 10:18:01
【问题描述】:

好的,所以我不知道 Big-Oh 是什么,因为我发誓我的教授没有介绍它,我需要尽快帮助我认为很简单的事情。我知道它的答案,但她想要它的代码,我不知道如何编译它。基本上,我用谷歌搜索了这个帮助,他们只是简单地得到了答案,没有一个如何得到它的例子,或者他们有 n = 1000 或其他东西,但我没有在提示中看到或者 n 应该等于。我希望有人能理解我。 请给点建议?哈哈。

这是提示:

1) 根据 Big-Oh 表示法中的变量 n,在以下代码片段之后近似 sum 的值。

2) 用 Big-Oh 表示法回答以下程序段的估计运行时间:

int sum = 0;
for (int i = 1; i <= n - 3; i++) {
    for (int j = 1; j <= n + 4; j += 5) {
        sum += 2;
    }

    sum++;
}
for (int i = 1; i <= 100; i++) {
    sum++;
}

3) 用 Big-Oh 表示法回答以下程序段的估计运行时间:

int sum = 0;

    for (int i = 1; i <= n; i++) {
        sum++;
    }
    for (int j = 1; j <= n / 2; j++) {
        sum++;
    }

我习惯于在所有东西前面都贴上public static void main(String[] args) {,所以我这样做了:

public class BigO {

    public static void main(String[] args) {
    }
    public static void main(int n) {

int sum = 0;
for (int i = 1; i <= n - 3; i++) {
    for (int j = 1; j <= n + 4; j += 5) {
        sum += 2;
    }

    sum++;
}
for (int i = 1; i <= 100; i++) {
    sum++;
}
    }
    }

当然不行。

【问题讨论】:

  • 你看过维基百科的大哦符号是什么意思吗? en.wikipedia.org/wiki/Big_O_notation 这基本上是数量级的行为。所以一个简单的 for 循环在 N 中是线性的,双循环在 N 中是二次的。(所以对于第一个代码片段,你有 n*n 加上一个常数,即 O(n^2)。
  • 我明白这一点,但我的意思是我认为我的教授希望我将其放入代码并编译它以获得答案,因为她总是告诉我们她希望我们编写代码并编译它适用于我们所有的任务。更正:她确实希望我们这样做。

标签: java performance sorting search big-o


【解决方案1】:

大 O 表示法并不是要让程序运行。这是关于查看代码,以了解当您增加一些变量(通常是输入的数量,但在这种情况下,只是 n)时,程序的运行时间增加的速度有多快。

假设你分析n->n=1、n=2、n-3等连续值的程序运行时间,发现运行时间用像An + B这样的线性方程描述. 这里的主导项是 An 项,所以你忽略 B。你也可以忽略 A,说它是 O(n) 阶。

如果运行时间由 An^2 + Bn + C 描述,那么它的顺序是 O(n^2)。

您可以通过分析代码并确定其循环方式来了解性能的本质,而不是通过实际运行代码。

【讨论】:

  • 哦,好的。哇。谢谢。
猜你喜欢
  • 2012-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-16
  • 1970-01-01
相关资源
最近更新 更多