Algorithmique Cristina Sirangelo, ENS-Cachan Préparation à l'option Informatique de l'agrégation de mathématiques
Plan 1. Analyse et compleité des algorithmes (S.Haddad) 2. Types abstraits et structures de données (suite) 3. Algorithmes de tri 4. Techniques classiques de conception d algorithmes 5. Algorithmes de graphes
Types abstraits et structures de données Les algorithmes opèrent sur des données (données en input, données auiliaires) Aspect central de l algorithmique: représentation et manipulation des données Deu niveau de représentation: niveau abstrait ou logique (type abstrait de données) implémentation (structure de données) Séparation des deu niveau : modularité et interface utiliser un objet ou une fonctionnalité par son interface abstraite, indépendamment des détails de son implémentation Type abstrait un ensemble d objets des opérations qui les manipulent Structure de données Représentation concrète des objets décrits par le type abstrait dans la mémoire d un ordinateur Implémentation des opérations sur cette représentation Représentation des données: en terme de types élémentaires et d autres types abstraits (hiérarchie de types)
Types abstraits et structures de données Piles Files Listes Arbres Graphes Dictionnaires Arbres binaires de recherche, tables de hachage,... Files de priorité etc
Dictionnaires et algorithmes de recherche Dictionnaire: un type abstrait de données qui permet de représenter et manipuler des ensembles (typiquement ordonnés). Principales opérations: recherche d un élément, insertion et suppression D autres opérations typiques: fusion, scission Éléments de l ensemble accessibles par un champ clef (identifiant) sur un domaine totalement ordonné D autres informations associées à chaque élément: schématisées par un seul autre champ valeur, qui peut être d un type complee.
Dictionnaires Implémentations possibles par Tableau (non-trié et trié) par Liste (non-trié et trié) par Table de Hachage par Arbre Binaire de Recherche : compleité des opérations de recherche/insertion/suppression: O(log n) cas moyen O(n) cas pire - dû au possible déséquilibre dans l arbre (cas pire: arbre dégénéré en une liste) Arbres de recherche équilibrés: arbres de recherche qui respectent des propriétés d'équilibre entre la hauteur des sous-arbres d un noeud (évitent que l arbre dégénère en une liste) la hauteur reste logarithmique dans le nombre de noeuds compleité de la recherche/insertion/suppression: O(log n) dans le cas pire les opérations de mise à jour (insertion/suppression) doivent maintenir la propriété d'équilibre
Arbres de recherche équilibrés Arbres AVL (Adelson-Velskii et Landis) Arbres a-b Arbres rouge-noir (ou bicolores)
Rotations Rappel: Soit Tclef un domaine totalement ordonné, et Tval un type pour les valeurs: Rotations: Arbre binaire de recherche (ABR) sur (Tclef, Tval): un arbre binaire sur un domaine (Tclef, Tval) tel que pour tout sommet clefs dans le sous-arbre gauche de <. clef < clefs dans le sous-arbre droit de des opérations de réorganisation locale des noeuds d un ABR, qui préservent la propriété d ABR briques de base pour les opérations de rééquilibrage dans les ABR équilibrés
Rotations rotation gauche y y A rotation droite C B C A B
Rotations rotation gauche-droite z y y z D A A B C D B C y rotation droite-gauche z y A z D A B C D B C Toutes les opérations de rotation sur les arbre binaires peuvent être réalisées en temps O(1)
Arbres AVL (Adelson-Velskii et Landis) Pour un arbre binaire A et un sommet de A : A() : sous-arbre de A de racine Ag () : sous arbre gauche de A() Ad () : sous-arbre droit de A() Equilibre de : δ () = hauteur( Ag() ) - hauteur( Ad() ) ( par convention la hauteur d un arbre vide est -1 ) Arbre AVL: ABR tel que, pour tout sommet de l arbre δ() { -1, 0, 1 } Proposition Soit A un arbre AVL ayant n sommets et de hauteur h, alors: log2 (n+1) h+ 1 1,44 log2 (n+2)
Hauteur d un arbre AVL Preuve. 1) L arbre binaire de hauteur h ayant plus de sommets est l arbre complet #sommets de l arbre complet: 1 + 2 +...+ 2 h = 2 h+1-1 n 2 h+1-1 h+ 1 log2 (n+1) 2) L arbre AVL de hauteur h ayant le nombre minimum de sommets (arbre de Fibonacci): h= -1: arbre vide h= 0 : arbre composé de la seule racine h 1: arbre composé d une racine, un sous arbre de hauteur h-1 ayant un minimum de sommets, et un sous arbre de hauteur h-2 ayant un minimum de sommets N(h): nombre minimum de sommets d un arbre AVL de hauteur h N(-1) = 0, N(0) = 1, N(h) = 1 + N(h-1) + N(h-2) pour h 1 ( N(1) = 2 ) On pose F(h) = N(h) +1 F(0) =2, F(1) =3 F(h) = F(h-1) +F(h-2) pour h 2
Hauteur d un arbre AVL F(0) =2, F(1) =3 F(h) = F(h-1) +F(h-2) pour h 2 F(h) est le nombre de Fibonacci d indice h+ 3, pour tout h 0 F(h)= 1 ( p h+3 - q h+3 ) 1+ 5 > 1 p = q = 5 5 ph+3-1 2 1-5 2 q h+3 < 1 n N(h) = F(h) -1 n+1 > 1 5 ph+3-1 h+ 3 < log p (n+2) + log p 5 (1/ log2 p) log 2 (n+2) + 2 =1, 44 log 2 (n+2) + 2 h+ 1 < 1, 44 log 2 (n+2)
Opérations de dictionnaire sur les arbres AVL Recherche: algorithme habituel de recherche dans un ABR Compleité O(h), et par la proposition ci-dessus: La recherche d une clef dans un arbre AVL se fait en temps O(log n) dans le cas pire Insertion/ Suppression: algorithme habituel plus rééquilibrage Pour plus d efficacité: dans chaque sommet on stocke h(a())
Insertion dans un arbre AVL Deu phases: 1) descente de l arbre (comme dans les ABR), création d une nouvelle feuille (clef, valeur) s 2) rééquilibrage de l arbre A: l arbre avant insertion A : l arbre après insertion δ: l'équilibre avant insertion δ : l'équilibre après insertion
Insertion dans un arbre AVL Rééquilibrage de A u γ Remonter le chemin γ entre la nouvelle feuille s et la racine. Pour chaque sommet v de γ: calculer (et stocker) la nouvelle profondeur du sous-arbre A(v) (au plus +1) vérifier les conditions AVL pour A(v) s : le premier sommet de γ (de s vers la racine) tel que A() n est pas AVL ( δ () =2 ) u: le fils de dans γ (supposer u fils gauche, le cas u fils droit est symétrique) (u est dans A)
Propriétés de A (arbre avant l insertion) et γ Lemme Insertion dans un arbre AVL 1) Pour tous descendant v de sur le chemin γ ( eclus): δ(v)=0 2) Pour : δ() =1 A v γ Preuve: Soit P le sous arbre plus profond de v dans A et S l autre sous-arbre l insertion de la nouvelle feuille s (au bout de γ) se fait dans P (sinon h(a (v)) =h(a(v)) et donc δ() = δ () ) Donc δ (v) = δ(v) +1 Si δ(v) 0 alors δ (v) >1 contradiction (parce que A (v) est AVL ) Pour : δ() =1 et s est inséré dans le sous-arbre les plus profond de (sinon A () serait AVL ) L insertion se fait dans Ag() par hypothèse δ() =1
Rééquilibrage de A, deu cas 1) s inséré dans le sous-arbre gauche de u Insertion dans un arbre AVL A: u A u h h h s A : u rééquilibrage : rotation droite u équilibre rétabli h(a (u)) =h(a()) h h h+1 h h h+1
Rééquilibrage de A, deu cas 2) s inséré dans le sous-arbre droit de u Insertion dans un arbre AVL A: u y h A u h h-1 h-1 s A : u y h rééquilibrage : rotation gauche-droite u y y peut être éventuellement le nouveau noeud inséré équilibre rétabli h(a (y)) =h(a()) h h-1 h h-1 h h h
Compleité de l insertion : O(log n) Insertion dans un arbre AVL Phase de descente: O(log n) Phase de rééquilibrage O(log n): on remonte au pire jusqu'à la racine ensuite une opération de rééquilibrage (O(1))
Suppression dans un arbre AVL Deu phases: 1) suppression d une feuille s (algorithme de suppression ABR modifié): descente de l arbre pour trouver le sommet contenant la clef à supprimer si est une feuille il est supprimé sinon remplacer le contenu de avec le noeud y contenant le maimum de Ag() ou le minimum de Ad() supprimer y récursivement X s 2) rééquilibrage de l arbre A: l arbre avant suppression A : l arbre après suppression δ: l'équilibre avant suppression δ : l'équilibre après suppression
Suppression dans un arbre AVL Rééquilibrage de A A γ Remonter le chemin γ entre le père de s et la racine. Pour chaque sommet v de γ: X s calculer (et stocker) la nouvelle profondeur du sous-arbre A(v) vérifier les conditions AVL pour A(v) : le premier sommet de γ (de s vers la racine) tel que A() n est pas AVL ( δ () =2 ) supposons s dans le sous-arbre droit de (l'autre cas est symétrique)
Suppression dans un arbre AVL Dans A : plus précisément: u h+2 h AVL h+2 h AVL Deu cas: 1) Le sous-arbre gauche de u à hauteur h+1 u rééquilibrage : rotation droite u h h+1 h ou h+1 h+1 h ou h+1 h Si h+1: équilibre rétabli ( h(a (u)) = h(a()) ) Sinon h(a (u)) = h(a())-1
2) Le sous-arbre gauche de u à hauteur h Suppression dans un arbre AVL rééquilibrage : rotation gauche-droite y u y h u h(a (y)) = h(a())-1 h h-1 ou h h h-1 h ou h h h Si après une étape de rééquilibrage l'équilibre n est pas rétabli, répéter le rééquilibrage sur le noeud père, et ainsi de suite, au pire jusqu à la racine
Suppression dans un arbre AVL Compleité de la suppression : O(log n) Phase de descente: O(log n) Phase de rééquilibrage: O(log n) on remonte jusqu'à un noeud de hauteur h en suite O(h-h ) rééquilibrages au pire
Arbres a-b Pour a 2, b 2a -1 Un arbre a-b sur (Tclef, Tval) est un arbre A tel que: 1) les feuilles de A ont toutes la même profondeur et contiennent des couples (clef, val) 2) chaque noeud interne de A a: - un nombre d() de sous-arbres a d() b, dénotés Ai() ( i=1..d() ) - une suite de d()-1 clefs (dites balises) K1,..., Kd()-1 telles que pour tout i clefs dans Ai() Ki < clefs dans Ai+1() 3) à la racine la contrainte sur d() est moins forte: 2 d() b 8 1 3 6 9 10 Un arbre 3-5 1, v1 2, v2 5, v3 7, v4 9, v5 10, v6 11, v7
Relation entre la hauteur et la taille Proposition Soit A un arbre a-b avec n feuilles et de hauteur h, alors log n / log b h 1 + log (n/2) / log a Preuve: n b h parce que chaque noeud interne a au plus b fils n 2 a h-1 parce que la racine a au moins 2 fils et les autres noeuds internes ont au moins a fils
Recherche dans les arbres a-b Recherche d une clef c dans A: descente dans la profondeur de l arbre racine de A Tant que le sommet courant n est pas une feuille trouver i tel que Ki-1 c Ki (parcours linéaire des balises de ) racine de Ai() ( i=1 si c K1 i=d() si c > Kd()-1) Ki-1 Ki c, v A Ai() Compleité: O(hauteur) O(log n) dans le cas pire ( Le parcours linéaire d un noeud interne se fait en temps O(1) )
Insertion dans les arbres a-b Insertion de (c,v) (c n apparaît pas dans l arbre) Première phase: descente dans la profondeur de l arbre guidée par les balises (recherche de c) soit ci la clef trouvé à la place de c Insertion de (c, v) comme nouvelle feuille: Deu cas c < ci Ki-1 Ki Ki-1 c Ki ci, vi c, v ci, vi c > ci Ki-1 Ki Ki-1 ci Ki ci, vi ci, vi c, v
Deuième phase (rééquilibrage) Insertion dans les arbres a-b Si la contrainte d() b est violée sur un noeud après la première phase: éclater Règle d'éclatement (équilibré) d un noeud interne avec d() fils b+1 d() 2b y K K d() / 2 d() / 2 a d() / 2 d() / 2 b (si est la racine une nouvelle racine contenant uniquement la clef K est créée) Observation: d() b+1 2 a les deu nouveau noeuds sont a-b Apres l éclatement de : le père y de peut avoir b+1 fils: répéter l'éclatement sur y et ainsi de suite (au pire) jusqu à la racine
Insertion dans les arbres a-b Compleité: Première phase: O(log n) Deuième phase : O(log n) - chaque opération d'éclatement se fait en temps O(1) L insertion dans un arbre a-b à n éléments (feuilles) se fait en temps O(log n) dans le cas pire
Suppression dans les arbres a-b Première phase: Recherche de la feuille y qui contient la clef c (descente dans la profondeur de l arbre) Suppression de y et de la balise correspondante c, v y c, v y Apres la suppression de la feuille, le père peut avoir un nombre insuffisant de fils
Suppression dans les arbres a-b Deuième phase (rééquilibrage): Si le noeud interne a un nombre insuffisant de fils, Trois cas: 1) est la racine (et a un seul fils) supprimer et le remplacer par son fils Sinon a un père, a-1 fils et au moins un frère
Suppression dans les arbres a-b Deuième phase (rééquilibrage): Si le noeud interne a un nombre insuffisant de fils, Trois cas: 2) a un frère (gauche ou droit) z qui a plus que a fils: partage entre et son frère Règle de partage entre deu noeuds frères: a-1 d() < b a < d(z) b K z K < b > a b a a-1 b a b L arbre est a-b après le partage
Suppression dans les arbres a-b Deuième phase (rééquilibrage): Si le noeud interne a un nombre insuffisant de fils, Trois cas: 3) tous les frères de ont a fils: fusion entre et son frère gauche ou droit Règle de fusion entre deu noeuds frères: a d()+d(z) b K y z K a a + b b En particulier a-1 + a b Le noeud y peut ne pas être a-b, après la fusion Répéter le rééquilibrage sur le noeud y et ainsi de suite (au pire) jusqu à la racine
Suppression dans les arbres a-b Compleité: Première phase: O(log n) Deuième phase : O(log n) - chaque opération de partage ou fusion se fait en temps O(1) La suppression dans un arbre a-b à n éléments (feuilles) se fait en temps O(log n) dans le cas pire
Concaténation et scission dans les arbres a-b Rappel: Type abstrait dictionnaire: un dictionnaire est un ensemble de couples (clef, valeur) Opérations typiques dans un dictionnaire: FUSIONNER ( Dictionnaire D1, Dictionnaire D2 ): Dictionnaire; Retourne D1 D2 SCINDER ( Dictionnaire D, Tclef c ): ( Dictionnaire, Dictionnaire) ; Retourne (D1, D2) où D1 = { (c,v) D c c } et D2=D \ D1 CONCATENER: Cas particulier de fusion, pre-condition: ma(d1) < min(d2) Concaténation et scission peuvent être implémentés efficacement (O(log n)) dans les arbres a-b
Concaténation de deu arbres a-b On suppose d abord avoir une clef ma(d1) c < min(d2) et on implémente la fonction suivante: pre-conditions: A1, A2 sont deu arbres a-b qui représentent les dictionnaires D1 et D2, respectivement ma(d1) c < min(d2) CONCATENER ( Arbre A1, Tclef c, Arbre A2 ): Arbre; Retourne un arbre a-b qui représente D1 D2 Compleité de l'implémentation: O( 1+ h1 -h2 ) où hi est la hauteur de Ai, i=1,2
Concaténation de deu arbres a-b CONCATENER ( Arbre A1, Tclef c, Arbre A2 ): Arbre; Supposer h1 h2 Première phase: O(1+ h1-h2 ) Descendre la branche la plus à droite de A1, jusqu'au noeud dont le sous arbre a hauteur h2 A1 h1 h2 (si h2 est 0 : cas particulier) h2 A2 Fusionner avec la racine de A2, en utilisant la clef c (Remarquer que clefs de A() c < clefs de A2) h1 c h2 d( ) 2b
Concaténation de deu arbres a-b CONCATENER ( Arbre A1, Tclef c, Arbre A2 ): Arbre; Supposer h1 h2 Deuième phase: O(1+ h1-h2 ) h1 c h2 Si d( ) > b éclatement équilibré de ( possible parce que b+1 d( ) 2b ) ; en suite, si nécessaire, éclatement des ancêtres de (au pire) jusqu à la racine
Concaténation de deu arbres a-b pre-conditions: A1, A2 sont deu arbres a-b qui représentent les dictionnaires D1 et D2, respectivement ma(d1) < min(d2) CONCATENER ( Arbre A1, Arbre A2 ): Arbre; Retourne un arbre a-b qui représente D1 D2 Implementation: trouver c = clef maimale dans A1 O(1+h1) retourner CONCATENER ( A1, c, A2 ); O( 1 + h1-h2 ) Compleité de la concaténation : O( ma (h1, h2) ) O( log(ma( D1, D2 )) )
Scission d un arbre a-b Pre-conditions: A est un arbre a-b qui représente le dictionnaire D La clef c apparaît dans D SCINDER ( Arbre A, Tclef c ): ( Arbre, Arbre) ; Retourne un couple d arbres a-b qui représentent les dictionnaires D1 = { (c,v) D c c } et D2=D \ D1
Scission d un arbre a-b Soit π le chemin de la racine de A à la feuille contenant la clef de scission c A g1 d1 g2 d2 d3 g3 c, v
Scission d un arbre a-b Soit π le chemin de la racine de A à la feuille contenant la clef de scission c A g1 d1 g2 d2 d3 g3 c, v Les arbres à gauche de π contiennent les clefs c Les arbres à droite de π contiennent les clefs > c
Scission d un arbre a-b Soit π le chemin de la racine de A à la feuille contenant la clef de scission c G1 g1 d1 D1 G2 g2 d2 D2 d3 D3 G3 g3 G4 c, v Gi, i h(a)+1 Di, i h(a) Chaque Gi, Di est un arbre a-b (sauf peut-être à la racine) clefs de Di+1 di clefs Di (parce que Di+1 est dans le sous-arbre gauche de di ) clefs de Gi gi clefs Gi+1 (parce que Gi+1 est dans le sous-arbre droit de gi )
Scission d un arbre a-b clefs de Gi gi clefs Gi+1 clefs de Di+1 di clefs Di G1 g1 d1 D1 G2 g2 d2 D2 d3 D3 G3 g3 G4 c, v CONCATENER (G3, g3, G4) G3 CONCATENER (D3, d2, D2) D2 CONCATENER (G2, g2, G3 ) G2 CONCATENER (D2, d1, D1) D1 CONCATENER (G1, g1, G2 ) G1 si la racine de G1 (ou D1 ) a un seul fils, la supprimer retourner (G1, D1 )
Scission d un arbre a-b G1 D1 G2 D2 D3 G3 G4 c, v CONCATENER (G3, g3, G4) G3 O(1+ h(g3) -h(g4) ) CONCATENER (G2, g2, G3 ) G2 O(1+ h(g2) -h(g3 ) ) CONCATENER (G1, g1, G2 ) G1 O(1+ h(g1) -h(g2 ) ) O(h(A)) ( h(gi ) = h(gi) ou h(gi ) = h(gi)+1, par récurrence )
Scission d un arbre a-b Pre-conditions: A est un arbre a-b qui représente le dictionnaire D La clef c apparait dans D SCINDER ( Arbre A, Tclef c ): ( Arbre, Arbre) ; Retourne un couple d arbres a-b qui représentent les dictionnaires D1 = { (c,v) D c c } et D2=D \ D1 Compleité de la scission : O( h(a) ) O( log D )
Coût amorti des arbres a-b Coût d une insertion/suppression: O(h + r) Où h = hauteur de l arbre a-b (phase de descente) r h : nombre d'étapes de rééquilibrage (éclatement/partage/fusion) Soit s une suite de n opérations d insertion et suppression dans un arbre a-b P(s): nombre totale de partages effectués dans la suite s d opérations E(s): nombre totale de éclatements effectués dans la suite s d opérations F(s): nombre totale de fusions effectués dans la suite s d opérations Coût amorti de rééquilibrage pour s : P(s)+E(s)+F(s) n
Coût amorti des arbres 2-4 Proposition Sur un suite s quelconque de n opérations d insertion et suppression dans un arbre 2-4 initialement vide, le coût amorti de rééquilibrage est constant. Plus précisément, soit i le nombre d insertions et d le nombre de suppressions dans s, alors P(s) d E(s)+F(s) n + (i-d-1) / 2 Par conséquent P(s)+E(s)+F(s) n 3 2 Preuve: Eercice
B-arbres Quand b=2a -1, un arbre a-b est appelé B-arbre d ordre a-1 (ordre = nombre de clefs dans un noeud) B-arbres: Utilisées pour la recherche de clefs en mémoire secondaire (indees sur les bases de données) Un noeud interne = une bloc du disque Mesure de compleité: nombre d accès au disque Informations associées a chaque clef (le champ val) : pointeur au données sur disque Compleité de la recherche/modification: O(log n) où n est le nombre de blocs
Arbres rouge-noir [Guibas-Sedgewick] Un arbre rouge-noir est un arbre binaire de recherche complet A sur un domaine (Tclef, Tval) avec une fonction c qui associe à chaque sommet de A une couleur {rouge, noir} tels que: 1) seules les noeuds internes (i.e. non-feuille) de A contiennent des couples (clef, valeur) 2) la fonction c satisfait les propriétés suivantes: a) le feuilles sont noires b) la racine est noire c) le père d un sommet rouge est noir d) tous les chemins d un même sommet vers les feuilles ont le même nombre de sommets noirs - ce nombre ( eclu) est appelé rang de
Un arbre rouge-noir et sa fonction de rang: Arbres rouge-noir - Eemple 6 2 2 4 8 1 1 1 2 3 5 1 1 7 0 0 0 0 0 0 0 0 (par clarté seulement les clefs, et pas le valeurs, sont représentés)
Relation entre la hauteur et la taille Proposition Si A est un arbre-rouge noir ayant n (n>0) sommets et hauteur h, alors log n h 2 log n Preuve 1) Borne inférieure: clairement n 1+2+..+2 h bin(n) = log n +1 h+1 2) Borne supérieure: On montre que pour chaque sommet de A de hauteur h(), de rang k et dont le sous-arbre a n() sommets: h() 2k et 2 k n() De plus, si est rouge, les inégalités sont strictes. Preuve par récurrence sur h(). Vrai si est une feuille ( est noir; h()=0; k=0; n()=1 ).
Relation entre la hauteur et la taille Preuve (suite). On montre que pour chaque sommet de A de hauteur h(), de rang k et dont le sous-arbre a n() sommets: h() 2k et 2 k n() De plus, si est rouge, les inégalités sont strictes. Si n est pas une feuille, 3 cas: a deu fils rouges a deu fils noirs a un fils rouge et un fils noir k k k k y z k k-1 y z k-1 k y z k-1 L'énoncé pour suit facilement en utilisant l'hypothèse de récurrence sur y et z
Insertion d un couple (c, v) Insertion dans les arbres rouge-noir Première phase: descente dans la profondeur de l arbre, guidée par les clefs dans les noeuds internes. Arrivé sur une feuille, la remplacer par un noeud rouge ayant deu feuilles noires: 8 8 4 4 5 5 c Après insertion, tous les noeuds satisfont les propriétés rouge-noir sauf peut-être où les règles b) et c) peuvent être violés: - si est la racine, la racine n est pas noire - si le père de est rouge, le père d un noeud rouge n est pas noir
Insertion dans les arbres rouge-noir Deuième phase (rééquilibrage) Soit le noeud courant - est rouge et viole au plus b) et c) ; - est le seul noeud de l arbre qui ne satisfait pas les conditions rouge-noir, est la racine colorer noir l arbre devient rouge-noir n est pas la racine et a un père y rouge y a un père z et z est noir. Deu cas: 1) L autre fils de z est rouge z z y y Dans le cas 1) z devient le nouveau noeud courant
2) L autre fils de z est noir Insertion dans les arbres rouge-noir k+1 z k+1 y et t éloignés k+1 y k t rotation simple + recoloriage k+1 z k+1 k+1 w k+1 noeuds noirs, y compris w w t k k+1 z k+1 et t proches k+1 y k t rotation double y k+1 z k+1 + recoloriage k+1 t k Dans les cas 2) après les rotations l arbre est rouge-noir
Phase de rééquilibrage: Insertion dans les arbres rouge-noir Réitérer le rééquilibrage du noeud courant au pire jusqu à la racine (jusqu à l application d une règle d'arrêt) Compleité O(log n) (chaque étape de rééquilibrage se fait en O(1) ) Compleité de l insertion: O(log n)
Suppression dans les arbres rouge-noir Première phase: descente dans la profondeur de l arbre (recherche du noeud de clef c) et suppression de : 1) un fils de est une feuille, soit y l autre fils - rouge : 1 ( y noir) y équilibre rétabli - noir et y rouge: 1 y équilibre rétabli y - noir et y noir: 1 + feuille dégradée y
2) a deu fils non-feuille Suppression dans les arbres rouge-noir c m m y m y Remplacer le contenu de avec le contenu de y (le maimum du sous-arbre gauche) Supprimer y avec l algorithme du cas 1) Compleité de la première phase O(log n)
Suppression dans les arbres rouge-noir Deuième phase: élimination du sommet dégradé Propriétés d un sommet dégradé: Le sous-arbre enraciné dans un sommet dégradé est rouge-noir (quand le sommet dégradé est vu comme un noeud noir habituel) Un arbre rouge-noir avec un sommet noir dégradé satisfait toutes les conditions d un arbre rouge-noir si le sommet dégradé est vu comme un noeud noir, mais compte comme 2 dans le calcul du nombre de noeuds noirs sur les chemins rang dans un arbre avec un sommet dégradé: le sommet dégradé compte comme 2
Suppression dans les arbres rouge-noir Deuième phase: élimination du sommet dégradé Soit le sommet dégradé courant. Cas possibles: - a un frère noir z z a deu fils (sinon la règle sur les rangs n est pas satisfaite dans le père de : ) - z a deu fils noirs - z a un fils rouge + z - a un frère rouge - est la racine
Soit le sommet dégradé courant. Suppression dans les arbres rouge-noir - a un frère noir z et z a deu fils noirs père noir y + k+2 y k+1 y degradé + z k k+1 z k k+1 père rouge y k+2 y k+1 équilibre rétabli + z k k+1 z k k+1
Suppression dans les arbres rouge-noir Soit le sommet dégradé courant. - a un frère noir z et z a un fils rouge rotation simple y k+2 z k+2 et t éloignés + k z k+1 y k+1 t k+1 t k+1 k équilibre rétabli et t proches + k y k+2 z k+1 rotation double y k+1 t k+2 z k+1 k+1 t u k u k équilibre rétabli
Soit le sommet dégradé courant. Suppression dans les arbres rouge-noir - a un frère rouge y k+2 rotation simple z k+2 + k z k+2 y k+2 + k est dégradé, mais une seule autre étape de rééquilibrage suffit pour rétablir l'équilibre (toutes les règles telles que le père de est rouge rentabilisent l'équilibre) - est la racine + équilibre rétabli
Suppression dans les arbres rouge-noir La suppression peut introduire une feuille dégradée chaque étape de rééquilibrage: - augmente de 1 la hauteur du noeud dégradé ou - rétabli l'équilibre au pire à l'étape suivante; - quand le noeud dégradé est la racine, l'équilibre est rétabli Au plus h+1 étapes de rééquilibrage Compleité du rééquilibrage: O(log n) Compleité de la suppression: O(log n)
1) A.V. Aho, J.E. Hopcroft, J.D. Ullmann. Data Structures and Algorithms. Addison-Wesley. Bibliographie 2) Danièle Beauquier, Jean Berstel, Philippe Chrétienne. Éléments d Algorithmique. Masson, 1992. http://www-igm.univ-mlv.fr/~berstel/elements/elements.html 3) Thomas H. Cormen, Charles E. Leiserson, and Ronald L. Rivest. Introduction à l'algorithmique. 2e édition, Dunod, 2002.