【问题标题】:Binary search on unsorted arrays?对未排序数组进行二分搜索?
【发布时间】:2010-12-25 23:16:23
【问题描述】:

我遇到了这个文档Binary Search Revisited,作者已经证明/解释了二进制搜索也可以用于未排序的数组(列表)。在第一次阅读时,我并没有深入了解该文件的大部分内容。

你们中有人已经探索过这个吗?

【问题讨论】:

  • 嗯,还没看,但目前我不明白这对未排序的数组如何工作(当然,排序可以用函数完成,但它仍然会排序)。
  • 我很确定这是一个骗局。在未排序的列表中查找某些内容始终是一个 O(n) 问题,至少在当前的宇宙定律范围内是这样。
  • 当然你可以对未排序的数组进行二分搜索。问题仍然是你是否会找到你要找的东西:-)
  • 由于二分查找的定义包含它的输入必须被排序的事实,这不是二分查找。它可能是“二分查找”like,但不是二分查找。请参阅en.wikipedia.org/wiki/Binary_search_algorithm,但您会在其他数千个地方找到相同的定义。
  • @Philippe 如果您递归地划分数组的适当部分,则当前的宇宙法则允许您在 Log(n) 中找到它。这很酷,有点应用“半快速排序”。不过,有点太长了,无法在评论中解释。请参阅 Cormen(中位数和顺序统计)。

标签: algorithm binary-search


【解决方案1】:

我刚刚读过报纸。在我看来,作者使用术语二分搜索来解决用于查找连续函数零点的Bisection method

论文中的例子显然是受启发于寻找零到一个 间隔(在 y 轴上进行平移)或在表格数据中找到函数的最大值/最小值。

本文考虑的数组不是随机填充的,你会找到构造它们的规则(这是与用于转储它们的函数绑定的规则)

说这是一个很好的机会来修补属于一个共同家族的不同算法,以便找到相似之处和不同之处。扩展您的经验的好机会。

绝对不是一个新概念或被低估的概念。

【讨论】:

    【解决方案2】:

    用二进制或二等分法在未排序的列表中查找 3:

    L = 1 5 2 9 38 11 3

    1-在整个列表中取中点 L : 9 3

    2-在剩余列表中取中点 1 5 2 : 5 3 > 5 所以删除列表的右侧部分 (5 2) 仍然是 1

    结果:3 个未找到

    两个备注:

    1-二进制或二分算法将左右视为顺序的指示 所以我粗鲁地应用了通常的算法,考虑到右高左低 如果你考虑相反的情况,即右低左高,那么,试图在这个稍微相似的列表中找到 3 将导致“3 unfound” L' = L = 1 5 2 9 3 38 11 3

    2- 如果您接受系统地在列表的已删除部分上重新应用该算法,那么它会导致在 n 个元素的列表中搜索元素复杂性将是 O(n) 与运行所有列表完全相同求结束搜索你的价值。 搜索时间可能会稍微短一些。 为什么 ?让我们考虑一下您从乞讨中一一看。以排序列表中的值 100000 结束。您将在列表末尾找到它! :-)

    如果现在这个列表是无序的并且你的值 100000 正好在中间点......宾果!

    【讨论】:

      【解决方案3】:

      可以在旋转的未排序数组/列表上实现二分搜索。

      【讨论】:

      • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-19
      • 2021-01-24
      • 1970-01-01
      • 2018-10-20
      相关资源
      最近更新 更多