模糊快速字符串匹配和索引算法

时间:2015-04-16 05:53:06

标签: java string algorithm search indexing

我需要尽可能快地在一个非常大的字符串(大约100k)中找到一组子串(每个大约32个字符)。 我需要搜索模糊

什么是最好的算法?我尝试将整个大字符串扫描成小字符串并检查每一步的 Levenshtein距离,但这需要很多时间。

2 个答案:

答案 0 :(得分:2)

看看BLAST算法(http://en.wikipedia.org/wiki/BLAST)。它用于序列搜索(例如DNA搜索)。基本问题与你的问题非常相似。

基本上你要做的就是索引短字符串并找到匹配丰富的区域,并在该区域进行更多计算成本更高的搜索。

答案 1 :(得分:1)

如果我理解你想要什么(你想找到一个大字符串的子序列,它等于给定的一组长度为32的字符串),你的字母表有一个合理的大小(字母,数字和标点符号,对于例如),那么你可以做到以下几点:

  1. 查找每个字母的第一个匹配项。

  2. 对于字符串中的每个位置,找到此位置后每个字母的下一个匹配项(您可以在O(l * n)中执行此操作,其中l是字符串的长度,n是字母表的大小通过从每个字母的末尾扫描)

  3. 对于字符串集中的每个字符串,找到该字符串的第一个字母,然后从该位置找到字符串中第二个字母的第一个字母等。

  4. 这样你花费O(l * n)时间进行预处理,但是对于你集合中的每个小字符串,你只需要O(m)工作,其中m是该字符串的长度。