Apprendre "Introduction aux algorithmes" (16) - un article explique les arbres rouge-noir


avant-propos

Cet article expliquera principalement l'arbre rouge-noir et donnera une explication des opérations complexes d'insertion et de suppression de l'arbre rouge-noir.


1. Arbre rouge-noir

1. Qu'est-ce qu'un arbre rouge-noir ?

L'arbre rouge-noir est un arbre de recherche binaire, ce qui ajoute un peu de stockage à chaque nœud pour représentercouleur du nœud, peut être ROUGE et NOIR. Pour chaque nœud sur n'importe quel chemin simple de la racine à la feuillecontraintes de couleur, l'arbre rouge-noir assure queAucun chemin n'est deux fois plus long qu'un autre, ainsià peu près équilibré

Les lecteurs qui souhaitent comprendre l'arbre de recherche binaire général peuvent se référer à l'article :
"Introduction aux algorithmes" Apprentissage (15) ---- Arbre de recherche binaire (langage C)

2. Pourquoi avez-vous besoin d’un arbre rouge-noir ?

La complexité temporelle attendue de chaque opération de l'arbre de recherche binaire est :
O ( lgn ) = O ( h ) , h est la hauteur de l'arbre de recherche binaire, h = O ( lgn ) O(lgn)=O(h) , h est la hauteur de l'arbre de recherche binaire, h=O(lgn)O ( l g n )=O ( h ) ,h est la hauteur de l'arbre de recherche binaire, h=O ( l g n )

Cependant, à mesure que chaque opération se déroule, l'arbre de recherche binaire peut devenir très différent en termes de hauteur d'arbre sur les côtés gauche et droit, et même dans des cas extrêmes, il peut directement évoluer vers une liste chaînée .Alors à ce moment, la complexité temporelle de l'arbre de recherche binaire est d'environ O ( n ) O(n)O ( n ) _

D'après l'analyse ci-dessus, nous pouvons constater que la complexité temporelle qui limite l'arbre de recherche binaire est principalement due au grave déséquilibre des hauteurs gauche et droite de l'arbre binaire. Nous appelons cette situation « le déséquilibre de l'arbre de recherche binaire ». .

Ensuite, nous avons besoin d'un arbre de recherche binaire équilibré pour assurer la stabilité du temps d'exécution. Ensuite, l'arbre rouge-noir est un tel "arbre de recherche binaire à peu près équilibré".

3. Pourquoi utiliser « à peu près équilibré » au lieu de « hautement équilibré » ?

De manière générale, un arbre de recherche binaire équilibré en hauteur satisfait :
Pour chaque nœud x, la différence de hauteur entre le sous-arbre gauche et le sous-arbre droit de x est d'au plus 1 . Par exemple:Arbre AVL

Mais ce haut degré d’équilibre nécessite de payer un énorme prix supplémentaire.

Alors on prend du recul et on adopte un « équilibre approximatif » :
aucun chemin n'est deux fois plus long que les autres . Par exemple:arbre rouge noir

Cet équilibre approximatif, sans payer beaucoup d'argent, peut bien maintenir les opérations de l'arbre rouge-noir O ( lgn ) O(lgn)O ( l g n ) complexité temporelle.

4. Propriétés des arbres rouge-noir

Un arbre rouge-noir est un arbre de recherche binaire qui satisfait aux propriétés rouge-noir suivantes :

  • 1. Chaque nœud est rouge ou noir
  • 2. Le nœud racine est noir
  • 3. Chaque nœud feuille est noir
  • 4. Si un nœud est rouge, ses deux nœuds enfants sont noirs
  • 5. Pour chaque nœud, le chemin le plus court du nœud à tous ses nœuds feuilles descendants contient le même nombre de nœuds noirs

5. Sentinelle

Pour faciliter la gestion des conditions aux limites dans le code arborescent rouge-noir, une sentinelle est utilisée pour représenter NULL. Pour un arbre rouge-noir T, la sentinelle T. null T.nullT. null est un objet avec les mêmes propriétés qu'un nœud normal dans un arbre. Son attribut de couleur est NOIR, tandis que les autres attributsp, left, right, keyp, left, right, keyp , gauche , droite , la touche peut être définie sur n'importe quelle valeur .

Tous les pointeurs vers NULL pointent vers la sentinelle T.null T.nullT. nul . _ _ _ En même temps, afin d'économiser de l'espace, nous utilisons tous les pointeurs NULL pour pointer vers une sentinelle, c'est-à-dire qu'il n'y a qu'une seule sentinelle dans tout l'arbre rouge-noir.
insérer la description de l'image ici

Lorsque nous dessinons généralement un graphique pour représenter un arbre rouge-noir, nous omettons le nœud sentinelle.

