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-Setsu : 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-Prefixessu : 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-Prefixeson : 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-Setcostituito 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-Setinserirla)
Add-Prefix-Seto inizi con un set arbitrario di stringhe?