web-dev-qa-db-fra.com

Bibliothèque standard de Python - existe-t-il un module pour un arbre binaire équilibré?

Existe-t-il un module pour AVL ou Red-Black ou un autre type d'arbre binaire équilibré dans la bibliothèque standard de Python? J'ai essayé d'en trouver un, mais sans succès (je suis relativement nouveau sur Python).

64
aeter

Non, il n'y a pas d'arbre binaire équilibré dans stdlib. Cependant, d'après vos commentaires, il semble que vous ayez d'autres options:

  • Vous dites que vous voulez un BST au lieu d'une liste pour les recherches de O(log n). Si la recherche est tout ce dont vous avez besoin et que vos données sont déjà triées, le module bisect fournit un algorithme de recherche binaire pour les listes.
  • Mike DeSimone a recommandé des ensembles et des scénarios et vous avez expliqué pourquoi les listes sont trop lentes sur le plan algorithmique. Les ensembles et les dict sont implémentés comme des tables de hachage, qui ont une recherche O(1). La solution à la plupart des problèmes dans Python est vraiment "use a dict").

Si aucune des solutions ne vous convient, vous devrez vous rendre sur un module tiers ou implémenter le vôtre.

33
Mike Graham
14
SilentGhost

Il y a eu quelques cas où j'ai trouvé le package heapq (dans la bibliothèque standard) utile, surtout si à un moment donné vous voulez O(1) = temps d'accès au plus petit élément de votre collection.

Pour moi, je suivais une collection de minuteries et je voulais généralement vérifier si le plus petit temps (celui qui devait être exécuté en premier) était prêt à partir.

9
Paul Osborne

Il existe un nouveau package appelé "bintrees" qui prend en charge les arbres équilibrés, AVL et RB. Vous pouvez le trouver ici .

6
Zaur Nasibov

Découvrez également le projet Tri des conteneurs .

Voici un discours PyCon à ce sujet: https://www.youtube.com/watch?v=7z2Ki44Vs4E

4
postrational

Non, mais il y a AVL Tree Objects for Python (très ancien!) Et un projet (fermé) sur SourceForge - avl-trees pour Python .

2
AndiDog