Estoy buscando una estructura de datos (o estructuras) que me permita mantener una lista ordenada de enteros, sin duplicados, con índices y valores en el mismo distancia.Estructura de datos eficiente para acceso aleatorio rápido, búsqueda, inserción y eliminación
Necesito cuatro operaciones principales para ser eficiente, en orden aproximado de importancia:
- tomando el valor de un índice dado
- encontrar el índice de un valor dado
- insertar un valor en una dado índice
- la eliminación de un valor en un índice dado
Usando una matriz tengo 1 a O (1), pero 2 es O (N) y la inserción y las eliminaciones son costosas (O (N) también, creo).
Una lista vinculada tiene O (1) inserción y eliminación (una vez que tiene el nodo), pero 1 y 2 son O (N), por lo tanto, anula las ganancias.
He intentado mantener dos matrices a [índice] = valor yb [valor] = índice, que convierten 1 y 2 en O (1) pero convierten 3 y 4 en operaciones aún más costosas.
¿Existe una estructura de datos más adecuada para esto?
¿Qué idioma está utilizando? –
Realmente no debería importar, pero es C++ – Leonel
No importa; no todos los idiomas ofrecen las mismas estructuras de datos. Por ejemplo, este problema particular podría resolverse de manera muy eficiente mediante una matriz C Judy o una C# CPTrie. (O, por supuesto, algún tipo de árbol binario equilibrado como sugirió Ayman). La inserción de – Qwertie