【问题标题】:Binary Search Problems? [duplicate]二进制搜索问题? [复制]
【发布时间】:2011-09-16 08:29:57
【问题描述】:

可能重复:
What are the pitfalls in implementing binary search?

我在阅读Binary Search 的维基百科页面时偶然发现了下面 Knuth 的一句话:

“虽然二分查找的基本思想比较简单,但细节却出奇的复杂”

我记得在我的计算机科学课程中实施了几个二分搜索,但不记得它非常棘手。然而,这篇文章指出,90% 的接受调查的专业人士在几个小时后都无法工作。我想假设这不是因为这些程序员是糟糕的程序员,而是存在一些幼稚的实现无法解决的边缘情况。

Knuth 还提到了哪些细节?实现二分搜索算法时需要注意哪些常见问题?

注意,我读过 Bloch 的那篇关于 Programming Pearls 错误(中点的 int 溢出)的文章。还有什么吗?

【问题讨论】:

  • 复制品看起来就像地狱一样——我保证。尝试过的问题,问题,但猜测金钱术语是“陷阱”
  • 我刚刚发布了a long answer at the duplicate question。但是没有一个答案足以涵盖二进制搜索可能出错的所有方式。 :-)
  • This is one article 解释了实现二分搜索的几种不同方法,并提供了一些练习来教您更改边界、比较等后行为如何变化。

标签: algorithm computer-science binary-search


【解决方案1】:

在我的日常工作中身处 Java 世界,我记得 this。当我第一次阅读它时,我感到非常惊讶,所以这可能是唐纳德所说的事情之一。

【讨论】:

  • 哇,Knuth 对你来说是“唐纳德”吗? ;-)
  • 呵呵,口误,最近要带孩子去某家知名快餐店。
【解决方案2】:

二分查找的难点最好的参考之一是Jon Bentley's Programming Pearls.

whole chapter 4 解决了这个问题,它显示了许多错误的二分搜索版本。

例如您想找到大于或等于您的查询x 的第一个数字。想想其中的+1-1 问题。你如何证明你的程序是完全正确的?

想想这些问题,你会发现这并不容易。

【讨论】:

    猜你喜欢
    • 2020-11-16
    • 2017-03-04
    • 2013-09-19
    • 2021-09-18
    • 1970-01-01
    • 2010-09-19
    • 1970-01-01
    • 2021-02-03
    • 2022-01-05
    相关资源
    最近更新 更多