Vous êtes sur la page 1sur 102

CHAPITRE 3 : APPROCHE « DIVISER POUR RÉGNER »

YOUSSOU DIENG
PROBLÈME : LE TRI D’UNE SUITE DE N NOMBRES

Trier une suite “a1, a2, a3, …, an” de n nombres


dans l’ordre croissant.

01/11/2023
ANALYSE DU PROBLÈME

1. Définir précisément le problème pour identifier le ou les résultats


attendus (Sortie).
2. Identifier les informations nécessaires à la réalisation des traitements
envisagés (Entrées).
3. Identifier une méthode de traitements permettant d’obtenir le résultat
et la décrire en pseudo code.
4. Montrerer que votre algorithme fait bien ce qu’on attend de lui.

01/11/2023
COMMENT OBTENIR CE RÉSULTAT ? (TRAITEMENT)

¡ Il est nécessaire de connaitre une méthode de


réorganisation des éléments de la suite donnée en
entrée pour que les eléments soient ordonnés de
manière croissante.

01/11/2023
COMMENT OBTENIR CE RÉSULTAT ? (TRAITEMENT)
INSPIRATION …

¡ Méthode diviser-pour-régner

01/11/2023
COMMENT OBTENIR CE RÉSULTAT ? (TRAITEMENT)
ANALYSE DE LA MÉTHODE DIVISER POUR RÉGNER

1. Séparer le problème en sous-problèmes semblables au problème


initial mais de taille moindre.
2. Résoudre les sous-problèmes de façon récursive.
3. Combiner toutes les solutions pour produire la solution du
problème original.

Remarque: Les algorithmes récursives suivent généralement une approche


diviser pour régner. C’est des algorithmes qui s’appellent eux-mêmes une
ou plusieurs fois pour traiter des sous-problèmes très similaires.
YOUSSOU DIENG (YDIENG@UNIV-ZIG.SN)
COMMENT OBTENIR CE RÉSULTAT ? (TRAITEMENT)
LES 3 ÉTAPES DU PARADIGME DIVISER-POUR-RÉGNER

1. Diviser le problème en un certain nombre de sous-problèmes.


2. Régner sur les sous-problèmes en les résolvant de manière récursive.
Si la taille d’un sous-problème est suffisamment réduite, on peut le
résoudre directement.
3. Combiner les solutions des sous-problèmes pour produire la solution
du problème originel.

YOUSSOU DIENG (YDIENG@UNIV-ZIG.SN)


COMMENT OBTENIR CE RÉSULTAT ? (TRAITEMENT)
COMMENT UTILISER LA MÉTHODE DIVISER POUR RÉGNER?

¡ Etudier la méthode diviser-pour-


régner, afin de résoudre la
problématique du tri.
01/11/2023
COMMENT OBTENIR CE RÉSULTAT ? (TRAITEMENT)
COMMENT UTILISER LA MÉTHODE DIVISER POUR RÉGNER?

¡ Soit une suite de n éléments à trier :


¡ Diviser la suite de n éléments à trier en deux sous-suites de n/2 éléments.
¡ Régner en Triant les deux sous-suites de manière récursive en utilisant le tri
par fusion. Si la taille d’une sous-suite a une longueur 1, il n’y a plus rien à
faire puisqu’une suite de longueur 1 est déjà triée.
¡ Combiner/Fusionner les deux sous-suites triées pour produire la réponse triée.

YOUSSOU DIENG (YDIENG@UNIV-ZIG.SN)


COMMENT OBTENIR CE RÉSULTAT ? (TRAITEMENT)
COMMENT UTILISER LA MÉTHODE DIVISER POUR RÉGNER?
5 2 4 7 1 3 2 6
Exemple : Soit une suite S de n = 8
éléments à trier.
1, Diviser : S en deux sous-suites S1 et S2
de n/2 éléments.
3. Régner : Pour chaque Si, 1 ≤ 𝑖 ≤ 2
Si |Si | > 1
Alors repartir à l’étape 1 (Diviser
la suite Si) et appliquer l’étape 3 sur
les sub-divisions de Si
Sinon retourner Si

YOUSSOU DIENG (YDIENG@UNIV-ZIG.SN)


COMMENT OBTENIR CE RÉSULTAT ? (TRAITEMENT)
COMMENT UTILISER LA MÉTHODE DIVISER POUR RÉGNER?
5 2 4 7 1 3 2 6
Exemple : Soit une suite S de n = 8
éléments à trier.
5 2 4 7 1 3 2 6
1, Diviser : S en deux sous-suites S1 et S2
de n/2 éléments.
3. Régner : Pour chaque Si, 1 ≤ 𝑖 ≤ 2
Si |Si | > 1
Alors repartir à l’étape 1 (Diviser
la suite Si) et appliquer l’étape 3 sur
les sub-divisions de Si
Sinon retourner Si

YOUSSOU DIENG (YDIENG@UNIV-ZIG.SN)


COMMENT OBTENIR CE RÉSULTAT ? (TRAITEMENT)
COMMENT UTILISER LA MÉTHODE DIVISER POUR RÉGNER?
5 2 4 7 1 3 2 6
Exemple : Soit une suite S de n = 8
éléments à trier.
5 2 4 7 1 3 2 6
1, Diviser : S en deux sous-suites S1 et S2
de n/2 éléments.
3. Régner : Pour chaque Si, 𝟏 ≤ 𝒊 ≤ 𝟐 5 2 4 7 1 3 2 6
1. Si |Si | > 𝟏
Alors repartir à l’étape 1 (Diviser
la suite Si) et appliquer l’étape 3 sur
les sub-divisions de Si
2. Sinon retourner Si

YOUSSOU DIENG (YDIENG@UNIV-ZIG.SN)


COMMENT OBTENIR CE RÉSULTAT ? (TRAITEMENT)
COMMENT UTILISER LA MÉTHODE DIVISER POUR RÉGNER?
5 2 4 7 1 3 2 6
Exemple : Soit une suite S de n = 8
éléments à trier.
5 2 4 7 1 3 2 6
1, Diviser : S en deux sous-suites S1 et S2
de n/2 éléments.
3. Régner : Pour chaque Si, 𝟏 ≤ 𝒊 ≤ 𝟐 5 2 4 7 1 3 2 6
1. Si |Si | > 𝟏
Alors repartir à l’étape 1 (Diviser 5 2 4 7 1 3 2 6
la suite Si) et appliquer l’étape 3 sur
les sub-divisions de Si
2. Sinon retourner Si

YOUSSOU DIENG (YDIENG@UNIV-ZIG.SN)


COMMENT OBTENIR CE RÉSULTAT ? (TRAITEMENT)
COMMENT UTILISER LA MÉTHODE DIVISER POUR RÉGNER?

¡ Combiner/Fusionner
les deux sous-suites
triées pour produire la
réponse triée.
5 2 4 7 1 3 2 6

YOUSSOU DIENG (YDIENG@UNIV-ZIG.SN)


COMMENT OBTENIR CE RÉSULTAT ? (TRAITEMENT)
COMMENT UTILISER LA MÉTHODE DIVISER POUR RÉGNER?

¡ Combiner/Fusionner
les deux sous-suites
triées pour produire la 2 5 4 7 1 3 2 6
réponse triée.
5 2 4 7 1 3 2 6

YOUSSOU DIENG (YDIENG@UNIV-ZIG.SN)


COMMENT OBTENIR CE RÉSULTAT ? (TRAITEMENT)
COMMENT UTILISER LA MÉTHODE DIVISER POUR RÉGNER?

2 4 5 7 1 2 3 6
¡ Combiner/Fusionner
les deux sous-suites
triées pour produire la 2 5 4 7 1 3 2 6
réponse triée.
5 2 4 7 1 3 2 6

YOUSSOU DIENG (YDIENG@UNIV-ZIG.SN)


COMMENT OBTENIR CE RÉSULTAT ? (TRAITEMENT)
COMMENT UTILISER LA MÉTHODE DIVISER POUR RÉGNER?
1 2 2 3 4 5 6 7

2 4 5 7 1 2 3 6
¡ Combiner/Fusionner
les deux sous-suites
triées pour produire la 2 5 4 7 1 3 2 6
réponse triée.
5 2 4 7 1 3 2 6

YOUSSOU DIENG (YDIENG@UNIV-ZIG.SN)


COMMENT OBTENIR CE RÉSULTAT ? (TRAITEMENT)
COMMENT UTILISER LA MÉTHODE DIVISER POUR RÉGNER?
1 2 2 3 4 5 6 7

¡ Problème :
Combiner/Fusionner 2 4 5 7 1 2 3 6

deux sous-suites triées


pour produire la 2 5 4 7 1 3 2 6
réponse triée.
¡ Comment faire? 5 2 4 7 1 3 2 6

YOUSSOU DIENG (YDIENG@UNIV-ZIG.SN)


COMMENT FAIRE LA FUSION ? (TRAITEMENT)
INSPIRATION …
1. Soit A et B deux piles de cartes
posées sur une table. Chaque pile
est triée de façon à ce que la
carte la plus faible soit en haut. pile A pile B