Deuxièmement, l'analyse opérationnelle de l'arbre rouge-noir

1. Rotation

(1) gaucher et droitier

L'opération de rotation est un ajustement de la structure du pointeur. Il est utilisé pour conserver la nature de l'arbre rouge-noir et sera appelé dans des fonctions telles que l'insertion et la suppression.

La rotation est divisée en gauchers et droitiers, comme le montre la figure ci-dessous :
insérer la description de l'image ici
a, b et c dans la figure représentent tous n'importe quel sous-arbre.
A noter dans la légende ci-dessus :

左旋是针对x结点,右旋是针对y结点。即是孩子结点旋转到父亲结点

(2) Le rôle de la rotation chez les arbres rouge-noir

La rotation est souvent utilisée dans les arbres rouge-noir pour ajuster la structure des nœuds dans les arbres rouge-noir.

Lorsque nous attribuons x et y au rouge et au noir, la rotation aura une signification plus physique. Prenons comme exemple la rotation droite dans l'image ci-dessus :

la hache est ROUGE, y est NOIR

D’après les propriétés des arbres rouge-noir, on peut en déduire queLe nœud racine du sous-arbre c est NOIR,Le nœud racine d'un sous-arbre peut être ROUGE ou NOIR,Le nœud racine du sous-arbre b peut être ROUGE ou NOIR

1. Après une rotation correcte, cela peut détruire la nature de l'arbre rouge-noir 4

如果一个结点是红色的,则它的两个子结点都是黑色的

Parce qu'après une rotation à droite, le nœud racine du sous-arbre b connecté par x peut être ROUGE, et x lui-même est ROUGE, alors la propriété 4 sera détruite

2. Cela détruira définitivement la nature de l'arbre rouge-noir 5

对每一个结点,从该结点到其所有后代叶结点的最短路径上,均包含相同数目的黑色结点

Parce que la rotation à droite amène le nœud y de NOIR au nœud racine du sous-arbre entier, de sorte que les chemins gauche et droit contiennent le nœud noir y ; avant qu'il n'y ait pas de rotation à droite, seul le chemin gauche contient le nœud noir y.

bx est NOIR, y est NOIR

D’après les propriétés des arbres rouge-noir, on peut en déduire queLe nœud racine du sous-arbre c est ROUGE ou NOIR,Le nœud racine d'un sous-arbre peut être ROUGE ou NOIR,Le nœud racine du sous-arbre b peut être ROUGE ou NOIR

1. Après une bonne rotation, cela ne détruira pas la nature de l'arbre rouge-noir 4

如果一个结点是红色的,则它的两个子结点都是黑色的

Parce que x et y sont NOIR, ni les gauchers ni les droitiers ne violeront la propriété 4

2. Cela détruira définitivement la nature de l'arbre rouge-noir 5

对每一个结点,从该结点到其所有后代叶结点的最短路径上,均包含相同数目的黑色结点

Parce qu'après la rotation à droite, l'attribut NOIR du nœud racine n'a pas changé, mais le nœud d'attribut NOIR de gauche est modifié vers la droite, ce qui entraîne un déséquilibre des nœuds noirs.

cx est NOIR, y est ROUGE

D’après les propriétés des arbres rouge-noir, on peut en déduire queLe nœud racine du sous-arbre c est NOIR,Le nœud racine d'un sous-arbre peut être NOIR,Le nœud racine du sous-arbre b peut être NOIR

1. Après une bonne rotation, cela ne détruira pas la nature de l'arbre rouge-noir 4

如果一个结点是红色的,则它的两个子结点都是黑色的

2. Cela détruira définitivement la nature de l'arbre rouge-noir 5

对每一个结点,从该结点到其所有后代叶结点的最短路径上,均包含相同数目的黑色结点

dx est ROUGE, y est ROUGE

D’après les propriétés des arbres rouge-noir, on peut en déduire queLe nœud racine du sous-arbre c est NOIR,Le nœud racine d'un sous-arbre peut être NOIR,Le nœud racine du sous-arbre b peut être NOIR

1. Après une bonne rotation, cela ne détruira pas la nature de l'arbre rouge-noir 4

如果一个结点是红色的,则它的两个子结点都是黑色的

Comme les deux nœuds sont rouges, le changement de position n'a aucun effet

2. Ne brisera pas la nature de l'arbre rouge-noir 5

对每一个结点,从该结点到其所有后代叶结点的最短路径上,均包含相同数目的黑色结点

Comme les deux nœuds sont rouges, le changement de position n'a aucun effet

2. insérer

(1) Insérer un nouveau nœud

