【发布时间】:2015-09-06 08:14:23
【问题描述】:
在第 9.3 节中,Job Bentley 提出了一种修改后的二分搜索..
9.3 中显示的典型实现和更好的方法的简短片段
if (arr[mid] < key) low = mid+1
else if (arr[mid] > key) high = mid-1
else return mid;
与不同不变量的修改/有效比较..
if (arr[mid] < key) low = m;
else high = m;
在循环之外,检查索引处的键是否为“高”。在修改后的二分搜索中,左索引“low”从-1(而不是0)开始,“high”索引从n(而不是n-1)开始。循环运行
while (low + 1 != high)
即使我设置 low = 0 和 high = n-1,这个修改后的搜索似乎也有效。
但我宁愿不要在他的代码中猜测 Job Bentley。那么他为什么将 low 设置为 -1 而 high 设置为 n 呢?是否有任何极端情况只能这样工作?
【问题讨论】:
-
0 或 1 个元素的数组
-
谢谢。如果你把它作为一个答案,我会接受。
-
完成了。我只解决了空数组的情况。随意按照我的方法探索一个元素案例。
-
可以展示整个优化的二分搜索代码,让问题更清晰。@Manohar
标签: algorithm binary-search programming-pearls