2. Fusionner les deux piles pour


obtenir une pile unique triée R,
dans laquelle les cartes seront à
l’envers.
YOUSSOU DIENG (YDIENG@UNIV-ZIG.SN)
COMMENT FAIRE LA FUSION ? (TRAITEMENT)
INSPIRATION …
1. Soit A et B deux piles de cartes
posées sur une table. Chaque pile
est triée de façon à ce que la
carte la plus faible soit en haut.
piles A piles B
2. Fusionner les deux piles pour
obtenir une pile unique triée R,
dans laquelle les cartes seront à
l’envers.
YOUSSOU DIENG (YDIENG@UNIV-ZIG.SN)
COMMENT FAIRE LA FUSION ? (TRAITEMENT)
INSPIRATION …
1. Soit A et B deux piles de cartes
posées sur une table. Chaque pile
est triée de façon à ce que la
carte la plus faible soit en haut. piles A piles B

2. Fusionner les deux piles pour


obtenir une pile unique triée R,
dans laquelle les cartes seront à
l’envers.
YOUSSOU DIENG (YDIENG@UNIV-ZIG.SN)
piles R
COMMENT FAIRE LA FUSION ? (TRAITEMENT)
ANALYSE DE LA MÉTHODE
¡ Choisir la plus faible des deux cartes
occupant les sommets respectifs des
deux piles A et B :
¡ Retirer la carte de sa pile, puis
placer la à l’envers sur la pile
résultat R. piles A piles B

¡ Répéter cette étape jusqu’à


épuisement de l’une des piles A et
B.
¡ Il suffit alors de prendre la pile qui
reste (A ou B ) et de la placer à
l’envers sur la pile résultat R.
YOUSSOU DIENG (YDIENG@UNIV-ZIG.SN)
piles R
COMMENT FAIRE LA FUSION ? (TRAITEMENT)
ANALYSE DE LA MÉTHODE
¡ Choisir la plus faible des deux cartes
occupant les sommets respectifs des
deux piles A et B :
¡ Retirer la carte de sa pile, puis
placer la à l’envers sur la pile
résultat R. piles A piles B

¡ Répéter cette étape jusqu’à


épuisement de l’une des piles A et
B.
¡ Il suffit alors de prendre la pile qui
reste (A ou B ) et de la placer à
l’envers sur la pile résultat R.
YOUSSOU DIENG (YDIENG@UNIV-ZIG.SN)
piles R
COMMENT FAIRE LA FUSION ? (TRAITEMENT)
ANALYSE DE LA MÉTHODE
¡ Choisir la plus faible des deux cartes
occupant les sommets respectifs des
deux piles A et B :
¡ Retirer la carte de sa pile, puis
placer la à l’envers sur la pile
résultat R. piles A piles B

¡ Répéter cette étape jusqu’à


épuisement de l’une des piles A et
B.
¡ Il suffit alors de prendre la pile qui
reste (A ou B ) et de la placer à
l’envers sur la pile résultat R.
YOUSSOU DIENG (YDIENG@UNIV-ZIG.SN)
piles R
COMMENT FAIRE LA FUSION ? (TRAITEMENT)
ANALYSE DE LA MÉTHODE
¡ Choisir la plus faible des deux cartes
occupant les sommets respectifs des
deux piles A et B :
¡ Retirer la carte de sa pile, puis
placer la à l’envers sur la pile
résultat R. piles A piles B

¡ Répéter cette étape jusqu’à


épuisement de l’une des piles A et
B.
¡ Il suffit alors de prendre la pile qui
reste (A ou B ) et de la placer à
l’envers sur la pile résultat R.
YOUSSOU DIENG (YDIENG@UNIV-ZIG.SN)
piles R
COMMENT FAIRE LA FUSION ? (TRAITEMENT)
ANALYSE DE LA MÉTHODE
¡ Choisir la plus faible des deux cartes
occupant les sommets respectifs des
deux piles A et B :
¡ Retirer la carte de sa pile, puis
placer la à l’envers sur la pile
résultat R. piles A piles B

¡ Répéter cette étape jusqu’à


épuisement de l’une des piles A et
B.
¡ Il suffit alors de prendre la pile qui
reste (A ou B ) et de la placer à
l’envers sur la pile résultat R.
YOUSSOU DIENG (YDIENG@UNIV-ZIG.SN)
piles R
COMMENT FAIRE LA FUSION ? (TRAITEMENT)
ANALYSE DE LA MÉTHODE
¡ Choisir la plus faible des deux cartes
occupant les sommets respectifs des
deux piles A et B :
¡ Retirer la carte de sa pile, puis
placer la à l’envers sur la pile
résultat R. piles A piles B

¡ Répéter cette étape jusqu’à


épuisement de l’une des piles A et
B.
¡ Il suffit alors de prendre la pile qui
reste (A ou B ) et de la placer à
l’envers sur la pile résultat R.
YOUSSOU DIENG (YDIENG@UNIV-ZIG.SN)
piles R
COMMENT FAIRE LA FUSION ? (TRAITEMENT)
ANALYSE DE LA MÉTHODE
¡ Choisir la plus faible des deux cartes
occupant les sommets respectifs des
deux piles A et B :
¡ Retirer la carte de sa pile, puis
placer la à l’envers sur la pile
résultat R. piles A piles B

¡ Répéter cette étape jusqu’à


épuisement de l’une des piles A et
B.
¡ Il suffit alors de prendre la pile qui
reste (A ou B ) et de la placer à
l’envers sur la pile résultat R.
YOUSSOU DIENG (YDIENG@UNIV-ZIG.SN)
piles R
COMMENT FAIRE LA FUSION ? (TRAITEMENT)
ANALYSE DE LA MÉTHODE
¡ Choisir la plus faible des deux cartes
occupant les sommets respectifs des
deux piles A et B :
¡ Retirer la carte de sa pile, puis
placer la à l’envers sur la pile
résultat R. piles A piles B

¡ Répéter cette étape jusqu’à


épuisement de l’une des piles A et
B.
¡ Il suffit alors de prendre la pile qui
reste (A ou B ) et de la placer à
l’envers sur la pile résultat R.
YOUSSOU DIENG (YDIENG@UNIV-ZIG.SN)
piles R
COMMENT FAIRE LA FUSION ? (TRAITEMENT)
ANALYSE DE LA MÉTHODE
¡ Choisir la plus faible des deux cartes
occupant les sommets respectifs des
deux piles A et B :
¡ Retirer la carte de sa pile, puis
placer la à l’envers sur la pile
résultat R. piles A piles B

¡ Répéter cette étape jusqu’à


épuisement de l’une des piles A et
B.
¡ Il suffit alors de prendre la pile qui
reste (A ou B ) et de la placer à
l’envers sur la pile résultat R.
YOUSSOU DIENG (YDIENG@UNIV-ZIG.SN)
piles R
COMMENT FAIRE LA FUSION ? (TRAITEMENT)
COMMENT UTILISER CETTE MÉTHODE POUR LA FUSION?

¡ Etudier la méthode des piles de cartes, afin de


résoudre la problématique de Fusion.
piles A piles B

