Des exemples concrets d'utilisation des arbres binaires de recherche?

voix
14

Je comprends comment les arbres binaires de recherche sont mis en œuvre, mais je ne suis pas sûr quels sont les avantages de son utilisation sur les tables de hachage que la plupart des langages de programmation ont intégré dans leurs bibliothèques standard.

Quelqu'un pourrait-il s'il vous plaît fournir des exemples de problèmes réels avec résoluble arbres binaires de recherche?

Créé 16/02/2011 à 00:44
source utilisateur
Dans d'autres langues...                            


5 réponses

voix
1

Un exemple de l'endroit où un arbre binaire est nécessaire est de partitions espace binaires en infographie

http://en.wikipedia.org/wiki/Binary_space_partitioning

Un arbre binaire est nécessaire parce que l'algorithme nécessite la préservation des relations entre les noeuds dans l'arbre binaire. Il y a beaucoup d'autres algorithmes où la structure de l'arbre est important, et donc une table de hachage n'est pas une structure appropriée.

Une autre bonne raison d'utiliser un arbre binaire au lieu d'une table de hachage est quand vous ne pouvez pas générer facilement un hachage efficace pour vos éléments de données, mais vous pouvez générer une fonction de comparaison.

Souvent, pour le stockage simple et la récupération des données d'une table de hachage est plus optimale, mais plus complexe à mettre en œuvre.

Créé 16/02/2011 à 00:53
source utilisateur

voix
0

L'un des plus négligés est que de nombreux systèmes de fichiers utilisent des arbres binaires pour gérer les listes de répertoires. Ils utilisent rarement un arbre binaire simple, mais quelques variations comme un B-tree. En effet, la question de stockage sur disque de l'arbre est très important pour les détails de mise en œuvre. La raison pour laquelle ils utilisent ce type de structure est pour l'efficacité et la vitesse. Cela leur permet de faire des choses comme des milliers de support de fichiers dans un répertoire. Les comparaisons pour la création de fichiers et les délais de suppression mettent en évidence l'efficacité de cet aspect du système de fichiers.

arbres binaires sont également utilisés sur de nombreux jeux qui rendent des objets 3D. Encore une fois, la raison est la vitesse. En fait, la vitesse est si important que certains moteurs de jeu, comme le moteur de Quake ont en fait l'arbre binaire pré-généré et pré-optimisés dans le cadre du processus de construction de la carte.

Créé 16/02/2011 à 00:56
source utilisateur

voix
0

Une chose à noter est que Binary arbre de recherche sont un espace efficace. Par exemple, vous avez 10 entiers pour stocker et vous avez une fonction de hachage qui mappe 0-99, alors u besoin d'un tableau de 100 entiers. Si vous utilisez binaire Rechercher Arbre, alors vous n'allouer autant de mémoire que nécessaire par 10 éléments

Créé 16/02/2011 à 00:57
source utilisateur

voix
29

Il y a quelques avantages théoriques des arbres binaires de recherche sur les tables de hachage:

  1. Ils stockent leurs éléments dans l' ordre de tri . Cela signifie que si vous voulez stocker le conteneur d'une manière où vous pouvez facilement visiter les valeurs ordre de tri, un BST est probablement un meilleur choix qu'une table de hachage. Par exemple, si vous souhaitez stocker une collection d'étudiants et d' imprimer tous les étudiants dans l' ordre alphabétique, un BST est un choix nettement mieux qu'une table de hachage.

  2. Ils prennent en charge efficacement les requêtes de gamme. Parce que BSTS sont stockés dans l' ordre de tri, il est facile de répondre à des questions de forme « Quelles sont les valeurs dans l'intervalle [x, y]? » dans un arbre de recherche binaire. Pour ce faire, vous faites une recherche dans l'arbre pour le plus grand que le plus petit élément x et le plus grand élément plus petit que y, puis itérer sur les éléments de l'arbre entre eux. Ces deux requêtes exécutées en O (n lg) du temps dans un arbre équilibré, de sorte que le temps d' exécution total pour cette opération est O (n + k lg), où k est le nombre d'éléments correspondant à la requête.

  3. Ils soutiennent efficacement les requêtes plus proche voisin. Les tables de hachage sont spécifiquement conçus de sorte que produisent même légèrement différents codes de hachage très différentes. Cela donne les valeurs de hachage de la dispersion dont ils ont besoin pour éviter le regroupement trop d'éléments dans un seul endroit. Cependant, cela signifie aussi que vous devez faire une analyse linéaire sur la table de hachage pour trouver des éléments qui pourraient être « proche » de ce que vous cherchez. Avec un BST, vous pouvez efficacement trouver le prédécesseur et le successeur de la valeur que vous souhaitez, même si ce n'est pas dans l'arbre.

  4. Ils peuvent avoir de meilleures garanties les plus défavorables. La plupart des implémentations de table de hachage ont une sorte de cas dégénéré où une opération peut se dégrader à O (n) dans le pire des cas. Une table de hachage de sondage linéaire ou une table de hachage chaînée peuvent, avec un mauvais ensemble d'éléments, exiger O (n) par consultation ou exiger O (n) sur une nouvelle mouture. L' insertion dans certains types de BSTS équilibrés, comme des arbres rouge / noir, AVL, ou des arbres AA, est toujours pire cas : O (logn).

