Cette preuve est une preuve par induction, et va comme suit:
P (n) est l'affirmation selon laquelle "Tri rapide trie correctement chaque tableau d'entrée de longueur n".
Cas de base: chaque tableau d'entrée de longueur 1 est déjà trié (P (1) tient)
Étape inductive: fixer n => 2. Fixer un tableau d'entrée de longueur n.
Besoin de montrer: si P (k) est valable pour tout k <n, alors P (n) est également valable
Il trace ensuite un tableau A partitionné autour d'un pivot p. Il dessine donc p et appelle la partie du tableau qui est <p comme 1ère partie, et la partie qui est> p est la deuxième partie. La longueur de la partie 1 = k1, et la longueur de la partie 2 est k2. Par la preuve d'exactitude du sous-programme de partition (prouvée précédemment), le pivot p se termine dans la bonne position.
Par hypothèse inductive: les 1ère, 2e parties sont triées correctement par appels récursifs. (En utilisant P (K1), P (k2))
Donc: après des appels récursifs, tout le tableau est correctement trié.
QED
Ma confusion : j'ai beaucoup de mal à voir exactement comment cela prouve l'exactitude de celui-ci. Nous supposons donc que P (k) est vrai pour tous les nombres naturels k <n.
La plupart des preuves d'induction que j'avais vues jusqu'à présent vont quelque chose comme: Prouver le cas de base et montrer que P (n) => P (n + 1). Ils impliquaient généralement une sorte de manipulation algébrique. Cette preuve semble très différente, et je ne comprends pas comment lui appliquer le concept d'Induction. Je peux quelque peu raisonner que l'exactitude du sous-programme de partition est la clé. Le raisonnement pour son exactitude est le suivant: Nous savons que chaque appel récursif, il partitionnera le tableau autour d'un pivot. Ce pivot sera alors dans sa position légitime. Ensuite, chaque sous-réseau sera encore partitionné autour d'un pivot, et ce pivot sera alors dans sa position légitime. Cela continue indéfiniment jusqu'à ce que vous obteniez un sous-tableau de longueur 1, qui est trié de manière triviale.
Mais alors nous ne supposons pas que P (k) est valable pour tous les k <n .... nous le montrons réellement (puisque le sous-programme de partition placera toujours un élément dans sa position légitime.) Ne supposons-nous pas que P (k) est valable pour tout k
la source
Réponses:
La preuve que vous décrivez est connue comme le principe d'une forte induction mathématique et a la forme
la source
Cette preuve utilise le principe de l' induction complète :
Maintenant, utilisons l'induction complète pour prouver que la version suivante de Quicksort trie correctement son entrée:
Voici
A[1],...,A[n]
le tableau d'entrée etn
sa longueur. La déclaration que nous voulons prouver est la suivante:Quicksort
la source
La partie manquante de l'argument est la transitivité de '<' - c'est-à-dire la propriété que si a <b et b <c, alors a <c. La preuve que le tableau final est trié ressemble à ceci:
Soit A [i], A [j] des éléments du tableau post-tri, où i <j. Alors A [i] <A [j] découle de l'un des cas de placement suivants (et il n'y a pas d'autres cas):
(a) i et j sont dans la première partition - A [i] <A [j] suit par récursivité / induction.
(b) i et j sont dans la deuxième partition - A [i] <A [j] suit par récursivité / induction.
(c) i est dans la première partition et j est l'indice du pivot - A [i] <A [j] suit la procédure de preuve de partition.
(c) i est l'indice du pivot et j est dans la deuxième partition - A [i] <A [j] suit la procédure de preuve de partition.
(e) i est dans la première partition et j est dans la deuxième partition - puis par la procédure de partition, A [i] <pivot et pivot <A [j]. Donc par transitivité, A [i] <A [j].
la source