Bien, entonces, supongo que tengo un archivo de texto (que no necesariamente contiene todos los símbolos posibles) y me gustaría calcular la frecuencia de cada símbolo y, después de calcular la frecuencia, necesito acceder a cada símbolo y su frecuencia desde más frecuente a menos frecuente. Los símbolos no son necesariamente caracteres ASCII, podrían ser secuencias de bytes arbitrarias, aunque con la misma longitud.¿Existe alguna forma mejor de calcular la frecuencia de todos los símbolos en un archivo?
estaba considerando hacer algo como esto (en pseudocódigo):
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)
Me preguntaba: ¿hay una manera mejor, más fácil de calcular y almacenar el número de veces que cada símbolo se produce en un archivo?
Parece que tiene dos opciones, hashmap que le da O (1) recuperación de frecuencia pero ningún resultado ordenado (del más frecuente al menos frecuente) O O (lg n) inserte y busque usando árboles/montón de búsqueda pero dándole un orden (más frecuente a menos frecuente) resultado. –
Un montón binario no es una estructura de datos particularmente buena para esto, ya que encontrar un nodo arbitrario en el montón es bastante caro. Harías mejor con un árbol binario o, como han señalado otros, una tabla hash de algún tipo. –