Ok, quindi, diciamo che ho un file di testo (non necessariamente contenente tutti i possibili simboli) e vorrei calcolare la frequenza di ciascun simbolo e, dopo aver calcolato la frequenza, devo quindi accedere a ciascun simbolo e alla sua frequenza da più frequente o meno frequente. I simboli non sono necessariamente caratteri ASCII, potrebbero essere sequenze di byte arbitrarie, anche se tutte della stessa lunghezza.Esiste un modo migliore per calcolare la frequenza di tutti i simboli in un file?
stavo considerando di fare qualcosa di simile (in pseudocodice):
function add_to_heap (symbol)
freq = heap.find(symbol).frequency
if (freq.exists? == true)
freq++
else
symbol.freq = 1
heap.insert(symbol)
MaxBinaryHeap heap
while somefile != EOF
symbol = read_byte(somefile)
heap.add_to_heap(symbol)
heap.sort_by_frequency()
while heap.root != empty
root = heap.extract_root()
do_stuff(root)
mi chiedevo: esiste un modo migliore e più semplice per calcolare e memorizzare quante volte ogni simbolo si verifica in un file?
Sembra che tu abbia due scelte, hashmap che ti dà il recupero della frequenza O (1) ma nessun risultato ordinato (più frequente o meno frequente) O O (lg n) inserisci e cerca usando gli alberi di ricerca/heap ma dandoti un ordine (la maggior parte frequente a meno frequente) risultato. –
Un heap binario non è una struttura dati particolarmente buona per questo, poiché trovare un nodo arbitrario nell'heap è piuttosto costoso. Faresti meglio con un albero binario o, come altri hanno sottolineato, un hash table di qualche tipo. –