【问题标题】:Implementation of binary search that returns object instead of index?实现返回对象而不是索引的二进制搜索?
【发布时间】:2015-11-11 08:17:32
【问题描述】:

那么是否可以编写一个返回对象而不是索引的二进制搜索实现?我需要这样,所以整个任务在 O(logn) 时间内完成,而不是在我得到索引后调用 collection.get() 花费更多时间,这样复杂度就变成了 O(nlogn)

【问题讨论】:

  • 为什么调用 get 会使复杂度 O(nlog(n))?
  • 它是什么类型的集合?
  • @user2357112 因为您连续解析集合以获取我猜的对象。这就像你有一个指向项目的指针,只是它在集合中的索引
  • 二分搜索需要一个随机访问容器。如果您知道索引,您应该能够在 O(1) 中找到该项目。如果不是这种情况,那么二进制搜索首先就是错误的算法。
  • 那么在这种情况下 get 只是一个数组访问,所以它是 O(1)。

标签: java time-complexity binary-search


【解决方案1】:

二分查找需要一个随机访问容器。如果您知道索引,您应该能够在 O(1) 中找到该项目。如果不是这种情况,那么二进制搜索首先就是错误的算法。

在这种情况下,您使用的是 ArrayList,它是一个数组的包装器,它确实提供了有效的随机访问。

【讨论】:

    【解决方案2】:

    除了 O(1) 随机访问集合之外,您不会对任何东西进行二分搜索:否则搜索时间将远远超出 O(log(N))。 O(1) 集合中不存在所谓的“额外时间”:无论如何,您的替换都必须执行相同的步骤。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-10
      • 2019-03-16
      • 2020-04-02
      • 2021-02-20
      • 1970-01-01
      • 2022-10-02
      • 2017-03-28
      • 1970-01-01
      相关资源
      最近更新 更多