Définir la structure des données pour des insertions répétées efficaces


11

Je recherche une structure de données économe en espace qui contient des ensembles (sans répétition) d'éléments de taille de mots et prend en charge l'insertion rapide (O amorti (1)). Par "économe en espace", je veux dire, idéalement, n+o(n) mots pour stocker n éléments.

Être un ensemble est une partie importante de la question: si chaque élément est ajouté logn fois l'espace utilisé ne peut pas être nlogn .

La structure doit également prendre en charge la liste de ses éléments (raisonnablement efficacement); toute structure saine ne devrait avoir aucun problème ici. (Les demandes d'adhésion rapides sont un plus.)


2
Y a-t-il une raison pour laquelle une table de hachage ne ferait pas l'affaire?
Dave

@Dave: Je ne pense pas que cela réponde à l'espace requis, mais je suppose qu'un calendrier de redimensionnement dynamique suffisamment strict pourrait le faire fonctionner. Mais en général, j'aimerais voir ce qui existe avant d'écrire du code.
Charles

1
Pour obtenir un amorti O(1)avec un redimensionnement dynamique, vous devez augmenter la taille d'une fraction constante, ce qui, je pense, ne répond pas aux exigences d'espace si vous voulez respecter strictement n+o(n) .
Dave

O(1)

@Magnus: Je suppose que cela signifie que les fonctions réelles derrière les notations O et O dans la question ne dépendent pas de la taille du mot.
Tsuyoshi Ito du

Réponses:


10

Je pense que les "dictionnaires et arbres dynamiques succincts" de Raman et Rao respectent les limites que vous spécifiez. Du résumé:

SU={0,,m1},|S|=nO(1)SO(1)B+o(B)B=lg(mn)est l'espace minimum informations pour représenter théorétique .S


Cela a l'air fantastique. (Vous comprendrez que si j'ai lu le journal avant d'accepter, n'est-ce pas?)
Charles

1

Si votre application peut tolérer certains faux positifs, vous devriez envisager d'utiliser un filtre Bloom .

Paraphrase de Wikipedia: Un filtre Bloom est une structure de données probabiliste économe en espace qui est utilisée pour tester si un élément est membre d'un ensemble. Les faux positifs sont possibles, mais les faux négatifs ne le sont pas. Des éléments peuvent être ajoutés à l'ensemble, mais pas supprimés. Plus il y a d'éléments ajoutés à l'ensemble, plus la probabilité de faux positifs est grande.


Le mien ne peut pas, mais +1 pour une excellente structure de données.
Charles
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.