La clase Python tiene seis requisitos que se enumeran a continuación. Solo términos en negrita deben leerse como requisitos.¿Alguien conoce esta estructura de datos de Python?
- Cerca O (1) el rendimiento para como muchas de las cuatro operaciones siguientes.
- Mantenimiento ordenado al insertar un objeto en el contenedor.
- Posibilidad de vistazo al último valor (el valor más grande) contenido en el objeto.
- Permitiendo saltos en ambos lados (obteniendo los valores más pequeños o más grandes).
- Capacidad de obteniendo el tamaño total o la cantidad de objetos almacenados.
- Siendo una solución preparada como el código en la biblioteca estándar de Python.
Lo que sigue se dejó aquí por razones históricas (ayuda a los curiosos y demuestran que la investigación se llevó a cabo).
Después de mirar a través de la biblioteca estándar de Python (concretamente de la sección Tipos de datos), que todavía no he encontrado una clase que cumple con los requisitos de los requisitos de una mesa de fragmentación. collections.deque
está cerca de lo que se requiere, pero no es compatible con mantener ordenados los datos contenidos en él. Proporciona:
- append eficiente y pops a cada lado de un deque con O (1) rendimiento.
- Aparece en ambos lados para los datos contenidos en el objeto.
- Obteniendo el tamaño total o el recuento de los objetos contenidos en.
Implementar una solución ineficiente usando listas sería trivial, pero encontrar una clase que funcione bien sería mucho más deseable. En una simulación de memoria creciente sin límite superior, dicha clase podría mantener índices de celdas vacías (eliminadas) y mantener bajos los niveles de fragmentación. El módulo bisect
puede ayudar:
- ayuda a mantener una matriz en orden ordenados mientras que la inserción nuevos objetos en serie.
- Solución preparada para mantener listas clasificadas como objetos se agregan.
- Permitiría ejecutar
array[-1]
a vistazo al último valor en la matriz.
El candidato final que no cumplió totalmente con los requisitos y parecía menos prometedor fue el módulo heapq
. Mientras soportaba lo que parecían inserciones eficientes y aseguraba que array[0]
era el valor más pequeño, la matriz no siempre está en un estado completamente ordenado. No se encontró nada más útil.
¿Alguien sabe de una estructura de clases o los datos en Python que se acerca a estos seis requisitos?
¿Qué 6 requisitos? "Adición eficiente en * cualquier lado *" y "mantener una matriz ordenada mientras se inserta" son contradictorios. – kennytm
Es por eso que estoy buscando ** algo que se acerca ** a los requisitos. –
Supongo que el rendimiento de O (1) para los enlaces es solo si es el mínimo/máximo. – user470379