高效最常见的后缀算法?

时间:2010-06-07 06:50:11

标签: algorithm

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

一个明显的解决方案是:

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

我不确定这实际上是否真的有效。有没有更好的方式我忽略了?

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

1 个答案:

答案 0 :(得分:6)

将单词放在树中,例如trieradix,为每个完整单词设置“出现次数”计数器,以便您知道哪些节点是结尾以及它们有多常见。

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

这两个操作都是O(n * k),其中 k 是最长字的长度;这是same complexity作为哈希表。

HAT-trie是一个具有缓存意识的版本,可以保证高性能。