高效最常见的后缀算法?

taw*_*taw 3 algorithm

我有几GB的字符串,对于每个前缀,我想找到10个最常见的后缀.那有一个有效的算法吗?

一个明显的解决方案是:

  • 存储已排序的<string, count>对列表.
  • 通过二进制搜索范围识别我们正在搜索的前缀.
  • count在这个范围内找到10个最高s.
  • 可能为所有短前缀预先计算它,因此它不需要查看大部分数据.

我不确定这实际上是否真的有效.有没有更好的方式我被忽视?

答案必须是实时的,但它可以根据需要进行尽可能多的预处理.

Wil*_*ill 6

将单词放在树中,例如trieradix,为每个完整单词放置一个"出现次数"计数器,这样您就知道哪些节点是结尾以及它们有多常见.

通过迭代找到前缀/后缀组合.

这两个操作都是O(n*k),其中k是最长字的长度; 这哈希表的复杂性相同.

HAT-trie是一个具有缓存意识的版本,可以提供高性能.