BF算法
来源:互联网 发布:店侦探类似软件 编辑:程序博客网 时间:2024/09/21 08:17
转载地址:http://www.cnblogs.com/dolphin0520/archive/2011/08/24/2151846.html
BF算法(优化以后为kmp算法)
BF算法是普通的模式匹配算法,BF算法的思想就是将目标串S的第一个字符与模式串P的第一个字符进行匹配,若相等,则继续比较S的第二个字符和P的第二个字符;若不相等,则比较S的第二个字符和P的第一个字符,依次比较下去,直到得出最后的匹配结果。
举例说明:
S: ababcababa
P: ababa
BF算法匹配的步骤如下
i=0 i=1 i=2 i=3 i=4
第一趟:ababcababa 第二趟:ababcababa 第三趟:ababcababa 第四趟:ababcababa 第五趟:ababcababa
ababa ababa ababa ababa ababa
j=0 j=1 j=2 j=3 j=4(i和j回溯)
i=1 i=2 i=3 i=4 i=3
第六趟:ababcababa 第七趟:ababcababa 第八趟:ababcababa 第九趟:ababcababa 第十趟:ababcababa
ababa ababa ababa ababa ababa
j=0 j=0 j=1 j=2(i和j回溯) j=0
i=4 i=5 i=6 i=7 i=8
第十一趟:ababcababa 第十二趟:ababcababa 第十三趟:ababcababa 第十四趟:ababcababa 第十五趟:ababcababa
ababa ababa ababa ababa ababa
j=0 j=0 j=1 j=2 j=3
i=9
第十六趟:ababcababa
ababa
j=4(匹配成功)
int bfmatch(char *a,char *b){ int lena=strlen(a), lenb=strlen(b); int i=0,j=0; while(i<lena-lenb+1)//<strong>1限制条件</strong> { int j=0; while(a[i]==b[j]&&j<lenb) { i++; j++; } if(j==lenb) { return i-j;//<strong>定位i;</strong> } i=i-j+1;//<strong>重新比较时i的位置</strong> } return -1;}其实在上面的匹配过程中,有很多比较是多余的。在第五趟匹配失败的时候,在第六趟,i可以保持不变,j值为2。因为在前面匹配的过程中,对于串S,已知s0s1s2s3=p0p1p2p3,又因为p0!=p1!,所以第六趟的匹配是多余的。又由于p0==p2,p1==p3,所以第七趟和第八趟的匹配也是多余的。在KMP算法中就省略了这些多余的匹配。
- BF算法
- BF算法
- BF算法
- BF算法
- BF 算法
- BF算法
- BF算法
- BF 算法
- BF算法
- BF算法
- BF 算法
- BF算法
- BF算法
- BF算法
- BF算法
- BF算法
- BF算法
- BF算法
- hdu 4771——Stealing Harry Potter's Precious
- Hadoop Yarn 框架原理及运作机制
- ios 工程的缓存大小
- Shiro 报错 No SecurityManager accessible(汇总)
- 简洁但功能强大的EditPlus UltraEdit
- BF算法
- Jstl标签<c:if>的用法
- iostream: No such file or directory in Android NDK Environment
- 集合练习
- Linux--Linux服务器占用端口命令:
- MongoDB架构篇-Replica Set 副本集-增加删除节点等
- [转]mysql查找执行时间过长的SQL语句
- Java语法糖
- Matlab代码转C++