01/11/2023
piles R
COMMENT FAIRE LA FUSION ? (TRAITEMENT)
COMMENT UTILISER CETTE MÉTHODE POUR LA FUSION?
1 2 3 4 5 6 7 8
¡ Choisir la plus faible des deux cartes R … 0 0 0 0 0 0 0 0 …
occupant les sommets respectifs des k
deux piles A et B :
1 2 3 4 1 2 3 4
¡ Retirer la carte de sa pile, puis +∞
A 2 4 5 7 B 1 2 3 6
placer la à l’envers sur la pile
i j
résultat R.
¡ Répéter cette étape jusqu’à
épuisement de l’une des piles A et
B.
¡ Il suffit alors de prendre la pile qui
reste (A ou B ) et de la placer à
l’envers sur la pile résultat R.
YOUSSOU DIENG (YDIENG@UNIV-ZIG.SN)
COMMENT FAIRE LA FUSION ? (TRAITEMENT)
COMMENT UTILISER CETTE MÉTHODE POUR LA FUSION?
1 2 3 4 5 6 7 8
¡ Choisir la plus faible des deux cartes R … 1 0 0 0 0 0 0 0 …
occupant les sommets respectifs des k
deux piles A et B :
1 2 3 4 1 2 3 4
¡ Retirer la carte de sa pile, puis +∞
A 2 4 5 7 B 1 2 3 6
placer la à l’envers sur la pile
i j
résultat R.
¡ Répéter cette étape jusqu’à
épuisement de l’une des piles A et
B.
¡ Il suffit alors de prendre la pile qui
reste (A ou B ) et de la placer à
l’envers sur la pile résultat R.
YOUSSOU DIENG (YDIENG@UNIV-ZIG.SN)
COMMENT FAIRE LA FUSION ? (TRAITEMENT)
COMMENT UTILISER CETTE MÉTHODE POUR LA FUSION?
1 2 3 4 5 6 7 8
¡ Choisir la plus faible des deux cartes R … 1 2 0 0 0 0 0 0 …
occupant les sommets respectifs des k
deux piles A et B :
1 2 3 4 1 2 3 4
¡ Retirer la carte de sa pile, puis +∞
A 2 4 5 7 B 1 2 3 6
placer la à l’envers sur la pile
i j
résultat R.
¡ Répéter cette étape jusqu’à
épuisement de l’une des piles A et
B.
¡ Il suffit alors de prendre la pile qui
reste (A ou B ) et de la placer à
l’envers sur la pile résultat R.
YOUSSOU DIENG (YDIENG@UNIV-ZIG.SN)
COMMENT FAIRE LA FUSION ? (TRAITEMENT)
COMMENT UTILISER CETTE MÉTHODE POUR LA FUSION?
1 2 3 4 5 6 7 8
¡ Choisir la plus faible des deux cartes R … 1 2 2 0 0 0 0 0 …
occupant les sommets respectifs des k
deux piles A et B :
1 2 3 4 1 2 3 4
¡ Retirer la carte de sa pile, puis +∞
A 2 4 5 7 B 1 2 3 6
placer la à l’envers sur la pile
i j
résultat R.
¡ Répéter cette étape jusqu’à
épuisement de l’une des piles A et
B.
¡ Il suffit alors de prendre la pile qui
reste (A ou B ) et de la placer à
l’envers sur la pile résultat R.
YOUSSOU DIENG (YDIENG@UNIV-ZIG.SN)
COMMENT FAIRE LA FUSION ? (TRAITEMENT)
COMMENT UTILISER CETTE MÉTHODE POUR LA FUSION?
1 2 3 4 5 6 7 8
¡ Choisir la plus faible des deux cartes R … 1 2 2 3 0 0 0 0 …
occupant les sommets respectifs des k
deux piles A et B :
1 2 3 4 1 2 3 4
¡ Retirer la carte de sa pile, puis +∞
A 2 4 5 7 B 1 2 3 6
placer la à l’envers sur la pile
i j
résultat R.
¡ Répéter cette étape jusqu’à
épuisement de l’une des piles A et
B.
¡ Il suffit alors de prendre la pile qui
reste (A ou B ) et de la placer à
l’envers sur la pile résultat R.
YOUSSOU DIENG (YDIENG@UNIV-ZIG.SN)
COMMENT FAIRE LA FUSION ? (TRAITEMENT)
COMMENT UTILISER CETTE MÉTHODE POUR LA FUSION?
1 2 3 4 5 6 7 8
¡ Choisir la plus faible des deux cartes R … 1 2 2 3 4 0 0 0 …
occupant les sommets respectifs des k
deux piles A et B :
1 2 3 4 1 2 3 4
¡ Retirer la carte de sa pile, puis +∞
A 2 4 5 7 B 1 2 3 6
placer la à l’envers sur la pile
i j
résultat R.
¡ Répéter cette étape jusqu’à
épuisement de l’une des piles A et
B.
¡ Il suffit alors de prendre la pile qui
reste (A ou B ) et de la placer à
l’envers sur la pile résultat R.
YOUSSOU DIENG (YDIENG@UNIV-ZIG.SN)
COMMENT FAIRE LA FUSION ? (TRAITEMENT)
COMMENT UTILISER CETTE MÉTHODE POUR LA FUSION?
1 2 3 4 5 6 7 8
¡ Choisir la plus faible des deux cartes R … 1 2 2 3 4 5 0 0 …
occupant les sommets respectifs des k
deux piles A et B :
1 2 3 4 1 2 3 4
¡ Retirer la carte de sa pile, puis +∞
A 2 4 5 7 B 1 2 3 6
placer la à l’envers sur la pile
i j
résultat R.
¡ Répéter cette étape jusqu’à
épuisement de l’une des piles A et
B.
¡ Il suffit alors de prendre la pile qui
reste (A ou B ) et de la placer à
l’envers sur la pile résultat R.
YOUSSOU DIENG (YDIENG@UNIV-ZIG.SN)
COMMENT FAIRE LA FUSION ? (TRAITEMENT)
COMMENT UTILISER CETTE MÉTHODE POUR LA FUSION?
1 2 3 4 5 6 7 8
¡ Choisir la plus faible des deux cartes R … 1 2 2 3 4 5 6 0 …
occupant les sommets respectifs des k
deux piles A et B :
1 2 3 4 1 2 3 4
¡ Retirer la carte de sa pile, puis +∞
A 2 4 5 7 B 1 2 3 6
placer la à l’envers sur la pile
i j
résultat R.
¡ Répéter cette étape jusqu’à
épuisement de l’une des piles A et
B.
¡ Il suffit alors de prendre la pile qui
reste (A ou B ) et de la placer à
l’envers sur la pile résultat R.
YOUSSOU DIENG (YDIENG@UNIV-ZIG.SN)
COMMENT FAIRE LA FUSION ? (TRAITEMENT)
COMMENT UTILISER CETTE MÉTHODE POUR LA FUSION?
1 2 3 4 5 6 7 8
¡ Choisir la plus faible des deux cartes R … 1 2 2 3 4 5 6 7 …
occupant les sommets respectifs des k
deux piles A et B :
1 2 3 4 1 2 3 4
¡ Retirer la carte de sa pile, puis +∞
A 2 4 5 7 B 1 2 3 6
placer la à l’envers sur la pile
i j
résultat R.
¡ Répéter cette étape jusqu’à
épuisement de l’une des piles A et
B.
¡ Il suffit alors de prendre la pile qui
reste (A ou B ) et de la placer à
l’envers sur la pile résultat R.
YOUSSOU DIENG (YDIENG@UNIV-ZIG.SN)
COMMENT FAIRE LA FUSION ? (TRAITEMENT)
COMMENT UTILISER CETTE MÉTHODE POUR LA FUSION?
1 2 3 4 5 6 7 8
¡ Choisir la plus faible des deux cartes R … 1 2 2 3 4 5 6 7 …
occupant les sommets respectifs des k
deux piles A et B :
1 2 3 4 1 2 3 4
¡ Retirer la carte de sa pile, puis +∞
A 2 4 5 7 B 1 2 3 6
placer la à l’envers sur la pile
i j
résultat R.
¡ Répéter cette étape jusqu’à
Comment implémenter une Pile vide?
épuisement de l’une des piles A et
B. Placer en bas de chaque pile une carte sentinelle
(une valeur spéciale) pour ne pas vérifier à
¡ Il suffit alors de prendre la pile qui
reste (A ou B ) et de la placer à chaque fois si l’une des piles est vide.
l’envers sur la pile résultat R.
YOUSSOU DIENG (YDIENG@UNIV-ZIG.SN)
COMPLEXITÉ

¡ Chaque étape fondamentale prend un temps


constant (comparer les deux cartes du haut)
¡ Avec au plus n étapes fondamentales, la fusion
prend une durée Θ(n).

YOUSSOU DIENG (YDIENG@UNIV-ZIG.SN)


FUSION(A, p, q, r) STRUCTURE DE LA SOLUTION
¡ A est un tableau et p , q et r des L’ALGORITHME EN FUSION
𝑞
indices numérotant des éléments 𝑝 𝑟
du tableau tels que p ≤ q < r.
8 9 10 11 12 13 14 15 16 17

¡ On suppose que les sous-tableaux A… 2 4 5 7 1 2 3 6 …


k
A[p . . q] et A[q + 1. . r] sont triés.
¡ Fusionner les sous-tableaux pour
en faire un même sous-tableau
trié, qui remplace le sous-tableau
courant A[p . . r].
¡ La complexité de FUSION est
Θ(n), où n = r − p + 1 est le
nombre d’éléments fusionnés.
YOUSSOU DIENG (YDIENG@UNIV-ZIG.SN)
Fusion ( A, p, q, r)
1. n1 ← 𝑞 − 𝑝 + 1 STRUCTURE DE LA SOLUTION
2. n2 ← 𝑟 − 𝑞
3. Créer tableaux L[1, …, n1+1] et R[1, …, n2+1]
L’ALGORITHME EN FUSION
4. Pour i ← 1 à n1
5. Faire L[i] ← A[p + i - 1]
𝑞
6. Pour j ← 1 à n2 𝑝 𝑟
7. Faire R[j] ← A[q + j]
8 9 10 11 12 13 14 15 16 17
8. L[n1 + 1] ← +∞ A… 2 4 5 7 1 2 3 6 …
9. R[n2 + 1] ← +∞ k
10. i ← 1
1 2 3 4 5 1 2 3 4 5
11. j ← 1
12. Pour k ← p à r
L 2 4 5 7 ∞ R 1 2 3 6 ∞
i j
13. Faire si L[i] ≤ R[j]
14. alors 𝐴 𝑘 ← L[i]
15. i←𝑖+1
16. sinon 𝐴 𝑘 ← R[j]
01/11/2023
17. j ← j +1
Fusion ( A, p, q, r)
1. n1 ← 𝑝 − 𝑞 + 1
2. n2 ← 𝑟 − 𝑞
𝑞
𝑝 𝑟
3. Créer tableaux L[1, …, n1] et R[1, …, n2+1]
4. Pour i ← 1 à n1 8 9 10 11 12 13 14 15 16 17

