Sono confuso su come l'implementazione Trie risparmia spazio & memorizza i dati nella forma più compatta!Trie salva spazio, ma come?
Se si guarda l'albero sottostante. Quando si memorizza un carattere su qualsiasi nodo, è inoltre necessario memorizzare un riferimento a quello &, quindi per ogni carattere della stringa è necessario memorizzare il suo riferimento. Ok, abbiamo salvato spazio quando è arrivato un personaggio comune, ma abbiamo perso più spazio nell'archiviazione di un riferimento a quel nodo di caratteri.
Quindi non c'è un sovraccarico strutturale per mantenere questo stesso albero? Invece se fosse stata usata una TreeMap al posto di questa, diciamo di implementare un dizionario, questo avrebbe potuto risparmiare molto più spazio dato che la stringa sarebbe stata mantenuta in un unico pezzo, quindi nessuno spazio sprecato nella memorizzazione dei riferimenti, non è vero?
Se un nodo richiede 16 byte ma viene riutilizzato in più di 16 stringhe (8 in Java), consente di risparmiare spazio. Quindi si tratta semplicemente di risparmiare più spazio di quello che stai sprecando. Supponendo che i numeri blu nell'esempio siano conteggi ripetuti, i risparmi risulterebbero maggiori dello spazio sprecato rispetto a una semplice serie di stringhe. Tuttavia in questo caso sarebbe ancora meglio memorizzare stringhe complete con conteggi ripetuti. – han