【问题标题】:Which one is more fast in searching "ordered arraylist" or "BST"?搜索“有序数组列表”或“BST”哪个更快?
【发布时间】:2016-04-23 13:29:40
【问题描述】:

当 BST 订购时,它工作正常,但在某些情况下它可能不平衡。在这些情况下会发生什么,BST 仍然有效吗? 我们可以直接访问 ArrayList 中的第 nth 元素,那么它是否比 BST 更高效?

【问题讨论】:

  • 如果您使用二进制搜索搜索有序的ArrayList,它的速度与 BST 的最佳情况一样快。因为就是这样。如果您使用线性搜索进行搜索,则不是。
  • 您可能会发现有关不同数据结构性能的视频很有趣。 youtube.com/watch?v=YQs6IC-vgmo
  • @EJP 我怀疑这是关于线性搜索的,因为没有必要提到数组列表是有序的。

标签: java arraylist binary-search-tree


【解决方案1】:

排序数组总是最快的搜索。 二叉搜索树会消耗更多内存,并且可能需要更多级别的间接寻址,这会损害性能并增加缓存未命中的机会。

【讨论】:

    【解决方案2】:

    在排序后的数组中搜索值要快一些,尽管它具有相同的渐近界。如果您正在搜索第 n 个元素,则排序数组会更快。在 Java 中,像 TreeSet 和 TreeMap 这样的东西是基于红黑树的,它们可以自我平衡而不影响运行时间。 (作为完美平衡的树,它们的最大深度为 2log(n) 而不是 log(n)。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-12
      • 2015-09-01
      • 2020-05-25
      • 1970-01-01
      • 1970-01-01
      • 2020-07-26
      • 2019-12-06
      相关资源
      最近更新 更多