5. Faire L[i] ← A[p + i - 1] A… 2 4 5 7 1 2 3 6 …


k
6. Pour j ← 1 à n2
7. Faire R[j] ← A[p + j] 1 2 3 4 5 1 2 3 4 5
8. L[n1 + 1] ← +∞ L 2 4 5 7 ∞ R 1 2 3 6 ∞
9. L[n2 + 1] ← +∞ i j
10. i ← 1
11. j ← 1
12. Pour k ← p à r
13. Faire si L[i] ≤ R[j]
14. alors 𝐴 𝑘 ← L[i]
15. i←𝑖+1
16. sinon 𝐴 𝑘 ← R[j]
YOUSSOU DIENG (YDIENG@UNIV-ZIG.SN)
17. j ← j +1
Fusion ( A, p, q, r)
1. n1 ← 𝑝 − 𝑞 + 1
2. n2 ← 𝑟 − 𝑞
3. Créer tableaux L[1, …, n1] et R[1, …, n2+1]
4. Pour i ← 1 à n1 8 9 10 11 12 13 14 15 16 17

5. Faire L[i] ← A[p + i - 1] A… 1 4 5 7 1 2 3 6 …


k
6. Pour j ← 1 à n2
7. Faire R[j] ← A[p + j] 1 2 3 4 5 1 2 3 4 5
8. L[n1 + 1] ← +∞ L 2 4 5 7 ∞ R 1 2 3 6 ∞
9. L[n2 + 1] ← +∞ i j
10. i ← 1
11. j ← 1
12. Pour k ← p à r
13. Faire si L[i] ≤ R[j]
14. alors 𝐴 𝑘 ← L[i]
15. i←𝑖+1
16. sinon 𝐴 𝑘 ← R[j]
YOUSSOU DIENG (YDIENG@UNIV-ZIG.SN)
17. j ← j +1
Fusion ( A, p, q, r)
1. n1 ← 𝑝 − 𝑞 + 1
2. n2 ← 𝑟 − 𝑞
3. Créer tableaux L[1, …, n1] et R[1, …, n2+1]
4. Pour i ← 1 à n1 8 9 10 11 12 13 14 15 16 17

5. Faire L[i] ← A[p + i - 1] A… 1 2 5 7 1 2 3 6 …


k
6. Pour j ← 1 à n2
7. Faire R[j] ← A[p + j] 1 2 3 4 5 1 2 3 4 5
8. L[n1 + 1] ← +∞ L 2 4 5 7 ∞ R 1 2 3 6 ∞
9. L[n2 + 1] ← +∞ i j
10. i ← 1
11. j ← 1
12. Pour k ← p à r
13. Faire si L[i] ≤ R[j]
14. alors 𝐴 𝑘 ← L[i]
15. i←𝑖+1
16. sinon 𝐴 𝑘 ← R[j]
YOUSSOU DIENG (YDIENG@UNIV-ZIG.SN)
17. j ← j +1
Fusion ( A, p, q, r)
1. n1 ← 𝑝 − 𝑞 + 1
2. n2 ← 𝑟 − 𝑞
3. Créer tableaux L[1, …, n1] et R[1, …, n2+1]
4. Pour i ← 1 à n1 8 9 10 11 12 13 14 15 16 17

5. Faire L[i] ← A[p + i - 1] A… 1 2 2 7 1 2 3 6 …


k
6. Pour j ← 1 à n2
7. Faire R[j] ← A[p + j] 1 2 3 4 5 1 2 3 4 5
8. L[n1 + 1] ← +∞ L 2 4 5 7 ∞ R 1 2 3 6 ∞
9. L[n2 + 1] ← +∞ i j
10. i ← 1
11. j ← 1
12. Pour k ← p à r
13. Faire si L[i] ≤ R[j]
14. alors 𝐴 𝑘 ← L[i]
15. i←𝑖+1
16. sinon 𝐴 𝑘 ← R[j]
YOUSSOU DIENG (YDIENG@UNIV-ZIG.SN)
17. j ← j +1
Fusion ( A, p, q, r)
1. n1 ← 𝑝 − 𝑞 + 1
2. n2 ← 𝑟 − 𝑞
3. Créer tableaux L[1, …, n1] et R[1, …, n2+1]
4. Pour i ← 1 à n1 8 9 10 11 12 13 14 15 16 17

5. Faire L[i] ← A[p + i - 1] A… 1 2 2 3 1 2 3 6 …


k
6. Pour j ← 1 à n2
7. Faire R[j] ← A[p + j] 1 2 3 4 5 1 2 3 4 5
8. L[n1 + 1] ← +∞ L 2 4 5 7 ∞ R 1 2 3 6 ∞
9. L[n2 + 1] ← +∞ i j
10. i ← 1
11. j ← 1
12. Pour k ← p à r
13. Faire si L[i] ≤ R[j]
14. alors 𝐴 𝑘 ← L[i]
15. i←𝑖+1
16. sinon 𝐴 𝑘 ← R[j]
YOUSSOU DIENG (YDIENG@UNIV-ZIG.SN)
17. j ← j +1
Fusion ( A, p, q, r)
1. n1 ← 𝑝 − 𝑞 + 1
2. n2 ← 𝑟 − 𝑞
3. Créer tableaux L[1, …, n1] et R[1, …, n2+1]
4. Pour i ← 1 à n1 8 9 10 11 12 13 14 15 16 17

5. Faire L[i] ← A[p + i - 1] A… 1 2 2 3 4 2 3 6 …


k
6. Pour j ← 1 à n2
7. Faire R[j] ← A[p + j] 1 2 3 4 5 1 2 3 4 5
8. L[n1 + 1] ← +∞ L 2 4 5 7 ∞ R 1 2 3 6 ∞
9. L[n2 + 1] ← +∞ i j
10. i ← 1
11. j ← 1
12. Pour k ← p à r
13. Faire si L[i] ≤ R[j]
14. alors 𝐴 𝑘 ← L[i]
15. i←𝑖+1
16. sinon 𝐴 𝑘 ← R[j]
YOUSSOU DIENG (YDIENG@UNIV-ZIG.SN)
17. j ← j +1
Fusion ( A, p, q, r)
1. n1 ← 𝑝 − 𝑞 + 1
2. n2 ← 𝑟 − 𝑞
3. Créer tableaux L[1, …, n1] et R[1, …, n2+1]
4. Pour i ← 1 à n1 8 9 10 11 12 13 14 15 16 17

5. Faire L[i] ← A[p + i - 1] A… 1 2 2 3 4 5 3 6 …


k
6. Pour j ← 1 à n2
7. Faire R[j] ← A[p + j] 1 2 3 4 5 1 2 3 4 5
8. L[n1 + 1] ← +∞ L 2 4 5 7 ∞ R 1 2 3 6 ∞
9. L[n2 + 1] ← +∞ i j
10. i ← 1
11. j ← 1
12. Pour k ← p à r
13. Faire si L[i] ≤ R[j]
14. alors 𝐴 𝑘 ← L[i]
15. i←𝑖+1
16. sinon 𝐴 𝑘 ← R[j]
YOUSSOU DIENG (YDIENG@UNIV-ZIG.SN)
17. j ← j +1
Fusion ( A, p, q, r)
1. n1 ← 𝑝 − 𝑞 + 1
2. n2 ← 𝑟 − 𝑞
3. Créer tableaux L[1, …, n1] et R[1, …, n2+1]
4. Pour i ← 1 à n1 8 9 10 11 12 13 14 15 16 17

5. Faire L[i] ← A[p + i - 1] A… 1 2 2 3 4 5 6 6 …


k
6. Pour j ← 1 à n2
7. Faire R[j] ← A[p + j] 1 2 3 4 5 1 2 3 4 5
8. L[n1 + 1] ← +∞ L 2 4 5 7 ∞ R 1 2 3 6 ∞
9. L[n2 + 1] ← +∞ i j
10. i ← 1
11. j ← 1
12. Pour k ← p à r
13. Faire si L[i] ≤ R[j]
14. alors 𝐴 𝑘 ← L[i]
15. i←𝑖+1
16. sinon 𝐴 𝑘 ← R[j]
YOUSSOU DIENG (YDIENG@UNIV-ZIG.SN)
17. j ← j +1
Fusion ( A, p, q, r)
1. n1 ← 𝑝 − 𝑞 + 1
2. n2 ← 𝑟 − 𝑞
3. Créer tableaux L[1, …, n1] et R[1, …, n2+1]
4. Pour i ← 1 à n1 8 9 10 11 12 13 14 15 16 17

5. Faire L[i] ← A[p + i - 1] A… 1 2 2 3 4 5 6 7 …


