さて、テキストファイル(必ずしもすべてのシンボルが含まれているとは限りません)を持っていて、各シンボルの周波数を計算したいのですが、周波数を計算した後、最も頻繁に、最も頻繁に、最も頻繁に。記号は必ずしもASCII文字である必要はなく、同じ長さであっても任意のバイトシーケンスである可能性があります。ファイル内のすべてのシンボルの頻度を計算する良い方法はありますか?
私は(擬似コードで)このような何かをやって検討していた:
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)
私が思っていた:計算し、各シンボルがファイルで発生した回数を格納するためのより良い、より簡単な方法はありますか?
あなたはO(1)頻度検索を提供するが、順序付けされた(最も頻繁でない頻度の低い)結果を与えるhashmapとO(lg n)の検索ツリー/ヒープを使用した検索と検索の2つの選択肢があるようだが、頻繁に頻繁に出現する)結果。 –
バイナリヒープは、ヒープ内の任意のノードを見つけることがかなり高価であるため、このための特に優れたデータ構造ではありません。バイナリツリーや、他の人が指摘しているように、ある種のハッシュテーブルを使う方が良いでしょう。 –