Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse...

104
Algorithmique et Analyse d’Algorithmes Algorithmique et Analyse d’Algorithmes L3 Info Cours 9 : Arbres partiellement ordonnés Diviser pour régner Benjamin Wack 2020 – 2021 1 / 32

Transcript of Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse...

Page 1: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’Algorithmes

Algorithmique et Analyse d’AlgorithmesL3 Info

Cours 9 : Arbres partiellement ordonnés

Diviser pour régner

Benjamin Wack

2020 – 2021

1 / 32

Page 2: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’Algorithmes

La dernière foisI CodageI EntropieI Algorithme de Huffman

Aujourd’hui

I Arbre partiellement ordonné, tasséI Structure de tasI Application à la FAP

I Diviser pour régner

2 / 32

Page 3: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’Algorithmes

Plan

Arbre partiellement ordonné, tasséArbre partiellement ordonnéArbre tassé

Structure de tasDéfinition et applicationsOpérations

Diviser pour Régner

3 / 32

Page 4: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’AlgorithmesArbre partiellement ordonné, tassé

Arbre partiellement ordonné

Plan

Arbre partiellement ordonné, tasséArbre partiellement ordonnéArbre tassé

Structure de tasDéfinition et applicationsOpérations

Diviser pour Régner

4 / 32

Page 5: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’AlgorithmesArbre partiellement ordonné, tassé

Arbre partiellement ordonné

DéfinitionOn suppose qu’on sait comparer les clés choisies pour les nœuds.Arbre ordonnéUn arbre est ordonné si tout nœud a une clé inférieure ou égale à cellesde chacun de ses fils (s’ils existent).

B

F

H G

J

F

D

Ici par exemple à la racine B est bien inférieur à D, J et F ; il en va demême pour tous les autres nœuds. On remarque en revanche :I qu’aucun ordre particulier n’est imposé entre les nœuds « frères ».I qu’un nœud « haut » (ici J par exemple) peut parfois être supérieur

à un nœud « bas » (comme la feuille F), du moment que ces nœudsne sont pas sur une même branche.

5 / 32

Page 6: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’AlgorithmesArbre partiellement ordonné, tassé

Arbre partiellement ordonné

DéfinitionOn suppose qu’on sait comparer les clés choisies pour les nœuds.Arbre ordonnéUn arbre est ordonné si tout nœud a une clé inférieure ou égale à cellesde chacun de ses fils (s’ils existent).

B

F

H G

J

F

D

Ici par exemple à la racine B est bien inférieur à D, J et F ; il en va demême pour tous les autres nœuds. On remarque en revanche :I qu’aucun ordre particulier n’est imposé entre les nœuds « frères ».I qu’un nœud « haut » (ici J par exemple) peut parfois être supérieur

à un nœud « bas » (comme la feuille F), du moment que ces nœudsne sont pas sur une même branche.

5 / 32

Page 7: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’AlgorithmesArbre partiellement ordonné, tassé

Arbre partiellement ordonné

PropriétésOn se limitera dans ce cours à des arbres binaires :I les algorithmes et propriétés présentées ici restent valablesI mais leur implémentation est facilitée (cf TD1 numéro 9)

H

E

B

R

K

N

I Propriété : Chaque sous-arbre d’un arbre ordonné est lui-même unarbre ordonné (par définition)

I Propriété : Dans tout chemin de l’arbre (d’un nœud vers une feuille),les clés sont en ordre croissant (par définition)

I La racine d’un arbre ordonné contient la clé de valeur minimumparmi les clés de l’arbre.(On peut le démontrer par récurrence structurelle sur l’arbre)

6 / 32

Page 8: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’AlgorithmesArbre partiellement ordonné, tassé

Arbre partiellement ordonné

PropriétésOn se limitera dans ce cours à des arbres binaires :I les algorithmes et propriétés présentées ici restent valablesI mais leur implémentation est facilitée (cf TD1 numéro 9)

H

E

B

R

K

N

I Propriété : Chaque sous-arbre d’un arbre ordonné est lui-même unarbre ordonné (par définition)

I Propriété : Dans tout chemin de l’arbre (d’un nœud vers une feuille),les clés sont en ordre croissant (par définition)

I La racine d’un arbre ordonné contient la clé de valeur minimumparmi les clés de l’arbre.(On peut le démontrer par récurrence structurelle sur l’arbre)

6 / 32

Page 9: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’AlgorithmesArbre partiellement ordonné, tassé

Arbre partiellement ordonné

PropriétésOn se limitera dans ce cours à des arbres binaires :I les algorithmes et propriétés présentées ici restent valablesI mais leur implémentation est facilitée (cf TD1 numéro 9)

H

E

B

R

K

N

I Propriété : Chaque sous-arbre d’un arbre ordonné est lui-même unarbre ordonné (par définition)

I Propriété : Dans tout chemin de l’arbre (d’un nœud vers une feuille),les clés sont en ordre croissant (par définition)

I La racine d’un arbre ordonné contient la clé de valeur minimumparmi les clés de l’arbre.(On peut le démontrer par récurrence structurelle sur l’arbre)

6 / 32

Page 10: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’AlgorithmesArbre partiellement ordonné, tassé

Arbre tassé

Plan

Arbre partiellement ordonné, tasséArbre partiellement ordonnéArbre tassé

Structure de tasDéfinition et applicationsOpérations

Diviser pour Régner

7 / 32

Page 11: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’AlgorithmesArbre partiellement ordonné, tassé

Arbre tassé

Définition

RappelsLa hauteur d’un arbre est la longueur maximum d’un chemin.Le niveau d’un nœud est la longueur de son chemin d’accès.

Arbre tassé

Un arbre binaire de hauteur h est tassé si :I Tous les nœuds internes ont deux fils,

sauf éventuellement le dernier dansl’ordre du parcours en largeur.

I Les feuilles du dernier niveau h sont « tassées à gauche ».Remarquons alors que :I les feuilles de niveau h − 1 sont « tassées à droite »I les nœuds internes de niveau h − 1 sont « tassés à gauche ».

8 / 32

Page 12: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’AlgorithmesArbre partiellement ordonné, tassé

Arbre tassé

Définition

RappelsLa hauteur d’un arbre est la longueur maximum d’un chemin.Le niveau d’un nœud est la longueur de son chemin d’accès.

Arbre tassé

Un arbre binaire de hauteur h est tassé si :I Tous les nœuds internes ont deux fils,

sauf éventuellement le dernier dansl’ordre du parcours en largeur.

I Les feuilles du dernier niveau h sont « tassées à gauche ».Remarquons alors que :I les feuilles de niveau h − 1 sont « tassées à droite »I les nœuds internes de niveau h − 1 sont « tassés à gauche ».

8 / 32

Page 13: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’AlgorithmesArbre partiellement ordonné, tassé

Arbre tassé

Propriétés d’un arbre tassé

StructureI Tous les niveaux sont complets (contiennent le maximum possible de

nœuds), sauf éventuellement le dernier niveau h.I Remarquons aussi que le dernier nœud interne (dans l’ordre du

parcours en largeur) est le seul qui peut être unaire (et cela arrive siet seulement si n est pair).

Hauteur et nombre de nœudsI Le nombre de nœuds de chaque niveau (complet) i est 2i .I Le nombre total de nœuds est donc :

n = 2h − 1 (niveaux complets de 0 à h − 1)+ x où 0 < x ≤ 2h (dernier niveau)

I Par conséquent h = blog2 nc (ce sera important pour la complexité).

9 / 32

Page 14: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’AlgorithmesArbre partiellement ordonné, tassé

Arbre tassé

Propriétés d’un arbre tassé

StructureI Tous les niveaux sont complets (contiennent le maximum possible de

nœuds), sauf éventuellement le dernier niveau h.I Remarquons aussi que le dernier nœud interne (dans l’ordre du

parcours en largeur) est le seul qui peut être unaire (et cela arrive siet seulement si n est pair).

Hauteur et nombre de nœudsI Le nombre de nœuds de chaque niveau (complet) i est 2i .I Le nombre total de nœuds est donc :

n = 2h − 1 (niveaux complets de 0 à h − 1)+ x où 0 < x ≤ 2h (dernier niveau)

I Par conséquent h = blog2 nc (ce sera important pour la complexité).

9 / 32

Page 15: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’AlgorithmesStructure de tas

Définition et applications

Plan

Arbre partiellement ordonné, tasséArbre partiellement ordonnéArbre tassé

Structure de tasDéfinition et applicationsOpérations

Diviser pour Régner

10 / 32

