Esta prueba es una prueba por inducción, y es la siguiente:
P (n) es la afirmación de que "Quicksort ordena correctamente cada matriz de entrada de longitud n".
Caso base: cada matriz de entrada de longitud 1 ya está ordenada (P (1) se mantiene)
Paso inductivo: arreglo n => 2. Arregle alguna matriz de entrada de longitud n.
Es necesario mostrar: si P (k) se cumple para todos los k <n, entonces P (n) también se cumple
Luego dibuja una matriz A dividida alrededor de algún pivote p. Entonces dibuja p, y llama a la parte de la matriz que es <p como la primera parte, y la parte que es> p es la segunda parte. La longitud de la parte 1 = k1, y la longitud de la parte 2 es k2. Mediante la prueba de corrección de la subrutina de Partición (probada anteriormente), el pivote p termina en la posición correcta.
Por hipótesis inductiva: la primera, segunda parte se ordenan correctamente por llamadas recursivas. (Usando P (K1), P (k2))
Entonces: después de las llamadas recursivas, toda la matriz está ordenada correctamente.
QED
Mi confusión : tengo muchos problemas para ver exactamente cómo esto demuestra la corrección de la misma. Por lo tanto, suponemos que P (k) se cumple para todos los números naturales k <n.
La mayoría de las pruebas de inducción que he visto hasta ahora son algo así como: demostrar el caso base y mostrar que P (n) => P (n + 1). Por lo general, también involucraban algún tipo de manipulación algebraica. Esta prueba parece muy diferente, y no entiendo cómo aplicarle el concepto de inducción. De alguna manera puedo razonar que la corrección de la subrutina de Partición es la clave. Así es el razonamiento para su corrección de la siguiente manera: Sabemos que cada llamada recursiva dividirá la matriz alrededor de un pivote. Este pivote estará en su posición correcta. Luego, cada subconjunto se dividirá más alrededor de un pivote, y ese pivote estará en su posición correcta. Esto sigue y sigue hasta que obtiene un subconjunto de longitud 1, que se ordena trivialmente.
Pero entonces no estamos asumiendo que P (k) se cumple para todos los k <n ... en realidad estamos MOSTRANDO que sí (ya que la subrutina Partición siempre colocará un elemento en su posición correcta). ¿No estamos asumiendo que P (k) se cumple para todos los k