【问题标题】:Data structure to use for binary search on large data sets用于对大型数据集进行二进制搜索的数据结构
【发布时间】:2018-06-07 20:52:10
【问题描述】:

我正在尝试在我的应用程序中实现二进制搜索。 我正在创建一种方法来遍历用户的联系人列表,将数字添加到数组中,对其进行排序,然后使用二进制搜索来定位数字等。

但我在想我应该使用什么样的数组,然后对它进行排序,然后实现二进制搜索。 或者有没有办法存储数据?比如集合、地图等?

场景 - 我将从他们的手机中获取用户联系人。当然,每个数字都需要存储在数组或列表中(以更好的为准)。 然后对该数组进行排序。 现在我想使用二进制搜索来搜索一个数字。由于用户可以拥有大量的联系人集,我认为这将是一个好方法

【问题讨论】:

  • 如果你必须运行二分搜索,那么你需要一个支持排序的集合。因此,您的选择几乎仅限于 List 类型。
  • 为什么需要二分查找?请举例说明您要执行的搜索。
  • 答案取决于您要运行哪些操作以及要优化什么(时间复杂度、空间复杂度)。因此,请说明您要运行哪些查询、如何添加项目以及优化什么。 “大型数据集”究竟有多大。
  • 我已经编辑了我的描述。希望这会有所帮助!
  • 如果您只是想按号码搜索联系人,从时间复杂度的角度来看,HashMap 联系人号码将是更好的选择。

标签: java


【解决方案1】:

共有三个基本选项:

  • 排序列表或数组+二分查找。
  • 基于树的结构,例如 TreeMap
  • 基于哈希的结构,例如HashMap

问题是为什么需要二分搜索。如果您只是想按号码查找联系信息,那么从时间复杂度的角度来看,HashMap 可能是更好的选择。

如果您对键有一定的顺序并且对范围查询之类的内容感兴趣,那么二进制搜索将是有意义的。但即使在这种情况下,像TreeMap 这样的基于树的结构也会是更好的选择。时间复杂度不高(几乎相同),但从界面的角度来看更多。

【讨论】:

    【解决方案2】:

    我建议使用 HashMap,因为它在排序数组中查找 O(1) 与 O(log n) 查找。

    因此,如果您主要关心的是查找(搜索),请选择哈希。

    【讨论】:

    • OP 想要二分查找。
    • @lexicore 不,重点不在于“二分搜索”。
    • “二分搜索”在帖子中被提及 3 次。时间复杂度:零次。
    • @JohnnyMopp

      读取:用于大型数据集的数据结构

    • 我正在尝试在我的应用程序中实现二进制搜索。我认为这很清楚。但我想我们需要等待 OP 澄清。
    猜你喜欢
    • 2011-10-27
    • 2023-03-17
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 2021-06-30
    • 1970-01-01
    • 1970-01-01
    • 2011-09-21
    相关资源
    最近更新 更多