QuickSort Invariant Loop Invariantを使用した3条件
-
29-09-2020 - |
質問
Cormen、Leiseron、RivestとSteinによる本「アルゴリズムの紹介」を使って、それらは正当性を示すために説明しており、ループの3つの段階、初期化、メンテナンス、終了のための不変が保持されているループの。
以下のアルゴリズムに基づいて、以下のプロパティ1と2を理解していません。
これは私が参照しているアルゴリズムです:
誰かが私の条件を理解するのを手伝ってくれるかもしれません
1) $ p \ leq k \ leq i $ の場合 $ a [k] \ leq x $ < / SPAN>
例えば、 $ p $ はです。 class="math-container"> $ i $ $ 0 $ .... for Loopの前にi = p-1
を持つ以来、この保持するのでしょうか。 / P>
2) $ i + 1 \ leq k \ leq j - 1 $ $ a [k]> X $
たとえば、アルゴリズムでは、最初にFORループを入力し、j= 1、 $ I $ が0になります。 tこれがどのように機能するかを見てください。ありがとう
解決
$ p \ leq k \ leq i $ $ a [k] \ leq x。$ たとえば、 $ p $ の場合、アルゴリズムでは $ 1 $ 、 $ i $ $ 0 $ .... forループの前に
を持つ以来、このホールドはどのようになりますか。i = p-1
$ i $ は常に $ p $ より常に小さいです。ループの開始、ループ内のステートメント " $ i= i + 1 $ "が実行される可能性があるため、大きくなる可能性があります。少なくとも $ k= p $ の場合、 $ i $ が増加しました。="math-container"> $ p \ le k \ le i $ 。
$ p \ le i $ が保持されていない、つまり $ k $ < / span> $ p \ le k \ le i $ 、条件 " $ p \ leq k \ leq i $ その後 $ a [k] \ leq x $ "を自動的に保持します。 (命名が偽の場合、何でも起こり得ることを思い出してください。)その条件を偽造するには、 $(p、k、i)$のインスタンスを見つける必要があります。 $ p \ leq k \ leq i $ が $ a [k] \ gt x $ < /スパン>
今2番目のループ不変の場合を把握できるはずです。
他のヒント
私はコードrightnowを追跡する気分ではありませんが、uが[r]= xで始まり、[i]= x
で終わることを理解しています。(最後の要素として選択されているように思われるピボットは、指定されたコードで$ R $ として選択されているようですが、リストの残りの部分が配置されていると正しい位置に達します。)
最初の一見すると、コードにいくつかのエラーがある可能性があります。その後、下括弧内の交換は必要ありません。 $ else $