Page 16: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’AlgorithmesStructure de tas

Définition et applications

Définition

Tas binaireUn tas (heap en anglais) est un arbre binaire à la fois tassé et ordonné.

E

H N

F

R

P K

B

T

I Ce n’est pas vraiment un type abstrait(en particulier il sert à réaliser une File à Priorités efficace)

I Mais on a encore le choix de la représentation de l’arbre en mémoire.(on verra en TD1 qu’il vaut mieux éviter une forme chaînée)

RemarqueNe pas confondre avec la zone d’allocation dynamique en mémoire.

11 / 32

Page 17: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’AlgorithmesStructure de tas

Définition et applications

Définition

Tas binaireUn tas (heap en anglais) est un arbre binaire à la fois tassé et ordonné.

E

H N

F

R

P K

B

T

I Ce n’est pas vraiment un type abstrait(en particulier il sert à réaliser une File à Priorités efficace)

I Mais on a encore le choix de la représentation de l’arbre en mémoire.(on verra en TD1 qu’il vaut mieux éviter une forme chaînée)

RemarqueNe pas confondre avec la zone d’allocation dynamique en mémoire.

11 / 32

Page 18: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’AlgorithmesStructure de tas

Définition et applications

Définition

Tas binaireUn tas (heap en anglais) est un arbre binaire à la fois tassé et ordonné.

E

H N

F

R

P K

B

T

I Ce n’est pas vraiment un type abstrait(en particulier il sert à réaliser une File à Priorités efficace)

I Mais on a encore le choix de la représentation de l’arbre en mémoire.(on verra en TD1 qu’il vaut mieux éviter une forme chaînée)

RemarqueNe pas confondre avec la zone d’allocation dynamique en mémoire.

11 / 32

Page 19: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’AlgorithmesStructure de tas

Définition et applications

Applications du tas

Réalisation d’une file à priorités efficace

I On compare les nœuds de l’arbre selon leur priorité(Remarque : on peut aussi construire un tas max de la même façon)

I Le nœud prioritaire (racine) est accessible en temps constantI Pas d’information superflue à maintenir (moins que dans un ABR

par exemple)

On retrouvera donc un tas dans tous les algorithmes qui demandent degérer des priorités :I Algorithme de HuffmanI Algorithmes de graphes (Prim cours 11, Dijkstra semestre 6)

Application « évidente » : tri par tas (heapsort)I Insérer les éléments à trier dans un tas, puis les extraire un par un.I C’était la motivation initiale de cette structure.

12 / 32

Page 20: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’AlgorithmesStructure de tas

Définition et applications

Applications du tas

Réalisation d’une file à priorités efficace

I On compare les nœuds de l’arbre selon leur priorité(Remarque : on peut aussi construire un tas max de la même façon)

I Le nœud prioritaire (racine) est accessible en temps constantI Pas d’information superflue à maintenir (moins que dans un ABR

par exemple)

On retrouvera donc un tas dans tous les algorithmes qui demandent degérer des priorités :I Algorithme de HuffmanI Algorithmes de graphes (Prim cours 11, Dijkstra semestre 6)

Application « évidente » : tri par tas (heapsort)I Insérer les éléments à trier dans un tas, puis les extraire un par un.I C’était la motivation initiale de cette structure.

12 / 32

Page 21: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’AlgorithmesStructure de tas

Définition et applications

Applications du tas

Réalisation d’une file à priorités efficace

I On compare les nœuds de l’arbre selon leur priorité(Remarque : on peut aussi construire un tas max de la même façon)

I Le nœud prioritaire (racine) est accessible en temps constantI Pas d’information superflue à maintenir (moins que dans un ABR

par exemple)

On retrouvera donc un tas dans tous les algorithmes qui demandent degérer des priorités :I Algorithme de HuffmanI Algorithmes de graphes (Prim cours 11, Dijkstra semestre 6)

Application « évidente » : tri par tas (heapsort)I Insérer les éléments à trier dans un tas, puis les extraire un par un.I C’était la motivation initiale de cette structure.

12 / 32

Page 22: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’AlgorithmesStructure de tas

Opérations

Plan

Arbre partiellement ordonné, tasséArbre partiellement ordonnéArbre tassé

Structure de tasDéfinition et applicationsOpérations

Diviser pour Régner

13 / 32

Page 23: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’AlgorithmesStructure de tas

Opérations

Ensemble minimal d’opérationsTas_Vide : void → TasEst_Vide : Tas → bool

Insérer : Element × Tas → voidAjoute (par effet de bord) l’élément à ceux déjà présents.Au besoin, réorganise les éléments pour conserver un tas.

Trouver_Min : Tas → ElementPermet de consulter l’élément minimum sans modifier letas (pas d’effet de bord, il suffit de consulter la racine).

Extraire_Min : Tas → voidSupprime (par effet de bord) l’élément de clé minimale.Au besoin, réorganise les éléments pour conserver un tas.S’il y a plusieurs minimums, un seul est supprimé.

Les opérations Tas_Vide, Est_Vide et Trouver_Min sont simples àréaliser en temps constant.

14 / 32

Page 24: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’AlgorithmesStructure de tas

Opérations

Ensemble minimal d’opérationsTas_Vide : void → TasEst_Vide : Tas → bool

Insérer : Element × Tas → voidAjoute (par effet de bord) l’élément à ceux déjà présents.Au besoin, réorganise les éléments pour conserver un tas.

Trouver_Min : Tas → ElementPermet de consulter l’élément minimum sans modifier letas (pas d’effet de bord, il suffit de consulter la racine).

Extraire_Min : Tas → voidSupprime (par effet de bord) l’élément de clé minimale.Au besoin, réorganise les éléments pour conserver un tas.S’il y a plusieurs minimums, un seul est supprimé.

Les opérations Tas_Vide, Est_Vide et Trouver_Min sont simples àréaliser en temps constant.

14 / 32

Page 25: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’AlgorithmesStructure de tas

Opérations

Ensemble minimal d’opérationsTas_Vide : void → TasEst_Vide : Tas → bool

Insérer : Element × Tas → voidAjoute (par effet de bord) l’élément à ceux déjà présents.Au besoin, réorganise les éléments pour conserver un tas.

Trouver_Min : Tas → ElementPermet de consulter l’élément minimum sans modifier letas (pas d’effet de bord, il suffit de consulter la racine).

Extraire_Min : Tas → voidSupprime (par effet de bord) l’élément de clé minimale.Au besoin, réorganise les éléments pour conserver un tas.S’il y a plusieurs minimums, un seul est supprimé.

Les opérations Tas_Vide, Est_Vide et Trouver_Min sont simples àréaliser en temps constant.

14 / 32

Page 26: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’AlgorithmesStructure de tas

Opérations

Ensemble minimal d’opérationsTas_Vide : void → TasEst_Vide : Tas → bool

Insérer : Element × Tas → voidAjoute (par effet de bord) l’élément à ceux déjà présents.Au besoin, réorganise les éléments pour conserver un tas.

Trouver_Min : Tas → ElementPermet de consulter l’élément minimum sans modifier letas (pas d’effet de bord, il suffit de consulter la racine).

Extraire_Min : Tas → voidSupprime (par effet de bord) l’élément de clé minimale.Au besoin, réorganise les éléments pour conserver un tas.S’il y a plusieurs minimums, un seul est supprimé.

Les opérations Tas_Vide, Est_Vide et Trouver_Min sont simples àréaliser en temps constant.

14 / 32

Page 27: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’AlgorithmesStructure de tas

Opérations

Ensemble minimal d’opérationsTas_Vide : void → TasEst_Vide : Tas → bool

Insérer : Element × Tas → voidAjoute (par effet de bord) l’élément à ceux déjà présents.Au besoin, réorganise les éléments pour conserver un tas.

Trouver_Min : Tas → ElementPermet de consulter l’élément minimum sans modifier letas (pas d’effet de bord, il suffit de consulter la racine).

Extraire_Min : Tas → voidSupprime (par effet de bord) l’élément de clé minimale.Au besoin, réorganise les éléments pour conserver un tas.S’il y a plusieurs minimums, un seul est supprimé.

Les opérations Tas_Vide, Est_Vide et Trouver_Min sont simples àréaliser en temps constant.

14 / 32

Page 28: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’AlgorithmesStructure de tas

Opérations

Ensemble minimal d’opérationsTas_Vide : void → TasEst_Vide : Tas → bool

Insérer : Element × Tas → voidAjoute (par effet de bord) l’élément à ceux déjà présents.Au besoin, réorganise les éléments pour conserver un tas.

