BF算法(简单匹配算法)

字符串的简单匹配算法-BF算法的实现:

       Brute-Force算法

       Brute-Force简称为BF算法,亦称简单匹配算法,其基本思路是:

       从目标串s=“s0s1…sn-1”的第一个字符开始和模式串t=“t0t1…tm-1”中的第一个字符比较,若相等,则继续逐个比较后续字符;否则从目标串s的第二个字符开始重新与模式串t的第一个字符进行比较。依次类推,若从模式串s的第i个字符开始,每个字符依次和目标串t中的对应字符相等,则匹配成功,该算法返回i;否则,匹配失败,函数返回-1。

      例如,设目标串s=“aaaaab”,模式串t=“aaab”。s的长度为nn=6),t的长度为mm=4)。用指针i指示目标串s的当前比较字符位置,用指针j指示模式串t的当前比较字符位置。模式匹配过程如下图所示。

BF算法(简单匹配算法)_第1张图片

       这个算法简单,易于理解,但效率不高,主要原因是主串指针i在若干个字符序列比较相等后,若有一个字符比较不相等,仍需回溯(即i=i-j+1)。

      该算法在最好情况下的时间复杂度为O(m),即主串的前m个字符正好等于模式串的m个字符。在最坏情况下的时间复杂度为O(n*m)。

#include "sqstring.cpp"
int index(SqString s,SqString t)
{
	int i=0,j=0;
	while (i=t.length)   
		return(i-t.length);  		//返回匹配的第一个字符的下标
	else  
		return(-1);        		//模式匹配不成功
}
void main()
{
	SqString s,t;
	StrAssign(s,"ababcabcacbab");
	StrAssign(t,"abcac");
	printf("s:");DispStr(s);
	printf("t:");DispStr(t);
	printf("位置:%d\n",index(s,t));
}

 

你可能感兴趣的:(数据结构(C语言版),算法)