BF算法


BF算法

文章插图
BF算法【BF算法】BF算法 , 即暴风(Brute Force)算法 , 是普通的模式匹配算法 , BF算法的思想就是将目标串S的第一个字元与模式串T的第一个字元进行匹配 , 若相等 , 则继续比较S的第二个字元和 T的第二个字元;若不相等 , 则比较S的第二个字元和T的第一个字元 , 依次比较下去 , 直到得出最后的匹配结果 。BF算法是一种蛮力算法 。
基本介绍中文名:BF算法
BF:Brute Force
属于:普通的模式匹配算法
最坏情况:要进行M*(N-M+1)次比较
算法思想首先S[1]和T[1]比较 , 若相等 , 则再比较S[2]和T[2] , 一直到T[M]为止;若S[1]和T[1]不等 , 则S向右移动一个字元的位置 , 再依次进行比较 。如果存在k , 1≤k≤N , 且S[k+1…k+M]=T[1…M] , 则匹配成功;否则失败 。该算法最坏情况下要进行M*(N-M+1)次比较 , 时间複杂度为O(M*N) 。举例说明:S: ababcababaT: ababaBF算法匹配的步骤如下:i=0, j=0i=1, j=1i=2,j=2i=3, j=3i=4, j=4(失败)ababcababaababcababaababcababaababcababaababcababaababaababaababaababaababai=1,j=0(失败)ababcababaababai=2,j=0i=3,j=1i=4,j=2(失败)ababcababaababcababaababcababaababaababaababai=3,j=0(失败)ababcababaababai=4,j=0(失败)ababcababaababai=5,j=0i=6,j=1i=7,j=2i=8,j=3i=9,j=4(成功)ababcababaababcababaababcababaababcababaababcababaababaababaababaababaababaC语言实现:int Index(SString S,SString T,int pos){ /* 返回子串T在主串S中第pos个字元之后的位置 。若不存在 , 则函式值为0 。*//* 其中 , T非空 , 1≤pos≤StrLength(S) 。算法4.5 */int i,j;if(1<=pos&&pos<=S[0]){i=pos;j=1;while(i<=S[0]&&j<=T[0])/*S[0],T[0]中存放的为串长*/if(S[i]==T[j]) /* 继续比较后继字元 */{++i;++j;}else /* 指针后退重新开始匹配 */{i=i-j+2;j=1;}if(j>T[0])return i-T[0];elsereturn 0;}elsereturn 0;}