Sean post (actuellement acceptées) est plein de bêtises. Désolé Sean, je ne veux pas être impoli; j'espère pouvoir vous convaincre que ma déclaration est basé sur des faits.
Ils sont totalement différents dans leur cas d'utilisation, de sorte qu'il n'est pas possible de faire une comparaison.
Ils sont tous les deux utilisés pour la maintenance d'un ensemble totalement ordonné les éléments avec une rapide recherche, d'insertion et de suppression. Ils ont la même interface et la même intention.
RB arbres sont généralement des structures en mémoire utilisé pour fournir un accès rapide (idéalement O(logN)) de données. [...]
toujours O(log n)
B-arbres sont généralement basés sur le disque structures, et sont donc intrinsèquement plus lente que les données en mémoire.
Non-sens. Lorsque vous stockez des arbres de recherche sur le disque, vous utilisez généralement les B-arbres. C'est bien vrai. Lorsque vous stockez des données sur le disque, c'est plus lent pour accéder à des données en mémoire. Mais un rouge-noir arbre stockées sur le disque est aussi plus lent qu'un rouge-noir arbre stockées dans la mémoire.
Vous êtes à comparer des pommes et des oranges ici. Ce qui est vraiment intéressant est la comparaison de dans-mémoire B-arbres et en mémoire des arbres rouge-noir.
[En aparté: B-arbres, plutôt que des arbres rouge-noir, sont théoriquement efficace dans le I/O-modèle. J'ai testé expérimentalement (et validés) le I/O-modèle pour le tri; j'avais espérer qu'il fonctionne pour les B-arbres.]
B-les arbres sont rarement des arbres binaires, le nombre d'enfants d'un nœud peut avoir est généralement un grand nombre.
Pour être clair, la gamme de taille de B-arbre de nœuds est un paramètre de l'arbre (en C++, vous pouvez utiliser une valeur entière comme un paramètre du modèle).
La gestion de la structure B-tree peut être assez compliqué si les données changent.
Je me souviens à être beaucoup plus simple à comprendre (et à mettre en œuvre) que les arbres rouge-noir.
B-arbre essayer de minimiser le nombre d'accès disque, de sorte que la récupération de données est raisonnablement déterministe.
C'est bien vrai.
Il n'est pas rare de voir quelque chose comme 4 B-arbre d'accès nécessaires à la recherche d'un bit de données dans un base de données.
Obtenu des données?
Dans la plupart des cas, je dirais que en mémoire RB arbres sont plus rapides.
Obtenu des données?
Parce que la recherche est binaire, il est très facile de trouver quelque chose. B-arbre peut avoir plusieurs enfants par nœud, donc sur chaque nœud, vous devez analyser le nœud de regarder pour enfant approprié. C'est un O(N) opérations.
La taille de chaque nœud est un paramètre fixe, de sorte que même si vous faites une analyse linéaire, il est O(1). Si nous grands-oh sur la taille de chaque nœud, notez que généralement garder le tableau trié il est donc O(log n).
Sur un RB-arbre ce serait O(logN) depuis que vous êtes en train de faire une comparaison et puis de bifurquer.
Vous êtes à comparer des pommes et des oranges. Le O(log n) c'est parce que la hauteur de l'arbre est au plus O(log n), comme elle l'est pour un B-arbre.
Aussi, à moins que vous la jouer méchant allocation des trucs avec les arbres rouge-noir, il semble raisonnable de conjecturer que les B-arbres ont un meilleur comportement de mise en cache (il accède à un tableau, pas des pointeurs éparpillés sur toute la place, et a moins de l'allocation des frais généraux de l'augmentation de la mémoire de la localité même plus), ce qui pourrait l'aider dans la course de vitesse.
Je peux montrer des preuves expérimentales que les B-arbres (avec les paramètres de la taille 32 et 64 ans, en particulier) sont très compétitifs avec des arbres rouge-noir pour les petites tailles, et supérieure à celle des mains vers le bas, même modérément grandes valeurs de n. Voir http://idlebox.net/2007/stx-btree/stx-btree-0.8.3/doxygen-html/speedtest.html
B-arbres sont plus rapides. Pourquoi? Je conjecture que c'est en raison de la localité de mémoire, un meilleur comportement de mise en cache et moins pointeur de chasser (qui sont, si pas les mêmes choses, qui se chevauchent dans une certaine mesure).