Estructura de datos con búsqueda, inserción y eliminación en tiempo amortizado

25

¿Existe una estructura de datos para mantener una lista ordenada que admita las siguientes operaciones en tiempo amortizado?O(1)

  • GetElement (k) : devuelve el elemento de la lista.k

  • InsertAfter (x, y) : inserte el nuevo elemento y en la lista inmediatamente después de x.

  • Eliminar (x) : Eliminar x de la lista.

Para las dos últimas operaciones, puede suponer que x se proporciona como un puntero directamente en la estructura de datos; InsertElement devuelve el puntero correspondiente para y. InsertAfter (NULL, y) inserta y al principio de la lista.

Por ejemplo, comenzando con una estructura de datos vacía, las siguientes operaciones actualizan la lista ordenada como se muestra a continuación:

  • InsertAfter (NULL, a) [una]
  • InsertAfter (NULL, b) [b, a]
  • Insertar después (b, c) [b, c, a]
  • Insertar después (a, d) [b, c, a, d]
  • Eliminar (c) [malo]

Después de estas cinco actualizaciones, GetElement (2) debería devolver d, y GetElement (3) debería devolver un error.

A
fuente
2
En Algoritmos óptimos para indexación de listas y clasificación de subconjuntos (1989) encontré un solución a este problema. Ω(log nlog log n)
AL
2
@Raphael: Creo que se refiere al elemento que se llamaría si la estructura de datos fuera una matriz. Las matrices admiten la primera operación en el tiempo O ( 1 ) pero no la segunda; Las listas vinculadas admiten la segunda operación en el tiempo O ( 1 ) pero no la primera. A[k]O(1)O(1)
JeffE
2
Además, los árboles binarios balanceados admiten ambas operaciones en tiempo . O(logn)
JeffE
1
@Raphael: editado para aclarar.
JeffE
2
@JeffE, la matriz dinámica admite los dos primeros en tiempo amortizado ( cs.uwaterloo.ca/research/tr/1999/09/CS-99-09.pdf )O(1)
Diego

Respuestas:

33

NO.

Fredman y Saks demostraron que cualquier estructura de datos que soporte estas operaciones requiere al menos tiempo amortizado por operaciónΩ(logn/loglogn) . (Esta es la referencia [1] en el artículo de Dietz que usted menciona en su primer comentario). El límite inferior se mantiene en el modelo de cómputo de la sonda celular muy poderoso, que solo considera el número de direcciones de memoria distintas a las que accede la actualización y la consulta algoritmos

Sin algunos supuestos adicionales sobre las operaciones de actualización y consulta, la estructura de datos de Dietz es la mejor posible (al menos hasta factores constantes).

JeffE
fuente
3
@AT: Ese enlace nunca fue "probado incorrecto". Hay situaciones en las que no se aplica, ¡pero esa es una declaración completamente diferente!
Raphael
55
@AT: El límite inferior de clasificación se demostró en un modelo de cálculo mucho más débil, a saber, los árboles de decisión binarios. El límite fue "demostrado incorrecto" mediante el desarrollo de algoritmos más rápidos que no pueden describirse como árboles de decisión binarios. Para probar que el límite inferior de Fredman y Saks está equivocado, tendrá que diseñar un algoritmo más rápido que no acceda a la memoria . La mejor de las suertes.
JeffE
@JeffE y Raphael; revise mi otra respuesta y confirme / rechace mi resultado cuando tenga la oportunidad. Gracias.
AL
6

Ω(lognloglogn)

Ω(logn)


[1] Patrascu, Mihai y Erik D. Demaine. "Límites inferiores logarítmicos en el modelo de sonda celular". SIAM J. Comput. 35, no. 4 (abril de 2006): 932–963. doi: 10.1137 / S0097539705447256.

A
fuente
1
Ω(logn/loglogn)
En efecto. Además, ¿puede confirmar que este límite se aplica al problema de representación de la lista con palabras de tamaño constante?
EN
1
Θ(logn/loglogn) Ω(logn)