Imposta la struttura dei dati per inserimenti ripetuti efficienti


11

Sto cercando una struttura di dati efficiente in termini di spazio che contiene insiemi (nessuna ripetizione) di elementi di parole e supporta un inserimento rapido (O (1) ammortizzato). Per "spazio-efficiente" intendo, idealmente, parole per memorizzare n elementi.n+o(n)n

Essere un set è una parte importante della domanda: se ogni elemento viene aggiunto volte lo spazio utilizzato non può essere n log n .lognnlogn

La struttura dovrebbe inoltre supportare l'elenco dei suoi elementi (ragionevolmente efficiente); qualsiasi struttura sana non dovrebbe avere problemi qui. (Le richieste di iscrizione rapida sono un vantaggio.)


2
C'è una ragione per cui una tabella hash non farebbe il trucco?
Dave,

@Dave: non penso che ciò soddisfi i requisiti di spazio, ma suppongo che un programma di ridimensionamento dinamico sufficientemente rigido possa farlo funzionare. Ma in genere mi piacerebbe vedere cosa c'è là fuori prima di scrivere il codice.
Charles,

1
Per ottenere ammortizzato con ridimensionamento dinamico, è necessario aumentare le dimensioni di una frazione costante, che non credo soddisfi i requisiti di spazio se si desidera soddisfare rigorosamente n + o ( n ) . O(1)n+o(n)
Dave,

O(1)

@Magnus: suppongo che significhi che le effettive funzioni dietro le notazioni O e o nella domanda non dipendono dalla dimensione della parola.
Tsuyoshi Ito,

Risposte:


10

Penso che "Succinct Dynamic Dictionaries and Trees" di Raman e Rao soddisfi i limiti specificati. Dall'abstract:

SU={0,,m1},|S|=nO(1)SO(1)B+o(B)B=lg(mn)è lo spazio minimo informazioni teoria per rappresentare .S


Sembra fantastico (Capirai se ho letto il documento prima di accettare, però, giusto?)
Charles,

1

Se l'applicazione è in grado di tollerare alcuni falsi positivi, è necessario esaminare un filtro Bloom .

Parafrasi di Wikipedia: un filtro Bloom è una struttura di dati probabilistici ad alta efficienza spaziale che viene utilizzata per testare se un elemento è un membro di un set. Sono possibili falsi positivi, ma non i falsi negativi. Gli elementi possono essere aggiunti all'insieme, ma non rimossi. Più elementi vengono aggiunti all'insieme, maggiore è la probabilità di falsi positivi.


Il mio non può, ma +1 per un'ottima struttura di dati.
Charles,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.