【问题标题】:Binary search, sorted array二分查找,排序数组
【发布时间】:2013-09-09 14:40:13
【问题描述】:

我正在学习二分搜索,基本定义从第一个元素的迭代器和最后一个元素的迭代器开始。您还有一个键,这是您要查找的元素。首先将key与中点的值进行比较,然后根据key是大于还是小于中点的值来消除上半部分或下半部分。这个过程一直持续到匹配为止。

这种方法不需要对您正在查看的容器进行排序吗?否则,我看不出容器中的键和值之间的比较以消除要查看的容器部分有何特殊用途。

【问题讨论】:

  • 是的,二分查找仅适用于已排序的集合。任何没有指明不充分的文章:(
  • 谁反对这个?问题很明确,包括动机,展示了理解,并且与编码明显相关。 “我知道这一点,怎么会有人不知道这一点”不是否决问题的充分理由。
  • @us2012 这是关于在提出问题之前没有做足够的研究。几乎所有与二分查找相关的文章都会很清楚地提到这一点
  • @Saksham。我之所以问这个问题,是因为我正在浏览许多技术面试编程书籍中的一本,而在我正在看的那本书中,并没有提到它。当然,我确信作者假设知道这一事实,但这是一个没有提及的例子。

标签: c++ binary-search


【解决方案1】:

是的,确实如此。

在计算机科学中,二分搜索或半间隔搜索算法在按键值排序的数组中查找指定输入值(搜索“键”)的位置。

来源:Wikipedia: Binary Search Algorithm,尽管算法上的任何其他体面的文字都应该提到必须对数组进行排序。

【讨论】:

    【解决方案2】:

    答案是肯定的。二进制搜索假设您首先对集合进行排序。如果我没记错的话,任何性能优于 O(N) 的搜索算法都要求您的集合存储在一些特殊的数据结构中(排序列表、二叉树、红黑树......)。

    当你实现一个集合的二分搜索时,你必须确保这个集合首先被排序。通常你会先对列表进行排序,然后总是在正确的位置添加元素(以确保新集合仍然是排序的)。假设你还使用二分查找来找到正确的添加位置,在最坏的情况下,添加和搜索都是 O(log2(N))。

    在考虑不同的搜索算法时,还必须考虑底层数据结构和向其中添加元素的成本。

    【讨论】:

      猜你喜欢
      • 2016-05-24
      • 1970-01-01
      • 2021-12-20
      • 1970-01-01
      • 2011-12-25
      • 2013-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多