我正在尝试解决CLRS(算法简介)中的一些问题,而我遇到了问题7-1的问题。 b部分(现在),内容如下:
索引i和j是我们永远不会访问A的元素 在子阵列A [p ... r]之外。
我将如何证明这一点?我可以看到指数走向中间但是...这真的扭曲了我的大脑。并解释它不是一个证据。如果有人能对这个问题有所了解,我会非常感激。
答案 0 :(得分:3)
我相信你指的是以下分区算法:
PARTITION(A,p,r)
x = A[p]
i = p-1
j = r+1
while TRUE
do repeat j=j-1
until A[j]<=x
repeat i=i+1
until A[i]>=x
if i<j
then exchange A[i] and A[j]
else return j
while循环的合适不变量是 总是存在索引a,使得A [a]&lt; = x并且p&lt; = a&lt; j和索引b使得A [b]使得A [b]> = x且i <1。 b&lt; = r 。
您需要显示:
一旦为while循环建立了不变量,就可以考虑每个重复循环并显示索引必须保持在允许的范围内。 (提示:对于第一个重复循环,尝试证明j总是> = a a其中a是原始不变量中定义的)