web-dev-qa-db-fra.com

Arbre noir rouge sur arbre avl

Les arbres AVL et Rouge noir s'équilibrent tous les deux, à l'exception des couleurs Rouge et Noir dans les nœuds. Quelle est la raison principale pour choisir les arbres noirs rouges au lieu des arbres AVL? Quelles sont les applications des arbres noirs rouges?

77
suren

Quelle est la raison principale pour choisir les arbres noirs rouges au lieu des arbres AVL?

Les arbres rouge-noir et AVL sont les arbres de recherche binaires équilibrés les plus couramment utilisés. Ils prennent en charge l'insertion, la suppression et la recherche dans O(logN) time garanti. Cependant, les points de comparaison suivants sont les suivants:

  • Les arbres AVL sont plus rigoureusement équilibrés et permettent donc des recherches plus rapides. Ainsi, pour une tâche intensive de recherche, utilisez une arborescence AVL.
  • Pour une insertion intensive, utilisez un arbre rouge-noir.
  • Les arbres AVL stockent le facteur d'équilibre sur chaque nœud. Cela prend O(N) espace supplémentaire. Cependant, si nous savons que les clés qui seront insérées dans l'arborescence seront toujours supérieures à zéro, nous pouvons utiliser le bit de signe des clés pour stocker les informations de couleur d'un arbre rouge-noir. Ainsi, dans de tels cas, l’arbre rouge-noir ne prend pas d’espace supplémentaire.

Quelles sont les applications de l'arbre noir rouge?

Les arbres rouge-noir ont un but plus général. Ils effectuent relativement bien l'ajout, la suppression et la recherche, mais les arbres AVL effectuent des recherches plus rapides au détriment de l'ajout/de la suppression plus lent. L'arbre rouge-noir est utilisé dans les domaines suivants:

  • Java: Java.util.TreeMap, Java.util.TreeSet
  • STL C++ (dans la plupart des implémentations): carte, carte multiple, multiset
  • Noyau Linux: ordonnanceur complètement juste, linux/rbtree.h
90
Nikunj Banka

Essayez de lire ceci article

Il offre de bonnes idées sur les différences, les similitudes, les performances, etc.

Voici une citation de l'article:

Les arbres RB sont, tout comme les arbres AVL, auto-équilibrés. Les deux offrent des performances d'insertion et de recherche O (log n).

La différence, c’est que RB-Trees garantit O(1) rotations par insertion. C’est ce qui réduit les performances dans les mises en œuvre réelles.

Simplifiés, les arbres RB bénéficient de l’avantage d’être de 2 à 3 arbres conceptuels sans supporter les frais généraux des structures de nœuds dynamiques. Physiquement, les arbres RB sont implémentés en tant qu'arbres binaires, les drapeaux rouge/noir simulent un comportement 2-3

Autant que je sache, les arbres AVL et les arbres RB ne sont pas très loin en termes de performances. Un arbre RB est simplement une variante d'un arbre B et l'équilibrage est implémenté différemment d'un arbre AVL.

10
jordan

Notre compréhension des différences de performance s’est améliorée au fil des années et la principale raison d’utiliser des arbres rouge-noir au-dessus de l’AVL serait de ne pas avoir accès à une bonne implémentation d’AVL, car ils sont un peu moins communs, peut-être parce qu’ils ne sont pas couverts par le CLRS.

Les deux arbres sont maintenant considérés comme des formes de arbres à rang équilibré mais les arbres rouge-noir sont toujours plus lents de environ 20% dans les tests réels . Ou même 30 à 40% plus lent lorsque des données séquentielles sont insérées .

Ainsi, les personnes qui ont étudié les arbres rouge-noir mais pas les arbres AVL ont tendance à choisir des arbres rouge-noir. Les principales utilisations des arbres rouge-noir sont détaillées dans le Entrée de Wikipédia pour eux .

4
David McManamon

Les autres réponses ici résument bien les avantages et inconvénients des arbres RB et AVL, mais j’ai trouvé cette différence particulièrement intéressante:

Les arbres AVL ne prennent pas en charge le coût de mise à jour amorti constant [mais les arbres rouge-noir le font]

Source: Mehlhorn & Sanders (2008) (section 7.4)

Ainsi, alors que les deux arbres RB et AVL garantissent O(log(N)) le temps le plus défavorable pour la recherche, l'insertion et la suppression, la restauration de la propriété AVL/RB après l'insertion ou la suppression d'un nœud peut être effectuée dans O(1) temps amorti pour les arbres rouge-noir.

2
emanek

Les programmeurs n'aiment généralement pas allouer dynamiquement de la mémoire. Le problème avec l'arborescence avl est que pour "n" éléments, vous avez besoin d'au moins log2 (log2 (n)) ... (hauteur-> log2 (n)) bits pour stocker la hauteur de l'arborescence! Ainsi, lorsque vous manipulez des données énormes, vous ne pouvez pas savoir avec certitude le nombre de bits à allouer pour le stockage de la hauteur sur chaque nœud.

Par exemple, si vous utilisez 4 octets int (32 bits) pour stocker la hauteur. La hauteur maximale peut être: 2 ^ 32 et, par conséquent, le nombre maximal d'éléments que vous pouvez stocker dans l'arbre est 2 ^ (2 ^ 32) - (semble être très grand, mais à cette époque de données, rien n'est trop grand, je suppose). Et par conséquent, si vous dépassez cette limite, vous devez allouer de manière dynamique plus d'espace pour stocker la hauteur.

C'est une réponse suggérée par un professeur de mon université qui me semblait raisonnable! J'espère avoir du sens.

Modifications: les arbres AVL sont plus équilibrés que les arbres rouges noirs, mais ils peuvent provoquer plus de rotations lors de l’insertion et de la suppression. Donc, si votre application implique de nombreuses insertions et suppressions fréquentes, les arbres Red Black doivent être préférés. Et si les insertions et les suppressions sont moins fréquentes et que la recherche est une opération plus fréquente, l’arborescence AVL doit être privilégiée par rapport à Red Black Tree. --Source GEEKSFORGEEKS.ORG

1
Prakhar Agrawal