この証明は帰納法による証明であり、次のようになります。
P(n)は、「クイックソートが長さnのすべての入力配列を正しくソートする」という表明です。
基本ケース:長さ1のすべての入力配列は既にソートされています(P(1)が保持されます)
帰納的ステップ:n => 2を修正します。長さnの入力配列を修正します。
表示する必要があります:P(k)がすべてのk <nに対して成り立つ場合、P(n)も成り立ちます
次に、ピボットpの周りに分割された配列Aを描画します。したがって、彼はpを描画し、配列の<pである部分を最初の部分として呼び出し、> pである部分を2番目の部分として呼び出します。パーツ1の長さ= k1、パーツ2の長さはk2です。(前に提供された)Partitionサブルーチンの正確性の証明により、ピボットpは正しい位置に巻き上げられます。
帰納的仮説:1番目、2番目の部分は再帰呼び出しによって正しくソートされます。(P(K1)、P(k2)を使用)
したがって、再帰呼び出しの後、配列全体が正しくソートされます。
QED
私の混乱:これが正確さをどのように証明するかを正確に確認するのに多くの問題があります。したがって、P(k)が実際にすべての自然数k <nに対して成立すると仮定します。
これまでに見た誘導証明のほとんどは、次のようなものです。基本ケースを証明し、P(n)=> P(n + 1)であることを示します。それらは通常、ある種の代数的操作も含みました。この証明は非常に異なっているように見え、誘導の概念をそれに適用する方法がわかりません。私は、Partitionサブルーチンの正確さが鍵であるといくぶん推論できます。したがって、その正確さの理由は次のとおりです。再帰呼び出しのたびに、ピボットの周りで配列が分割されることがわかっています。その後、このピボットはその正しい位置になります。次に、各サブアレイはピボットを中心にさらに分割され、そのピボットは正しい位置に配置されます。これは、長さ1のサブ配列を取得するまで繰り返し行われます。
しかし、P(k)がすべてのk <nに当てはまるとは想定していません。実際にそれを示しています(Partitionサブルーチンは常に1つの要素を正しい位置に配置するため)。Pを想定していませんか? (k)すべてのkに当てはまる