10 GBのファイルを読み込み、ファイル内で最も頻繁に使用されるフレーズを探す必要があります。 私はスキャナを使って塊でファイルを読んでおり、フレーズを Trieデータ構造に格納しています。 フレーズを後で検索してカウントを更新し、効率的な検索にトライデータ構造を使用しました。私はTrie を以下のようにjavaでHashmapを使って実装しました。Javaのメモリを効率的に実装する
class TrieNode {
char data;
Map<Character, TrieNode> children = new HashMap<>();
boolean isLeafNode;
int positionMinHeap = -1;
int frequency;
TrieNode() {
}
TrieNode(char data) {
this.data = data;
}
}
しかし、この解決策は、多くのヒープスペースを消費します。そしてファイル内のすべてのフレーズが異なる場合、Trieは膨大なスペースを取るでしょう.Trieをメモリ効率の良い方法で実装できる他の方法はありますか?
私はtop-k [ストリーム要約](http://www.cse.ust.hk/~raywong/comp5331/References/EfficientComputationOfFrequentAndTop-kElementsInDataStreams.pdf)アルゴリズムを使用します。たとえば、CountMinSketchを使用して周波数をトラッキングし、最大のメモリ内のk個だけを保持し、高い周波数として置き換えることが検出されます。 –
基数ツリーの実装はどうですか? https://en.wikipedia.org/wiki/Radix_tree –