java - Big O - 适合新手

标签 java algorithm big-o

<分区>

Possible Duplicate:
Plain English explanation of Big O

最近有人问我关于如何使用 Big O 表示法的知识,我被难住了,因为我以前从未遇到过 Big O。我读过 Wikipedia page about Big O并查看了 Stackoverflow 中发布的一些问题,但我就是不明白。

我的问题:有人能以最简单的形式提供 Big O 的解释并提供如何在以下 Java 方法中使用它的示例吗:

public int getScore(int[] dice)
{
    int[][] dups;

    dups = possibleDups(dice);

    // Set catScore
    for (int[] i : dups)
    {
        for (int k = 0; k < i.length; k++)
        {
            if (i[k] > 0)
            {
                switch (i[k]) {
                case 1:
                    catScore = Category.ONES;
                    break;
                case 2:
                    catScore = Category.TWOS;
                    break;
                case 3:
                    catScore = Category.THREES;
                    break;
                case 4:
                    catScore = Category.FOURS;
                    break;
                case 5:
                    catScore = Category.FIVES;
                    break;
                case 6:
                    catScore = Category.SIXES;
                    break;
                case 7:
                    catScore = Category.SEVENS;
                    break;
                case 8:
                    catScore = Category.EIGHTS;
                    break;
                default:
                    catScore = Category.NONE;
                    break;
                }
            }
        }
    }

    return sumAll(dice);
}

最佳答案

大 O 表示法详细说明了解决方案时间与集合中项目数量的比例差异。它实际上没有说明解决问题的解决方案需要多长时间,但它详细说明了当您知道固定点的时间以及您可能添加的其他项目数量时,解决解决方案的时间增长的速度。

所以,如果煮一杯咖啡总是需要 5 分钟,那么计算 Big O 解决方案的信息就不够了,但是如果煮一杯咖啡需要 5 分钟,煮 10 杯咖啡需要 5 分钟,做 10 杯咖啡需要 5 分钟制作一百万杯咖啡,则为 O(1),其中 1 表示一个时间单位。

现在如果你有一个单杯咖啡机,制作一杯咖啡大约需要两分钟,制作两杯咖啡需要四分钟,制作十杯咖啡需要二十分钟,那么制作时间咖啡的数量与杯子的数量成正比,使大 O 符号成为 O(x),这意味着您需要 X(每杯咖啡一杯)时间单位。

其他大 O 符号很常见,O(x^2) O(xlog(x)) 等。它们都描述了基于所考虑元素数量的时间增加比例。

请注意,对于一些小的项目集合,O(1) 的解决方案可能比 O(x) 的解决方案慢,因为我们讨论的是时间单位,而不是实际时间。因此,特定 O(1) 解决方案中的时间单位可能是一小时,而 O(x) 解决方案中的特定时间单位可能是十分钟。在这种情况下,O(x) 解决方案可能会更快,直到您需要处理六个或更多项目。从长远来看,无论实际时间单位有多大或多小,具有较低幂(如 O(1))的大 O 项总是优于具有较高幂 O(x) 的项。

关于java - Big O - 适合新手,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6549626/

相关文章:

java - 如何在黑莓中导入 Java 插件中的项目

java - 如何在新线程中创建数组的副本

java - 如何使用 jOOQ gradle 插件将 bigint[] 字段从 postgres 转换为类字段

arrays - 跟踪数组的最高占用索引

algorithm - 区域划分算法

python - 在哪里可以找到 Python 中内置序列类型的时间和空间复杂度

java - 我想在 Java 中用点而不是逗号输入 double 值,但出现异常

algorithm - 找到最长的非递减序列

java - 正确的时间复杂度是多少?

java - 求插入排序的大o时间复杂度