ejercicios - Biblioteca estándar de Python: ¿hay algún módulo para árbol binario equilibrado?
arboles binarios en python (6)
¿Hay algún módulo para AVL o Red-Black u otro tipo de árbol binario balanceado en la biblioteca estándar de Python? Intenté encontrar uno, pero sin éxito (soy relativamente nuevo en Python).
Consulte también el proyecto de Contenedores ordenados.
Aquí hay una charla sobre PyCon: https://www.youtube.com/watch?v=7z2Ki44Vs4E
Hay un nuevo paquete llamado "bintrees" que admite árboles equilibrados, AVL y RB. Puedes encontrarlo here .
Hubo algunos casos en los que he encontrado que el paquete heapq (en la biblioteca estándar) es útil, especialmente si en un momento dado desea O (1) tiempo de acceso al elemento más pequeño en su colección.
Para mí, estaba haciendo un seguimiento de una colección de temporizadores y, por lo general, solo me interesaba comprobar si el tiempo más pequeño (el que debía ejecutarse primero) estaba listo todavía.
No, no hay un árbol binario balanceado en el stdlib. Sin embargo, de sus comentarios, parece que puede tener otras opciones:
- Usted dice que quiere una BST en lugar de una lista para búsquedas
O(log n)
. Si la búsqueda es todo lo que necesita y sus datos ya están ordenados, el módulobisect
proporciona un algoritmo de búsqueda binario para las listas. - Mike DeSimone recomendó sets y dicts y explicó por qué las listas son demasiado lentas algorítmicamente. Los conjuntos y los dictados se implementan como tablas hash, que tienen una búsqueda O (1). La solución para la mayoría de los problemas en Python es "usar un dict".
Si ninguna de las soluciones funciona bien para usted, tendrá que ir a un módulo de terceros o implementar el suyo propio.
No, pero hay AVL Tree Objects para Python (¡muy antiguo!) Y un proyecto (cerrado) en SourceForge - avl-trees para Python .
no hay nada de este tipo en stdlib, por lo que puedo ver , pero un vistazo rápido a pypi trae algunas alternativas :