Trouver_Min : Tas → ElementPermet de consulter l’élément minimum sans modifier letas (pas d’effet de bord, il suffit de consulter la racine).

Extraire_Min : Tas → voidSupprime (par effet de bord) l’élément de clé minimale.Au besoin, réorganise les éléments pour conserver un tas.S’il y a plusieurs minimums, un seul est supprimé.

Les opérations Tas_Vide, Est_Vide et Trouver_Min sont simples àréaliser en temps constant.

14 / 32

Page 29: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’AlgorithmesStructure de tas

Opérations

Insertion

E

H N

F

R

P K

B

T

Idée générale : il faut que l’arbre reste tassé et ordonné.

I Tassé. On ne peut ajouter le nouveau nœud que :I au dernier niveau, après la dernière feuille ;I ou si le dernier niveau est complet, au tout début du prochain niveau.

I Ordonné. On rectifie l’ordre par échange de clés sans modifier lastructure de l’arbre, depuis la nouvelle feuille jusqu’à la racine.

INSERER( e, t )Créer une nouvelle feuille n de clé e après la dernière feuille du tas tp := Noeud Père(n)while n n’est pas la racine et clé(p) > clé(n)

Échanger les clés de p et de nn := pp := Noeud Père(n)

15 / 32

Page 30: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’AlgorithmesStructure de tas

Opérations

Insertion

E

H N

F

R

P K

B

T

Idée générale : il faut que l’arbre reste tassé et ordonné.I Tassé. On ne peut ajouter le nouveau nœud que :

I au dernier niveau, après la dernière feuille ;I ou si le dernier niveau est complet, au tout début du prochain niveau.

I Ordonné. On rectifie l’ordre par échange de clés sans modifier lastructure de l’arbre, depuis la nouvelle feuille jusqu’à la racine.

INSERER( e, t )Créer une nouvelle feuille n de clé e après la dernière feuille du tas tp := Noeud Père(n)while n n’est pas la racine et clé(p) > clé(n)

Échanger les clés de p et de nn := pp := Noeud Père(n)

15 / 32

Page 31: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’AlgorithmesStructure de tas

Opérations

Insertion

E

H N

F

R

P K

B

T D

Idée générale : il faut que l’arbre reste tassé et ordonné.I Tassé. On ne peut ajouter le nouveau nœud que :

I au dernier niveau, après la dernière feuille ;I ou si le dernier niveau est complet, au tout début du prochain niveau.

I Ordonné. On rectifie l’ordre par échange de clés sans modifier lastructure de l’arbre, depuis la nouvelle feuille jusqu’à la racine.

INSERER( e, t )Créer une nouvelle feuille n de clé e après la dernière feuille du tas tp := Noeud Père(n)while n n’est pas la racine et clé(p) > clé(n)

Échanger les clés de p et de nn := pp := Noeud Père(n)

15 / 32

Page 32: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’AlgorithmesStructure de tas

Opérations

Insertion

E

H N

F

R

P K

B

T D

Idée générale : il faut que l’arbre reste tassé et ordonné.I Tassé. On ne peut ajouter le nouveau nœud que :

I au dernier niveau, après la dernière feuille ;I ou si le dernier niveau est complet, au tout début du prochain niveau.

I Ordonné.

On rectifie l’ordre par échange de clés sans modifier lastructure de l’arbre, depuis la nouvelle feuille jusqu’à la racine.

INSERER( e, t )Créer une nouvelle feuille n de clé e après la dernière feuille du tas tp := Noeud Père(n)while n n’est pas la racine et clé(p) > clé(n)

Échanger les clés de p et de nn := pp := Noeud Père(n)

15 / 32

Page 33: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’AlgorithmesStructure de tas

Opérations

Insertion

E

H N

F

R

P K

B

T D

Idée générale : il faut que l’arbre reste tassé et ordonné.I Tassé. On ne peut ajouter le nouveau nœud que :

I au dernier niveau, après la dernière feuille ;I ou si le dernier niveau est complet, au tout début du prochain niveau.

I Ordonné. On rectifie l’ordre par échange de clés sans modifier lastructure de l’arbre, depuis la nouvelle feuille jusqu’à la racine.

INSERER( e, t )Créer une nouvelle feuille n de clé e après la dernière feuille du tas tp := Noeud Père(n)while n n’est pas la racine et clé(p) > clé(n)

Échanger les clés de p et de nn := pp := Noeud Père(n)

15 / 32

Page 34: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’AlgorithmesStructure de tas

Opérations

Insertion

E

H N

F

R

P

B

K

T D

Idée générale : il faut que l’arbre reste tassé et ordonné.I Tassé. On ne peut ajouter le nouveau nœud que :

I au dernier niveau, après la dernière feuille ;I ou si le dernier niveau est complet, au tout début du prochain niveau.

I Ordonné. On rectifie l’ordre par échange de clés sans modifier lastructure de l’arbre, depuis la nouvelle feuille jusqu’à la racine.

INSERER( e, t )Créer une nouvelle feuille n de clé e après la dernière feuille du tas tp := Noeud Père(n)while n n’est pas la racine et clé(p) > clé(n)

Échanger les clés de p et de nn := pp := Noeud Père(n)

15 / 32

Page 35: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’AlgorithmesStructure de tas

Opérations

Insertion

E

H N

R

P

B

D

F

T K

Idée générale : il faut que l’arbre reste tassé et ordonné.I Tassé. On ne peut ajouter le nouveau nœud que :

I au dernier niveau, après la dernière feuille ;I ou si le dernier niveau est complet, au tout début du prochain niveau.

I Ordonné. On rectifie l’ordre par échange de clés sans modifier lastructure de l’arbre, depuis la nouvelle feuille jusqu’à la racine.

INSERER( e, t )Créer une nouvelle feuille n de clé e après la dernière feuille du tas tp := Noeud Père(n)while n n’est pas la racine et clé(p) > clé(n)

Échanger les clés de p et de nn := pp := Noeud Père(n)

15 / 32

Page 36: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’AlgorithmesStructure de tas

Opérations

Insertion

E

H N

R

P

B

D

F

T K

Idée générale : il faut que l’arbre reste tassé et ordonné.I Tassé. On ne peut ajouter le nouveau nœud que :

I au dernier niveau, après la dernière feuille ;I ou si le dernier niveau est complet, au tout début du prochain niveau.

I Ordonné. On rectifie l’ordre par échange de clés sans modifier lastructure de l’arbre, depuis la nouvelle feuille jusqu’à la racine.

INSERER( e, t )Créer une nouvelle feuille n de clé e après la dernière feuille du tas tp := Noeud Père(n)while n n’est pas la racine et clé(p) > clé(n)

Échanger les clés de p et de nn := pp := Noeud Père(n)

15 / 32

Page 37: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’AlgorithmesStructure de tas

Opérations

Insertion

E

H N

R

P

B

F

D

T K

Idée générale : il faut que l’arbre reste tassé et ordonné.I Tassé. On ne peut ajouter le nouveau nœud que :

I au dernier niveau, après la dernière feuille ;I ou si le dernier niveau est complet, au tout début du prochain niveau.

I Ordonné. On rectifie l’ordre par échange de clés sans modifier lastructure de l’arbre, depuis la nouvelle feuille jusqu’à la racine.

INSERER( e, t )Créer une nouvelle feuille n de clé e après la dernière feuille du tas tp := Noeud Père(n)while n n’est pas la racine et clé(p) > clé(n)

Échanger les clés de p et de nn := pp := Noeud Père(n)

15 / 32

Page 38: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’AlgorithmesStructure de tas

Opérations

Insertion

E

H N

R

P F

D

B

T K

Idée générale : il faut que l’arbre reste tassé et ordonné.I Tassé. On ne peut ajouter le nouveau nœud que :

I au dernier niveau, après la dernière feuille ;I ou si le dernier niveau est complet, au tout début du prochain niveau.

I Ordonné. On rectifie l’ordre par échange de clés sans modifier lastructure de l’arbre, depuis la nouvelle feuille jusqu’à la racine.

INSERER( e, t )Créer une nouvelle feuille n de clé e après la dernière feuille du tas tp := Noeud Père(n)while n n’est pas la racine et clé(p) > clé(n)

Échanger les clés de p et de nn := pp := Noeud Père(n)

15 / 32

Page 39: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’AlgorithmesStructure de tas

Opérations

Insertion : explications complémentaires