k
6. Pour j ← 1 à n2
7. Faire R[j] ← A[p + j] 1 2 3 4 5 1 2 3 4 5
8. L[n1 + 1] ← +∞ L 2 4 5 7 ∞ R 1 2 3 6 ∞
9. L[n2 + 1] ← +∞ i j
10. i ← 1
11. j ← 1
12. Pour k ← p à r
13. Faire si L[i] ≤ R[j]
14. alors 𝐴 𝑘 ← L[i]
15. i←𝑖+1
16. sinon 𝐴 𝑘 ← R[j]
YOUSSOU DIENG (YDIENG@UNIV-ZIG.SN)
17. j ← j +1
Fusion ( A, p, q, r)
1. n1 ← 𝑝 − 𝑞 + 1
¡ ligne 1 : calcule la longueur n1 du sous-tableau A[p..q]
2. n2 ← 𝑟 − 𝑞
¡ Ligne 2: calcule la longueur n2 du sous-tableau A[q + 1..r]
3. Créer tableaux L[1, …, n1] et R[1, …, n2+1]
¡ ligne 3 : crée des tableaux L et R de longueurs n1 + 1 et n2 + 1, 4. Pour i ← 1 à n1
respectivement 5. Faire L[i] ← A[p + i - 1]
¡ lignes 4–5 : La boucle pour copie le sous-tableau A[p . . q] 6. Pour j ← 1 à n2
dans L[1 . . n1] 7. Faire R[j] ← A[p + j]
¡ lignes 6–7 : La boucle pour copie le sous-tableau A[q + 1. . r] 8. L[n1 + 1] ← +∞
dans R[1 . . n2]. 9. L[n2 + 1] ← +∞

¡ lignes 8–9 : placent les sentinelles aux extrémités des tableaux 10. i ← 1
L et R. 11. j ← 1
12. Pour k ← p à r
¡ lignes 10–17 : effectuent les r − p + 1 étapes en conservant
l’invariant de boucle que voici : « Au début de chaque itération 13. Faire si L[i] ≤ R[j]
de la boucle pour des lignes 12–17, le sous-tableau A[p . . k − 14. alors 𝐴 𝑘 ← L[i]
1] contient les k − p plus petits éléments de L[1 . . n 1 + 1] et 15. i←𝑖+1
R[1 . . n 2 + 1], en ordre trié . » 16. sinon 𝐴 𝑘 ← R[j]
YOUSSOU DIENG (YDIENG@UNIV-ZIG.SN)
17. j ← j +1
Fusion ( A, p, q, r)
1. n1 ← 𝑝 − 𝑞 + 1
¡ ligne 1 : calcule la longueur n1 du sous-tableau A[p..q]
2. n2 ← 𝑟 − 𝑞
¡ Ligne 2: calcule la longueur n2 du sous-tableau A[q + 1..r]
3. Créer tableaux L[1, …, n1] et R[1, …, n2+1]
¡ ligne 3 : crée des tableaux L et R de longueurs n1 + 1 et n2 + 1, 4. Pour i ← 1 à n1
respectivement 5. Faire L[i] ← A[p + i - 1]
¡ lignes 4–5 : La boucle pour copie le sous-tableau A[p . . q] 6. Pour j ← 1 à n2
dans L[1 . . n1] 7. Faire R[j] ← A[p + j]
¡ lignes 6–7 : La boucle pour copie le sous-tableau A[q + 1. . r] 8. L[n1 + 1] ← +∞
dans R[1 . . n2]. 9. L[n2 + 1] ← +∞

¡ lignes 8–9 : placent les sentinelles aux extrémités des tableaux 10. i ← 1
L et R. 11. j ← 1
12. Pour k ← p à r
¡ lignes 10–17 : effectuent les r − p + 1 étapes en conservant
l’invariant de boucle que voici : « Au début de chaque itération 13. Faire si L[i] ≤ R[j]
de la boucle pour des lignes 12–17, le sous-tableau A[p . . k − 14. alors 𝐴 𝑘 ← L[i]
1] contient les k − p plus petits éléments de L[1 . . n 1 + 1] et 15. i←𝑖+1
R[1 . . n 2 + 1], en ordre trié . » 16. sinon 𝐴 𝑘 ← R[j]
YOUSSOU DIENG (YDIENG@UNIV-ZIG.SN)
17. j ← j +1
Fusion ( A, p, q, r)
1. n1 ← 𝑝 − 𝑞 + 1
¡ ligne 1 : calcule la longueur n1 du sous-tableau A[p..q]
2. n2 ← 𝑟 − 𝑞
¡ Ligne 2: calcule la longueur n2 du sous-tableau A[q + 1..r]
3. Créer tableaux L[1, …, n1] et R[1, …, n2+1]
¡ ligne 3 : crée des tableaux L et R de longueurs n1 + 1 et n2 + 1, 4. Pour i ← 1 à n1
respectivement 5. Faire L[i] ← A[p + i - 1]
¡ lignes 4–5 : La boucle pour copie le sous-tableau A[p . . q] 6. Pour j ← 1 à n2
dans L[1 . . n1] 7. Faire R[j] ← A[p + j]
¡ lignes 6–7 : La boucle pour copie le sous-tableau A[q + 1. . r] 8. L[n1 + 1] ← +∞
dans R[1 . . n2]. 9. L[n2 + 1] ← +∞

¡ lignes 8–9 : placent les sentinelles aux extrémités des tableaux 10. i ← 1
L et R. 11. j ← 1
12. Pour k ← p à r
¡ lignes 10–17 : effectuent les r − p + 1 étapes en conservant
l’invariant de boucle que voici : « Au début de chaque itération 13. Faire si L[i] ≤ R[j]
de la boucle pour des lignes 12–17, le sous-tableau A[p . . k − 14. alors 𝐴 𝑘 ← L[i]
1] contient les k − p plus petits éléments de L[1 . . n 1 + 1] et 15. i←𝑖+1
R[1 . . n 2 + 1], en ordre trié . » 16. sinon 𝐴 𝑘 ← R[j]
YOUSSOU DIENG (YDIENG@UNIV-ZIG.SN)
17. j ← j +1
Fusion ( A, p, q, r)
1. n1 ← 𝑝 − 𝑞 + 1
¡ ligne 1 : calcule la longueur n1 du sous-tableau A[p..q]
2. n2 ← 𝑟 − 𝑞
¡ Ligne 2: calcule la longueur n2 du sous-tableau A[q + 1..r]
3. Créer tableaux L[1, …, n1] et R[1, …, n2+1]
¡ ligne 3 : crée des tableaux L et R de longueurs n1 + 1 et n2 + 1, 4. Pour i ← 1 à n1
respectivement 5. Faire L[i] ← A[p + i - 1]
¡ lignes 4–5 : La boucle pour copie le sous-tableau A[p . . q] 6. Pour j ← 1 à n2
dans L[1 . . n1] 7. Faire R[j] ← A[p + j]
¡ lignes 6–7 : La boucle pour copie le sous-tableau A[q + 1. . r] 8. L[n1 + 1] ← +∞
dans R[1 . . n2]. 9. L[n2 + 1] ← +∞

¡ lignes 8–9 : placent les sentinelles aux extrémités des tableaux 10. i ← 1
L et R. 11. j ← 1
12. Pour k ← p à r
¡ lignes 10–17 : effectuent les r − p + 1 étapes en conservant
l’invariant de boucle que voici : « Au début de chaque itération 13. Faire si L[i] ≤ R[j]
de la boucle pour des lignes 12–17, le sous-tableau A[p . . k − 14. alors 𝐴 𝑘 ← L[i]
1] contient les k − p plus petits éléments de L[1 . . n 1 + 1] et 15. i←𝑖+1
R[1 . . n 2 + 1], en ordre trié . » 16. sinon 𝐴 𝑘 ← R[j]
YOUSSOU DIENG (YDIENG@UNIV-ZIG.SN)
17. j ← j +1
Fusion ( A, p, q, r)
1. n1 ← 𝑝 − 𝑞 + 1
¡ ligne 1 : calcule la longueur n1 du sous-tableau A[p..q]
2. n2 ← 𝑟 − 𝑞
¡ Ligne 2: calcule la longueur n2 du sous-tableau A[q + 1..r]
3. Créer tableaux L[1, …, n1] et R[1, …, n2+1]
¡ ligne 3 : crée des tableaux L et R de longueurs n1 + 1 et n2 + 1, 4. Pour i ← 1 à n1
respectivement 5. Faire L[i] ← A[p + i - 1]
¡ lignes 4–5 : La boucle pour copie le sous-tableau A[p . . q] 6. Pour j ← 1 à n2
dans L[1 . . n1] 7. Faire R[j] ← A[p + j]
¡ lignes 6–7 : La boucle pour copie le sous-tableau A[q + 1. . r] 8. L[n1 + 1] ← +∞
dans R[1 . . n2]. 9. L[n2 + 1] ← +∞

