next up previous contents
suivant: Exercice 4 - Tri monter: Un autre exemple précédent: Exercice 2 - Plus   Table des matières

Exercice 3 - Tri par insertion

Nous allons écrire et démontrer la validité de l'algorithme du tri par insertion. Nous rappelons que $T = [T_1, \ldots, T_n]$ est trié si $\forall i \in \{1, \ldots, n-1\}, T_i \leq T_{i + 1}$. Etant donné le programme suivant :

\begin{algorithm}[H]
\dontprintsemicolon
\Procedure{$insere(T, k)$}
{
$i \lo...
...{
$echanger(T[i - 1], T[i])$\;
$i \longleftarrow i - 1$
}
}
\end{algorithm}

Prouver que si on passe en paramètre à $insere$ un tableau $T$ dont les $k-1$ premiers éléments sont triés, alors à la fin de son exécution, les $k$ premiers éléments dont triés. Etant donné le programme suivant :

\begin{algorithm}[H]
\dontprintsemicolon
\Procedure{$triInsertion(T[n])$}
{
\Pour{$i \in \{2, \ldots, n\}$}
{
$insere(T, i)$
}
}
\end{algorithm}

Démontrer la terminaison et la validité de $triInsertion$.

Voici le corrigé de la première question : L'algorithme se termine bien car les valeurs prises par $i$ forment une séquence de nombres entiers strictement décroissante. Si l'on ne sort pas de la boucle avec $T_{i-1} \leq T_i$, on aura forcément $i=1$ après la dernière itération. Prenons comme invariant de boucle la conjonction des conditions suivantes :

Prouvons cette propriété par récurrence :

Après la denière itération, si $i=1$, alors la première tranche ne contient aucun élément et la deuxième condition de l'invariant de boucle permet de conclure que toute la tranche $T_1, \ldots, T_k$ est triée. Si par contre, on sort de la boucle parce que $T_{i-1} \leq
T_{i}$, alors comme, d'après l'invariant de boucle, $T_1, \ldots, T_{i-1}$ et $T_{i}, \ldots, T_{k}$ sont triées, alors $T_1, \ldots,
T_{k}$ est triée.


next up previous contents
suivant: Exercice 4 - Tri monter: Un autre exemple précédent: Exercice 2 - Plus   Table des matières
klaus 2010-08-05