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
fuente
Respuestas:
De hecho, estamos asumiendo que cumple para todos los . Esta es una generalización del estilo de prueba "De , demostramos " con el que está familiarizado.P(k) k<n P(n−1) P(n)
La prueba que describe se conoce como el principio de la inducción matemática fuerte y tiene la forma
En la prueba a la que te refieres, eso es exactamente lo que está sucediendo. Para usar el ordenamiento rápido para ordenar una matriz de tamaño , la dividimos en tres partes: la primera submatriz, el pivote (que estará en su lugar correcto) y la submatriz restante de tamaño . Por cierto, la partición funciona, cada elemento en el primer subconjunto será menor o igual que el pivote y cada elemento en el otro subconjunto será mayor o igual que el pivote, por lo que cuando clasificamos recursivamente el primer y último subconjunto, terminará habiendo ordenado toda la matriz.n k n−k−1
Mostramos que esto es correcto por inducción fuerte: dado que el primer subconjunto tiene elementos, podemos suponer por inducción que se ordenará correctamente. Dado que el segundo subconjunto tiene elementos , podemos suponer que se ordenará correctamente. Por lo tanto, al unir todas las piezas, terminaremos de haber ordenado la matriz.k<n n−k−1<n
fuente
Esta prueba utiliza el principio de inducción completa :
Puede probar este principio utilizando el principio de inducción habitual considerando la propiedad I te dejo los detalles.
Ahora, usemos la inducción completa para demostrar que la siguiente versión de Quicksort ordena su entrada correctamente:
Aquí
A[1],...,A[n]
está la matriz de entrada, yn
es su longitud. La declaración que queremos demostrar es la siguiente:Solo probaré la tercera propiedad, dejando el resto a usted. Así, dejamos que sea la siguiente declaración:P(n)
La prueba es por inducción completa en . Si entonces no hay nada que demostrar, así que supongamos que . Deje ser como en el procedimiento . Dado que , la hipótesis de inducción muestra que Además, por la forma en que formamos las matrices e , se deduce que . Así Se deduce inmediatamente que . Por lo tanto, cumple.n n=1 n>1 X,x,Y,y x,y<n
Quicksort
fuente
La parte que falta del argumento es la transitividad de '<' , es decir, la propiedad de que si a <by b <c, entonces a <c. La prueba de que la matriz final está ordenada es algo como esto:
Supongamos que A [i], A [j] son elementos de la matriz de clasificación posterior, donde i <j. Entonces A [i] <A [j] se deduce de uno de los siguientes casos de ubicación (y no hay otros casos):
(a) i y j están en la primera partición - A [i] <A [j] sigue por recursión / inducción.
(b) i y j están en la segunda partición - A [i] <A [j] sigue por recursión / inducción.
(c) i está en la primera partición y j es el índice del pivote - A [i] <A [j] sigue como prueba del procedimiento de partición.
(c) i es el índice del pivote y j está en la segunda partición - A [i] <A [j] sigue como prueba del procedimiento de partición.
(e) i está en la primera partición y j está en la segunda partición; luego, mediante el procedimiento de partición, A [i] <pivote y pivote <A [j]. Entonces, por transitividad, A [i] <A [j].
fuente