(já solicitado no site principal , mas solicitando aqui também uma melhor cobertura, desculpe)
Desde que eu soube sobre estruturas de dados sucintas, estou precisando desesperadamente de uma boa visão geral dos desenvolvimentos mais recentes nessa área.
Pesquisei no Google e li muitos artigos que pude ver no topo dos resultados do Google sobre pedidos do topo da minha cabeça. Eu ainda suspeito que perdi algo importante aqui.
Aqui estão tópicos de particular interesse para mim:
Codificação sucinta de árvores binárias com operações eficientes de obter pai, filho esquerdo / direito, número de elementos em uma subárvore.
A principal questão aqui é a seguinte: todas as abordagens que conheço assumem os nós das árvores enumerados em ordem de respiração (como no trabalho pioneiro nessa área Jacobson, G. J. (1988). Estruturas de dados estáticas sucintas), que não parece apropriado para minha tarefa. Lido com grandes árvores binárias fornecidas no layout de profundidade primeiro e os índices de profundidade primeiro são chaves para outras propriedades do nó, portanto, alterar o layout da árvore tem algum custo para mim, que eu gostaria de minimizar. Daí o interesse em obter referências para trabalhos considerando outros layouts de árvores que não sejam BF.
Matrizes grandes de itens de tamanho variável na memória externa. As matrizes são imutáveis: não preciso adicionar / excluir / editar os itens. O único requisito é o tempo de acesso ao elemento O (1) e o mais baixo custo possível, melhor do que a abordagem direta de deslocamento e tamanho. Aqui estão algumas estatísticas que reuni sobre dados típicos para minha tarefa:
número típico de itens - centenas de milhões, até dezenas de bilhões;
cerca de 30% dos itens têm comprimento não superior a 1 bit ;
40% a 60% dos itens têm comprimento inferior a 8 bits;
apenas poucas porcentagens de itens têm comprimento entre 32 e 255 bits (255 bits é o limite)
comprimento médio do item ~ 4 bits +/- 1 bit.
teoricamente, qualquer outra distribuição de comprimentos de itens é possível, mas todos os casos praticamente interessantes têm estatísticas próximas às descritas acima.
Links para artigos de qualquer complexidade, tutoriais de qualquer obscuridade, bibliotecas C / C ++ mais ou menos documentadas - qualquer coisa que seja útil para você em tarefas semelhantes ou o que parece ser o seu palpite - todas essas coisas são apreciadas com gratidão.
Atualização : esqueci de adicionar à pergunta 1: as árvores binárias com as quais estou lidando são imutáveis. Não tenho requisitos para alterá-los, tudo o que preciso é apenas percorrê-los de várias maneiras, sempre movendo-se do nó para os filhos ou para o pai, de modo que o custo médio dessas operações seja O (1).
Além disso, a árvore típica possui milhares de nós e não deve ser totalmente armazenada na RAM.