【问题标题】:Similar substring fast search相似子串快速搜索
【发布时间】:2011-08-31 19:44:45
【问题描述】:
我需要在一个巨大的字符串中找到一个与给定模式相似的子字符串。源巨大字符串的长度可能高达 100 Mb。该模式相当短(10-100 个字符)。问题是我不仅需要找到精确的子字符串,还需要找到与多个字符中的模式不同的相似子字符串(最大允许错误计数作为参数提供)。
有没有办法加快算法的速度?
【问题讨论】:
标签:
algorithm
performance
search
substring
【解决方案1】:
1)有很多与字符串搜索相关的算法。其中之一就是著名的Knuth–Morris–Pratt Algorithm。
2) 您可能还想检查您使用的任何语言的正则表达式(“Regex”)。他们肯定会帮助您找到与原始子串“相似”的子串。
即[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]*"));
}
我认为让它接受任意数量的错误计数很容易。