Algorithm 何时使用low<;高或低+;1<;循环不变量的高精度

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] <

我读过多篇文章,包括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] < 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)