【问题标题】:Is there a comprehensive Big-O listing of Java data structures? [duplicate]是否有 Java 数据结构的全面 Big-O 列表? [复制]
【发布时间】:2011-05-05 06:44:21
【问题描述】:

问题几乎说明了一切。具体来说,我想要结构中所有方法的 Big-O,除了通常的方法。文档对此很少提及。

附录

对于那些投票关闭的人,我对基本的添加、删除、迭代器等不感兴趣 这些来源对于经常使用的方法来说很好,但我对其余部分的算法效率更感兴趣。

比如TreeMap.keySet()的效率如何?

【问题讨论】:

    标签: java data-structures big-o


    【解决方案1】:

    Java 集合算法效率: Source

    数组列表

    • 获取、设置:O(1)
    • 添加、删除:O(n)
    • 包含,indexOf:O(n)

    哈希映射

    • 获取、放置、删除、包含密钥:O(1)

    哈希集

    • 添加、删除、包含:O(1)

    LinkedHashSet

    • 添加、删除、包含:O(1)

    链表

    • 获取、设置、添加、删除(从任一端):O(1)
    • 获取、设置、添加、删除(从索引):O(n)
    • 包含,indexOf:O(n)

    优先队列

    • 偷看:O(1)
    • 添加、删除:O(logn)

    树图

    • 删除、获取、放置、包含密钥:O(logn)

    树集

    • 添加、删除、包含:O(logn)

    【讨论】:

    • 当你在数组列表中移除一个元素的时候,是不是要下移索引最高的元素?
    【解决方案2】:

    我会查看Introduction_to_Algorithms 中有关算法的标准 Big-O 信息。

    【讨论】:

    • 但是你怎么知道java的类中使用了哪些算法呢?
    • Java 文档通常会提到用于数据结构的算法。
    【解决方案3】:

    我不确定是否有电子表格或其他列表,但您可以在每个结构的文档中获取此信息,例如 TreeSet

    此实现为基本操作(添加、删除和包含)提供有保证的 log(n) 时间成本。

    【讨论】:

      【解决方案4】:

      真的不可能。每个 JVM 都可以拥有自己的运行时,以及自己的实现。一些方法指定了 O() 特征,但其余的都是 Sun、Oracle、IBM、Apple 或 Azul 所做的。

      【讨论】:

      • 所以为什么在这里:download.oracle.com/javase/6/docs/api/java/util/TreeSet.html 被称为“此实现为基本操作(添加、删除和包含)提供有保证的 log(n) 时间成本。” JVM 和类的实现是不同的。
      • 你确定每个制作 JVM 的人都会重新实现所有 JRE 库吗?
      • @Anrey,我说,“一些方法”。这是一个例子。 @darioo,当然不是。但你无法预测。
      • 也许确实有些 JVM 没有实现“保证基本操作(添加、删除和包含)的 log(n) 时间成本”的实现,但是这将是一个错误。如果 JavaDoc 说它可以在 O(foo) 中运行,那么您可以期望它至少在 O(foo) 中运行。如果不写,你应该写一个错误报告。
      猜你喜欢
      • 2011-06-12
      • 1970-01-01
      • 2019-12-04
      • 1970-01-01
      • 2011-05-19
      • 1970-01-01
      • 1970-01-01
      • 2011-01-29
      • 1970-01-01
      相关资源
      最近更新 更多