Sto cercando una struttura di dati che memorizza un set di stringhe su un set di caratteri , in grado di eseguire le seguenti operazioni. Indichiamo come struttura dati memorizzare l'insieme di stringhe .
Add-Prefix-Set
su : dato un insieme di stringhe (possibilmente vuote), la cui dimensione è delimitata da una costante e le cui lunghezze della stringa sono delimitate da una costante, restituisce . Entrambe queste costanti delimitazione sono globali: sono uguali per tutti gli ingressi .Get-Prefixes
su : restituisce . Si noti che non mi dispiace davvero quale struttura viene utilizzata per questo set, purché sia possibile enumerare i suoi contenuti nel tempo .Remove-Prefixes
on : return .Merge
: dato e , restituisce .
Ora, mi piacerebbe davvero fare tutte queste operazioni nel tempo , ma sto bene con una struttura che fa tutte queste operazioni nel tempo , dove è la lunghezza della stringa più lunga nel struttura. Nel caso della fusione, Vorrei una tempo di esecuzione, dove n 1 è per il primo e il per la seconda struttura.
Un ulteriore requisito è che la struttura sia immutabile, o almeno che le operazioni sopra riportate restituiscano strutture "nuove" in modo tale che i puntatori a quelli vecchi funzionino ancora come prima.
Una nota sull'ammortamento: va bene, ma bisogna fare attenzione alla persistenza. Dato che riutilizzo sempre le vecchie strutture, sarò nei guai se colpirò il caso peggiore con un particolare insieme di operazioni sulla stessa struttura (ignorando così le nuove strutture che crea).
Mi piacerebbe usare una tale struttura in un algoritmo di analisi su cui sto lavorando; la struttura sopra avrebbe il lookahead di cui ho bisogno per l'algoritmo.
Ho già preso in considerazione l'uso di un trie , ma il problema principale è che non so come unire i tentativi in modo efficiente. Se l'insieme di stringhe per è Add-Prefix-Set
costituito solo da stringhe a carattere singolo, è possibile archiviare questi insiemi in una pila, che ti darebbe tempi di esecuzione per le prime tre operazioni. Tuttavia, questo approccio non funziona neanche per la fusione.
Infine, nota che non sono interessato ai fattori: questo è costante per tutto ciò che mi interessa.
Add-Prefix-Set
inserirla)
Add-Prefix-Set
o inizi con un set arbitrario di stringhe?