La boucle de l’algorithme précédent, qui consiste à prendre un nœud dontla clé est trop « bas » dans l’arbre et à la faire remonter petit à petits’appelle une percolation vers le haut, à l’image de ce qui se produitquand une bulle remonte dans un liquide.

Expérimentez avec l’application (attention, le pavé numérique nefonctionne pas) :https://www.cs.usfca.edu/~galles/JavascriptVisual/Heap.htmlInsérez quelques valeurs au hasard, par exemple 6, 9, 8, 13, 7, 12 pourconstruire un début d’arbre.Puis insérez d’autres valeurs, par exemple : 2, puis 11, 4 ou encore 16 enobservant attentivement à chaque fois comment l’arbre se réorganise.

16 / 32

Page 40: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’AlgorithmesStructure de tas

Opérations

Insertion : explications complémentaires

La boucle de l’algorithme précédent, qui consiste à prendre un nœud dontla clé est trop « bas » dans l’arbre et à la faire remonter petit à petits’appelle une percolation vers le haut, à l’image de ce qui se produitquand une bulle remonte dans un liquide.

Expérimentez avec l’application (attention, le pavé numérique nefonctionne pas) :https://www.cs.usfca.edu/~galles/JavascriptVisual/Heap.htmlInsérez quelques valeurs au hasard, par exemple 6, 9, 8, 13, 7, 12 pourconstruire un début d’arbre.Puis insérez d’autres valeurs, par exemple : 2, puis 11, 4 ou encore 16 enobservant attentivement à chaque fois comment l’arbre se réorganise.

16 / 32

Page 41: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’AlgorithmesStructure de tas

Opérations

Insertion : explications complémentaires

La boucle de l’algorithme précédent, qui consiste à prendre un nœud dontla clé est trop « bas » dans l’arbre et à la faire remonter petit à petits’appelle une percolation vers le haut, à l’image de ce qui se produitquand une bulle remonte dans un liquide.

Expérimentez avec l’application (attention, le pavé numérique nefonctionne pas) :https://www.cs.usfca.edu/~galles/JavascriptVisual/Heap.htmlInsérez quelques valeurs au hasard, par exemple 6, 9, 8, 13, 7, 12 pourconstruire un début d’arbre.Puis insérez d’autres valeurs, par exemple : 2, puis 11, 4 ou encore 16 enobservant attentivement à chaque fois comment l’arbre se réorganise.

16 / 32

Page 42: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’AlgorithmesStructure de tas

Opérations

Extraction du minimum

E

H N

F

R

P K

B

T

Même principe : l’arbre devra rester...

I Tassé. On doit supprimer la dernière feuille du dernier niveau.Cependant le maximum est à la racine : on commence par échanger.

I Ordonné. On réordonne par échange de clés sans modifier lastructure de l’arbre, en descendant cette fois vers les feuilles.

EXTRAIRE_MIN( t )f := Dernière feuille de tn := Racine de tÉchanger les clés de f et de nSupprimer fwhile n n’est pas une feuille et clé(n) > clé d’un fils de n

m := Fils de n de clé minimaleÉchanger les clés de m et de nn := m

17 / 32

Page 43: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’AlgorithmesStructure de tas

Opérations

Extraction du minimum

E

H N

F

R

P K

B

T

Même principe : l’arbre devra rester...I Tassé. On doit supprimer

la dernière feuille du dernier niveau.Cependant le maximum est à la racine : on commence par échanger.

I Ordonné. On réordonne par échange de clés sans modifier lastructure de l’arbre, en descendant cette fois vers les feuilles.

EXTRAIRE_MIN( t )f := Dernière feuille de tn := Racine de tÉchanger les clés de f et de nSupprimer fwhile n n’est pas une feuille et clé(n) > clé d’un fils de n

m := Fils de n de clé minimaleÉchanger les clés de m et de nn := m

17 / 32

Page 44: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’AlgorithmesStructure de tas

Opérations

Extraction du minimum

E

H N

F

P K

B

RT

Même principe : l’arbre devra rester...I Tassé. On doit supprimer la dernière feuille du dernier niveau.

Cependant le maximum est à la racine : on commence par échanger.I Ordonné. On réordonne par échange de clés sans modifier la

structure de l’arbre, en descendant cette fois vers les feuilles.EXTRAIRE_MIN( t )f := Dernière feuille de tn := Racine de tÉchanger les clés de f et de nSupprimer fwhile n n’est pas une feuille et clé(n) > clé d’un fils de n

m := Fils de n de clé minimaleÉchanger les clés de m et de nn := m

17 / 32

Page 45: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’AlgorithmesStructure de tas

Opérations

Extraction du minimum

E

H N

F

P K

B

RT

Même principe : l’arbre devra rester...I Tassé. On doit supprimer la dernière feuille du dernier niveau.

Cependant le maximum est à la racine : on commence par échanger.

I Ordonné. On réordonne par échange de clés sans modifier lastructure de l’arbre, en descendant cette fois vers les feuilles.

EXTRAIRE_MIN( t )f := Dernière feuille de tn := Racine de tÉchanger les clés de f et de nSupprimer fwhile n n’est pas une feuille et clé(n) > clé d’un fils de n

m := Fils de n de clé minimaleÉchanger les clés de m et de nn := m

17 / 32

Page 46: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’AlgorithmesStructure de tas

Opérations

Extraction du minimum

E

H N

F

P K

R

BT

Même principe : l’arbre devra rester...I Tassé. On doit supprimer la dernière feuille du dernier niveau.

Cependant le maximum est à la racine : on commence par échanger.

I Ordonné. On réordonne par échange de clés sans modifier lastructure de l’arbre, en descendant cette fois vers les feuilles.

EXTRAIRE_MIN( t )f := Dernière feuille de tn := Racine de tÉchanger les clés de f et de nSupprimer fwhile n n’est pas une feuille et clé(n) > clé d’un fils de n

m := Fils de n de clé minimaleÉchanger les clés de m et de nn := m

17 / 32

Page 47: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’AlgorithmesStructure de tas

Opérations

Extraction du minimum

E

H N

F

P K

R

T

Même principe : l’arbre devra rester...I Tassé. On doit supprimer la dernière feuille du dernier niveau.

Cependant le maximum est à la racine : on commence par échanger.I Ordonné.

On réordonne par échange de clés sans modifier lastructure de l’arbre, en descendant cette fois vers les feuilles.

EXTRAIRE_MIN( t )f := Dernière feuille de tn := Racine de tÉchanger les clés de f et de nSupprimer fwhile n n’est pas une feuille et clé(n) > clé d’un fils de n

m := Fils de n de clé minimaleÉchanger les clés de m et de nn := m

17 / 32

Page 48: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’AlgorithmesStructure de tas

Opérations

Extraction du minimum

E

H N

F

P K

R

T

Même principe : l’arbre devra rester...I Tassé. On doit supprimer la dernière feuille du dernier niveau.

Cependant le maximum est à la racine : on commence par échanger.I Ordonné. On réordonne par échange de clés sans modifier la

structure de l’arbre, en descendant cette fois vers les feuilles.

EXTRAIRE_MIN( t )f := Dernière feuille de tn := Racine de tÉchanger les clés de f et de nSupprimer fwhile n n’est pas une feuille et clé(n) > clé d’un fils de n

m := Fils de n de clé minimaleÉchanger les clés de m et de nn := m

17 / 32

Page 49: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’AlgorithmesStructure de tas

Opérations

Extraction du minimum

H N

F

P K

R

E

T

Même principe : l’arbre devra rester...I Tassé. On doit supprimer la dernière feuille du dernier niveau.

Cependant le maximum est à la racine : on commence par échanger.I Ordonné. On réordonne par échange de clés sans modifier la

structure de l’arbre, en descendant cette fois vers les feuilles.EXTRAIRE_MIN( t )f := Dernière feuille de tn := Racine de tÉchanger les clés de f et de nSupprimer fwhile n n’est pas une feuille et clé(n) > clé d’un fils de n

m := Fils de n de clé minimaleÉchanger les clés de m et de nn := m 17 / 32

Page 50: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’AlgorithmesStructure de tas

Opérations

Extraction du minimum

H N

F

P K

R

E

T

Même principe : l’arbre devra rester...I Tassé. On doit supprimer la dernière feuille du dernier niveau.

Cependant le maximum est à la racine : on commence par échanger.I Ordonné. On réordonne par échange de clés sans modifier la

structure de l’arbre, en descendant cette fois vers les feuilles.EXTRAIRE_MIN( t )f := Dernière feuille de tn := Racine de tÉchanger les clés de f et de nSupprimer fwhile n n’est pas une feuille et clé(n) > clé d’un fils de n

