2

我正在阅读 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 页上的代码翻译过来的,最后:

if p >= n || x[p] != t
    p = -1

我的理解正确吗?我只是想知道这是否是一个错字,或者真的没有必要在条件中包含案例 p 是 1000 。

另一个问题是,在第 94 页自下而上的第 5~6 行中,它说:当第一次测试失败并且 l 保持为零时,程序按顺序计算 p 的位,最高有效位在前。

这里是什么意思?当第一次测试失败时,我不应该是-1,而不是0吗?

任何人都可以详细说明这个说法吗?

PS 我找不到 Jon 的电子邮件地址,否则,我会把这些问题发给他。:-(

4

1 回答 1

3

这是错字。l 的最大值是 999 (1000 - 512 + 256 + .. + 1, ),所以 p = l+1 的最大值是 1000。对于 binsearch 的硬编码版本(清单 9.8)很清楚。

我们可以在这里看到真正的 C 代码(不是伪代码)(Alg.4)如果 (p >= n ||

于 2012-05-18T12:03:48.183 回答