Essa prova é uma prova por indução e é a seguinte:
P (n) é a asserção de que "o Quicksort classifica corretamente todas as matrizes de comprimento n".
Caso base: toda matriz de entrada de comprimento 1 já está classificada (P (1) é válida)
Etapa indutiva: corrija n => 2. Corrija uma matriz de entrada de comprimento n.
Precisa mostrar: se P (k) vale para todos os k <n, então P (n) vale também
Ele então desenha uma matriz A particionada em torno de algum pivô p. Então ele desenha p e chama a parte da matriz que é <p como a 1ª parte, e a parte que é> p é a segunda parte. O comprimento da parte 1 = k1 e o comprimento da parte 2 é k2. Pela prova de exatidão da sub-rotina Partition (comprovada anteriormente), o pivô p termina na posição correta.
Por hipótese indutiva: 1ª e 2ª partes são classificadas corretamente por chamadas recursivas. (Usando P (K1), P (k2))
Assim: após chamadas recursivas, toda a matriz é classificada corretamente.
QED
Minha confusão : tenho muitos problemas para ver exatamente como isso prova a exatidão. Portanto, assumimos que P (k) de fato se aplica a todos os números naturais k <n.
A maioria das provas de indução que eu vi até agora são algo como: Prove o caso base e mostre que P (n) => P (n + 1). Eles geralmente também envolviam algum tipo de manipulação algébrica. Essa prova parece muito diferente e não entendo como aplicar o conceito de indução a ela. Eu posso, de certa forma, raciocinar que a correção da sub-rotina Partition é a chave. O mesmo ocorre com o raciocínio de sua correção, como se segue: Sabemos que, a cada chamada recursiva, ele particionará a matriz em torno de um pivô. Esse pivô estará em sua posição correta. Em seguida, cada subarray será particionado em torno de um pivô, e esse pivô estará em sua posição correta. Isso continua até você obter uma sub-matriz de comprimento 1, que é ordenada trivialmente.
Mas então não estamos assumindo que P (k) é válido para todos os k <n .... na verdade estamos MOSTRANDO isso (uma vez que a sub-rotina Partition sempre colocará um elemento em sua posição correta.) Não estamos assumindo que P (k) vale para todos os k