Necesito una estructura de datos para almacenar un número de elementos, cada uno de los cuales está asociado con un tiempo diferente . varía y, aunque tiene un límite superior teórico, este es muchos órdenes de magnitud más grande de lo que se usa típicamente.
A través de mi aplicación puedo asegurar que:
Los elementos insertados son siempre más nuevos que todos los elementos existentes, es decir, si se inserta un elemento asociado con un tiempo , entonces . Los elementos se insertan uno por uno.
Solo se eliminan los elementos más antiguos, es decir, si se elimina el elemento , entonces . Las eliminaciones ocurren principalmente una por una, pero no hay daño directo si la eliminación de un elemento se retrasa, siempre que la fracción de elementos almacenados espuriosamente sea menor que 1.
Además de insertar y quitar, lo único que necesito hacer es encontrar los dos elementos vecinos durante un tiempo determinado con . Con otras palabras, necesito encontrar los dos elementos j y k de manera que t_j <\ tilde {t} <t_k y ∄ l ∈ \ {1, ..., n \}: t_j <t_l <t_k .
Mis criterios para la estructura de datos son:
- Encontrar elementos como se describió anteriormente debe ser lo más rápido posible.
- Insertar y quitar debe ser rápido.
- La estructura de datos es comparablemente simple de implementar.
Mientras no estemos hablando de una pequeña compensación de tiempo de ejecución, cada criterio tiene prioridad sobre el siguiente.
Mi investigación hasta ahora ha arrojado que la respuesta es probablemente algún tipo de árbol de búsqueda de equilibrio automático, pero no pude encontrar ninguna información sobre cuál de ellos es mejor para el caso de inserción o eliminación unilateral, y probablemente me costará un tiempo considerable para descubrirme a mí mismo. Además, solo encontré información incompleta sobre qué tan bien se autoorganizan los árboles y qué tan rápido (por ejemplo, los árboles AVL se autoorganizan de manera más rígida que los árboles rojo-negros), y mucho menos cómo esto se ve afectado por la inserción o eliminación unilateral.