Algorithm 高效的最常见后缀算法?
我有几个GB的字符串,对于每个前缀,我想找到10个最常见的后缀。有没有一个有效的算法 一个显而易见的解决办法是:Algorithm 高效的最常见后缀算法?,algorithm,Algorithm,我有几个GB的字符串,对于每个前缀,我想找到10个最常见的后缀。有没有一个有效的算法 一个显而易见的解决办法是: 存储已排序的对列表 通过二进制搜索范围识别我们正在搜索的前缀 在此范围内找到10个最高的counts 可能会对所有短前缀进行预计算,这样就不需要查看大部分数据 我不确定这是否真的有效。有没有更好的方法让我忽略 答案必须是实时的,但它可以根据需要进行尽可能多的预处理。将单词放在树中,例如,为每个完整单词放置一个“出现次数”计数器,以便您知道哪些节点是结尾以及它们的常见程度 通过迭代
- 存储已排序的
对列表 - 通过二进制搜索范围识别我们正在搜索的前缀
- 在此范围内找到10个最高的
scount
- 可能会对所有短前缀进行预计算,这样就不需要查看大部分数据
答案必须是实时的,但它可以根据需要进行尽可能多的预处理。将单词放在树中,例如,为每个完整单词放置一个“出现次数”计数器,以便您知道哪些节点是结尾以及它们的常见程度 通过迭代查找前缀/后缀组合 这两种操作都是O(n*k),其中k是最长单词的长度;这是作为哈希表的最新版本
HAT-trie是一款支持缓存的版本,保证了高性能。您使用的是哪种特定语言?C++或java我猜…还有,您的字符串是在DB中还是仅在文件中?它是所有的文件,无论哪种语言最快,所以最有可能是C.+1,但我建议将字符从右到左添加到trie中。@Lieven:trie可以用作前缀树或后缀树。