Se le da una matriz binaria de tamaño .
Quiero mostrar que ningún algoritmo puede hacer lo siguiente (o sorprenderse y descubrir que estos algoritmos existen después de todo):
1) Preprocese la matriz de entrada con tiempo ilimitado, pero solo con bits .
2) Responda consultas en tiempo constante, donde la consulta solicita el número de bits establecidos entre el índice x y el índice y en la matriz.
Parece que el tiempo constante por consulta no debería permitir que el algoritmo lea suficiente información para calcular el número de bits establecidos.
¿Cómo podemos demostrar que no existe tal algoritmo?
Una pregunta más general sería:
dado que el algoritmo puede usar el espacio , ¿qué límite inferior en el tiempo de consulta podemos derivar?
Obviamente, si tenemos un espacio podemos almacenar todas las sumas parciales y responder consultas en O ( 1 ) , pero ¿y si f es más pequeño?
Puede suponer que el tamaño de una palabra de memoria es y podemos leer los índices x , y en tiempo constante.
Respuestas:
Creo que lo que está buscando es una estructura de datos compacta que respalde la operación de clasificación. Ver...
https://en.m.wikipedia.org/wiki/Succinct_data_structure
Específicamente, puede modificar la solución Emils (primera) para eliminar la operación de conteo emergente y reemplazarla con una tabla de búsqueda (para más detalles, consulte el artículo wiki). Al reducir el tamaño de un bloque a (log n) / 2 bits, la tabla de búsqueda utiliza o (n) bits.
fuente
fuente
fuente