【问题标题】:Where to choose linear search over binary search在哪里选择线性搜索而不是二分搜索
【发布时间】:2014-04-28 01:38:50
【问题描述】:

在互联网上搜索后,我无法让自己满意,因为我发现了一组全面的情况,在这些情况下,线性搜索比二分搜索更可取。

我基本上想知道是否有可能编制一份相对明确的建议列表(从工业中可能发现的一般编程的角度来看)。或者,如果能证实我确实已经了解了有关该主题的所有内容,我将不胜感激。

【问题讨论】:

  • 如果数据最初是未排序的,如果你只搜索一次,线性搜索肯定比排序后二进制搜索快。
  • “只被搜索一次”可以扩展为“相对于列表的大小将被搜索少量次”。正如您所说,“小”是一个模糊的概念,只能通过对特定情况进行基准测试来确定。
  • (6) 你有不止一维数据(然后二分查找变得更难)
  • 不,那你还是按字典序和二分搜索排序。
  • @user2357112 我显然的意思是你想搜索你没有索引的维度组合,或者你想执行范围搜索。当您对第一个组件不感兴趣时​​,词典排序不会给您带来很多好处。当然我们可以在其中使用多维数据结构和“二分搜索”,但正如我所说,它变得更加复杂

标签: algorithm search binary-search linear-search


【解决方案1】:

我选择线性搜索而不是二分搜索的原因如下:

  1. 列表未排序,只能搜索一次

  2. 列表很小(尽管这本身就是一个模糊的概念 - 我读过的元素不到 100 个?)

  3. 列表需要在搜索操作之后进行排序(由于插入),因为重新排序将支配整个任务的时间复杂度

  4. 数据结构不是随机访问的(如链表)

  5. 不知道可以帮助搜索的数据(相对邻近度?)

【讨论】:

    【解决方案2】:

    您可能无法得出一个明确的清单。例如,不久前我做了一些测试,在 .NET 中搜索排序列表。对于整数的排序列表,当项目数为 13 时,二进制搜索比顺序搜索更快。对于字符串的排序列表,该数字为 8。对于比较昂贵的其他类型,该数字为更小。

    使用不同的语言或运行时库运行相同的测试会得到不同的数字。它甚至可能取决于内存访问硬件以及可能的其他一些硬件考虑因素。

    传统观点认为(也许现在仍然如此)顺序搜索比二分搜索简单得多,因此降低的复杂性使其在小型列表中具有很大优势。今天的事实是,CPU 速度和内存访问如此之快,以至于顺序搜索的简单性仅在列表非常很小的情况下才是一个因素。

    在比较特定数据类型时,您最多可以提出一套明确的规则,适用于特定硬件上的一个运行时配置。如果您更改环境或更改数据类型,则必须编写测试以重新进行基准测试。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-11-05
      • 1970-01-01
      • 2019-12-20
      • 1970-01-01
      • 2019-01-09
      • 2010-10-16
      • 1970-01-01
      相关资源
      最近更新 更多