Quelqu'un peut-il s'il vous plaît expliquer quelles sont les principales différences entre ces deux structures de données? J'ai essayé de trouver une source en ligne qui souligne les différences/similitudes, mais je n'ai rien trouvé de trop informatif. Dans quels cas l'un serait-il préféré à l'autre? Quelles situations pratiques rendent l’un "meilleur" que l’autre?
Les arbres AVL maintiennent un équilibre plus rigide que les arbres rouge-noir. Le chemin de la racine à la feuille la plus profonde dans un arbre AVL est au maximum ~ 1,44 lg (n + 2), tandis que dans les arbres noirs et rouges il est au maximum ~ 2 lg (n + 1).
En conséquence, la recherche dans une arborescence AVL est généralement plus rapide, mais cela se fait au détriment d'une insertion et d'une suppression plus lente en raison du nombre accru d'opérations de rotation. Utilisez donc une arborescence AVL si vous prévoyez que le nombre de recherches dominera le nombre de mises à jour de l'arborescence.
Pour les petites données:
insert: l'arbre RB et l'arborescence AVL ont un nombre constant de rotation maximale, mais l'arborescence RB sera plus rapide car, en moyenne, l'arborescence RB utilise moins de rotation.
lookup: l'arborescence AVL est plus rapide, car l'arborescence AVL a moins de profondeur.
delete: L'arbre RB a un nombre constant de rotation maximale, mais l'arborescence AVL peut avoir O (log N) le plus mauvais temps de rotation. et en moyenne, l’arbre RB a également un nombre de rotations moins important, donc l’arbre RB est plus rapide.
pour les grandes données:
insert: l'arborescence AVL est plus rapide. parce que vous devez rechercher un noeud particulier avant l'insertion. plus vous avez de données, plus le décalage temporel lors de la recherche du nœud en question augmente proportionnellement à O (log N). mais arbre AVL et arbre RB n'ont toujours besoin que d'un nombre constant de rotation dans le pire des cas. Ainsi, le goulot de la bouteille deviendra le moment où vous recherchez ce noeud particulier.
lookup: l'arborescence AVL est plus rapide. (idem que dans le petit cas de données)
delete: l'arborescence AVL est plus rapide en moyenne, mais dans le pire des cas, l'arborescence RB est plus rapide. car vous devez également rechercher un nœud très profond à permuter avant son retrait (semblable au motif de son insertion). en moyenne les deux arbres ont un nombre constant de rotation. mais RB tree a une limite supérieure constante pour la rotation.
Citant cela: Différence entre AVL et arbres rouge-noir
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 en fait le coût de la performance dans les mises en œuvre réelles. Simplifié, RB-Trees tire cet avantage de sa valeur conceptuelle de 2-3 arborescences sans porter sur les frais généraux des structures de nœud dynamiques Physiquement, les arborescences RB sont implémentées comme des arborescences binaires, les drapeaux rouges/noirs simulent un comportement 2-3.
par définition, chaque AVL est donc un sous-ensemble de Red-Black. Il faut pouvoir colorer n’importe quel arbre AVL, sans restructuration ni rotation, pour le transformer en un arbre rouge-noir.
Les arbres AVL sont souvent comparés aux arbres rouge-noir car ils prennent en charge le même ensemble d'opérations et prennent
O(log n)
le temps nécessaire aux opérations de base. Pour les applications nécessitant beaucoup de recherche, les arborescences AVL sont plus rapides que les arborescences rouge-noir car elles sont équilibrées de manière plus rigide. Semblables aux arbres rouge-noir, les arbres AVL sont équilibrés en hauteur. Les deux ne sont généralement pas équilibrés en poids ni en µ pour aucun μ ≤ ½; c'est-à-dire que les noeuds frères peuvent avoir un nombre extrêmement différent de descendants.
Extrait de l'article Wikipedia sur AVL Trees
La hauteur maximale des arbres est primordiale pour garder l’équilibre. Il est presque égal à 1.44 * log(n)
pour AVL, mais pour RB tree, il s'agit de 2 * log(n)
. On peut donc en conclure qu'il est préférable d’utiliser l’AVL lorsque le problème est l’incitation à la recherche. Ce qui compte, c’est une autre question pour AVL et RB tree. L'arborescence RB est meilleure que AVL pour l'insertion aléatoire au moindre coût de la rotation, mais AVL permet d'insérer les données ascendantes ou descendantes. Donc, si le problème est l’incitation à l’insertion, nous pouvons utiliser l’arbre RB.
Le fait que les arbres RedBlack aient moins de rotations peut les accélérer sur les insertions/suppressions, cependant ..... Comme ils sont généralement un peu plus profonds, ils peuvent également être plus lents sur les insertions et les suppressions. Chaque fois que vous passez d'un niveau à un autre dans l'arborescence, il y a un grand changement: les informations demandées ne sont pas dans le cache et doivent être extraites de la RAM. Ainsi, le temps gagné avec moins de rotations peut déjà être perdu car il doit naviguer plus profondément et doit donc mettre à jour son cache plus souvent. Pouvoir opérer à partir de cache ou non fait une grande différence. Si les informations pertinentes sont dans le cache, vous pouvez effectuer plusieurs opérations de rotation dans le temps nécessaire pour parcourir un niveau supplémentaire et les informations de niveau suivant ne sont pas dans le cache. Ainsi, dans les cas où RedBlack est théoriquement plus rapide et n’examine que les opérations nécessaires, il pourrait être plus lent en pratique, en raison de l’absence de cache.
Pour avoir une idée du fonctionnement d’une arborescence AVL, this la visualisation interactive est utile.
Les arbres AVL et RedBlack sont des structures de données arborescentes équilibrées en hauteur. Ils sont assez similaires, et la vraie différence réside dans le nombre d'opérations de rotation effectuées lors de toute opération d'ajout/suppression - plus élevé dans le cas d'AVL, afin de préserver un équilibrage global plus homogène.
Les deux implémentations s'échelonnent comme une O(lg N)
, où N est le nombre de feuilles, mais dans la pratique, un arbre AVL est plus rapide dans les tâches de recherche intensive: profitant du meilleur équilibrage, les traversées d'arbre sont en moyenne plus courtes. D'autre part, en ce qui concerne l'insertion et la suppression, un arbre AVL est plus lent: un nombre plus élevé de rotations est nécessaire pour rééquilibrer correctement la structure de données lors de la modification.
Pour les implémentations d'usage général (c'est-à-dire, a priori, il n'est pas clair si les recherches constituent la majorité des opérations), les arbres RedBlack sont préférés: ils sont plus faciles à implémenter et plus rapides dans les cas courants - dans les cas où la structure de données est modifiée aussi fréquemment que recherché. . Un exemple, TreeMap
et TreeSet
in Java utilise un arbre de sauvegarde RedBlack.
En résumé: les arbres sont légèrement mieux équilibrés que les arbres rouges. Les deux arbres prennent O (log n) globalement pour les recherches, les insertions et les suppressions, mais pour les insertions et les suppressions, le premier nécessite des rotations O (log n), tandis que le dernier ne prend que O(1) = rotations.
Comme les rotations signifient écrire dans la mémoire, et écrire dans la mémoire coûte cher, les RedBlackTrees sont en pratique plus rapides à mettre à jour que les AvlTrees.
D'après ce que j'ai vu, il semble que les arbres AVL effectuent autant de rotations (parfois de manière récursive dans l'arbre) que nécessaire pour obtenir la hauteur souhaitée de l'arbre AVL (Log n). Cela le rend plus rigide.
Pour Red Black Trees, il existe 5 ensembles de règles dont vous devez vous assurer que vous restez par insertion et suppression, que vous pouvez trouver ici http://en.wikipedia.org/wiki/Red-black_tree .
La principale chose qui pourrait vous aider pour les arbres noirs et rouges est le fait que, selon ces cinq règles, vous pouvez colorer l’arbre jusqu’à la racine de manière récursive si l’oncle est rouge. Si l'oncle est noir, vous devrez effectuer un maximum de deux rotations pour résoudre les problèmes que vous rencontrez, mais après ces une ou deux rotations, vous avez terminé. Emballez-le et dites bonsoir parce que c'est la fin de la manipulation que vous devez faire.
La règle Big est le numéro 5 ... "Chaque chemin simple d'un nœud donné à l'une de ses feuilles descendantes contient le même nombre de nœuds noirs".
Cela entraînera la plupart des rotations dont vous aurez besoin pour que l’arbre fonctionne, ce qui évitera que l’arbre ne soit trop déséquilibré.