Si vous êtes prêt à généraliser BSTS à des structures d'arbres plus élaborées, alors il y a de nombreuses applications dans lesquelles un arbre peut être utilisé pour résoudre des problèmes beaucoup plus efficacement que dans une table de hachage. Voici quelques exemples:

  1. kd arbres vous permettent de stocker des données multidimensionnelles , tout en soutenant les requêtes de plages rapides dans l' espace multidimensionnel, ainsi que l' efficacité des recherches plus proches voisins. Vous pouvez les utiliser pour la classification (algorithmes d'apprentissage paresseux) ou de la géométrie de calcul.

  2. Arbres Link / coupés peuvent être utilisés pour résoudre les problèmes max débit beaucoup plus efficace que la plupart des algorithmes conventionnels permettraient. Bonne poussée / algorithmes utilisent pour ré - étiqueter d' accélérer leur mise en œuvre.

  3. Forêts disjoints-ensemble peuvent être utilisés pour maintenir les partitions d'éléments comme asymptotiquement efficace que possible (α amorti (n) par mise à jour, où α (n) est la fonction inverse Ackermann). Ils sont utilisés dans de nombreux algorithmes d'arbres minimum couvrant rapides, ainsi que des algorithmes correspondant au maximum.

  4. Tas binaires peuvent être utilisés pour mettre en œuvre efficacement les files d' attente prioritaires. Arbres plus complexes peuvent être utilisés pour construire des tas binomial et des tas de Fibonacci , qui sont d' une grande importance dans la science informatique théorique.

  5. Les arbres de décision peuvent être utilisés dans l' apprentissage de la machine pour la classification, et comme un modèle dans la science informatique théorique pour prouver les limites sur les durées de fonctionnement différents algorithmes.

  6. Arbres de recherche ternaires sont une alternative aux essais qui sont basés sur BST légèrement modifié. Ils permettent une recherche très rapide et l' insertion d'éléments et ensembles de données rares sont assez concis.

  7. B-arbres sont utilisés par de nombreux systèmes de base de données pour rechercher efficacement des éléments où l' accès au disque est un facteur limitant.

  8. Arbres de partitionnement de l' espace binaires sont une généralisation de kd arbres qui peuvent être utilisés pour rendre rapidement l' infographie (ils ont été utilisés pour optimiser le rendu dans le jeu original Doom) et faire de détection de collision.

  9. BK arbres vous permettent de déterminer rapidement tous les mots qui sont à une certaine distance d'édition d'un autre mot, et plus généralement de trouver tous les points dans un espace métrique à une certaine distance d'un autre point.

  10. Arbres de fusion sont une alternative aux tables de hachage pour les clés entières qui ont un soutien extrêmement rapide pour recherches, les insertions et suppressions.

  11. arbres van Emde Boas autre alternative pour hacher des tables pour les touches de nombres entiers qui prennent en charge recherche, insertion, suppression, successeur et prédécesseur en O (lg lg n) par élément. Certains systèmes de bases de données utilisent des arbres VEB pour optimiser les performances.

Je ne sais pas comment sur le sujet de cette réponse, mais il devrait vous donner une idée de la façon dont BSTS merveilleux et puissants et des structures d'arbres plus généraux peuvent être.

Créé 16/02/2011 à 01:05
source utilisateur

voix
0

Cela devrait probablement être un commentaire, mais BST (s) d'auto-équilibrage (log (n)) sont largement utilisés plutôt que BSTS. BSTS lisses ont le pire des cas O (N) de temps d'insertion / retrait.

Créé 16/02/2011 à 03:14
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more