首页 > 编程知识 正文

暴力穷举,bf算法最坏时间复杂度

时间:2023-05-04 16:41:18 阅读:140042 作者:2464

BF算法是指暴力(BruteForce )算法,是一般的模式匹配算法。 BF算法的思想是将目标字符串s的第一个字符与模式字符串t的第一个字符进行匹配,如果相等,则继续比较s的第二个字符和t的第二个字符; 如果不相等,则将s的第二个字符与t的第一个字符进行比较,依次进行比较直到得到最后的一致结果。 BF算法是一种蛮力算法。

算法的普通模式匹配算法,在其实现过程中没有任何技巧,简单粗暴地将一个字符串与另一个字符串中的字符一一对照,得到最终的结果。

代码复杂度该算法最理想的时间复杂度o(n ),n表示字符串a的长度,即第一次匹配成功。

将BF算法最坏的时间复杂度限制为o(n*m ),n是字符串a的长度,m是字符串b的长度。 例如,如果字符串b为“0000000001”且字符串a为“01”,则每次两个字符串匹配时,都将执行n *m次,因为必须匹配到字符串a的末尾才能确定匹配失败。

例如,使用通常的模式匹配算法判断字符串a(「abcac”)是否是字符串b )“ababcabacabab”的部分字符串的步骤如下。

首先,对齐字符串a和字符串b的开头字符,逐字符判断相对字符是否相等,如图1所示。

在图1中,字符串a和字符串b的第三个字符匹配失败,因此必须将字符串a向后移动一个字符,然后继续与字符串b匹配,如图2所示。

在图1中,字符串a和字符串b的第三个字符匹配失败,因此必须将字符串a向后移动一个字符,然后继续与字符串b匹配,如图2所示。

在图3中,2个串的模式匹配失败,串a继续移动,移动到图4的位置后匹配终于成功:

由此,字符串a和字符串b只有经过6次匹配的过程才能成功,在整个模式匹配的过程中证明了字符串a是字符串b的部分字符串(字符串b是字符串a的主字符串)。

BF算法的实现(C语言版) )

# include stdio.h # include string.h/stra为主字符串,strB为子字符串intmate(char*stra,char *strB ) { int i,j; i=j=0; while(Istrlen(stra ) j strlen (strb ) ) if ) stra[I]==strb[j] ) I; j; } else{ i=i-j 1; j=0; }//判定字符串时,扫描到最后找到匹配位置if(j==strlen(strb ) ) { return i-j 1; } return 0; }int main () intnum=mate ) sadjijasidhhgoogle,) Google ); printf('%d ',num ); 返回0; }总结BF算法的实现过程是“无脑”,不含任何技巧,对数据量大的串进行模式匹配时,算法效率较低。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。