2011-05-24 49 views
3

我需要找到一个子串字符串模拟一个巨大的字符串。源巨大的字符串可能长达100 Mb。模式很短(10-100个字符)。问题是我需要找到不仅仅是确切的子字符串,而且还需要找出与几个字符中的模式不同的类似子字符串(允许的最大错误数作为参数)。类似的子字符串快速搜索

有什么想法如何加快算法?

+0

您是否在寻找一种针对单个查询进行优化的算法?或者是[索引策略](http://en.wikipedia.org/wiki/Index_(search_engine)),它将创建100MB源文本的数据结构,以便优化所有类似性质的查询。 – rwong 2011-06-19 11:29:07

回答

1

1)有很多与字符串搜索有关的算法。其中之一是着名的Knuth–Morris–Pratt Algorithm

2)您可能还想检查正则表达式(“正则表达式”),无论您使用何种语言。他们一定会帮助您找到与原始字符串“类似”的子字符串。

即【JAVA]

String pat = "Home"; 
String source = "IgotanewHwme"; 

for(int i = 0; i < pat.length(); i++){ 
    //split around i .. not including char i itself .. instead, replace it with [a-zA-Z] and match using this new pattern. 
    String new_pat = "("+pat.substring(0, i)+")"+ "[a-zA-Z]" + "("+pat.substring(i+1, pat.length())+")"; 
    System.out.println(new_pat); 
    System.out.println(source.matches("[a-zA-Z]*"+new_pat+"[a-zA-Z]*")); 
} 

,我认为这是容易使其接受任何数目的错误计数。