Arbre rouge-noir - UQAC

wwwens.uqac.ca

Arbre rouge-noir - UQAC

Arbres équilibrés : arbres rouge-noir et arbres AA51307018 701550 60 8562 785 102035 4055 6580 90Thursday, 4 October, 12


Arbre rouge-noir• Un arbre rouge-noir est un arbre binaire derecherche qui satisfait les propriétés suivantes :1. Les nœuds sont soit rouge soit noir;2. la racine est noire;3. Les fils d’un nœud rouge sont noirs;4. pour chaque nœud, tous les chemins reliant lenœud à une feuille contiennent le même nombrede nœuds noirs (ce nombre est appelé hauteurnoire).5. chaque sous-arbre vide est noir.Thursday, 4 October, 12


Exemple18*-10423152759141623 32 78115118 7062 78Thursday, 4 October, 12


Contre-exemple30*-1570102060855 50 67 80 9039 5588Thursday, 4 October, 12


Sommet d’un Arbre rouge-noirenum ARNCouleur { rouge, noir };template class Nœud_RN{type valeur;ARNCouleur couleur;Nœud_RN *parent, *left, *right;};Thursday, 4 October, 12


Hauteur maximale d’un ARN• L’intérêt pour les ARN est lié au lemme suivantqui donne une borne pour la hauteur maximaledes sommets dans un tel arbre.• Lemme :▫ La hauteur maximale d’un ARN comportant nsommets internes est 2 log 2 (n + 1)Thursday, 4 October, 12


Insertion Bottom-up• Toujours en tant que feuille rouge (sinon le cheminà la racine contiendra 1 nœud noir de plusqu’ailleurs)• Si père noir, pas de problème on arrête la,• Si père rouge, faire des rotations et deschangements de couleur▫ 2 cas : Père rouge et oncle noir Père rouge et oncle rougeThursday, 4 October, 12


Cas #1 : Père rouge, oncle noirNoeud inséréGRotation simplePPSXGXCDEA B C SABDEThursday, 4 October, 12


Cas #1 : Père rouge, oncle noirG• Rotation doubleXPSPGAXDEA B C SBCDENoeud inséréThursday, 4 October, 12


Exemple• On veut insérer 330157010206085550 6580 904055Thursday, 4 October, 12


Exemple• Rotation simple30157010206085550 6580 9034055Noeud inséréThursday, 4 October, 12


Exemple30157020608551050 6580 9034055Thursday, 4 October, 12


Exemple30157052060853 1050 6580 904055Thursday, 4 October, 12


Exemple30157052060853 1050 6580 904055Thursday, 4 October, 12


Exemple• Insère 830157010206085550 6580 904055Thursday, 4 October, 12


Exemple• Rotation double30157010206085550 6580 9084055Noeud inséréThursday, 4 October, 12


Exemple30157020608551050 6580 9084055Thursday, 4 October, 12


Exemple301570820608551050 6580 904055Thursday, 4 October, 12


Exemple301570820608551050 6580 904055Thursday, 4 October, 12


Cas #2 : Père rouge, oncle rougeProblème potentielNoeud inséréGPPSXGXCDEA B C SABDEThursday, 4 October, 12


Cas #2 : Père rouge, oncle rouge• Le problème survient si le parent de P est rouge.Dans ce cas, il faudra propager vers le haut lesajustements, ce qui nous fait perdre l’avantagesur AVLThursday, 4 October, 12


Insertion top-down• Pour éviter de devoir propager vers le haut l’algorithme de rotation,on peut utiliser une approche top-down• Idée:▫ garantir que, lorsqu’on arrive au point d’insertion, qu’il ne s’agissepas d’un nœud rouge• S’effectue en descendant dans l’arbre, lorsqu’on rencontre un nœudqui a deux fils rouges, on colore ce nœud en rouge et en noir ses deuxfils :XXThursday, 4 October, 12


Insertion top-down• Ainsi, le nombre de nœuds noirs dans un chemindemeure inchangé !• Par contre, on peut se retrouver avec deux nœudsrouges consécutifs, si le parent de X est rouge. Dansce cas, il faudra appliquer une rotation• Ceci fonctionnera parce qu’on est sur que le nœudfrère du parent de X ne peut être que noir.• La racine doit toujours demeurer noirThursday, 4 October, 12


