Это доказательство является доказательством по индукции и состоит в следующем:
P (n) - это утверждение, что «Быстрая сортировка правильно сортирует каждый входной массив длины n».
Базовый случай: каждый входной массив длины 1 уже отсортирован (P (1) выполняется)
Шаг индукции: fix n => 2. Исправить некоторый входной массив длины n.
Нужно показать: если P (k) выполняется для всех k <n, то P (n) также выполняется
Затем он рисует массив A, разделенный вокруг некоторой оси p. Поэтому он рисует p и вызывает часть массива <p как 1-ю часть, а часть> p является второй частью. Длина части 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 всегда помещает один элемент в правильное положение.) Разве мы не предполагаем, что P (k) выполняется для всех k