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