我有几GB的字符串,对于每个前缀,我想找到10个最常见的后缀。那是否有一个有效的算法?
一个明显的解决方案是:
<string, count>
对的已排序列表。count
。我不确定这实际上是否真的有效。有没有更好的方式我忽略了?
答案必须是实时的,但可以根据需要进行尽可能多的预处理。
答案 0 :(得分:6)
将单词放在树中,例如trie或radix,为每个完整单词设置“出现次数”计数器,以便您知道哪些节点是结尾以及它们有多常见。
通过迭代找到前缀/后缀组合。
这两个操作都是O(n * k),其中 k 是最长字的长度;这是same complexity作为哈希表。
HAT-trie是一个具有缓存意识的版本,可以保证高性能。