web-dev-qa-db-fra.com

Avl arbres et le monde réel

à l'école, nous apprendons comment nous pouvons équilibrer un arbre AVL sur une insertion ou une suppression.

Comment ce type de connaissances va-t-il réellement être utile dans le monde réel? Quelqu'un peut-il donner un exemple lorsque ce type de connaissances serait-il utile?

D'après ce que j'ai vu, sur le lieu de travail, de tels détails ne sont presque jamais disponibles ...

Je peux voir à quel point les connaissances détaillées sur les algorithmes et certaines structures de données peuvent être importantes, mais pas de tels détails que les rotations AVL Tree (et des concepts détaillés similaires).

merci!

14
rrazd

En plus des points de macneils ...

Les arbres rouges sont peut-être plus directement utiles car il existe des opérations efficaces utiles qui ne sont pas largement prises en charge dans des implémentations de bibliothèque standard telles que le C++ std::map (au moins Afaik). Les arbres rouges-noirs peuvent supporter "Split" (couper un arbre en deux, une des touches contenant moins d'une clé spécifiée et une touche contenant plus grande) et "Rejoindre" (l'inverse, combinant un arbre de grandes touches avec un arbre de petit Les touches) peuvent tous deux être effectuées dans O (journal n), mais si elles sont prises en charge dans des bibliothèques de conteneurs standard, il semble être une chose bien cachée.

Cependant, les structures de données "augmenter" sont courantes. Un exemple simple consiste à ajouter de la taille des informations sur les nœuds dans des nœuds dans presque toutes les structures de données d'arborescence pour prendre en charge O (log n) sous-dominant. Les exemples plus sophistiqués incluent des arbres d'intervalles.

Une fois que vous avez eu l'idée d'augmenter des structures de données, de nombreuses variations peuvent être utiles pour des applications particulières - et très peu sont disponibles préemballées en tant que bibliothèque. Structures de données standard-bibliothèque existantes (par exemple, telles que std::map) ne peut pas être augmenté à court de copier le code source et de la modifier directement - vous ne pouvez pas les augmenter à l'aide des paramètres de modèle.

Bien entendu pour développer une structure de données augmentée, vous devez comprendre la structure de données non augmentée sous-jacente.

Les arbres AVL peuvent être plus rapides que les arbres noirs rouges Si vous effectuez beaucoup plus de recherches que d'inserts/suppresses (et à condition que vous n'ayez pas besoin de ces opérations de scission/jointure), donc en fonction de l'application, ils peuvent être une très bonne base pour augmenter.

5
Steve314

Non

Ce n'est vraiment pas utile dans le monde réel ...

Sauf to Faites-vous penser.

Le monde réel a problèmes beaucoup plus difficiles, beaucoup d'entre eux ne pas ont déjà des solutions bien connues.

5
Steven A. Lowe