Académique Documents
Professionnel Documents
Culture Documents
CONCEPTION ET ANALYSE
D’ALGORITHME :
La méthode diviser-pour-
régner
Master – Informatique
Juillet 2023
©Youssou DIENG
ydieng@univ-zig.sn
La méthode diviser pour régner
4 - LA PROCEDURE TRI-FUSION 9
4.1 - L’algorithme TRI-FUSION 9
4.2 - Fonctionnement du TRI-FUSION 9
Page 1 sur 13
La méthode diviser pour régner
Page 2 sur 13
La méthode diviser pour régner
Figure 1: Illustration du principe diviser pour régner sur une suite S de 8 éléments à trier. On a une division
récursive de la suite en sous suite de taille n/2 jusqu'à l'obtention de suites de taille 1.
La récursivité s’arrête quand la séquence à trier est de longueur 1 car, il n’y a plus rien
à faire puisqu’une suite de longueur 1 est déjà triée. La clé de voûte de l’algorithme est donc la
fusion de deux séquences triées dans l’étape « combiner ».
On veut fusionner les deux piles pour obtenir une pile unique triée R, dans laquelle les
cartes seront à l’envers. Le principe utilisé pour la fusion des deux piles est :
1. Choisir la plus faible des deux cartes occupant les sommets respectifs des deux piles
A et B :
Ø Retirer la de sa pile (ce qui a va exposer une nouvelle carte), puis placer la à
l’envers sur la pile résultat R.
2. Répéter cette étape jusqu’à épuisement de l’une des piles A et B.
Page 3 sur 13
La méthode diviser pour régner
Après quoi il suffit de prendre la pile qui reste (A ou B ) et de la placer à l’envers sur la
pile résultat R.
1) 2)
3) 4)
5) 6)
Page 4 sur 13
La méthode diviser pour régner
7) 8)
9)
FIN
Page 5 sur 13
La méthode diviser pour régner
1) Quel est l’élément qui doit être en position k = 2) Quel est l’élément qui doit être en
9 ? C’est le plus petit entre L[i=1] et R[j=1]. position k = 10 ? C’est le plus petit entre
L[i=1] et R[j=2].
Page 6 sur 13
La méthode diviser pour régner
5) Quel est l’élément qui doit être en position k = 6) Quel est l’élément qui doit être en
13 ? C’est le plus petit entre L[i=2] et R[j=4]. position k = 14 ? C’est le plus petit entre
L[i=3] et R[j=4].
9)
FIN
Figure 2 : On considère la séquence du tableau A des éléments entre la case 9 et la case
16 constituée par les entiers ⟨2, 4, 5, 7, 1, 2, 3, 6⟩. Après copie et insertion des sentinelles, le
tableau L contient ⟨2, 4, 5, 7, ∞⟩ et le tableau R contient ⟨1, 2, 3, 6, ∞⟩. Les cases en clair dans
A contiennent leurs valeurs définitives, alors que les cases en clair dans L et R contiennent des
valeurs qui n’ont pas encore été copiées dans A. Prises ensemble, les cases en clair contiennent
à tout moment les valeurs qui étaient à l’origine dans A[9 . . 16], avec en plus les deux
sentinelles. Les cases en gris dans L et R contiennent des valeurs qui ont été déjà copiées dans
A. Les étape (1) à (8) présentent les tableaux A, L et R, avec leurs indices respectifs k, i et j
avant chaque itération de la boucle des lignes 12–17. En (9) on a les tableaux et les indices à
la fin du processus : le sous-tableau dans A[9 . . 16] est trié et les deux sentinelles dans L et R
sont les seuls éléments de ces tableaux qui n’ont pas été copiés dans A.
Page 7 sur 13
La méthode diviser pour régner
a) Invariant de boucle :
« Au début de chaque itération, le sous tableau A[p . . k − 1] est trié et contient les k
− p plus petits éléments de L et R »
b) Initialisation
Nous allons montrer que l’invariant est vrai avant la première itération de la boucle pour
des lignes 12–17. En effet, avant la première itération de la boucle, on a k = p, de sorte que le
sous-tableau A[p . . k − 1] est vide. Ce sous-tableau vide contient les k − p = 0 plus petits
éléments de L et R ; et, comme i = j = 1, L[i] et R[j] sont les plus petits éléments de leurs tableaux
à ne pas avoir été copiés dans A.
c) Conservation
Nous allons montrer que chaque itération de la boucle conserve l’invariant. En effet,
supposons que L[i] ≤ R[j]. Alors L[i] est le plus petit élément qui n’a pas encore été copié dans
A. Comme A[p . . k−1] contient les k−p plus petits éléments, alors après que la ligne 14 a copié
L[i] dans A[k], le sous-tableau A[p . . k] contient les k−p+1 plus petits éléments. Incrémenter
k (dans l’actualisation de la boucle pour) et i (en ligne 15) recrée l’invariant pour l’itération
suivante. Si l’on a L[i] > R[j], alors les lignes 16–17 font l’action idoine pour conserver
l’invariant.
d) Terminaison
Nous allons montrer que l’invariant fournit une propriété utile pour prouver la
conformité de la procédure quand la boucle se termine. À la fin de la boucle, on a k = r + 1.
D’après l’invariant, le sous-tableau A[p . . k − 1], qui est A[p . . r], contient les k − p = r − p +
1 plus petits éléments de L[1 . . n1 +1] et R[1 . . n2 + 1], dans l’ordre trié. Les tableaux L et R,
à eux deux, contiennent n1 + n2 +2 = r−p + 3 éléments. Tous les éléments, sauf les deux plus
forts, ont été copiés dans A, et ces deux plus gros éléments ne sont autres que les sentinelles.
Page 8 sur 13
La méthode diviser pour régner
4 - LA PROCEDURE TRI-FUSION
La procédure FUSION peut maintenant être employée comme sous-routine de
l’algorithme du tri par fusion. La procédure TRI-FUSION(A, p, r) trie les éléments du sous-
tableau A[p . . r]. Si p ≥ r, le sous-tableau a au plus un seul élément et il est donc déjà trié.
Sinon, l’étape diviser se contente de calculer un indice q qui partitionne A[p . . r] en deux sous-
tableaux tels que A[p . . q], contenant n/2 éléments, et A[q + 1. . r], contenant n/2 éléments.
Vous avec ci-dessous la description de l’algorithme.
Page 9 sur 13
La méthode diviser pour régner
𝚯(1), 𝑠𝑖 𝑥 ≤ 𝑐
𝑇(𝑛) = * 𝑛
𝑎𝑇 5 7 + 𝐃(𝐧) + 𝐶 (𝑛) 𝑠𝑖𝑛𝑜𝑛
𝑏
Page 10 sur 13
La méthode diviser pour régner
Page 11 sur 13
La méthode diviser pour régner
La constante c représentant le temps requis pour résoudre des problèmes de taille 1, ainsi
que le temps par élément de tableau des étapes diviser et combiner. Pour des raisons de
commodité, on suppose que n est une puissance exacte de 2.
Page 12 sur 13