Establecer estructura de datos para inserciones repetidas eficientes

11

Estoy buscando una estructura de datos de espacio eficiente que contenga conjuntos (sin repetición) de elementos de tamaño de palabras y admita una inserción rápida (O (1) amortizado). Por "espacio eficiente" quiero decir, idealmente, n+o(n) palabras para almacenar n elementos.

Ser un conjunto es una parte importante de la pregunta: si cada elemento se agrega logn veces el espacio utilizado no puede ser nlogn .

La estructura también debe admitir la enumeración de sus elementos (razonablemente eficiente); cualquier estructura sensata no debería tener problemas aquí. (Las consultas rápidas de membresía son una ventaja).

Charles
fuente
2
¿Hay alguna razón por la que una tabla hash no funcionaría?
Dave
@Dave: No creo que eso cumpla con los requisitos de espacio, pero supongo que un horario de cambio de tamaño dinámico lo suficientemente estricto podría hacer que funcione. Pero en general me gustaría ver qué hay antes de escribir el código.
Charles
1
Para obtener amortizado O(1)con cambio de tamaño dinámico, debe aumentar el tamaño en una fracción constante, lo que no creo que cumpla con el requisito de espacio si desea cumplir estrictamente n+o(n) .
Dave
O(1)
@Magnus: Supongo que significa que las funciones reales detrás de las anotaciones O y O en la pregunta no dependen del tamaño de la palabra.
Tsuyoshi Ito

Respuestas:

10

Creo que los "Diccionarios y árboles dinámicos sucintos" de Raman y Rao cumplen con los límites que especifique. Del resumen:

SU={0,,m1},|S|=nO(1)SO(1)B+o(B)B=lg(mn)es el espacio mínimo teórico de la información para representar .S

jbapple
fuente
Esto se ve fantástico. (Sin embargo, comprenderá si leo el periódico antes de aceptar, ¿verdad?)
Charles
1

Si su aplicación puede tolerar algunos falsos positivos, entonces debería considerar usar un filtro Bloom .

Paráfrasis de Wikipedia: un filtro de Bloom es una estructura de datos probabilística de espacio eficiente que se utiliza para probar si un elemento es miembro de un conjunto. Los falsos positivos son posibles, pero los falsos negativos no lo son. Se pueden agregar elementos al conjunto, pero no eliminarlos. Cuantos más elementos se agreguen al conjunto, mayor será la probabilidad de falsos positivos.

Tyson Williams
fuente
El mío no puede, pero +1 para una gran estructura de datos.
Charles