m := Fils de n de clé minimaleÉchanger les clés de m et de nn := m 17 / 32

Page 51: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’AlgorithmesStructure de tas

Opérations

Extraction du minimum

N

F

P K

R

E

H

T

Même principe : l’arbre devra rester...I Tassé. On doit supprimer la dernière feuille du dernier niveau.

Cependant le maximum est à la racine : on commence par échanger.I Ordonné. On réordonne par échange de clés sans modifier la

structure de l’arbre, en descendant cette fois vers les feuilles.EXTRAIRE_MIN( t )f := Dernière feuille de tn := Racine de tÉchanger les clés de f et de nSupprimer fwhile n n’est pas une feuille et clé(n) > clé d’un fils de n

m := Fils de n de clé minimaleÉchanger les clés de m et de nn := m 17 / 32

Page 52: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’AlgorithmesStructure de tas

Opérations

Extraction du minimum

N

F

P K

E

R

H

T

Même principe : l’arbre devra rester...I Tassé. On doit supprimer la dernière feuille du dernier niveau.

Cependant le maximum est à la racine : on commence par échanger.I Ordonné. On réordonne par échange de clés sans modifier la

structure de l’arbre, en descendant cette fois vers les feuilles.EXTRAIRE_MIN( t )f := Dernière feuille de tn := Racine de tÉchanger les clés de f et de nSupprimer fwhile n n’est pas une feuille et clé(n) > clé d’un fils de n

m := Fils de n de clé minimaleÉchanger les clés de m et de nn := m 17 / 32

Page 53: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’AlgorithmesStructure de tas

Opérations

Extraction du minimum

N

F

P K

E

H

R

T

Même principe : l’arbre devra rester...I Tassé. On doit supprimer la dernière feuille du dernier niveau.

Cependant le maximum est à la racine : on commence par échanger.I Ordonné. On réordonne par échange de clés sans modifier la

structure de l’arbre, en descendant cette fois vers les feuilles.EXTRAIRE_MIN( t )f := Dernière feuille de tn := Racine de tÉchanger les clés de f et de nSupprimer fwhile n n’est pas une feuille et clé(n) > clé d’un fils de n

m := Fils de n de clé minimaleÉchanger les clés de m et de nn := m 17 / 32

Page 54: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’AlgorithmesStructure de tas

Opérations

Extraction du minimum : explications complémentairesDans ce second algorithme, la boucle effectue une percolation vers le bas,comme un confetti qui coulerait lentement au fond d’un verre d’eau.

L’algorithme est un peu plus compliqué car on ne sait pas à l’avance versoù va aller la valeur qu’on a placée à la racine :I si elle est supérieure à un seul de ses deux fils, c’est évidemment ce

fils qui doit remonter à sa placeI mais si elle est supérieure à ses deux fils, il faut en choisir un : on

réalise rapidement que c’est le plus petit des deux qui doit remonterCeci explique en particulier la ligne :

m := Fils de n de clé minimale.Reprenez l’arbre construit sur :https://www.cs.usfca.edu/~galles/JavascriptVisual/Heap.htmlCette fois il suffit de cliquer sur Remove Smallest : vous n’avez rien àchoisir puisque c’est forcément l’élément minimal qui sort du tas.Pensez à utiliser les boutons Pause et Step pour mieux voir ce qui sepasse.

18 / 32

Page 55: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’AlgorithmesStructure de tas

Opérations

Extraction du minimum : explications complémentairesDans ce second algorithme, la boucle effectue une percolation vers le bas,comme un confetti qui coulerait lentement au fond d’un verre d’eau.L’algorithme est un peu plus compliqué car on ne sait pas à l’avance versoù va aller la valeur qu’on a placée à la racine :I si elle est supérieure à un seul de ses deux fils, c’est évidemment ce

fils qui doit remonter à sa placeI mais si elle est supérieure à ses deux fils, il faut en choisir un : on

réalise rapidement que c’est le plus petit des deux qui doit remonterCeci explique en particulier la ligne :

m := Fils de n de clé minimale.

Reprenez l’arbre construit sur :https://www.cs.usfca.edu/~galles/JavascriptVisual/Heap.htmlCette fois il suffit de cliquer sur Remove Smallest : vous n’avez rien àchoisir puisque c’est forcément l’élément minimal qui sort du tas.Pensez à utiliser les boutons Pause et Step pour mieux voir ce qui sepasse.

18 / 32

Page 56: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’AlgorithmesStructure de tas

Opérations

Extraction du minimum : explications complémentairesDans ce second algorithme, la boucle effectue une percolation vers le bas,comme un confetti qui coulerait lentement au fond d’un verre d’eau.L’algorithme est un peu plus compliqué car on ne sait pas à l’avance versoù va aller la valeur qu’on a placée à la racine :I si elle est supérieure à un seul de ses deux fils, c’est évidemment ce

fils qui doit remonter à sa placeI mais si elle est supérieure à ses deux fils, il faut en choisir un : on

réalise rapidement que c’est le plus petit des deux qui doit remonterCeci explique en particulier la ligne :

m := Fils de n de clé minimale.Reprenez l’arbre construit sur :https://www.cs.usfca.edu/~galles/JavascriptVisual/Heap.htmlCette fois il suffit de cliquer sur Remove Smallest : vous n’avez rien àchoisir puisque c’est forcément l’élément minimal qui sort du tas.Pensez à utiliser les boutons Pause et Step pour mieux voir ce qui sepasse.

18 / 32

Page 57: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’AlgorithmesStructure de tas

Opérations

Complexité

Admettons que les opérations coûteuses soient la comparaison etl’échange de clés.

Les deux opérations Insérer et Extraire_min sont constituées d’uneboucle effectuant à chaque itération :I une comparaison (ou deux)I un échange

De plus, dans cette boucle, le nœud à réordonner suit un chemin d’unefeuille à la racine (ou inversement) : le coût est donc majoré par lahauteur de l’arbre.

Or on a vu que dans un arbre tassé h = blog2 nc :

Complexité de la mise à jour du tasLa complexité des opérations Insérer et Extraire_min est en O(log2 n).

19 / 32

Page 58: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’AlgorithmesStructure de tas

Opérations

Complexité

Admettons que les opérations coûteuses soient la comparaison etl’échange de clés.

Les deux opérations Insérer et Extraire_min sont constituées d’uneboucle effectuant à chaque itération :I une comparaison (ou deux)I un échange

De plus, dans cette boucle, le nœud à réordonner suit un chemin d’unefeuille à la racine (ou inversement) : le coût est donc majoré par lahauteur de l’arbre.

Or on a vu que dans un arbre tassé h = blog2 nc :

Complexité de la mise à jour du tasLa complexité des opérations Insérer et Extraire_min est en O(log2 n).

19 / 32

Page 59: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’AlgorithmesStructure de tas

Opérations

Complexité

Admettons que les opérations coûteuses soient la comparaison etl’échange de clés.

Les deux opérations Insérer et Extraire_min sont constituées d’uneboucle effectuant à chaque itération :I une comparaison (ou deux)I un échange

De plus, dans cette boucle, le nœud à réordonner suit un chemin d’unefeuille à la racine (ou inversement) : le coût est donc majoré par lahauteur de l’arbre.

Or on a vu que dans un arbre tassé h = blog2 nc :

Complexité de la mise à jour du tasLa complexité des opérations Insérer et Extraire_min est en O(log2 n).

19 / 32

Page 60: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’AlgorithmesStructure de tas

Opérations

Opérations supplémentaires

Pour certains algorithmes, on aura besoin d’une opération supplémentairedans les files à priorité

Modifier_priorité (Noeud n, Priorité p)

Celle-ci n’est en fait pas plus difficile que celles déjà connues :I Si n devient plus prioritaire, on effectue une percolation vers le haut.I Si n devient moins prioritaire, on effectue une percolation vers le bas.

Enfin on verra en TD1 :I Tri_Par_Tas ( Tableau t )I Créer_tas ( Tableau t de taille n )

I Version naïve par n insertions successives en O(n log n)I Version efficace procédant des feuilles vers la racine en O(n)

20 / 32

Page 61: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’AlgorithmesStructure de tas

Opérations

Opérations supplémentaires

Pour certains algorithmes, on aura besoin d’une opération supplémentairedans les files à priorité

Modifier_priorité (Noeud n, Priorité p)

Celle-ci n’est en fait pas plus difficile que celles déjà connues :I Si n devient plus prioritaire, on effectue une percolation vers le haut.I Si n devient moins prioritaire, on effectue une percolation vers le bas.

