【发布时间】:2017-03-05 12:49:30
【问题描述】:
我必须阅读一个 10 GB 的文件并找出文件中最常用的短语。 我正在使用扫描仪分块读取文件并将短语存储在 特里数据结构。 稍后我将搜索这些短语以更新它们的计数,因此使用 trie 数据结构进行有效搜索。我已经实现了 Trie 在java中使用Hashmap如下所示。
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 stream summary 算法。例如,使用 CountMinSketch 跟踪频率,仅保留内存中最大的 k 个并在检测到更高频率时替换。
-
基数树的实现怎么样? en.wikipedia.org/wiki/Radix_tree
标签: data-structures heap-memory trie