web-dev-qa-db-fra.com

Différence entre les arbres AVL et les arbres évasés

J'étudie différents arbres et j'ai rencontré des arbres AVL et des arbres évasés. je veux savoir

  1. Quelle est la différence entre les arbres AVL et les arbres évasés?
  2. Sur quelle base sélectionnons-nous ces arbres?
  3. Quels sont les points positifs et négatifs de ces arbres?
  4. Quelles sont les performances de ces arbres en termes de grande notation O?
43
venkysmarty
  1. Les arborescences splay et AVL sont des arborescences de recherche binaires avec d'excellentes garanties de performances, mais elles diffèrent dans la façon dont elles permettent de garantir ces performances. Dans un arbre AVL, la forme de l'arbre est contrainte à tout moment de telle sorte que la forme de l'arbre est équilibrée, ce qui signifie que la hauteur de l'arbre ne dépasse jamais O (log n). Cette forme est conservée lors des insertions et des suppressions et ne change pas pendant les recherches. Par contre, les arbres distants restent efficaces en remodelant l'arbre en réponse aux recherches qu'il contient. De cette façon, les éléments fréquemment consultés se déplacent vers le haut de l'arborescence et ont de meilleurs temps de recherche. La forme des arbres évasés n'est pas contrainte et varie en fonction des recherches effectuées.

  2. Il n'y a pas de règle stricte à ce sujet. Cependant, une différence clé entre les structures est que les arbres AVL garantissent une recherche rapide (O (log n)) sur chaque opération, tandis que les arbres splay ne peuvent garantir que toute séquence de n opérations prend au plus O (n log n) temps. Cela signifie que si vous avez besoin de recherches en temps réel, l'arborescence AVL sera probablement meilleure. Cependant, les arbres splay ont tendance à être beaucoup plus rapides en moyenne, donc si vous voulez minimiser la durée totale d'exécution des recherches d'arbre, l'arbre splay est susceptible d'être meilleur. De plus, les arbres splay prennent en charge certaines opérations telles que le fractionnement et la fusion très efficacement, tandis que les opérations d'arbre AVL correspondantes sont plus impliquées et moins efficaces. Les arborescences Splay sont plus économes en mémoire que les arborescences AVL, car elles n'ont pas besoin de stocker les informations d'équilibre dans les nœuds. Cependant, les arborescences AVL sont plus utiles dans les environnements multithread avec beaucoup de recherches, car les recherches dans une arborescence AVL peuvent être effectuées en parallèle alors qu'elles ne peuvent pas l'être dans les arborescences. Parce que les arborescences splay se remodèlent en fonction des recherches, si vous n'avez besoin d'accéder qu'à un petit sous-ensemble des éléments de l'arborescence, ou si vous accédez à certains éléments beaucoup plus que d'autres, l'arborescence splay surclassera l'arborescence AVL. Enfin, les arbres splay ont tendance à être plus faciles à implémenter que les arbres AVL, car la logique de rotation est beaucoup plus facile.

  3. Voir (2)

  4. L'insertion, la suppression et les recherches dans l'arborescence AVL prennent chacune O (log n). Les arbres évasés ont ces mêmes garanties, mais la garantie n'est que dans un sens amorti. Toute longue séquence d'opérations prendra au plus O (n log n) temps, mais les opérations individuelles peuvent prendre jusqu'à O(n) time).

J'espère que cela t'aides!

79
templatetypedef

1) Quelle est la différence entre les arbres AVL et les arbres évasés?

Ils sont similaires dans leur structure et les opérations que nous leur faisons appel. La différence est que, dans les arbres évasés, après chaque opération, nous essayons de garder l'arbre presque parfaitement équilibré afin que les opérations futures prennent moins de temps.

2) Sur quelle base sélectionnons-nous ces arbres?

Les arborescences Splay sont toujours meilleures que les arborescences de recherche binaires lorsque, votre application traite un grand nombre de données dans l'arborescence, mais aura besoin d'accéder à un sous-ensemble de données très fréquemment que d'autres. Dans ce cas, les données auxquelles vous accédez fréquemment s'approcheront de la racine en raison de l'affichage. De plus, n'importe quel nœud est alors accessible avec moins de temps qu'auparavant.

En règle générale pour sélectionner ces arborescences, si vous avez besoin d'un temps de log (n) "moyen" sur une période d'opérations d'arborescence, utilisez l'arborescence splay. L'arbre binaire ne peut pas garantir cela.

3) Quels sont les points positifs et négatifs de ces arbres?

Les points positifs pour les deux sont que vous contournez théoriquement log (n) dans ces deux structures de données.

Comme mentionné précédemment, les arborescences ont un log (n) moyen sur un certain nombre d'opérations. Cela signifie que, peut-être, vous avez obtenu une complexité temporelle pour une opération au moins une fois dans cet ensemble. Mais cela sera compensé lors de l'accès aux articles fréquents.

Le négatif de l'arbre de recherche binaire est que, vous devez avoir la chance d'avoir toujours log (n). Si les clés ne sont pas aléatoires, l'arborescence se réduira à une forme de liste avec un seul côté.

4) Quelles sont les performances de ces arbres en termes de grande notation O?

Splay tree Log (n) on Average pour un groupe d'opérations d'arborescence. Arbre binaire Log (n) uniquement si vos clés vont au hasard.

Les résultats sur le runtime sont évidents ici profil d'exécution du splay tree Vous pouvez voir la différence de runtime dans la recherche avec et sans splaying.

3