web-dev-qa-db-fra.com

Arbre AVL vs. Arbre B

En quoi un arbre AVL est-il différent d'un arbre B?

34
neuromancer

Les arborescences AVL sont conçues pour une utilisation en mémoire, où l'accès aléatoire est relativement peu coûteux. Les arbres B sont mieux adaptés au stockage sur disque, car ils regroupent un plus grand nombre de clés dans chaque nœud afin de minimiser le nombre de recherches requises par une opération de lecture ou d'écriture. (C’est pourquoi les arbres B sont souvent utilisés dans les systèmes de fichiers et les bases de données, tels que SQLite .)

39
David

L'arbre AVL et l'arborescence B sont similaires en ce qu'ils sont des structures de données qui, par leurs exigences, permettent de minimiser la hauteur de leurs arbres respectifs. Cette "brièveté" permet d'effectuer une recherche en temps O (log n), car le plus grand nombre de lectures possibles correspond à la hauteur de l'arbre.

    5
   / \
  3   7
 /   / \
1   6   9

Ceci est un arbre AVL, et est un arbre de recherche binaire à sa base. Cependant, il est auto-équilibré, ce qui signifie que lorsque vous ajoutez des éléments à l’arbre, celui-ci se restructure pour conserver une hauteur aussi uniforme que possible. Fondamentalement, il ne permettra pas de longues branches.

Un arbre B le fait également, mais via un schéma de rééquilibrage différent. C'est un peu trop compliqué à écrire, mais si vous recherchez "Animation B-tree" dans Google, il existe de très bons applets qui expliquent assez bien un B-tree.

Ils sont différents en ce sens qu'une arborescence AVL est implémentée avec des solutions basées sur la mémoire, tandis qu'une arborescence B-tree est implémentée avec des solutions basées sur disque. Les arbres AVL ne sont pas conçus pour contenir des collections de données volumineuses, car ils utilisent une allocation de mémoire dynamique et des pointeurs vers le bloc de mémoire suivant. Nous pourrions évidemment reproduire les fonctionnalités de l'arborescence AVL avec des emplacements de disque et des pointeurs de disque, mais cela serait beaucoup plus lent car nous aurions encore un nombre important de lectures pour lire une arborescence de très grande taille.

Lorsque la collecte de données est si importante qu'elle ne tient pas dans la mémoire, la solution est un arbre B (fait intéressant: il n'y a pas de consensus sur ce que représente réellement le "B"). Un arbre B contient de nombreux enfants sur un nœud et de nombreux pointeurs sur ce nœud. Ainsi, lors d’une lecture de disque (la lecture d’un bloc de disque peut prendre environ 10 ms), la quantité maximale de données de nœud pertinentes est renvoyée, ainsi que des pointeurs vers les blocs de disque "nœud feuille". Cela permet d’amortir le temps de récupération des données en temps de journalisation, ce qui rend le B-tree particulièrement utile pour les implémentations de récupération de bases de données et de grands ensembles de données.

35
Keshav Saharia

Un arbre AVL est un arbre de recherche binaire à auto-équilibrage, équilibré pour maintenir la hauteur O (log n).

Un arbre B est un arbre équilibré, mais ce n'est pas un arbre binaire. Les nœuds ont plus d'enfants, ce qui augmente le temps de recherche par nœud mais diminue le nombre de nœuds que la recherche doit visiter. Cela les rend bons pour les arbres basés sur disque. Pour plus de détails, voir le Article Wikipedia .

13
Michael Ekstrand

AVL est auto-équilibré, garantissant que toutes les opérations sont O (log n) dans les cas moyens et extrêmes.

3
James Kolpack

Une arborescence AVL est une arborescence binaire à auto-équilibrage qui active O(lgN) et le cas le plus défavorable pour les opérations d'insertion et de suppression de la recherche. Il est utilisé pour les arbres de recherche sauvegardés en mémoire (jeux de données de taille moyenne).

Un arbre B est principalement utilisé comme arbre de recherche sauvegardé sur le stockage pour de très grands ensembles de données, car il nécessite moins de lectures sur le disque (chaque nœud contenant N clés où N> 1). On dit qu'un arbre B est un arbre B (N, N + 1) où N est le nombre de clés par nœud et N + 1 le nombre d'enfants par nœud. Plus il y a de clés par nœud, moins vous aurez besoin de lire à partir du disque et ce sera naturellement un arbre moins profond (moins de niveaux).

1
Aaron Dancygier

Le B-tree utilise toutes les idées décrites ci-dessus. En particulier, un arbre B:

1)keeps keys in sorted order for sequential traversing
2)uses a hierarchical index to minimize the number of disk reads
3)uses partially full blocks to speed insertions and deletions
4)keeps the index balanced with an elegant recursive algorithm

En outre, un arbre B minimise les pertes en s'assurant que les nœuds intérieurs sont au moins à moitié pleins. Un arbre B peut gérer un nombre arbitraire d'insertions et de suppressions.

1
Tanmoy De

Ils sont en effet très différents, bien qu’ils servent en grande partie le même objectif: soutenir une table associative. Historiquement, les arborescences AVL étaient censées être plus performantes que les arborescences B pour les opérations en mémoire, mais cela était particulièrement vrai lorsque l'accès à la mémoire était peu coûteux (comparé aux cycles du processeur).

Bien qu'ils soient généralement utilisés dans les bases de données stockées pour les clés de longueur variable, les arborescences B sont plus performantes pour les enregistrements de longueur fixe et les enregistrements courts (clé + données). Pour de telles utilisations, cela peut considérablement surperformer les arborescences AVL pour les utilisations en mémoire, à la fois en termes d'encombrement de la mémoire (car ils stockent les données de manière plus compacte) et de vitesse (leur localisation en cache serait bien meilleure).

L2 est une bibliothèque de structures de données implémentant des tables et des séquences associatives très rapides sur des arbres B. Il possède également des arbres AVL, et il est facile de comparer les performances de deux.

1
Ciprian Niculescu

D'autres répondants ont déjà fourni des détails techniques assez approfondis sur AVL et B-Tree, mais j'aimerais ajouter des informations relativement novices sur ces deux :) -

  • L'arborescence AVL est une arborescence binaire, tandis que l'arborescence B est un arborescence à plusieurs voies (arborescence N-aire), c'est-à-dire tout nœud de arborescence AVL peut avoir au maximum deux nœuds enfants d'informations/données tandis que tout nœud d'un arbre B peut avoir n nœuds et n-1 informations/données. Pour B-tree, n est également appelé son ordre.
0
RBT

En termes simples - 

L'arborescence AVL et l'arborescence de recherche binaire sont identiques, mais l'arborescence AVL est soumise à la contrainte selon laquelle la différence entre la hauteur des sous-arborescences gauche et droite doit être 0, 1 ou -1.

Si un arbre de recherche binaire remplit ces conditions, il sera appelé arbre AVL.

Arbre de recherche binaire + HEIGHT CONDITION est un arbre AVL.

Voir: Introduction aux algorithmes par Cormen https://books.google.co.in/books ...

0
Sagar Chand