【发布时间】:2012-05-18 20:03:48
【问题描述】:
我正在阅读 Jon Bentley 的 Programming Pearls,第 2 版的第 9.3 节。
在第 94 页,Jon 给出了改进的二分搜索算法的实现,利用 n 是 1000 的事实(搜索 1000 个数字以找到目标)。
程序结束时是:
if p > 1000 || x[p] != t
p = -1
我的问题是,如果 p 正好是 1000 怎么办?好像当 p 为 1000 时,它也应该报错,比如:
if p >= 1000 || x[p] != t
p = -1
无论如何,这部分代码是从第93页的代码翻译过来的,在wich的末尾:
if p >= n || x[p] != t
p = -1
我的理解正确吗?我只是想知道这是否是一个错字,或者真的没有必要在条件中包含 case p is 1000。
另一个问题是,在第 94 页自下而上的第 5~6 行中,它说:当第一次测试失败并且 l 保持为零时,程序按顺序计算 p 的位,最高有效位在前。
这里是什么意思?而当第一次测试失败时,我不应该是-1,而不是0?
谁能详细说明这个说法?
附:我找不到 Jon 的电子邮件地址,否则,我会将这些问题发给他。 :-(
【问题讨论】:
-
我手边没有这本书,但我似乎记得他的算法是用基于 1 的数组而不是许多编程语言中常见的基于 0 的数组编写的。在这种情况下,x[1000] 将是数组中的最后一个有效值。
-
@AdrianMcCarthy:看起来不像。在第 93 页,作者已经说明数组是 x[0..n-1]。这里的代码只是处理 n 为 1000 的情况。这里有点困惑......
标签: algorithm