Enfin on verra en TD1 :I Tri_Par_Tas ( Tableau t )I Créer_tas ( Tableau t de taille n )

I Version naïve par n insertions successives en O(n log n)I Version efficace procédant des feuilles vers la racine en O(n)

20 / 32

Page 62: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’AlgorithmesStructure de tas

Opérations

Opérations supplémentaires

Pour certains algorithmes, on aura besoin d’une opération supplémentairedans les files à priorité

Modifier_priorité (Noeud n, Priorité p)

Celle-ci n’est en fait pas plus difficile que celles déjà connues :I Si n devient plus prioritaire, on effectue une percolation vers le haut.I Si n devient moins prioritaire, on effectue une percolation vers le bas.

Enfin on verra en TD1 :I Tri_Par_Tas ( Tableau t )I Créer_tas ( Tableau t de taille n )

I Version naïve par n insertions successives en O(n log n)I Version efficace procédant des feuilles vers la racine en O(n)

20 / 32

Page 63: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’AlgorithmesStructure de tas

Opérations

Opérations supplémentaires

Pour certains algorithmes, on aura besoin d’une opération supplémentairedans les files à priorité

Modifier_priorité (Noeud n, Priorité p)

Celle-ci n’est en fait pas plus difficile que celles déjà connues :I Si n devient plus prioritaire, on effectue une percolation vers le haut.I Si n devient moins prioritaire, on effectue une percolation vers le bas.

Enfin on verra en TD1 :I Tri_Par_Tas ( Tableau t )I Créer_tas ( Tableau t de taille n )

I Version naïve par n insertions successives en O(n log n)I Version efficace procédant des feuilles vers la racine en O(n)

20 / 32

Page 64: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’AlgorithmesDiviser pour Régner

Plan

Arbre partiellement ordonné, tasséArbre partiellement ordonnéArbre tassé

Structure de tasDéfinition et applicationsOpérations

Diviser pour Régner

21 / 32

Page 65: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’AlgorithmesDiviser pour Régner

Diviser pour Régner

Ceci est une (brève) introduction à la méthode Diviser pour Régner pourélaborer une solution algorithmique à un problème.

Vous étudierez au semestre 6 les propriétés générales des algorithmesconstruits sur ce principe, en particulier comment déterminer leurcomplexité.

Pour cette séance de cours, nous nous contenterons d’un exemple deproblème et d’un calcul de complexité « avec les mains » (mais quiressemble à ceux que vous généraliserez par la suite).

22 / 32

Page 66: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’AlgorithmesDiviser pour Régner

Diviser pour Régner

Ceci est une (brève) introduction à la méthode Diviser pour Régner pourélaborer une solution algorithmique à un problème.

Vous étudierez au semestre 6 les propriétés générales des algorithmesconstruits sur ce principe, en particulier comment déterminer leurcomplexité.

Pour cette séance de cours, nous nous contenterons d’un exemple deproblème et d’un calcul de complexité « avec les mains » (mais quiressemble à ceux que vous généraliserez par la suite).

22 / 32

Page 67: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’AlgorithmesDiviser pour Régner

Un exemple : le problème du sous-tableau maximalSoit un tableau T [1..n] d’entiers relatifs.On cherche deux indices i et j tels que la somme des entiers de T [i ..j]soit maximale.

1 2 3 4 5 6 7 8 9 10

20 5 -13 1 -34 21 6 -9 14 -36

Une visualisation possible : les sommes cumulées croissantes

1 2 3 4 5 6 7 8 9 10-30-20-100102030

23 / 32

Page 68: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’AlgorithmesDiviser pour Régner

Un exemple : le problème du sous-tableau maximalSoit un tableau T [1..n] d’entiers relatifs.On cherche deux indices i et j tels que la somme des entiers de T [i ..j]soit maximale.

1 2 3 4 5 6 7 8 9 10

20 5 -13 1 -34 21 6 -9 14 -36

Une visualisation possible : les sommes cumulées croissantes

1 2 3 4 5 6 7 8 9 10-30-20-100102030

23 / 32

Page 69: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’AlgorithmesDiviser pour Régner

Un exemple : le problème du sous-tableau maximalSoit un tableau T [1..n] d’entiers relatifs.On cherche deux indices i et j tels que la somme des entiers de T [i ..j]soit maximale.

1 2 3 4 5 6 7 8 9 10

20 5 -13 1 -34 21 6 -9 14 -36

Une visualisation possible : les sommes cumulées croissantes

1 2 3 4 5 6 7 8 9 10-30-20-100102030

23 / 32

Page 70: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’AlgorithmesDiviser pour Régner

Algorithme (très) naïfOn essaye tous les couples (i , j) et pour chacun on calcule la somme :max := T [1] // Initialisation avec T [1..1](imax , jmax) := (1, 1)for i := 1 to n

for j := i to ns := 0for k := i to j // Calcul de la somme de T [i ..j]

s := s + T [k]if s > max

max := s(imax , jmax) := (i , j)

return (max , imax , jmax)

Complexité :I On a trois « vraies » boucles imbriquées (i , j , k)I On peut démontrer que la complexité est en O(n3)

24 / 32

Page 71: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’AlgorithmesDiviser pour Régner

Algorithme (très) naïfOn essaye tous les couples (i , j) et pour chacun on calcule la somme :max := T [1] // Initialisation avec T [1..1](imax , jmax) := (1, 1)for i := 1 to n

for j := i to ns := 0for k := i to j // Calcul de la somme de T [i ..j]

s := s + T [k]if s > max

max := s(imax , jmax) := (i , j)

return (max , imax , jmax)Complexité :I On a trois « vraies » boucles imbriquées (i , j , k)I On peut démontrer que la complexité est en O(n3)

24 / 32

Page 72: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’AlgorithmesDiviser pour Régner

Comment améliorer cet algorithme naïf ?

Clairement, il faut éviter de recalculer la somme de T [i ..j] à partir de 0 àchaque fois :

max := T [1](imax , jmax) := (1, 1)for i := 1 to n

s := 0for j := i to n

s := s + T [j] // Mise à jour continue de s = T [i ..j]if s > max

max := s(imax , jmax) := (i , j)

return (max , imax , jmax)

Complexité :n∑

i=1

n∑j=i

1 = n(n+1)2 = O(n2)

25 / 32

Page 73: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’AlgorithmesDiviser pour Régner

Comment améliorer cet algorithme naïf ?

Clairement, il faut éviter de recalculer la somme de T [i ..j] à partir de 0 àchaque fois :

max := T [1](imax , jmax) := (1, 1)for i := 1 to n

s := 0for j := i to n

s := s + T [j] // Mise à jour continue de s = T [i ..j]if s > max

max := s(imax , jmax) := (i , j)

return (max , imax , jmax)

Complexité :n∑

i=1

n∑j=i

1 = n(n+1)2 = O(n2)

25 / 32

Page 74: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’AlgorithmesDiviser pour Régner

Comment améliorer cet algorithme naïf ?

Clairement, il faut éviter de recalculer la somme de T [i ..j] à partir de 0 àchaque fois :

max := T [1](imax , jmax) := (1, 1)for i := 1 to n

s := 0for j := i to n

s := s + T [j] // Mise à jour continue de s = T [i ..j]if s > max

max := s(imax , jmax) := (i , j)

return (max , imax , jmax)

Complexité :n∑

i=1

n∑j=i

1 = n(n+1)2 = O(n2)

25 / 32

Page 75: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’AlgorithmesDiviser pour Régner

Comment améliorer cet algorithme naïf ?

Clairement, il faut éviter de recalculer la somme de T [i ..j] à partir de 0 àchaque fois :

max := T [1](imax , jmax) := (1, 1)for i := 1 to n

s := 0for j := i to n

s := s + T [j] // Mise à jour continue de s = T [i ..j]if s > max

max := s(imax , jmax) := (i , j)

return (max , imax , jmax)

Complexité :n∑

i=1

n∑j=i

1 = n(n+1)2 = O(n2)

25 / 32

Page 76: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’AlgorithmesDiviser pour Régner

Peut-on faire encore mieux ?

Nicolas Machiavel, Le Prince : « Divide et impera », « Divise et règne »

Imaginons qu’on coupe le tableau en deux par le milieu : le sous-tableaumaximal est forcément dans un de ces trois cas

1 n/2 n

inclus dans la moitié gauche

inclus dans la moitié droite

à cheval sur les deux

26 / 32

Page 77: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’AlgorithmesDiviser pour Régner

Peut-on faire encore mieux ?