Arbres Rouge-Noir – Exemple détaillé• Insertion de la séquence :▫ 10, 85, 15, 70, 20, 60, 30, 50, 65, 80, 90, 40, 5, 5510Thursday, 4 October, 12


Arbres Rouge-Noir – Exemple détaillé• Insertion de la séquence :▫ 10, 85, 15, 70, 20, 60, 30, 50, 65, 80, 90, 40, 5, 551085Thursday, 4 October, 12


Arbres Rouge-Noir – Exemple détaillé• Insertion de la séquence :▫ 10, 85, 15, 70, 20, 60, 30, 50, 65, 80, 90, 40, 5, 55108515Thursday, 4 October, 12


Arbres Rouge-Noir – Exemple détaillé• Insertion de la séquence :▫ 10, 85, 15, 70, 20, 60, 30, 50, 65, 80, 90, 40, 5, 55▫ Rotation double151085Thursday, 4 October, 12


Arbres Rouge-Noir – Exemple détaillé• Insertion de la séquence :▫ 10, 85, 15, 70, 20, 60, 30, 50, 65, 80, 90, 40, 5, 55▫ Ajustement ….15Comme c’est la racine,elle ne changepas de couleur1085Thursday, 4 October, 12


Arbres Rouge-Noir – Exemple détaillé• Insertion de la séquence :▫ 10, 85, 15, 70, 20, 60, 30, 50, 65, 80, 90, 40, 5, 5515108570Thursday, 4 October, 12


Arbres Rouge-Noir – Exemple détaillé• Insertion de la séquence :▫ 10, 85, 15, 70, 20, 60, 30, 50, 65, 80, 90, 40, 5, 551510857020Thursday, 4 October, 12


Arbres Rouge-Noir – Exemple détaillé• Insertion de la séquence :▫ 10, 85, 15, 70, 20, 60, 30, 50, 65, 80, 90, 40, 5, 55▫ Rotation simple15107020 85Thursday, 4 October, 12


Arbres Rouge-Noir – Exemple détaillé• Insertion de la séquence :▫ 10, 85, 15, 70, 20, 60, 30, 50, 65, 80, 90, 40, 5, 55▫ Ajustement durant le parcours15107020 85Thursday, 4 October, 12


Arbres Rouge-Noir – Exemple détaillé• Insertion de la séquence :▫ 10, 85, 15, 70, 20, 60, 30, 50, 65, 80, 90, 40, 5, 5515107020 8560Thursday, 4 October, 12


Arbres Rouge-Noir – Exemple détaillé• Insertion de la séquence :▫ 10, 85, 15, 70, 20, 60, 30, 50, 65, 80, 90, 40, 5, 5515107020 856030Thursday, 4 October, 12


Arbres Rouge-Noir – Exemple détaillé• Insertion de la séquence :▫ 10, 85, 15, 70, 20, 60, 30, 50, 65, 80, 90, 40, 5, 55▫ Rotation double15107030 852060Thursday, 4 October, 12


Arbres Rouge-Noir – Exemple détaillé• Insertion de la séquence :▫ 10, 85, 15, 70, 20, 60, 30, 50, 65, 80, 90, 40, 5, 55▫ Ajustement durant le parcours15107030 852060Thursday, 4 October, 12


Arbres Rouge-Noir – Exemple détaillé• Insertion de la séquence :▫ 10, 85, 15, 70, 20, 60, 30, 50, 65, 80, 90, 40, 5, 5515107030 85206050Thursday, 4 October, 12


Arbres Rouge-Noir – Exemple détaillé• Insertion de la séquence :▫ 10, 85, 15, 70, 20, 60, 30, 50, 65, 80, 90, 40, 5, 55▫ Rotation double3015701020608550Thursday, 4 October, 12


Arbres Rouge-Noir – Exemple détaillé• Insertion de la séquence :▫ 10, 85, 15, 70, 20, 60, 30, 50, 65, 80, 90, 40, 5, 55▫ ajustement3015701020608550Thursday, 4 October, 12


Arbres Rouge-Noir – Exemple détaillé• Insertion de la séquence :▫ 10, 85, 15, 70, 20, 60, 30,50, 65, 80, 90, 40, 5, 55301570102060855065Thursday, 4 October, 12


