Rouge noir arbre avl arbres
AVL Rouge et noir les arbres sont à la fois auto-équilibrage à l'exception de Rouge et de noir, couleurs des nœuds. Quelle est la raison principale pour choisir Rouge noir des arbres au lieu de AVL arbres? Quelles sont les applications de Rouge, de noir les arbres?
- double possible de Pourquoi est std::map mis en œuvre comme rouge-noir arbre?
- En aparté, la Rouille les développeurs ont choisi d'utiliser un B-tree à la place de l'un de ces pour leur norme commandé à la carte.
Vous devez vous connecter pour publier un commentaire.
Les deux arbres rouge-noir et AVL arbres sont les plus couramment utilisés équilibré binaires de recherche arbres, et en soutien à l'insertion, la suppression et la recherche dans la garantie
O(logN) time
. Cependant, il ya la suite de points de comparaison entre les deux:O(N) extra space
. Cependant, si nous savons que les touches qui sera inséré dans l'arbre sera toujours plus grande que zéro, nous pouvons utiliser le bit de signe de la clés pour stocker les informations sur la couleur d'un rouge-l'arbre noir. Ainsi, dans de tels cas rouge-noir arbreO(1) extra space
.Arbres rouge-noir sont plus d'usage général. Ils font relativement bien sur ajouter, de supprimer et de recherche, mais AVL arbres ont plus rapides look-ups au prix d'une moindre ajouter/supprimer. Rouge-noir arbre est utilisé dans la suite de:
In general, the rotations for an AVL tree are harder to implement and debug than that for a Red-Black tree.
n'est pas vrai.std:: map
et ses amis utilisent aucune structure particulière. Cela est laissé à la mise en œuvre, bien que libstdc++ et Dinkumware au moins utilise des arbres rouge-noir, et il semble que vous êtes en droit dans la pratique.Essayez de lire cette l'article
Il propose quelques bonnes idées sur les différences, les similitudes, les performances, etc.
Voici une citation de l'article:
En ce qui concerne ma propre compréhension va, AVL arbres et RB les arbres ne sont pas très loin en termes de performances. Un RB arbre est tout simplement une variante d'un B-arbre et l'équilibrage est mis en œuvre différemment qu'un arbre AVL.
Notre compréhension de la différence dans la performance s'est améliorée au fil des ans et est maintenant la raison principale de l'utilisation arbres rouge-noir plus AVL serait de ne pas avoir accès à une bonne AVL mise en œuvre, car ils sont un peu moins commun, peut-être parce qu'ils ne sont pas couverts en CLRS.
Les deux arbres sont maintenant considérés comme des formes de rang équilibrée des arbres mais les arbres rouge-noir sont constamment plus lent par environ 20% dans le monde réel les tests. Ou même 30 à 40% plus lent lorsque les données séquentielles est inséré.
Donc, les gens qui ont étudié les arbres rouge-noir mais pas AVL arbres ont tendance à choisir des arbres rouge-noir. Les utilisations principales pour les arbres rouge-noir sont détaillées sur le L'entrée de Wikipedia pour eux.
Programmeurs n'aiment pas allouer dynamiquement de la mémoire.
Le problème avec l'avl est un arbre que pour le "n" éléments dont vous avez besoin au moins log2(log2(n))...(hauteur->log2(n)) bits pour stocker la hauteur de l'arbre!
Ainsi, lorsque vous manipulez énorme de données, vous ne savez pas de combien de bits à attribuer pour le stockage de hauteur à chaque nœud.
Par exemple, si vous utilisez 4 octets int (32 bits) pour le stockage de hauteur. La hauteur maximale peut être : 2^32, et donc nombre Maximal d'éléments que vous pouvez stocker dans l'arborescence de la 2^(2^32) --(semble être très grande, mais dans cet âge de données, rien n'est trop grand, je suppose). Et donc si vous avez plus de tirer de cette limite, vous devez allouer dynamiquement de plus d'espace pour le stockage en hauteur.
C'est une réponse proposée par un professeur de mon université qui semble raisonnable pour moi!
Espère que je sens.
Modifications:L'AVL arbres sont plus équilibrée par rapport à Rouge Noir des Arbres, mais ils peuvent causer plus de rotations au cours de l'insertion et de suppression. Donc, si votre application comporte de nombreuses fréquentes des insertions et des suppressions, puis Rouge Noir, les arbres doivent être privilégiées. Et si les insertions et les suppressions sont de moins en moins fréquentes et de la recherche est de plus en plus fréquentes de l'opération, puis AVL arbres doivent être préférés Rouge Noir de l'Arbre. --Source GEEKSFORGEEKS.ORG
you need need atleast log2(log2(n))...(height->log2(n)) bits to store the height of [an AVL] tree
Je n'ai pas besoin de la hauteur d'un nœud dans un AVL-arbre pour le mettre en œuvre. Vous nee un peu de l'information supplémentaire pour chaque nœud (je SUIS LE PLUS grand (le frère avec la plus grande sous-arbre))); c'est plus pratique ainsi que des classiques à avoir deux des bits supplémentaires (l'enfant est plus élevé pour la gauche&droite), présenté par Un-V & L.D'autres réponses ici résumer les avantages & inconvénients de la RB et AVL arbres bien, mais j'ai trouvé cette différence particulièrement intéressant:
Source: Mehlhorn & Sanders (2008) (section 7.4)
Ainsi, alors que les deux RB et AVL arbres garantie de O(log(N)) le pire des cas, le temps de recherche, d'insertion et de suppression, de la restauration de l'AVL/RB de la propriété après l'insertion ou la suppression d'un nœud peut être fait en O(1) amorti temps pour les arbres rouge-noir.
Ré-équilibrage de l'arbre AVL devrait rencontrer le dessous de la propriété. (Wiki De Référence - Arbre AVL)
Donc, cela implique que la hauteur totale de l'arbre AVL ne peut pas aller fou je.e les recherches vont être mieux avec AVL Arbres. Et puisque d'autres opérations(rotations) doivent être faits pour ne pas laisser la hauteur de fous, la modification de l'arbre opérations peuvent être peu coûteux.