¿Existe un índice universal?

8

Dada una tabla de datos que contiene un número muy grande de filas, con cada fila que contiene un gran número k de campos, con cada campo que contiene un número grande pero fijo de bits, existen varios métodos para construir una estructura de "índice". que las operaciones siguientes se pueden realizar en la tabla y el índice en O ( k log N ) tiempo (con relación al N y k ):NkO(klogN)Nk

  1. Inserte un nuevo elemento en la tabla.

  2. Eliminar un elemento especificado de la tabla.

  3. Dado un conjunto de valores de los campos, obtenga el primer registro que está en la tabla con valores de campo mayores que los valores de campo dados, cuando la tabla se ordena en el orden lexicográfico con el campo 1 primero, el campo 2 segundo, etc.

Queremos generalizar esta construcción para que cuando se realice la operación 3, cualquiera de los Los ordenamientos de los k campos se pueden especificar para determinar el orden de los registros en la tabla.k!k

Claramente, esto se puede hacer construyendo k! índices, uno para cada ordenamiento de los campos. Entonces las operaciones toman tiempo.O(k!klogN)

Queremos un algoritmo cuyas operaciones sean mucho más rápidas (en relación con ), preferiblemente el tiempo O ( k log k log N ) .kO(klogklogN)

¿Existe tal algoritmo / estructura de datos? Parece probable que si existiera, alguien ya lo habría publicado e implementado, pero no he encontrado señales de que exista. Por el contrario, tal vez se pueda demostrar que no existe tal algoritmo. Pero no he encontrado señales de que exista tal prueba.

Valle
fuente

Respuestas:

2

FNkSXFSX

SS1S0SS

O(poly(k)N0.99)F3poly(N,k) tiempo de preprocesamiento

daniello
fuente
¡Guau, clavada! ¡Gracias! (De hecho, me siento más tranquilo sabiendo que esto tiene una respuesta.)
Dale