5

这是算法:

// Precondition: n > 0

l = -1;
r = n;

while (l+1 != r) {
    m = (l+r)/2;

    // I && m == (l+r)/2

    if (a[m] <= x) {
        l = m;
    } else {
        r = m;
    }
}
// Postcondition: -1 <= l < n

我做了一些研究并将不变量缩小到if x is in a[0 .. n-1] then a[l] <= x < a[r].

我不知道如何从那里取得进展。前提条件似乎太宽泛了,所以我很难证明P -> I.

非常感谢任何帮助。这些是可以用来证明算法正确性的逻辑规则:

条件的逻辑规则

循环的逻辑规则

4

1 回答 1

1
于 2016-10-26T12:51:06.653 回答