Arbres Rouge-Noir – Exemple détaillé• Insertion de la séquence :▫ 10, 85, 15, 70, 20, 60, 30,50, 65, 80, 90, 40, 5, 5530157010206085506580Aucun ajustement de couleur pour ces nœudscar il ne font pas partie du chemin parcouruThursday, 4 October, 12


Arbres Rouge-Noir – Exemple détaillé• Insertion de la séquence :▫ 10, 85, 15, 70, 20, 60, 30,50, 65, 80, 90, 40, 5, 553015701020608550658090Thursday, 4 October, 12


Arbres Rouge-Noir – Exemple détaillé• Insertion de la séquence :▫ 10, 85, 15, 70, 20, 60, 30,50, 65, 80, 90, 40, 5, 55▫ Ajustement durant le parcours3015701020608550658090Thursday, 4 October, 12


Arbres Rouge-Noir – Exemple détaillé• Insertion de la séquence :▫ 10, 85, 15, 70, 20, 60, 30,50, 65, 80, 90, 40, 5, 55301570102060855065809040Thursday, 4 October, 12


Arbres Rouge-Noir – Exemple détaillé• Insertion de la séquence :▫ 10, 85, 15, 70, 20, 60, 30,50, 65, 80, 90, 40, 5, 553015701020608555065809040Thursday, 4 October, 12


Arbres Rouge-Noir – Exemple détaillé• Insertion de la séquence :▫ 10, 85, 15, 70, 20, 60, 30,50, 65, 80, 90, 40, 5, 55301570102060855506580904055Thursday, 4 October, 12


Retrait• On procède comme avec l’arbre de recherchebinaire non-balancé• Si le nœud à retirer est rouge, pas de problème• Si le nœud est noir, il ne faut pas briser la 4epropriété !• Il faut donc s’arranger pour que le nœud soitrouge !!Thursday, 4 October, 12


• Soit un noeud courant X qui a deux fils noirs, sonparent, P est rouge... Selon F, le frère de X on a:▫ Si F a deux fils noirs: alors on fait un changement decouleurPRetraitPXFXFRR▫ F a un fils extérieur rouge: rotation simplePFXFPRRXThursday, 4 October, 12


Retrait▫ F a un fils intérieur rouge: rotation doublePRXFPFRX▫ F a deux fils rouges: rotation simple ou doubleThursday, 4 October, 12


Retrait• Si X a un fils rouge:▫ Continue à descendre. Si on est chanceux (50%),le nouveau X est rouge. Sinon, rotation entre leparent (P) et le frère (F):XPFX’FPCBCBCX’BThursday, 4 October, 12


Thursday, 4 October, 12Arbres AA


Arbres AA• Proposés par Arne Andersson• Similaires aux arbres rouges avec une conditionsupplémentaire: le fils de gauche ne peut pas être rouge• Un nœud qui n’a qu’un fils doit être à droite et rouge.• Simplifie le retrait• Les nœuds rouges sont représentés par des liens horizontaux• Soit le niveau d’un nœud défini ainsi:▫ 1 si c’est une feuille▫ niveau du parent si le nœud est rouge▫ (1 – niveau du parent) si le nœud est noirThursday, 4 October, 12


Exemple• Arbre AA résultant de l’insertion de :▫ 10, 85, 15,70,20,60,30,50,65,80,90,40,5,55,35Racine30701550 60855 102035 4055 6580 90Thursday, 4 October, 12


Arbres AA• Seulement deux opérations sont nécessaires pourmaintenir le balencement dans un arbre AA :▫ Skew▫ splitThursday, 4 October, 12


SkewPXRotation simplePXABCABCThursday, 4 October, 12


SplitRPRXRotation simplePXABABThursday, 4 October, 12


Thursday, 4 October, 12Exemple d’insertion(tiré du livre de Weiss)


Thursday, 4 October, 12Exemple d’insertion(tiré du livre de Weiss)


Thursday, 4 October, 12Exemple d’insertion(tiré du livre de Weiss)


Retrait• Une feuille rouge est facile• On traite le cas des branches à 1 fils de la même façonque les branches à 2 fils car le cas des branches à 1 fils nepeut arriver qu’au niveau 1• Le pire cas arrive quand on veut supprimer 1 de la figuresuivante :• qui se règle avec des « skews » et des « splits »...Thursday, 4 October, 12

More magazines by this user
Similar magazines