Sonhei com uma estrutura de dados, ela existe?


27

Não consegui encontrar essa estrutura de dados, mas não sou especialista na área.

A estrutura implementa um conjunto e é basicamente uma matriz de elementos comparáveis ​​com um invariante. O invariante é o seguinte (definido recursivamente):

Uma matriz de comprimento 1 é uma matriz de mesclagem.

Uma matriz de comprimento 2 ^ n (para n> 0) é uma matriz de mesclagem iff:

  • a primeira metade é uma matriz de mesclagem e a segunda metade está vazia ou
  • a primeira matriz está cheia e classificada e a segunda metade é uma matriz de mesclagem.

Observe que, se a matriz estiver cheia, ela será classificada.

Para inserir um elemento, temos dois casos:

  • Se a primeira metade não estiver cheia, insira recursivamente na primeira metade.
  • Se a primeira metade estiver cheia, insira recursivamente na segunda metade.
  • Após a etapa recursiva, se toda a matriz estiver cheia, mescle as metades (que são classificadas) e redimensione-a para o dobro do comprimento original.

Para encontrar um elemento, recurse nas duas metades, usando a pesquisa binária quando a matriz estiver cheia. (Isso deve ser eficiente, pois há no máximo fragmentos ascendentes).O(log(n))

A estrutura pode ser pensada como uma versão estática do mergesort.

Não está claro o que se deve fazer para apagar um elemento.

Edit: depois de melhorar minha compreensão da estrutura.


5
Você o definiu, portanto ele existe. Eu acho que você precisa suavizar alguns pontos, no entanto. Primeiro, o invariante nº 2 me confunde, pois parece não se aplicar aos estados intermediários conforme você os descreve. Segundo, o que você faz quando os elementos são removidos?
Raphael

7
Você sonhou -se uma estrutura de dados, não sonhava com isso ...
Andrej Bauer

@ Rafael Obrigado por seus comentários, eu melhorei a definição seguindo seus pensamentos. Não pensei em um algoritmo para remoção, só queria verificar se essa estrutura estava na literatura antes de dedicar mais tempo a ela (e não consegui encontrar nada no Google). Na sua primeira frase, você pode definir Deus, mas existe? :)
pbaren

@Andrej Obrigado, o inglês não é minha língua nativa. (Eu acho que não o seu é tanto :)
pbaren

3
@Andrej: o OP originalmente havia "sonhado com ", que é quase certamente não o que foi feito. Eu mudei para "of" em vez de "up". Ambos estão corretos gramaticalmente, mas ambos também mudam o significado. "Of" foi a opção sonoridade mais interessante ...
András Salamon

Respostas:


31

ABABO(logn)n), mas aumenta o espaço apenas por um fator constante. Sim, pode ser desortortizado, graças a Overmars e van Leeuwen, mas você realmente não quer fazer isso se não precisar.

Estas notas cobrem o básico.

Matrizes de cache ocultas são a prole mutante das árvores Bentley-Saxe e van Emde Boas em esteróides.


4
Essas são notas maravilhosamente escritas e ilustradas, e eu as usei como referência muitas vezes. Obrigado por disponibilizá-los!
Jbapple

Vejo como as árvores de vaivém (da primeira metade do artigo, que introduzem matrizes inconscientes de cache) estão relacionadas às árvores vEB, mas qual é a relação entre as árvores COLAs e vEB?
Jbapple #

2
Obrigado, este material parece uma generalização muito interessante da ideia. Sempre pensei que as estruturas de dados são algoritmos congelados, que você pode executar passo a passo, mas nunca encontrei uma formalização útil dessa intuição.
Pbaren

O primeiro link funcionou para mais alguém?
AT

Sim, eu apenas tentei. (Infelizmente, ele vai para um paywall Elsevier; sorry!)
Jeffε

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.