algorithm - 高效最常见的后缀算法?

标签 algorithm

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

一个明显的解决方案是:

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

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

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

最佳答案

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

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

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

HAT-trie 是一个缓存敏感的版本,可以保证高性能。

关于algorithm - 高效最常见的后缀算法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2987563/

相关文章:

algorithm - 在识别点周围的区域中查找点

javascript - 递归地过滤数组寻找 parent

c - 如何求解 C 语言中的特定方程组(可能使用循环)

algorithm - 为给定的字符串生成所有唯一的子字符串

java - 迷宫生成prim算法并不是所有的单元格都被遍历

javascript - Javascript 中的文字游戏

algorithm - 如何使用 Java 中的 Dijkstra 算法在方形网格中找到最短对角线路径?

javascript - 你能解释一下这种在 javascript 中查找素数的方法吗

C#: 求PNG压缩算法/库

algorithm - 用最少的步数开锁