BF,KMP,AC详解
2013-05-17 10:47
176 查看
一.BF算法
BF算法是普通的模式匹配算法,BF算法的思想就是将目标串S的第一个字符与模式串T的第一个字符进行匹配,若相等,则继续比较S的第二个字符和T的第二个字符;若不相等,则比较S的第二个字符和P的第一个字符,依次比较下去,直到得出最后的匹配结果。此算法的思想是直截了当的:将主串S中某个位置i起始的子串和模式串T相比较。即从 j=0 起比较 S[i+j] 与 T[j],若相等,则在主串 S 中存在以 i 为起始位置匹配成功的可能性,继续往后比较( j逐步增1 ),直至与T串中最后一个字符相等为止,否则改从S串的下一个字符起重新开始进行下一轮的"匹配",即将串T向后滑动一位,即 i 增1,而 j 退回至0,重新开始新一轮的匹配。
例如:在串S=”abcabcabdabba”中查找T=” abcabd”(我们可以假设从下标0开始):先是比较S[0]和T[0]是否相等,然后比较S[1] 和T[1]是否相等…我们发现一直比较到S[5] 和T[5]才不等。如图:
当这样一个失配发生时,T下标必须回溯到开始,S下标回溯的长度与T相同,然后S下标增1,然后再次比较。如图:
这次立刻发生了失配,T下标又回溯到开始,S下标增1,然后再次比较。如图:
这次立刻发生了失配,T下标又回溯到开始,S下标增1,然后再次比较。如图:
又一次发生了失配,所以T下标又回溯到开始,S下标增1,然后再次比较。这次T中的所有字符都和S中相应的字符匹配了。函数返回T在S中的起始下标3。如图:
代码:
int index_bf(char *s, char *t,int pos)
{
int i = pos,j=0;
while(s[i+j] != '\0' && t[j] != '\0')
{
if(s[i+j] == t[j])
j++;
else
{
i++;
j = 0;
}
if(t[j] == '\0')
return i;
}
return -1;
}
转自:http://www.cnblogs.com/mechecksv/articles/473300.html
相关文章推荐
- 【USACO2.3.1】最长前缀 KMP(爆内存) 暴力(居然更快还AC)
- KMP字符串模式匹配详解
- BF和KMP
- KMP字符串模式匹配详解
- 字符串模式匹配算法——BM、Horspool、Sunday、KMP、KR、AC算法一网打尽
- KMP字符串模式匹配详解
- AC自动机算法详解
- KMP字符串模式匹配详解
- KMP详解
- KMP字符串模式匹配详解
- 字符串训练赛 By YYR AC自动机 + KMP/HASH + 贪心
- 字符串模式匹配算法——BM、Horspool、Sunday、KMP、KR、AC算法一网打尽
- KMP字符串模式匹配详解[转]
- 杭电ACM 1041 Computer Transformation java代码详解AC
- KMP匹配算法实现详解
- KMP字符串模式匹配详解
- H.264的两个概念:DC系数和AC系数。 MV预测过程详解(附图)
- KMP字符串模式匹配详解
- 详解KMP入门
- KMP字符串模式匹配详解