TD4

Transcription

TD4
Algorithmique - TD 4
1
Inversions
Définition La table d’inversion d’une permutation a1 . . . an de {1, 2 . . . , n} est une séquence
b1 , . . . , bn où baj est le nombre d’éléments ai , i < j tels que ai > aj .
Montrer que la fonction qui associe à chaque permutation sa table d’inversion est une bijection
des permutations de {1, . . . , n} vers {0, . . . n − 1} × {0, . . . , n − 2} × · · · × {0, 1} × {0}
2
Tri à bulles
Considerer l’algorithme de tri à bulles sur un tableau T [1..n] :
i←1
while(i < n) do
last swap ← n
for(j = n downto i + 1 ) do
if ( T [j] < T [j − 1]) then échanger T [j] et T [j − 1] ; last swap ← j − 1
endif
endfor
i ← last swap + 1
endwhile
1. Démontrer les propriétés suivantes de l’algorithme :
Invariants de boucle :
(a) Au début de chaque itération de la boucle for :
– last swap ≥ j et
– Pour tout k = j..last swap, T [k] contient le minimum de T [k..n].
(b) Au début de chaque itération de la boucle while : Pour tout k,
k ≤ n, T [k] contient le minimum de T [k..n].
1 ≤ k ≤ i − 1 et
Terminaison : À chaque itération de la boucle while, i est strictement plus grand que dans
l’itération précédente.
2. Démontrer que le nombre d’échanges effectués par l’algorithme est égal au nombre total
d’inversions dans le tableau en entrée.
3
Création d’un tas
Considérer la procédure suivante pour la création d’un tas “sur place” à partir d’un tableau T :
CREER-TAS (Tableau T ) : Tas
//T est interprété comme la représentation d’un arbre parfait de taille n :
taille ← T.n
H ← (T, taille)
// ensuite la structure de tas est rétablie du père de la dernière feuille jusqu’à la racine
1
for( i ← pere(taille) to 1 ) do
Retablir-Tas-Bas (H, i )
endfor
return H
1. Démontrer que le coût de CREER-TAS est O(n) dans le cas pire.
2. Proposer une solution alternative pour la construction “sur place” d’un tas à partir d’un
tableau, basée sur une suite d’insertions successives. Analyser son coût dans le cas pire.
4
Tas fusionnables
Voir transparents.
2