Nicolas Machiavel, Le Prince : « Divide et impera », « Divise et règne »

Imaginons qu’on coupe le tableau en deux par le milieu : le sous-tableaumaximal est forcément dans un de ces trois cas

1 n/2 n

inclus dans la moitié gauche

inclus dans la moitié droite

à cheval sur les deux

26 / 32

Page 78: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’AlgorithmesDiviser pour Régner

Peut-on faire encore mieux ?

Nicolas Machiavel, Le Prince : « Divide et impera », « Divise et règne »

Imaginons qu’on coupe le tableau en deux par le milieu : le sous-tableaumaximal est forcément dans un de ces trois cas

1 n/2 n

inclus dans la moitié gauche

inclus dans la moitié droite

à cheval sur les deux

26 / 32

Page 79: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’AlgorithmesDiviser pour Régner

Peut-on faire encore mieux ?

Nicolas Machiavel, Le Prince : « Divide et impera », « Divise et règne »

Imaginons qu’on coupe le tableau en deux par le milieu : le sous-tableaumaximal est forcément dans un de ces trois cas

1 n/2 n

inclus dans la moitié gauche

inclus dans la moitié droite

à cheval sur les deux

26 / 32

Page 80: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’AlgorithmesDiviser pour Régner

Peut-on faire encore mieux ?

Nicolas Machiavel, Le Prince : « Divide et impera », « Divise et règne »

Imaginons qu’on coupe le tableau en deux par le milieu : le sous-tableaumaximal est forcément dans un de ces trois cas

1 n/2 n

inclus dans la moitié gauche

inclus dans la moitié droite

à cheval sur les deux

26 / 32

Page 81: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’AlgorithmesDiviser pour Régner

Algorithme récursif

Pour les deux cas où le tableau recherché est dans une des deux moitiés,un simple appel récursif nous donnera directement la réponse :

SousTableauMax(g , d)if g = d // Cas de base

return (T [g ], g , g)else

milieu := (g + d) / 2(maxG , iG , jG) := SousTableauMax(g , milieu) // 2 appels(maxG , iD, jD) := SousTableauMax(milieu + 1, d) // récursifs

(maxCheval , iCheval , jCheval) := ChevalMax(g , d)

Choisir le meilleur résultat parmi les 3 précédents.

Il reste à coder la fonction ChevalMax, qui cherche un sous-tableaumaximal à cheval sur les deux moitiés.

27 / 32

Page 82: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’AlgorithmesDiviser pour Régner

Algorithme récursif

Pour les deux cas où le tableau recherché est dans une des deux moitiés,un simple appel récursif nous donnera directement la réponse :SousTableauMax(g , d)if g = d // Cas de base

return (T [g ], g , g)else

milieu := (g + d) / 2(maxG , iG , jG) := SousTableauMax(g , milieu) // 2 appels(maxG , iD, jD) := SousTableauMax(milieu + 1, d) // récursifs

(maxCheval , iCheval , jCheval) := ChevalMax(g , d)

Choisir le meilleur résultat parmi les 3 précédents.

Il reste à coder la fonction ChevalMax, qui cherche un sous-tableaumaximal à cheval sur les deux moitiés.

27 / 32

Page 83: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’AlgorithmesDiviser pour Régner

Algorithme récursif

Pour les deux cas où le tableau recherché est dans une des deux moitiés,un simple appel récursif nous donnera directement la réponse :SousTableauMax(g , d)if g = d // Cas de base

return (T [g ], g , g)else

milieu := (g + d) / 2(maxG , iG , jG) := SousTableauMax(g , milieu) // 2 appels(maxG , iD, jD) := SousTableauMax(milieu + 1, d) // récursifs

(maxCheval , iCheval , jCheval) := ChevalMax(g , d)

Choisir le meilleur résultat parmi les 3 précédents.

Il reste à coder la fonction ChevalMax, qui cherche un sous-tableaumaximal à cheval sur les deux moitiés.

27 / 32

Page 84: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’AlgorithmesDiviser pour Régner

Recherche d’un sous-tableau maximal « à cheval »

1 i n/2 j n

T [i ..j] contient forcément T [i ..n/2] et T [n/2..j] :on cherche séparement le meilleur i puis le meilleur j .

ChevalMax(g , d)milieu := (g + d) / 2s := T [milieu]maxG := simax := milieufor i := milieu − 1 downto g

s := s + T [i ]if s > maxG

maxG := simax := i

// Puis on fait pareil pour jmax entre milieu + 1 et d

28 / 32

Page 85: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’AlgorithmesDiviser pour Régner

Recherche d’un sous-tableau maximal « à cheval »

1 i n/2 j n

T [i ..j] contient forcément T [i ..n/2] et T [n/2..j] :on cherche séparement le meilleur i puis le meilleur j .ChevalMax(g , d)milieu := (g + d) / 2s := T [milieu]maxG := simax := milieufor i := milieu − 1 downto g

s := s + T [i ]if s > maxG

maxG := simax := i

// Puis on fait pareil pour jmax entre milieu + 1 et d 28 / 32

Page 86: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’AlgorithmesDiviser pour Régner

Complexité de l’algorithme récursif

I Complexité de ChevalMaxDeux boucles successives de milieu à g puis de milieu à ddonc une complexité en O(d − g) (taille du segment considéré)

I Complexité de SousTableauMaxNotons C(n) le coût de SousTableauMax sur un segment detaille n :

C(n) = 2C(n/2) + O(n) + O(1)

coût des appels récursifs

coût de ChevalMax

choix de la solution

Encore une équation récursive ! Voyons comment la résoudre...

29 / 32

Page 87: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’AlgorithmesDiviser pour Régner

Complexité de l’algorithme récursif

I Complexité de ChevalMaxDeux boucles successives de milieu à g puis de milieu à ddonc une complexité en O(d − g) (taille du segment considéré)

I Complexité de SousTableauMaxNotons C(n) le coût de SousTableauMax sur un segment detaille n :

C(n) = 2C(n/2) + O(n) + O(1)

coût des appels récursifs

coût de ChevalMax

choix de la solution

Encore une équation récursive ! Voyons comment la résoudre...

29 / 32

Page 88: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’AlgorithmesDiviser pour Régner

Complexité de l’algorithme récursif

I Complexité de ChevalMaxDeux boucles successives de milieu à g puis de milieu à ddonc une complexité en O(d − g) (taille du segment considéré)

I Complexité de SousTableauMaxNotons C(n) le coût de SousTableauMax sur un segment detaille n :

C(n) = 2C(n/2) + O(n) + O(1)

coût des appels récursifs

coût de ChevalMax

choix de la solution

Encore une équation récursive ! Voyons comment la résoudre...

29 / 32

Page 89: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’AlgorithmesDiviser pour Régner

Complexité de l’algorithme récursif

I Complexité de ChevalMaxDeux boucles successives de milieu à g puis de milieu à ddonc une complexité en O(d − g) (taille du segment considéré)

I Complexité de SousTableauMaxNotons C(n) le coût de SousTableauMax sur un segment detaille n :

C(n) = 2C(n/2) + O(n) + O(1)

coût des appels récursifs

coût de ChevalMax

choix de la solution

Encore une équation récursive ! Voyons comment la résoudre...

29 / 32

Page 90: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’AlgorithmesDiviser pour Régner

Complexité de l’algorithme récursif

I Complexité de ChevalMaxDeux boucles successives de milieu à g puis de milieu à ddonc une complexité en O(d − g) (taille du segment considéré)

I Complexité de SousTableauMaxNotons C(n) le coût de SousTableauMax sur un segment detaille n :

C(n) = 2C(n/2) + O(n) + O(1)

coût des appels récursifs

coût de ChevalMax

choix de la solution

Encore une équation récursive ! Voyons comment la résoudre...

29 / 32

Page 91: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’AlgorithmesDiviser pour Régner

Complexité de l’algorithme récursif

I Complexité de ChevalMaxDeux boucles successives de milieu à g puis de milieu à ddonc une complexité en O(d − g) (taille du segment considéré)

I Complexité de SousTableauMaxNotons C(n) le coût de SousTableauMax sur un segment detaille n :

C(n) = 2C(n/2) + O(n) + O(1)

coût des appels récursifs

coût de ChevalMax

choix de la solution

Encore une équation récursive ! Voyons comment la résoudre...

29 / 32

Page 92: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’AlgorithmesDiviser pour Régner

Résolution de l’équation de récurrenceIntuition : arbre des appels récursifs, avec la taille des sous-tableaux

n

n/2 n/2

