Complexidade de bits da consulta de intervalo de tempo O (1) em um

8

Considere o seguinte problema:

Deixei kseja uma constante. Nos é dado umkmatriz -ary Ad1××dk do 0 e 1's. DeixeiN=i=1kdi.

Queremos criar uma estrutura de dados pré-processando A para executar o seguinte tipo de operações de consulta:

  1. Dadas as coordenadas de um kcaixa de ary D, Tem alguma 1 na caixa?
  2. Dadas as coordenadas de um kcaixa de ary D, retorne a posição de um 1 na caixa (se houver).

As operações devem ser executadas em tempo constante O(1). A complexidade do tempo é medida em uma máquina de RAM. O tempo e o espaço de pré-processamento para a estrutura de dados não são importantes para nós.

A questão é quanto espaço (em complexidade de bits) precisamos armazenar uma estrutura de dados que permita as operações acima?

O limite inferior trivial é N bits, já que o array pode ser reconstruído para essas consultas (portanto, a estrutura de dados deve ter pelo menos a mesma quantidade de informações).

O limite superior trivial é armazenar a resposta para todas as consultas. Isso precisaria de bits. No entanto, suspeitamos que isso possa ser feito com muito mais eficiência.i=1k(di2)=Θ(N2)

Por exemplo, considere o caso especial em que . Nesse caso, podemos usar uma estrutura de dados RMQ sucinta para resolver o primeiro problema, e a estrutura de dados leva bits para armazenar.k=12N+o(N)

O que é uma estrutura de dados eficiente para esta tarefa?
Quão baixa a complexidade do espaço (o número de bits) pode suportar essas operações (ou apenas a primeira operação)?

Atualização (1/15): No caso especial , usar bits é suficiente (na verdade é melhor, , onde é o número está em ) reduzindo o problema para um problema anterior e usando a redução do problema anterior para o dicionário totalmente indexável (FID). Veja " Mais pressa, menos desperdício: diminuindo a redundância em dicionários totalmente indexáveis " de Grossi, Orlandi, Raman e Rao (2009).k=1N+o(N)log(Nt)+O(t)t1A

Atualização (27/6): Reduza novamente o problema para RMQ. Usamos um RMQ dimensional de Yuan e Atallah para obter um limite superior de à quantidade de espaço necessário quando é corrigido.kO(nlogn)k

Chao Xu
fonte
1
A questão não é clara: é uma questão de estrutura de dados? Em caso afirmativo, quais são as outras operações nessa matriz kD? Se não houver outra operação, não haverá 1 nela. Se a questão é que recebemos uma matriz de kD e o que fazer com algum pré-processamento e a armazenamos de tal forma que usamos pouca quantidade de memória, mas podemos executar essa operação de verificação no pior caso , esclareça isso. Explique também qual é o modelo de computação se você deseja um limite inferior. O(1)
Kaveh
IIUC, o artigo diz que a resposta para 1D é realmente bits e a idéia é armazenar todas as caixas pequenas e todas as caixas com comprimentos de potência 2 e outras caixas podem ser obtidas de len pow-2 boxes em constante time ( ) e parece-me que a mesma coisa funcionaria aqui e os bits serão suficientes. O(nlgn)O(2k)O(nklgkn)
Kaveh
Obrigado, eu adicionei alguns esclarecimentos. O jornal não disse que sua principal contribuição é o uso de bits no pré-processamento e no armazenamento? 2n+o(n)
Chao Xu
Desculpe, o que eu descrevi foi de trabalho anterior. No entanto, seu resultado parece ser conceitualmente semelhante, ou seja, eles dividem o array em blocos, pré-calculam a resposta sobre eles e usam um número constante deles para calcular a resposta para qualquer um deles. Se em kD o número de blocos base necessários para calcular a resposta a um bloco arbitrário for uma constante, então um algoritmo semelhante funcionaria aqui e daria provavelmente algo como (eu não t verifique se é esse o caso). O(nk)=O(N)
Kaveh

Respostas:

1

Você pode economizar muito mais memória se apenas permitir a complexidade do tempo logarítmico. Você pode implementar uma árvore de segmentos kD que precisará de memória N * 2 ^ k bits e é executada com complexidade de tempo logarítmica para ambas as subtarefas e complexidade linear de tempo para a construção da árvore.

Se você deseja estritamente O (1), precompute tudo.

Bojan Serafimov
fonte
2
Você pode descrever como a árvore é construída em tempo logarítmico?
Raphael
Desculpe, a sua construção em tempo linear
Bojan Serafimov
2
@BojanSerafimov Você deve atualizar a resposta então :) Os comentários podem ser excluídos.
Juho
1
Eu acho que essa pode ser uma boa resposta, se você a editou para estar correta e talvez um pouco mais elaborada sobre como essas árvores são e como você as constrói.
Raphael