gpt4 book ai didi

java - 如何计算程序的 Big O 复杂度?

转载 作者:行者123 更新时间:2023-12-02 07:11:23 25 4
gpt4 key购买 nike

我有一个大 O 符号问题。假设我有一个执行以下操作的 Java 程序:

  1. 将一个整数数组读入一个 HashMap,它跟踪数组中存在的整数出现次数。 [1,2,3,1] 将是 [1->2, 2->1, 3->1]。

  2. 然后我从 HashMap 中获取 Keys 并将它们放入 Array 中:

    Set<Integer> keys = dictionary.keySet();
    Integer[] keysToSort = new Integer[keys.size()];
    keys.toArray(keysToSort);
  3. 使用 Arrays.sortkeyArray 进行排序。

  4. 然后遍历排序后的keyArray,从HashMap中抓取相应的值,以显示或格式化结果。

我想我知道以下内容:

  • 第 1 步是 O(n)
  • 如果我相信 Java API,第 3 步是 O(n log n)
  • 第 4 步是 O(n)

  • 第 2 步:在进行此类计算时,我应该知道 Java 如何实现 SettoArray 方法。我假设它遍历 HashMap 检索 Keys。如果是这样的话,我会假设它的 O(n)。

如果顺序操作要求我添加每个部分,那么最终计算将是O(n + n·log n + n+n) = O(3n+n·log n)。

跳过常量,您有 O(n+n log n)。这可以进一步减少吗?还是我完全错了?

最佳答案

我相信 O(n + nlogn) 可以进一步简化为 O(nlogn)。这是因为 nnlogn 相比逐渐变得微不足道,因为它们的复杂度不同。 nlogn 的阶数高于 n。这可以在 wikipedia page 上验证向下滚动到常用函数顺序部分。

关于java - 如何计算程序的 Big O 复杂度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5519662/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com