Você recebe uma matriz binária de tamanho .
Quero mostrar que nenhum algoritmo pode fazer o seguinte (ou surpreender-se e descobrir que esses algoritmos existem afinal):
1) Pré-processe a matriz de entrada usando tempo ilimitado, mas apenas usando bits .
2) Responda às consultas em tempo constante, em que a consulta solicita o número de bits definidos entre o índice xe o índice y na matriz.
Parece que o tempo constante por consulta não deve permitir que o algoritmo leia informações suficientes para calcular o número de bits definidos.
Como podemos provar que esse algoritmo não existe?
Uma pergunta mais geral seria,
dado que o algoritmo pode usar o espaço , qual limite inferior no tempo de consulta podemos derivar?
Obviamente, se tivermos espaço , podemos armazenar todas as somas parciais e responder a consultas em O ( 1 ) , mas e se f for menor?
Você pode assumir que o tamanho de uma palavra na memória é e podemos ler os índices x , y em tempo constante.
Respostas:
Acredito que o que você está procurando é uma estrutura de dados compacta que suporte a operação de classificação. Vejo...
https://en.m.wikipedia.org/wiki/Succinct_data_structure
Especificamente, você pode modificar a solução Emils (primeira) para remover a operação de contagem pop e substituí-la por uma tabela de pesquisa (para obter detalhes, consulte o artigo da wiki). Ao reduzir o tamanho de um bloco para (log n) / 2 bits, a tabela de pesquisa usa o (n) bits.
fonte
fonte
fonte