【问题标题】:Efficient most common suffix algorithm?高效最常见的后缀算法?
【发布时间】:2010-06-07 06:50:10
【问题描述】:

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

一个明显的解决方案是:

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

我不确定这是否真的有效。有没有更好的方法被我忽略了?

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

【问题讨论】:

  • 您使用的任何特定语言?我猜是 C++ 或 Java...另外,您的字符串是在数据库中还是只是在文件中?
  • 这是所有文件,无论哪种语言速度最快,所以最有可能是 C。

标签: algorithm


【解决方案1】:

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

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

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

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

【讨论】:

  • +1 但我建议将字符从右到左添加到特里。
  • @Lieven:trie 可以用作前缀树或后缀树。
猜你喜欢
  • 2020-04-28
  • 2014-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多