¡ lignes 8–9 : placent les sentinelles aux extrémités des tableaux 10. i ← 1
L et R. 11. j ← 1
12. Pour k ← p à r
¡ lignes 10–17 : effectuent les r − p + 1 étapes en conservant
l’invariant de boucle que voici : « Au début de chaque itération 13. Faire si L[i] ≤ R[j]
de la boucle pour des lignes 12–17, le sous-tableau A[p . . k − 14. alors 𝐴 𝑘 ← L[i]
1] contient les k − p plus petits éléments de L[1 . . n 1 + 1] et 15. i←𝑖+1
R[1 . . n 2 + 1], en ordre trié . » 16. sinon 𝐴 𝑘 ← R[j]
YOUSSOU DIENG (YDIENG@UNIV-ZIG.SN)
17. j ← j +1
Fusion ( A, p, q, r)
1. n1 ← 𝑝 − 𝑞 + 1
¡ ligne 1 : calcule la longueur n1 du sous-tableau A[p..q]
2. n2 ← 𝑟 − 𝑞
¡ Ligne 2: calcule la longueur n2 du sous-tableau A[q + 1..r]
3. Créer tableaux L[1, …, n1] et R[1, …, n2+1]
¡ ligne 3 : crée des tableaux L et R de longueurs n1 + 1 et n2 + 1, 4. Pour i ← 1 à n1
respectivement 5. Faire L[i] ← A[p + i - 1]
¡ lignes 4–5 : La boucle pour copie le sous-tableau A[p . . q] 6. Pour j ← 1 à n2
dans L[1 . . n1] 7. Faire R[j] ← A[p + j]
¡ lignes 6–7 : La boucle pour copie le sous-tableau A[q + 1. . r] 8. L[n1 + 1] ← +∞
dans R[1 . . n2]. 9. L[n2 + 1] ← +∞

¡ lignes 8–9 : placent les sentinelles aux extrémités des tableaux 10. i ← 1
L et R. 11. j ← 1
12. Pour k ← p à r
¡ lignes 10–17 : effectuent les r − p + 1 étapes en conservant
l’invariant de boucle que voici : « Au début de chaque itération 13. Faire si L[i] ≤ R[j]
de la boucle pour des lignes 12–17, le sous-tableau A[p . . k − 14. alors 𝐴 𝑘 ← L[i]
1] contient les k − p plus petits éléments de L[1 . . n 1 + 1] et 15. i←𝑖+1
R[1 . . n 2 + 1], en ordre trié . » 16. sinon 𝐴 𝑘 ← R[j]
YOUSSOU DIENG (YDIENG@UNIV-ZIG.SN)
17. j ← j +1
Fusion ( A, p, q, r)
1. n1 ← 𝑝 − 𝑞 + 1
¡ ligne 1 : calcule la longueur n1 du sous-tableau A[p..q]
2. n2 ← 𝑟 − 𝑞
¡ Ligne 2: calcule la longueur n2 du sous-tableau A[q + 1..r]
3. Créer tableaux L[1, …, n1] et R[1, …, n2+1]
¡ ligne 3 : crée des tableaux L et R de longueurs n1 + 1 et n2 + 1, 4. Pour i ← 1 à n1
respectivement 5. Faire L[i] ← A[p + i - 1]
¡ lignes 4–5 : La boucle pour copie le sous-tableau A[p . . q] 6. Pour j ← 1 à n2
dans L[1 . . n1] 7. Faire R[j] ← A[p + j]
¡ lignes 6–7 : La boucle pour copie le sous-tableau A[q + 1. . r] 8. L[n1 + 1] ← +∞
dans R[1 . . n2]. 9. L[n2 + 1] ← +∞

¡ lignes 8–9 : placent les sentinelles aux extrémités des tableaux 10. i ← 1
L et R. 11. j ← 1
12. Pour k ← p à r
¡ lignes 10–17 : effectuent les r − p + 1 étapes en conservant
l’invariant de boucle que voici : « Au début de chaque itération 13. Faire si L[i] ≤ R[j]
de la boucle pour des lignes 12–17, le sous-tableau A[p . . k − 14. alors 𝐴 𝑘 ← L[i]
1] contient les k − p plus petits éléments de L[1 . . n 1 + 1] et 15. i←𝑖+1
R[1 . . n 2 + 1], en ordre trié. » 16. sinon 𝐴 𝑘 ← R[j]
YOUSSOU DIENG (YDIENG@UNIV-ZIG.SN)
17. j ← j +1
Fusion ( A, p, q, r)
1. n1 ← 𝑝 − 𝑞 + 1
Correction
2. n2 ← 𝑟 − 𝑞
3. Créer tableaux L[1, …, n1] et R[1, …, n2+1] • Initialisation : Montrer que
4. Pour i ← 1 à n1 l’invariant est vrai avant la première
5. Faire L[i] ← A[p + i - 1]
itération de la boucle pour (lignes
6. Pour j ← 1 à n2
12–17).
7. Faire R[j] ← A[p + j]
8. L[n1 + 1] ← +∞
• Conservation : Montrer que chaque
9. L[n2 + 1] ← +∞
itération de la boucle conserve
10. i ← 1 l’invariant.
11. j ← 1 • Terminaison : Montrer que
12. Pour k ← p à r l’invariant fournit une propriété utile
13. Faire si L[i] ≤ R[j]
pour prouver la conformité de la
alors 𝐴 𝑘 ← L[i]
14.
procédure quand la boucle se
15. i←𝑖+1
16. sinon 𝐴 𝑘 ← R[j]
termine.
YOUSSOU DIENG (YDIENG@UNIV-ZIG.SN)
17. j ← j +1
¡ Initialisation:
¡ Avant la première itération de la boucle, on a k = p, et le sous-tableau A[p . . k − 1]
est vide. Il 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.
𝑞
𝑝 𝑟

8 9 10 11 12 13 14 15 16 17
A… 2 4 5 7 1 2 3 6 …
k

1 2 3 4 5 1 2 3 4 5

L 2 4 5 7 ∞ R 1 2 3 6 ∞
i j

YOUSSOU DIENG (YDIENG@UNIV-ZIG.SN)


¡ Initialisation:
¡ Avant la première itération de la boucle, on a k = p, et le sous-tableau A[p . . k − 1]
est vide. Il 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.
𝑞
𝑝 𝑟

8 9 10 11 12 13 14 15 16 17
A… 2 4 5 7 1 2 3 6 …
k

1 2 3 4 5 1 2 3 4 5

L 2 4 5 7 ∞ R 1 2 3 6 ∞
i j

YOUSSOU DIENG (YDIENG@UNIV-ZIG.SN)


Conservation:

¡ Si on 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.
𝑞
𝑝 𝑟

8 9 10 11 12 13 14 15 16 17
A… 1 2 5 7 1 2 3 6 …
k

1 2 3 4 5 1 2 3 4 5

L 2 4 5 7 ∞ R 1 2 3 6 ∞
i j

YOUSSOU DIENG (YDIENG@UNIV-ZIG.SN)


Conservation:

¡ Si on 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.
𝑞
𝑝 𝑟

8 9 10 11 12 13 14 15 16 17
A… 1 2 5 7 1 2 3 6 …
k

1 2 3 4 5 1 2 3 4 5

L 2 4 5 7 ∞ R 1 2 3 6 ∞
i j

YOUSSOU DIENG (YDIENG@UNIV-ZIG.SN)


Conservation:

¡ Si on 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.
𝑞
𝑝 𝑟

8 9 10 11 12 13 14 15 16 17
A… 1 2 2 7 1 2 3 6 …
k

1 2 3 4 5 1 2 3 4 5

L 2 4 5 7 ∞ R 1 2 3 6 ∞
i j

YOUSSOU DIENG (YDIENG@UNIV-ZIG.SN)


Conservation:

¡ Si on 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.
𝑞
𝑝 𝑟

8 9 10 11 12 13 14 15 16 17
A… 1 2 2 7 1 2 3 6 …
k

1 2 3 4 5 1 2 3 4 5

L 2 4 5 7 ∞ R 1 2 3 6 ∞
i j

YOUSSOU DIENG (YDIENG@UNIV-ZIG.SN)


Conservation:

¡ Si on 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.
𝑞
𝑝 𝑟

8 9 10 11 12 13 14 15 16 17
A… 2 4 5 7 1 2 3 6 …
k

1 2 3 4 5 1 2 3 4 5

L 2 4 5 7 ∞ R 1 2 3 6 ∞
i j

YOUSSOU DIENG (YDIENG@UNIV-ZIG.SN)


¡ Terminaison :
¡ À la fin de la boucle, 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.
𝑞
𝑝 𝑟

8 9 10 11 12 13 14 15 16 17
A… 1 2 2 3 4 5 6 7 …
k

1 2 3 4 5 1 2 3 4 5

L 2 4 5 7 ∞ R 1 2 3 6 ∞
i j

YOUSSOU DIENG (YDIENG@UNIV-ZIG.SN)


¡ Terminaison :
¡ À la fin de la boucle, 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.
𝑞
𝑝 𝑟

8 9 10 11 12 13 14 15 16 17
A… 1 2 2 3 4 5 6 7 …
k

1 2 3 4 5 1 2 3 4 5

L 2 4 5 7 ∞ R 1 2 3 6 ∞
i j

YOUSSOU DIENG (YDIENG@UNIV-ZIG.SN)


