- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
BF算法
BF算法的实现
一、基本思想:BF算法运用在文本搜索领域,具有简单、直接、无需对文本进行预处理等操作,因此被广泛的运用到多种文本检索系统中,但是BF算法实际上是一种暴力匹配的算法,算法的时间复杂度开销很大。
对于给定的原始字符串,当需要匹配的待匹配字符串时,从原始字符串的第一个位置开始匹配,观察是否匹配成功,如果失败,则将位置向后移动一位,继续匹配,依次类推,直到原始字符串最后位置前倒数查询字符串长度的位置截止。
原始的字符串是通过从文件中读入标准的字符串序列,而待查询的字符串是通过用户手动输入的一个字符串,实际匹配时通过观察待查询的子字符串是否在文件中的字符串序列中出现。
二、实现举例:
文件中字符串序列为:
当输入匹配模式词:Data
结果为:
三、小结:
在某些文本检索领域中需要事先建立索引,然后才能进行快速查找。但是,在某些应用中,这种建立索引的方法并不合适,文本过滤技术中,一般的文本只需要查询一次,这样就没有必要建立索引。文本搜索技术具有广阔的应用前景,快速的文本检索技术是非常而且也是必须的。BF算法是一种简单、直接、容易实现的字符串匹配算法,但是由于该算法本身所存在的局限性,相对于KMP和BM算法,还有很大的改进空间。
四、参考资料:
刘挺,秦兵,张宇等.信息检索系统导论[M].北京:机械工业出版社,2008.
附录:源代码
/**
* created by Jimmy
* all right reserved
* @date March 12th,2012
*/
package edu.zhang.index;
import java.io.*;
/**
* The class used to use Pattern to match string
* @author jimmy
*
*/
public class BruteForce {
/**
* the given string need to be matched
*/
private String stringOriginal=;
/**
*substring to check if contained by a long string
*/
private String stringPattern=;
/**
* method used to do the matching
* @author Jimmy
*/
public void patternMatch()throws Exception{
BufferedReader binReadFromFile=new BufferedReader(new FileReader(System.getProperty(user.dir)+/src/edu/zhang/index/BookInfo.txt));
String stringTemp=;
while((stringTemp=binReadFromFile.readLine())!=null){
stringOriginal+=stringTemp;
}
System.out.println(please input the string:);
BufferedReader binFromTestString=new BufferedReader(new InputStreamReader(System.in));
stringPattern=binFromTestString.readLine();
//需要匹配的子字符串的长度
int lengthOfPattern=stringPattern.length();
//原始字符串的长度
int lengthOfOrignal=stringOriginal.length();
//用来表征是否出现了匹配的位置
boolean signal=false;
int index=1;
for(int i=0;ilengthOfOrignal-lengthOfPattern-1;i++){
if(stringOriginal.substring(i, i+lengthOfPattern).equalsIgnoreCase(stringPattern)){
System.out.println(第+index+次匹配成功,匹配的位置是:+i);
index++;
signal=true;
}
}
if(!signal){
System.out.println(没有出现匹配的字符串!);
}
}
publi
原创力文档


文档评论(0)