我正在浏览Binary Search的维基百科页面,并偶然发现了Knuth的引文:
“虽然二进制搜索的基本思想相对简单,但细节可能会非常棘手”
我记得在我的计算机科学课程中实施了几个二进制搜索,但是不记得它非常棘手。然而,这篇文章指出,90%的被调查专业人员在几小时后无法工作。我想假设这不是因为这些是非常糟糕的程序员,而是存在天真实现不能解释的边缘情况。
Knuth所指的细节是什么?如果实现二进制搜索算法,需要注意哪些常见问题?
注意我读过Bloch关于 Programming Pearls 错误的文章(中点的int溢出)。还有别的吗?
答案 0 :(得分:3)
在我的日常工作中处于Java世界,我记得this。当我第一次阅读它时,我感到非常惊讶,所以这可能是唐纳德所谈论的事情之一。
答案 1 :(得分:2)
二元搜索棘手问题的最佳参考之一是Jon Bentley's Programming Pearls.
whole chapter 4解决了这个问题,它显示了许多错误的二进制搜索版本。
e.g。您希望找到大于或等于查询x
的第一个数字。考虑其中+1
-1
个问题。你怎么能证明你的程序完全正确?
考虑这些问题,你会发现它并不那么容易。