¿Existe un equivalente de los árboles de Van Emde Boas para cuerdas?


23

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 metroIniciar sesiónmetro=32 tiempo para inicializar una nueva estructura de datos. Nos gustaría apoyar las siguientes operaciones:metro

  • 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).yoO(Iniciar sesiónIniciar sesiónmetro)
  • Eliminar un carácter en la posición en O ( log log m ) .yoO(Iniciar sesiónIniciar sesiónmetro)
  • Devuelve el carácter en la posición en O ( log log m ) .yoO(Iniciar sesiónIniciar sesiónmetro)

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 ) .yoO(Iniciar sesiónIniciar sesiónmetro)
  • Dado un 'puntero', devuelve el carácter en esta posición en .O(1)
  • Dado un 'puntero', elimine el carácter en esta posición en .O(1)
  • Dado un 'puntero', agregue un carácter en esta posición en y devuelva un puntero a la siguiente posición.O(1)
  • (opcional) Dado un 'puntero', devuelva un 'puntero' al siguiente / anterior carácter en .O(1)

Respuestas:


Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.