Estou procurando por uma estrutura de dados com espaço eficiente que armazene conjuntos (sem repetição) de elementos de tamanho de palavras e suporte a inserção rápida (O (1) amortizado). Por "espaço eficiente", quero dizer, idealmente, palavras para armazenar n elementos.
Ser um conjunto é uma parte importante da questão: se cada elemento for adicionado vezes o espaço usado não poderá ser n log n .
A estrutura também deve apoiar a listagem de seus elementos (razoavelmente eficiente); qualquer estrutura sã não deve ter problemas aqui. (Consultas rápidas sobre associação são uma vantagem.)
ds.data-structures
Charles
fonte
fonte
Respostas:
Acho que os "Dicionários e árvores dinâmicos sucintos de Raman e Rao " atendem aos limites especificados por você. Do resumo:
fonte
Se o seu aplicativo puder tolerar alguns falsos positivos, você deve usar um filtro Bloom .
Paráfrase da Wikipedia: Um filtro Bloom é uma estrutura de dados probabilística com eficiência de espaço usada para testar se um elemento é membro de um conjunto. Falsos positivos são possíveis, mas falsos negativos não são. Os elementos podem ser adicionados ao conjunto, mas não removidos. Quanto mais elementos forem adicionados ao conjunto, maior a probabilidade de falsos positivos.
fonte