¡ Terminaison :
¡ À la fin de la boucle, 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.
𝑞
𝑝 𝑟

8 9 10 11 12 13 14 15 16 17
A… 1 2 2 3 4 5 6 7 …
k

1 2 3 4 5 1 2 3 4 5

L 2 4 5 7 ∞ R 1 2 3 6 ∞
i j

YOUSSOU DIENG (YDIENG@UNIV-ZIG.SN)


Fusion ( A, p, q, r)
1. n1 ← 𝑝 − 𝑞 + 1 STRUCTURE DE LA SOLUTION
2. n2 ← 𝑟 − 𝑞
3. Créer tableaux L[1, …, n1] et R[1, …, n2+1]
LA COMPLEXITÉ DE FUSION
4. Pour i ← 1 à n1
5. Faire L[i] ← A[p + i - 1]
¡ C’est un Θ (n) avec n = r − p + 1; car,
6. Pour j ← 1 à n2
7. Faire R[j] ← A[p + j] ¡ Chacune des lignes 1–3 et 8–11 prend un
8. L[n1 + 1] ← +∞ temps constant.
9. L[n2 + 1] ← +∞
¡ Les boucles pour des lignes 4–7 prennent
10. i ← 1
11. j ← 1
Θ (n1 + n2) = Θ (n).
12. Pour k ← p à r ¡ Il y a n itérations de la boucle pour des
13. Faire si L[i] ≤ R[j] lignes 12–17, chacune d’elles prenant un
14. alors 𝐴 𝑘 ← L[i] temps constant.
15. i←𝑖+1
16. sinon 𝐴 𝑘 ← R[j]
YOUSSOU DIENG (YDIENG@UNIV-ZIG.SN)
17. j ← j +1
ALGORITHME DU TRI-FUSION
STRUCTURE DE LA SOLUTION

¡ La procédure FUSION est 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 et le sous-tableau a au plus un seul élément alors il est déjà trié.
¡ Sinon, l’étape diviser se contente de calculer un indice q qui partitionne A[p . .
r] en deux sous-tableaux :
¡ A[p . . q], contenant n/2 éléments, et
¡ A[q + 1. . r], contenant n/2 éléments.

YOUSSOU DIENG (YDIENG@UNIV-ZIG.SN)


L’ALGORITHME TRI-FUSION
STRUCTURATION EN PSEUDO CODE

Tri-Fusion ( A, p, r)
1. Si p < 𝑟

2. Alors q ← (𝑝 + 𝑟)/2
3. Tri-Fusion (A, p, q)
4. Tri-Fusion (A, q+1, r)
5. Fusion (A, p, q, r)

YOUSSOU DIENG (YDIENG@UNIV-ZIG.SN)


L’ALGORITHME TRI-FUSION
LE FONCTIONNEMENT
¡ Pour trier toute la séquence A = A[1], A[2], . . . , A[n], on fait l’appel initial TRI-
FUSION(A, 1, longueur[A]) (ici aussi, longueur[A] = n).
¡ L’algorithme consiste à :
¡ fusionner des paires de séquences à 1 élément pour former des séquences
triées de longueur 2,
¡ fusionner des paires de séquences de longueur 2 pour former des
séquences triées de longueur 4, etc.
¡ Jusqu’à qu’il y ait fusion de deux séquences de longueur n/2 pour former la
séquence triée définitive de longueur n.
YOUSSOU DIENG (YDIENG@UNIV-ZIG.SN)
L’ALGORITHME TRI-FUSION 𝑝 𝑟
LE FONCTIONNEMENT
5 2 4 7 1 3 2 6
Tri-Fusion ( A, p, r)
1. Si p < 𝑟

2. Alors q ← (𝑝 + 𝑟)/2
3. Tri-Fusion (A, p, q)
4. Tri-Fusion (A, q+1, r)
5. Fusion (A, p, q, r)

YOUSSOU DIENG (YDIENG@UNIV-ZIG.SN)


𝑞0 = 4
L’ALGORITHME TRI-FUSION 𝑝 𝑟
LE FONCTIONNEMENT
5 2 4 7 1 3 2 6
Tri-Fusion ( A, p, r)
1. Si p < 𝑟

2. Alors q ← (𝑝 + 𝑟)/2
3. Tri-Fusion (A, p, q)
4. Tri-Fusion (A, q+1, r)
5. Fusion (A, p, q, r)

YOUSSOU DIENG (YDIENG@UNIV-ZIG.SN)


L’ALGORITHME TRI-FUSION
LE FONCTIONNEMENT 𝑟
𝑝
5 2 4 7 1 3 2 6
Tri-Fusion ( A, p, r)
1. Si p < 𝑟 5 2 4 7 1 3 2 6

2. Alors q ← (𝑝 + 𝑟)/2
𝑟1 = 𝑞0
3. Tri-Fusion (A, p, q) 𝑝1 = 𝑞 + 1

4. Tri-Fusion (A, q+1, r)


5. Fusion (A, p, q, r)

YOUSSOU DIENG (YDIENG@UNIV-ZIG.SN)


L’ALGORITHME TRI-FUSION
LE FONCTIONNEMENT 𝑟
𝑝
5 2 4 7 1 3 2 6
Tri-Fusion ( A, p, r)
1. Si p < 𝑟 𝑃 < 𝑟1 = 𝐹𝑎𝑢𝑥
5 2 4 7 1 3 2 6

2. Alors q ← (𝑝 + 𝑟)/2
𝑟1 = 𝑞0
3. Tri-Fusion (A, p, q) 𝑝1 = 𝑞 + 1

4. Tri-Fusion (A, q+1, r)


5. Fusion (A, p, q, r)

YOUSSOU DIENG (YDIENG@UNIV-ZIG.SN)


L’ALGORITHME TRI-FUSION
LE FONCTIONNEMENT 𝑟
𝑝
5 2 4 7 1 3 2 6
Tri-Fusion ( A, p, r)
1. Si p < 𝑟 5 2 4 7 1 3 2 6

2. Alors q ← (𝑝 + 𝑟)/2
𝑟1 = 𝑞0
3. Tri-Fusion (A, p, q) 𝑝1 = 𝑞 + 1
𝑞1 = 2
4. Tri-Fusion (A, q+1, r)
5. Fusion (A, p, q, r)

YOUSSOU DIENG (YDIENG@UNIV-ZIG.SN)


L’ALGORITHME TRI-FUSION
LE FONCTIONNEMENT 𝑟
𝑝
5 2 4 7 1 3 2 6
Tri-Fusion ( A, p, r)
1. Si p < 𝑟 5 2 4 7 1 3 2 6

2. Alors q ← (𝑝 + 𝑟)/2
𝑟1 = 𝑞0
3. Tri-Fusion (A, p, q) 𝑝1 = 𝑞 + 1
𝑞1 = 2
4. Tri-Fusion (A, q+1, r)
5. Fusion (A, p, q, r)

YOUSSOU DIENG (YDIENG@UNIV-ZIG.SN)


L’ALGORITHME TRI-FUSION
LE FONCTIONNEMENT
5 2 4 7 1 3 2 6
Tri-Fusion ( A, p, r)
1. Si p < 𝑟 P < r2 = FAUX 𝑝
5 2 4 7 1 3 2 6

2. Alors q ← (𝑝 + 𝑟)/2
3. Tri-Fusion (A, p, q) 5 2 4 7 1 3 2 6

4. Tri-Fusion (A, q+1, r)


𝑟2 = 𝑞1 = 2
5. Fusion (A, p, q, r)

YOUSSOU DIENG (YDIENG@UNIV-ZIG.SN)


L’ALGORITHME TRI-FUSION
LE FONCTIONNEMENT
5 2 4 7 1 3 2 6
Tri-Fusion ( A, p, r)
1. Si p < 𝑟 P < r2 = FAUX 𝑝
5 2 4 7 1 3 2 6

2. Alors q ← (𝑝 + 𝑟)/2
3. Tri-Fusion (A, p, q) 5 2 4 7 1 3 2 6

4. Tri-Fusion (A, q+1, r)


𝑟2 = 𝑞1 = 2
5. Fusion (A, p, q, r) 𝑞3 = 1

YOUSSOU DIENG (YDIENG@UNIV-ZIG.SN)


L’ALGORITHME TRI-FUSION
LE FONCTIONNEMENT
5 2 4 7 1 3 2 6
Tri-Fusion ( A, p, r)
1. Si p < 𝑟 𝑝
5 2 4 7 1 3 2 6

2. Alors q ← (𝑝 + 𝑟)/2
3. Tri-Fusion (A, p, q) 5 2 4 7 1 3 2 6

4. Tri-Fusion (A, q+1, r)


𝑟2 = 𝑞1 = 2
5. Fusion (A, p, q, r) 𝑞3 = 1

YOUSSOU DIENG (YDIENG@UNIV-ZIG.SN)


L’ALGORITHME TRI-FUSION
LE FONCTIONNEMENT
5 2 4 7 1 3 2 6
Tri-Fusion ( A, p, r)
1. Si p < 𝑟 P < r3 = Vrai 5 2 4 7 1 3 2 6