La méthode d'insertion d'un nouveau nœud dans un arbre rouge-noir est la même que celle d'un arbre de recherche binaire normal. Les nouveaux nœuds sont insérés en tant que nœuds feuilles lorsque les propriétés sont remplies.
(Les lecteurs qui souhaitent en savoir plus sur les arbres de recherche binaires généraux peuvent se référer à l'article :)
Apprentissage de "Introduction aux algorithmes" (15)----Arbre de recherche binaire (langage C)

Il y a trois différences :

  • Dans l'arborescence rouge-noir, tous les pointeurs nuls pointent vers des nœuds sentinelles NULL
  • nouveau nœud inséréselon les règles, en lui donnant du rouge
  • La nature de l'arbre rouge-noir doit être conservée après l'insertion

(2) Problèmes causés par l'insertion de nouveaux nœuds

a. Problème 1 : La propriété 2 est détruite

Nature 2 :

根结点是黑色的

Si le nouveau nœud rouge inséré s’avère être le nœud racine, alors la propriété 2 sera violée.

Ensuite, il vous suffit de changer la couleur du nœud en noir pour le moment.

b. Question 2 : La propriété 4 est détruite

Nature 4 :

如果一个结点是红色的,则它的两个子结点都是黑色的

Si le nouveau nœud rouge inséré est z, alors si le nœud parent de z se révèle être rouge, alors il viole la propriété 2.

(3) Maintenir les propriétés de l'arbre rouge-noir

a. Situation 1 :

Description de la situation :

  • Le nœud y est un nouveau nœud rouge inséré, qui est utilisé comme nœud d'observation .
  • Le nœud parent x et le nœud oncle u du nœud y sont tous deux rouges. grand-père node z est noir

On a alors la solution suivante :

  • Sans changer la structure de position des nœuds, seuls le nœud parent x et le nœud oncle u du nœud y sont colorés en noir ; le nœud grand-père z est coloré en rouge.
  • Réglez le nœud d’observation ajusté sur z.

La fonction de cette opération :

  • Transformez la situation 1 en situation 2 pour résoudre
  • Garanti que la propriété cinq n'est pas détruite
    insérer la description de l'image ici
    insérer la description de l'image ici

B. Situation 2 :

Description de la situation :

  • Le nœud d'observation est un nœud rouge x, son nœud parent y est rouge et son nœud oncle d est noir.
  • Le nœud d'observation x est le bon enfant du nœud parent

Nous procédons de la manière suivante :

  • Prenez le nœud parent y du nœud observé x comme axe et effectuez une opération pour la gauche.

Ce que fait cette action :

  • Le cas 2 peut être converti en cas 3
  • D'après l'analyse précédente de l'opération de rotation, cette opération ne détruira aucune propriété de l'arbre rouge-noir.
    insérer la description de l'image ici

c. Situation 3 :

Description de la situation :

  • Le nœud d'observation est le nœud rouge y, son nœud parent x est rouge et son nœud oncle d est noir.
  • Le nœud d'observation x est l'enfant gauche du nœud parent

Nous procédons de la manière suivante :

  • Colorez le nœud parent x en noir et le nœud père z en rouge
  • Utilisez ensuite le nœud z comme axe pour effectuer une opération de rotation à droite

Ce que fait cette action :

  • Garantit la satisfaction de toutes les propriétés de l’arbre rouge-noir
    insérer la description de l'image ici

3. supprimer

(1) supprimer le nœud

La méthode de suppression de nœuds dans un arbre rouge-noir est la même que celle d’un arbre de recherche binaire ordinaire. Le nœud supprimé et le poste vacant seront comblés par son nœud successeur
(Les lecteurs qui souhaitent en savoir plus sur les arbres de recherche binaires généraux peuvent se référer à l'article :)
Apprentissage de "Introduction aux algorithmes" (15)----Arbre de recherche binaire (langage C)

La différence a des groupes comme suit :

  • Dans l'arborescence rouge-noir, tous les pointeurs nuls pointent vers des nœuds sentinelles NULL
  • Il est nécessaire de suivre la position du nœud qui comble le vide dans le processus, afin de pouvoir l'ajuster ultérieurement.
  • Besoin d'enregistrer la couleur du nœud supprimé
  • Enfin, la nature de l'arbre rouge-noir doit être préservée

(2) Problèmes causés par la suppression de nœuds

Tout d’abord, il doit être clair que le problème réside dans le remplissage du poste vacant du nœud supprimé.
Par exemple :
le nœud z est supprimé, le nœud y remplace la position du nœud z, et la même couleur que le nœud z. Ensuite, la position d'origine du nœud y est remplie par le nœud racine c du sous-arbre droit du nœud y ( comme le nœud y est le successeur du nœud z, il ne peut pas y avoir de sous-arbre gauche ).
Alors la question se pose :

  • Si y est noir, l'absence de y brise les propriétés de l'arbre rouge-noir
  • Si y est rouge, alors aucune propriété n'est détruite

A. Question 1 :

Si y est noir et y est le nœud racine d'origine, alors si y estL'enfant rouge devient le nouveau nœud racine, alors la propriété 2 sera violée :

根结点是黑色的

B. Question 2 :

Si y est noir et que y estLe nœud père est rouge, alors si ouiLe nœud enfant est également rouge, cela violera la propriété 4 :

如果一个结点是红色的,则它的两个子结点都是黑色的

c. Troisième question :

Si y est noir, alors l’absence de y doit entraîner1 noir en moins sur le chemin contenant y, alors la propriété 5 sera violée :

对每一个结点,从该结点到其所有后代叶结点的最短路径上,均包含相同数目的黑色结点

(3) Maintenir la nature de l'arbre rouge-noir

Réflexion clé :
Le point clé de la maintenance est de résoudre les dégâts de la nature 5. Pour ce faire, nous devons équilibrer le nombre de nœuds noirs des deux côtés.

Avis:

该部分的图片的结点颜色有一定的问题,具体颜色以文字说明为主

a. Situation 1 :

Description de la situation :

  • x est le nœud d'observation, qui est le nœud enfant de y
  • le nœud frère de x, y, est rouge
  • Le nœud parent z de x est noir et le nœud enfant du nœud frère y est noir.

Nous opérons :

  • Changez z en rouge et y en noir
  • Rotation à gauche avec z comme axe
  • v est un nœud frère de x

Les fonctions de cette opération sont :

  • ne violera plus les propriétés des arbres rouge-noir
  • Convertir le cas 1 en cas 2, 3, 4 pour le traitement
    insérer la description de l'image ici

B. Situation 2 :

Description de la situation :

  • Le nœud d'observation est x
  • le nœud frère y de x est noir et ses deux enfants sont également noirs
  • Le nœud parent z de x peut être rouge ou noir

Nous opérons :

  • Colorer le nœud frère y de x en rouge
  • Utilisez le nœud z comme nouveau nœud d'observation
  • Si le nœud z est rouge, le nœud z sera coloré en noir pour terminer l'ajustement (du cas 1 au cas 2, c'est le cas)
  • Si le nœud z est noir, cela signifie que la propriété 5 n'a pas été corrigée
    Les fonctions de cette opération sont :
  • Peut résoudre les travaux de réparation dans certains cas
    insérer la description de l'image ici

c. Situation 3 :

Description de la situation :

  • x est le nœud d'observation
  • le nœud frère de x, y, est noir
  • L'enfant gauche v de y est rouge et l'enfant u est noir
  • x est le nœud parent peut être noir ou rouge

Nous opérons :

  • Couleur v noir et y rouge
  • Faire pivoter à droite avec l'axe y
  • v est le nouveau frère de x

Les fonctions de cette opération sont :

  • ne viole plus les propriétés des arbres rouge-noir
  • Transformez le cas 3 en cas 4 pour le traitement
    insérer la description de l'image ici

d. Situation 4 :

Description de la situation :

  • x est le nœud d'observation
  • y est un nœud frère de x, qui est noir
  • L'enfant gauche de y et le parent de x peuvent être noirs ou rouges
  • tu as raison, ton enfant est rouge

Nous opérons :

  • couleur z en noir, y en rouge et u en noir
  • Rotation à gauche avec z comme axe

Les fonctions de cette opération sont :

  • Correction du problème où la propriété restante cinq au cas où 2 était cassée
  • Terminez l’ensemble du processus de maintenance
    insérer la description de l'image ici

3. Analyse de complexité temporelle de l'arbre rouge-noir

Le processus d'ajustement de l'arbre rouge-noir consomme un niveau constant de cycles, il ne consacrera donc pas trop de temps à l'ajustement.
En même temps, parce qu'il s'agit d'un arbre de recherche binaire « à peu près équilibré ».
En résumé : toutes les opérations de l'arbre rouge-noir sont stables en O ​​( lgn ) O(lgn)O ( l g n )


Résumer

Lecteurs, soyez indulgents avec moi et corrigez-moi si l’article est inapproprié.
Pour le contenu pertinent de l'arbre de recherche binaire, veuillez vous référer à l'article :
"Introduction aux algorithmes" Apprentissage (15)----Arbre de recherche binaire (langage C)

Je suppose que tu aimes

Origine blog.csdn.net/weixin_52042488/article/details/126966813
conseillé
Classement