7-1 Hoare分区正确性证明

时间:2013-05-29 17:33:15

标签: algorithm sorting quicksort

我正在尝试解决CLRS(算法简介)中的一些问题,而我遇到了问题7-1的问题。 b部分(现在),内容如下:

  

索引i和j是我们永远不会访问A的元素   在子阵列A [p ... r]之外。

我将如何证明这一点?我可以看到指数走向中间但是...这真的扭曲了我的大脑。并解释它不是一个证据。如果有人能对这个问题有所了解,我会非常感激。

1 个答案:

答案 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

您需要显示:

  1. 循环开始时这是真的(提示:选择a = p和b = p)
  2. 如果在循环开始时这是真的,那么在循环结束时它仍然是真的。 (提示:在交换期间选择a = j和b = i)
  3. 一旦为while循环建立了不变量,就可以考虑每个重复循环并显示索引必须保持在允许的范围内。 (提示:对于第一个重复循环,尝试证明j总是> = a a其中a是原始不变量中定义的)