Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 高效的最常见后缀算法?_Algorithm - Fatal编程技术网

Algorithm 高效的最常见后缀算法?

Algorithm 高效的最常见后缀算法?,algorithm,Algorithm,我有几个GB的字符串,对于每个前缀,我想找到10个最常见的后缀。有没有一个有效的算法 一个显而易见的解决办法是: 存储已排序的对列表 通过二进制搜索范围识别我们正在搜索的前缀 在此范围内找到10个最高的counts 可能会对所有短前缀进行预计算,这样就不需要查看大部分数据 我不确定这是否真的有效。有没有更好的方法让我忽略 答案必须是实时的,但它可以根据需要进行尽可能多的预处理。将单词放在树中,例如,为每个完整单词放置一个“出现次数”计数器,以便您知道哪些节点是结尾以及它们的常见程度 通过迭代

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

一个显而易见的解决办法是:

  • 存储已排序的
    对列表
  • 通过二进制搜索范围识别我们正在搜索的前缀
  • 在此范围内找到10个最高的
    count
    s
  • 可能会对所有短前缀进行预计算,这样就不需要查看大部分数据
我不确定这是否真的有效。有没有更好的方法让我忽略


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

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

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

这两种操作都是O(n*k),其中k是最长单词的长度;这是作为哈希表的最新版本


HAT-trie是一款支持缓存的版本,保证了高性能。

您使用的是哪种特定语言?C++或java我猜…还有,您的字符串是在DB中还是仅在文件中?它是所有的文件,无论哪种语言最快,所以最有可能是C.+1,但我建议将字符从右到左添加到trie中。@Lieven:trie可以用作前缀树或后缀树。