n/4 n/4 n/4 n/4

1 1 1 1· · ·

D’où C(n) =O(n)

+O(n)

+O(n)...

+O(n)

C(n) = O(n log n).

I arbre de hauteur log2 nI chaque niveau coûte O(n) en tout

(pour tous les appels à ChevalMax sur des sous-tableaux demême taille)

30 / 32

Page 93: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’AlgorithmesDiviser pour Régner

Résolution de l’équation de récurrenceIntuition : arbre des appels récursifs, avec la taille des sous-tableaux

n

n/2 n/2

n/4 n/4 n/4 n/4

1 1 1 1· · ·

D’où C(n) =O(n)

+O(n)

+O(n)...

+O(n)

C(n) = O(n log n).

I arbre de hauteur log2 nI chaque niveau coûte O(n) en tout

(pour tous les appels à ChevalMax sur des sous-tableaux demême taille)

30 / 32

Page 94: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’AlgorithmesDiviser pour Régner

Résolution de l’équation de récurrenceIntuition : arbre des appels récursifs, avec la taille des sous-tableaux

n

n/2 n/2

n/4 n/4 n/4 n/4

1 1 1 1· · ·

D’où C(n) =O(n)

+O(n)

+O(n)...

+O(n)

C(n) = O(n log n).

I arbre de hauteur log2 nI chaque niveau coûte O(n) en tout

(pour tous les appels à ChevalMax sur des sous-tableaux demême taille)

30 / 32

Page 95: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’AlgorithmesDiviser pour Régner

Résolution de l’équation de récurrenceIntuition : arbre des appels récursifs, avec la taille des sous-tableaux

n

n/2 n/2

n/4 n/4 n/4 n/4

1 1 1 1· · ·

D’où C(n) =O(n)

+O(n)

+O(n)...

+O(n) C(n) = O(n log n).

I arbre de hauteur log2 nI chaque niveau coûte O(n) en tout

(pour tous les appels à ChevalMax sur des sous-tableaux demême taille)

30 / 32

Page 96: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’AlgorithmesDiviser pour Régner

Quand divise-t-on pour régner ?

On peut parler de diviser pour régner si :I le problème initial est découpé en parties de

taille équivalente ;I chaque partie peut être résolue récursivement ;I la solution globale peut être reconstruite à

partir de la solution de chaque partie. John von Neumann(1903-1957)

Par exemple, ces algorithmes relèvent-ils du Diviser pour Régner ?I tri rapide non, parties inégales (cf tri par fusion au semestre 6)I drapeau hollandais non, pas récursifI recherche dichotomique ouiI fonctions sur un ABR seulement s’il est équilibréI vérification du parenthésage non, pas d’indépendance des partiesI insertion dans un tas non

31 / 32

Page 97: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’AlgorithmesDiviser pour Régner

Quand divise-t-on pour régner ?

On peut parler de diviser pour régner si :I le problème initial est découpé en parties de

taille équivalente ;I chaque partie peut être résolue récursivement ;I la solution globale peut être reconstruite à

partir de la solution de chaque partie. John von Neumann(1903-1957)

Par exemple, ces algorithmes relèvent-ils du Diviser pour Régner ?I tri rapide

non, parties inégales (cf tri par fusion au semestre 6)I drapeau hollandais non, pas récursifI recherche dichotomique ouiI fonctions sur un ABR seulement s’il est équilibréI vérification du parenthésage non, pas d’indépendance des partiesI insertion dans un tas non

31 / 32

Page 98: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’AlgorithmesDiviser pour Régner

Quand divise-t-on pour régner ?

On peut parler de diviser pour régner si :I le problème initial est découpé en parties de

taille équivalente ;I chaque partie peut être résolue récursivement ;I la solution globale peut être reconstruite à

partir de la solution de chaque partie. John von Neumann(1903-1957)

Par exemple, ces algorithmes relèvent-ils du Diviser pour Régner ?I tri rapide non, parties inégales (cf tri par fusion au semestre 6)I drapeau hollandais

non, pas récursifI recherche dichotomique ouiI fonctions sur un ABR seulement s’il est équilibréI vérification du parenthésage non, pas d’indépendance des partiesI insertion dans un tas non

31 / 32

Page 99: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’AlgorithmesDiviser pour Régner

Quand divise-t-on pour régner ?

On peut parler de diviser pour régner si :I le problème initial est découpé en parties de

taille équivalente ;I chaque partie peut être résolue récursivement ;I la solution globale peut être reconstruite à

partir de la solution de chaque partie. John von Neumann(1903-1957)

Par exemple, ces algorithmes relèvent-ils du Diviser pour Régner ?I tri rapide non, parties inégales (cf tri par fusion au semestre 6)I drapeau hollandais non, pas récursifI recherche dichotomique

ouiI fonctions sur un ABR seulement s’il est équilibréI vérification du parenthésage non, pas d’indépendance des partiesI insertion dans un tas non

31 / 32

Page 100: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’AlgorithmesDiviser pour Régner

Quand divise-t-on pour régner ?

On peut parler de diviser pour régner si :I le problème initial est découpé en parties de

taille équivalente ;I chaque partie peut être résolue récursivement ;I la solution globale peut être reconstruite à

partir de la solution de chaque partie. John von Neumann(1903-1957)

Par exemple, ces algorithmes relèvent-ils du Diviser pour Régner ?I tri rapide non, parties inégales (cf tri par fusion au semestre 6)I drapeau hollandais non, pas récursifI recherche dichotomique ouiI fonctions sur un ABR

seulement s’il est équilibréI vérification du parenthésage non, pas d’indépendance des partiesI insertion dans un tas non

31 / 32

Page 101: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’AlgorithmesDiviser pour Régner

Quand divise-t-on pour régner ?

On peut parler de diviser pour régner si :I le problème initial est découpé en parties de

taille équivalente ;I chaque partie peut être résolue récursivement ;I la solution globale peut être reconstruite à

partir de la solution de chaque partie. John von Neumann(1903-1957)

Par exemple, ces algorithmes relèvent-ils du Diviser pour Régner ?I tri rapide non, parties inégales (cf tri par fusion au semestre 6)I drapeau hollandais non, pas récursifI recherche dichotomique ouiI fonctions sur un ABR seulement s’il est équilibréI vérification du parenthésage

non, pas d’indépendance des partiesI insertion dans un tas non

31 / 32

Page 102: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’AlgorithmesDiviser pour Régner

Quand divise-t-on pour régner ?

On peut parler de diviser pour régner si :I le problème initial est découpé en parties de

taille équivalente ;I chaque partie peut être résolue récursivement ;I la solution globale peut être reconstruite à

partir de la solution de chaque partie. John von Neumann(1903-1957)

Par exemple, ces algorithmes relèvent-ils du Diviser pour Régner ?I tri rapide non, parties inégales (cf tri par fusion au semestre 6)I drapeau hollandais non, pas récursifI recherche dichotomique ouiI fonctions sur un ABR seulement s’il est équilibréI vérification du parenthésage non, pas d’indépendance des partiesI insertion dans un tas

non

31 / 32

Page 103: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’AlgorithmesDiviser pour Régner

Quand divise-t-on pour régner ?

On peut parler de diviser pour régner si :I le problème initial est découpé en parties de

taille équivalente ;I chaque partie peut être résolue récursivement ;I la solution globale peut être reconstruite à

partir de la solution de chaque partie. John von Neumann(1903-1957)

Par exemple, ces algorithmes relèvent-ils du Diviser pour Régner ?I tri rapide non, parties inégales (cf tri par fusion au semestre 6)I drapeau hollandais non, pas récursifI recherche dichotomique ouiI fonctions sur un ABR seulement s’il est équilibréI vérification du parenthésage non, pas d’indépendance des partiesI insertion dans un tas non

31 / 32

Page 104: Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 ... · Algorithmique et Analyse d'Algorithmes - L3 Info Cours 9 : Arbres partiellement ordonnés [4mm] Diviser pour régner

Algorithmique et Analyse d’AlgorithmesDiviser pour Régner

En résumé

Aujourd’hui

I Pour accéder rapidement au maximum d’un ensemble, il suffit demaintenir une structure partiellement ordonnée.

I La structure de tas convient et elle permettra de réaliser une File àPriorités efficace.

I La stratégie diviser pour régner permet d’accélérer certainsalgorithmes à condition de pouvoir traiter récursivement unefraction des données.

La prochaine fois

I Problèmes d’optimisationI Algorithmes gloutonsI Algorithmique de graphes et problèmes de coloration

32 / 32