如何解决相似的子字符串快速搜索
| 我需要在巨大的字符串中找到与给定模式相似的子字符串。源巨大的字符串可能长达100 Mb。模式很短(10-100个字符)。问题在于,我不仅需要找到确切的子字符串,而且还需要找到与模式中的几个字符不同的相似子字符串(最大允许错误计数作为参数提供)。 有什么想法如何加快算法?解决方法
1)有很多与字符串搜索有关的算法。其中之一是著名的Knuth-Morris-Pratt算法。
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]*\"));
}
而且我认为很容易接受任何数量的错误计数。
,听起来像您想要模糊/近似字符串匹配。查看Wikipedia页面,看看是否找不到适合您需要的算法。
,您可以看一下Levenshtein距离,Needleman–Wunsch算法和Damerau–Levenshtein距离
它们为您提供评估两个字符串之间差异量(即增加,删除,替换等的数量)的指标。它们通常用于测量DNA之间的变异。
您将轻松找到各种语言的实现。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。