Alguien que conozco está planeando implementar un editor de texto en el futuro cercano, lo que me llevó a pensar qué tipo de estructuras de datos son rápidas para un editor de texto. Las estructuras más utilizadas son aparentemente cuerdas o amortiguadores de espacio .
Los árboles de Van Emde Boas son las colas de prioridad más rápidas, si no le importa un límite superior en la cantidad de elementos que puede poner en él y un gran costo de inicialización. Mi pregunta es si existe alguna estructura de datos que sea tan rápida como el árbol de Van Emde Boas, pero que admita las operaciones del editor de texto.
Solo necesitamos admitir hasta caracteres en nuestra estructura de datos (por lo tanto, si log m = 32 , entonces admitimos hasta 4 GB de caracteres ASCII). Estamos permitidos √ tiempo para inicializar una nueva estructura de datos. Nos gustaría apoyar las siguientes operaciones:
- Inserte un carácter en la posición en O ( log log m ) (y, por lo tanto, aumente la posición de cada carácter posterior en 1).
- Eliminar un carácter en la posición en O ( log log m ) .
- Devuelve el carácter en la posición en O ( log log m ) .
Entonces, insert (0, 'a') seguido de insert (0, 'b') da como resultado "ba".
Aún mejor sería esto:
- Devuelva un 'puntero' a algún índice en O ( log log m ) .
- Dado un 'puntero', devuelve el carácter en esta posición en .
- Dado un 'puntero', elimine el carácter en esta posición en .
- Dado un 'puntero', agregue un carácter en esta posición en y devuelva un puntero a la siguiente posición.
- (opcional) Dado un 'puntero', devuelva un 'puntero' al siguiente / anterior carácter en .
fuente