2. Alors q ← (𝑝 + 𝑟)/2
3. Tri-Fusion (A, p, q) 5 2 4 7 1 3 2 6

4. Tri-Fusion (A, q+1, r)


5 2 4 7 1 3 2 6
5. Fusion (A, p, q, r)
P = 𝑞3 = 1

YOUSSOU DIENG (YDIENG@UNIV-ZIG.SN)


L’ALGORITHME TRI-FUSION
LE FONCTIONNEMENT

Tri-Fusion ( A, p, r)
1. Si p < 𝑟

2. Alors q ← (𝑝 + 𝑟)/2
3. Tri-Fusion (A, p, q)
4. Tri-Fusion (A, q+1, r)
5 2 4 7 1 3 2 6
5. Fusion (A, p, q, r)

YOUSSOU DIENG (YDIENG@UNIV-ZIG.SN)


L’ALGORITHME TRI-FUSION
LE FONCTIONNEMENT

Tri-Fusion ( A, p, r)
1. Si p < 𝑟

2. Alors q ← (𝑝 + 𝑟)/2
3. Tri-Fusion (A, p, q) 2 5

4. Tri-Fusion (A, q+1, r)


5 2
5. Fusion (A, p, q, r)

YOUSSOU DIENG (YDIENG@UNIV-ZIG.SN)


L’ALGORITHME TRI-FUSION
LE FONCTIONNEMENT

Tri-Fusion ( A, p, r)
1. Si p < 𝑟

2. Alors q ← (𝑝 + 𝑟)/2
3. Tri-Fusion (A, p, q) 2 5 4 7 1 3 2 6

4. Tri-Fusion (A, q+1, r)


5 2 4 7 1 3 2 6
5. Fusion (A, p, q, r)

YOUSSOU DIENG (YDIENG@UNIV-ZIG.SN)


L’ALGORITHME TRI-FUSION
LE FONCTIONNEMENT

Tri-Fusion ( A, p, r)
1. Si p < 𝑟 2 4 5 7 1 2 3 6

2. Alors q ← (𝑝 + 𝑟)/2
3. Tri-Fusion (A, p, q) 2 5 4 7 1 3 2 6

4. Tri-Fusion (A, q+1, r)


5 2 4 7 1 3 2 6
5. Fusion (A, p, q, r)

YOUSSOU DIENG (YDIENG@UNIV-ZIG.SN)


L’ALGORITHME TRI-FUSION
LE FONCTIONNEMENT
1 2 2 3 4 5 6 7
Tri-Fusion ( A, p, r)
1. Si p < 𝑟 2 4 5 7 1 2 3 6

2. Alors q ← (𝑝 + 𝑟)/2
3. Tri-Fusion (A, p, q) 2 5 4 7 1 3 2 6

4. Tri-Fusion (A, q+1, r)


5 2 4 7 1 3 2 6
5. Fusion (A, p, q, r)

YOUSSOU DIENG (YDIENG@UNIV-ZIG.SN)


ANALYSE DES ALGORITHMES DIVISER-POUR-RÉGNER
¡ Si on a un algorithme récursif et un problème de taille n :
¡ Le temps d’exécution peut souvent être décrit par une équation de
récurrence , ou récurrence , à partir du temps d’exécution pour des
entrées de taille moindre.
¡ On peut alors se servir d’outils mathématiques pour résoudre la
récurrence et trouver des bornes pour les performances de
l’algorithme.
¡ Une récurrence pour le temps d’exécution d’un algorithme diviser-
pour-régner s’appuie sur les trois étapes du paradigme de base.
YOUSSOU DIENG (YDIENG@UNIV-ZIG.SN)
ANALYSE DES ALGORITHMES DIVISER-POUR-RÉGNER

¡ Soit T(n) le temps d’exécution d’un problème de taille n.


¡ Si la taille du problème est suffisamment petite, disons n ≤ c pour une certaine
constante c, la solution directe prend un temps constant noté Θ(1).
¡ Supposons que l’on divise le problème en a sous-problèmes, la taille de chacun
étant 1/b de la taille du problème initial.
¡ Si l’on prend un temps D(n) pour diviser le problème en sous-problèmes et un
temps C(n) pour construire la solution finale à partir des solutions aux sous-
problèmes, on obtient la récurrence :

YOUSSOU DIENG (YDIENG@UNIV-ZIG.SN)


ANALYSE DU TRI PAR FUSION

¡ Supposons que la taille du problème initial est une puissance


de deux.
¡ Chaque étape diviser génère alors deux sous-séquences de taille
n/2 exactement.
¡ Au chapitre 4, nous verrons que cette supposition n’affecte pas
l’ordre de grandeur de la solution de la récurrence.

YOUSSOU DIENG (YDIENG@UNIV-ZIG.SN)


ANALYSE DU TRI PAR FUSION
On pose T(n), le temps d’exécution du cas le plus défavorable du tri par fusion de n
nombres; le tri par fusion d’un seul élément prend un temps constant.
Pour n > 1 éléments, on segmente le temps d’exécution de la manière suivante:
¡ Diviser : Cette étape se contente de calculer le milieu du sous-tableau, ce qui
consomme un temps constant, D(n) = Θ(1).
¡ Régner : C ette étape résout récursivement deux sous-problèmes, chacun ayant
la taille n/2, ce qui contribue pour 2T(n/2) au temps d’exécution.
¡ Combiner : Cette étape correspond à la procédure FUSION qui sur un sous-
tableau à n éléments prenait un temps Θ (n), de sorte que C(n) = Θ (n).
YOUSSOU DIENG (YDIENG@UNIV-ZIG.SN)
ANALYSE DU TRI PAR FUSION

¡ La somme des fonctions D(n) et C(n) donne la fonction Θ(n)


+ Θ (1) qui est une fonction linéaire de n, à savoir Θ(n).
¡ En ajoutant le terme 2T(n/2) de l’étape régner à cette
fonction, on a :

¡ On peut montrer que T(n) est Θ(nlog2 n)


YOUSSOU DIENG (YDIENG@UNIV-ZIG.SN)
ANALYSE DU TRI PAR FUSION

Comme
¡ le temps d’exécution tri par fusion est T(n)= Θ (nlog2 n) et que
¡ le tri par insertion a un temps d’exécution qui vaut Θ (n2),
on dira que tri par fusion est meilleur que le tri par
insertion.

YOUSSOU DIENG (YDIENG@UNIV-ZIG.SN)


FEUILLE DE TD
Questions?

01/11/2023
FEUILLE DE TD 3

¡ 2.2.3 On considère une fois de plus la recherche linéaire (voir exercice 2.1.3). Combien d’éléments de la séquence
d’entrée doit-on tester en moyenne, si l’on suppose que l’élément recherché a une probabilité égale d’être l’un
quelconque des éléments du tableau ? Et dans le cas le plus défavorable ? Quels sont les temps d’exécution du cas
moyen et du cas le plus défavorable, exprimés avec la notation Θ? Justifier les réponses.

¡ 2.2.4 Comment modifier la plupart des algorithmes pour qu’ils aient un bon temps d’exécution dans le cas le plus
favorable ?

01/11/2023
2.3.1 EN S’INSPIRANT DE LA FIGURE SUIVANTE, ILLUSTRER LE FONCTIONNEMENT DU TRI PAR
FUSION SUR LE TABLEAU A = « 3, 41, 52, 26, 38, 57, 9, 49 ».

01/11/2023
¡ 2.3.2 Réécrire la procédure FUSION de telle sorte qu’elle n’emploie
pas de sentinelles mais qu’à la place elle s’arrête quand l’un des deux
tableaux L et R a eu tous ses éléments copiés dans A, en copiant alors
le reste de l’autre tableau dans A.

01/11/2023
¡ Pour k := p à r faire
¡ Si i ≤ 𝑛1 𝑒𝑡 𝑗 ≤ 𝑛2 alors
¡ si L[i] ≤ R[j] alors
¡ A[k]:= L[i]
¡ i := i+1
¡ sinon A[k]:= R[j]
¡ j:=j+1
¡ FINSI
¡ Sinon si i ≤ 𝑛1 alors
¡ A[k]:= L[i]
¡ i := i+1
Sinon si 𝑗 ≤ 𝑛2 alors
¡ A[k]:= R[j]
¡ j:=j+1
¡ Finsi
¡ Finsi
¡ Finsi
¡ Fin 01/11/2023
¡ 2.3.5 En reprenant le problème de la recherche (voir exercice 2.1.3), observez que, si la séquence A est triée, on peut comparer le
milieu de la séquence avec v et supprimer la moitié de la séquence pour la suite des opérations. La recherche dichotomique est
un algorithme qui répète cette procédure, en divisant par deux à chaque fois la taille de la partie restante de la séquence.
1. Écrire le pseudo code, itératif ou récursif, de la recherche dichotomique.
2. Expliquer pourquoi le temps d’exécution de la recherche dichotomique, dans le cas le plus défavorable, est Θ (lg n).
Algorithme

01/11/2023

Vous aimerez peut-être aussi