java - Big-O在java中的简单解释和使用

标签 java big-o

<分区>

我真的不知道“Big-O”是什么以及如何在实践中使用它,所以我希望有人能给我一个简单的解释,也许还有一些 java 编程示例。

我有以下问题:

  • 这些术语是什么意思(尽可能简单)以及它们在 java 中的用法: BigO(1)、BigO(n)、BigO(n2) 和 BigO(log(n)) ?

  • 如何根据现有的 Java 代码计算 Big-O?

  • 你如何使用大 O 排序
  • 你如何使用 Big-O 递归

希望有人能够提供帮助。

谢谢你

最佳答案

大 O 用于说明算法随着输入大小的增加而扩展的速度有多快

O(1) 意味着随着输入大小的增加,运行时间不会改变

O(n) 表示随着输入大小加倍,运行时间将或多或少加倍

O(n^2) 意味着当输入大小加倍时,运行时间将或多或少翻两番

O(f(n)) 表示随着输入大小加倍,运行时间将增加到 f(2n) 左右

关于 Big-O、排序和递归。

Big-O 排序并不是真正的算法。但是,您可以使用 Big O 来告诉您排序算法的速度。

为了计算递归函数的 Big-O,我建议使用 Master Theorem .

确定 Big O 的准则:

通常,您需要确定输入的大小(例如数组长度,或链表中的节点数等)

然后问问自己,如果输入大小加倍会怎样?还是三连? 如果您有一个遍历每个元素的 for 循环:

//say array a has n elements
for (int i = 0; i < n; i++) {
    // do stuff 
    a[i] = 3;
}

然后将 n 加倍会使循环运行两倍的时间,所以它是 O(n)。将 n 增加三倍会使它花费的时间增加三倍,因此代码与输入大小成线性比例。

如果你有一个二维数组和嵌套的 for 循环:

// we say that each dimension of the array is upper bounded by n,
for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) {
        // do stuff
        a[i][j] = 7;
    }
}

当 n 加倍时,代码将花费 2^2 = 4 倍的时间。如果输入大小增加三倍,代码将花费 3^2 = 9 倍的时间。所以大 O 是 O(n^2)。

关于java - Big-O在java中的简单解释和使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17118210/

相关文章:

algorithm - 在衡量算法的时间复杂度时,是否总是忽略获取输入所花费的时间?

mysql - 使用 BETWEEN 子句的 MySQL SELECT 语句的 Big-O 复杂度是多少?

infinity - O 表示法,O(∞) = O(1)?

algorithm - O(loga n) = O(logb n) 的证明,对于任何基数 a 或 b

java - 如何通过连接集合限制结果集

java - getContentType 方法始终返回 'application/force-download'

java - 测试 hibernate 模型/DAO 类

c++ - list::size() 真的是 O(n) 吗?

java - 对齐 2 个文本,1 个正常,1 个相反

java - 如何获得Android应用程序的Root权限?