Algorithm 何时使用low<;高或低+;1<;循环不变量的高精度
我读过多篇文章,包括Jon Bentley关于二进制搜索的章节。这就是我对正确的二进制搜索逻辑的理解,它在我做的简单测试中起作用:Algorithm 何时使用low<;高或低+;1<;循环不变量的高精度,algorithm,binary-search,loop-invariant,Algorithm,Binary Search,Loop Invariant,我读过多篇文章,包括Jon Bentley关于二进制搜索的章节。这就是我对正确的二进制搜索逻辑的理解,它在我做的简单测试中起作用: binarysearch (arr, low, high, k) 1. while (low < high) 2. mid = low + (high - low)/2 3. if (arr[mid] == k) return mid 4. if (arr[mid] <
binarysearch (arr, low, high, k)
1. while (low < high)
2. mid = low + (high - low)/2
3. if (arr[mid] == k)
return mid
4. if (arr[mid] < k )
high = mid -1
5. else
low = mid + 1
我很困惑,想知道您何时可能想使用low+1
属于低<高
在我上面描述的逻辑中,如果您使用简单的示例进行测试,则条件会导致错误
有人能澄清为什么以及何时我们可能希望在while循环中使用
low+1
,而不是low
?如果您的不变量是目标必须位于low@Rafe,那么您的猜测是正确的。请继续并将其作为答案发布。
binarysearch_get_first_occur_with_duplicates (arr, low, high, k)
1. while (low < high)
2. mid = low + (high - low)/2
3. if (arr[mid] == k)
high = mid - 1
low_so_far = arr[mid]
4. if (arr[mid] < k )
high = mid -1
5. else
low = mid + 1
return low_so_far
while (low + 1 < high)