【问题标题】:which one performs better binary search or sequential search on unsorted data哪一个对未排序的数据执行更好的二分搜索或顺序搜索
【发布时间】:2021-01-24 20:41:47
【问题描述】:

如果给定一个未排序的数组,在以下两种情况中,它的时间复杂度会更小或性能会更好

  1. 二分查找 - 首先对数组进行排序,然后使用二分查找算法
  2. 顺序搜索 - 在未排序的数组上

所以如果给定一个未排序的数组来搜索一个元素,我们应该先对它进行排序然后应用二分搜索还是直接对未排序的数组应用顺序搜索算法。

【问题讨论】:

  • 视情况而定。如果只询问一个查询,顺序搜索应该更好。如果一个数组有很多查询,只需要排序一次,使用二分查找更好。
  • 换个角度看:为什么一开始就用数组来搜索东西?将数据保存在哈希表 (<unordered_set>) 中将为您提供恒定的访问时间(以插入为代价)。
  • 对于小数据集,顺序搜索优于二分搜索,尤其是在数据未排序的情况下。

标签: c++ algorithm sorting search binary-search


【解决方案1】:

两者都存在,因为它们都有自己有用的地方。

如果您只搜索一次,顺序搜索是最快的。但是如果你做很多查询,那么二分查找会更快。鉴于排序是O(n log(n)),如果必须进行O(log(n)) 搜索,则二分搜索的操作数会相同。

但是,操作不是平等的。特别是二分搜索需要对分支预测来说是困难的是/否问题。因此,如果您要搜索一个少于 100 个整数的列表,二分搜索可能比顺序搜索慢,因为二分搜索有多个管道停顿(每个错误预测的二元选择),而顺序搜索只有一个(当你找到你正在寻找的元素)。

因此,如果您要进行多次查找,并且您有大量数据或复杂数据(例如字符串),那么二进制搜索会更好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-05
    相关资源
    最近更新 更多