à l'école, on nous apprend comment équilibrer un arbre AVL lors d'une insertion ou d'une suppression.
Comment ce type de connaissances sera-t-il réellement utile dans le monde réel? Quelqu'un peut-il donner un exemple sur le moment où ce type de connaissances serait réellement utile?
D'après ce que j'ai vu, sur le lieu de travail, de tels détails n'apparaissent presque jamais ...
Je peux voir à quel point des connaissances détaillées sur les algorithmes et certaines structures de données peuvent être importantes, mais pas sur des détails tels que les rotations d'arbres AVL (et des concepts détaillés similaires).
Merci!
Réponses:
L'étude des arbres AVL peut être utile pour les raisons suivantes:
C'est une excellente pratique pour raisonner sur les données abstraites. Vous n'avez pas à penser à un arbre particulier, vous devez considérer toutes les possibilités. La pratique de ce type de raisonnement peut également aider dans des cas plus simples.
C'est une excellente pratique pour comprendre les prédicats et les contrats. S'assurer qu'un arbre est équilibré et que les outils que vous utilisez pour prouver l'équilibre de chaque opération peuvent être appliqués, par exemple, aux problèmes de sécurité et au code parallèle.
Il vous permet d'écrire vos propres variantes ou même de créer des types de structures de données entièrement nouveaux.
Vous devrez peut-être simplement implémenter une arborescence AVL pour une nouvelle bibliothèque ou plate-forme.
Vous pouvez débattre des mérites particuliers de l'apprentissage de chaque type d'algorithme de tri ou de chaque type d'arbre équilibré. Il ne compte pas vraiment qui ceux que vous finissez par apprendre, mais vous devez être sûr d'obtenir une couverture complète des sujets les plus importants.
Si vous voulez voir à quel point les algorithmes de connaissance sont importants dans le monde réel, lisez " Comment tuer une grande idée! ", Un article dans Inc sur la chute de Friendster, et comment la moindre application de principes fondamentaux pour améliorer l'efficacité aurait pu les aider.
la source
En plus des points Macneils ...
Les arbres rouge-noir sont peut-être plus directement utiles car il existe des opérations efficaces utiles qui ne sont pas largement prises en charge dans les implémentations de bibliothèques standard telles que le C ++
std::map
(au moins AFAIK). Les arbres rouge-noir peuvent prendre en charge le «fractionnement» (couper un arbre en deux, un contenant des clés de moins qu'une clé spécifiée et un contenant des clés de plus) et «joindre» (l'inverse, combinant un arbre de grandes clés avec un arbre de petites ) peuvent toutes deux être effectuées en temps O (log n), mais si elles sont prises en charge dans les bibliothèques de conteneurs standard, cela semble être une chose bien cachée.Cependant, "augmenter" les structures de données est courant. Un exemple simple est l'ajout d'informations sur la taille de la sous-arborescence aux nœuds dans presque toutes les structures de données arborescentes pour prendre en charge l'indexation O (log n). Des exemples plus sophistiqués incluent les arbres d'intervalle.
Une fois que vous avez l'idée d'augmenter les structures de données, il existe de nombreuses variantes qui peuvent être utiles pour des applications particulières - et très peu sont disponibles pré-emballés sous forme de bibliothèque. Les structures de données de bibliothèque standard existantes (par exemple, par exemple
std::map
) ne peuvent pas être augmentées à moins de copier le code source et de le modifier directement - vous ne pouvez pas les augmenter en utilisant les paramètres du modèle.Bien sûr, 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 rouge-noir si vous effectuez beaucoup plus de recherches que d'insertions / suppressions (et à condition que vous n'ayez pas besoin de ces opérations de fractionnement / jointure), donc selon l'application, ils peuvent être une très bonne base pour augmentant.
la source
Non
Ce n'est vraiment pas utile dans le monde réel ...
Sauf pour vous faire réfléchir .
Le monde réel a des problèmes beaucoup plus difficiles , dont beaucoup n'ont pas déjà de solutions bien connues.
la source