Necesitamos que ADT tenga funciones de búsqueda y rango. Es decir, además de la interfaz del mapa STL, se requiere una función 'int get_rank (clave)'.Árbol de términos en C + +
aplicación estándar de dicha función requiere el apoyo y la actualización de un campo entero extra en cada nodo del árbol de auto-equilibrado de búsqueda (por ejemplo, en el árbol negro-rojo, usado en STL mapa/set). Pero parece que el mapa/conjunto de STL no hace esto.
Estamos buscando una solución basada en contenedores estándar (STL, Boost) con la mejor Complejidad de Tiempo posible: buscando/agregando/borrando un elemento tome O (log n) (como en el mapa/conjunto de AWL), computar el rango por una clave requiere también O (log n).
Por rango de un elemento, nos referimos a la posición del elemento en la secuencia ordenada de todos los elementos del mapa/conjunto.
Ejemplo. set = {0, 4, 6, 7, 8} rango (0) = 1, el rango (4) = 2, fila (6) = 3, fila (7) = 4, fila (8) = 5.
En nuestra opinión, bajo la constricción de Complejidad del Tiempo anterior, el problema no puede resolverse mediante una combinación de dos mapas, uno por clave y otro por rango.
Gracias.
por rango, ¿te refieres al índice? –
Las complejidades de búsqueda, inserción y eliminación a menudo están inversamente relacionadas entre sí. No podemos decidir qué compromiso es mejor para usted. – luke
Existe una implementación del árbol de rangos que satisface las restricciones de complejidad de todo el tiempo, véase, por ejemplo, el libro de Cormen, T.H. "Introducción a los algoritmos". – Slava