bf算法
‘壹’ BF算法是穷尽计算吗
可以这么说,BF的意思是Brute Force 就是蛮力法的意思,枚举法是其一种
‘贰’ 什么事BF算法
BF(Brute Force)算法核心思想是:首先S[1]和T[1]比较,若相等,则再比较S[2]和T[2],一直到T[M]为止;若S[1]和T[1]不等,则T向右移动一个字符的位置,再依次进行比较。如果存在k,1≤k≤N,且S[k+1…k+M]=T[1…M],则匹配成功;否则失败。该算法最坏情况下要进行M*(N-M+1)次比较,时间复杂度为O(M*N)。
基本思想:BF算法运用在文本搜索领域,具有简单、直接、无需对文本进行预处理等操作,因此被广泛的运用到多种文本检索系统中,但是BF算法实际上是一种暴力匹配的算法,算法的时间复杂度开销很大
‘叁’ 什么时候用bf算法好,什么时候用kmp算法好
如果待匹配的模式串中重复的字符很少,用bf就OK了,正常的字符串差不多都是这样的
在模式串中有很多重复的子串时,kmp效率比bf高很多
‘肆’ BF算法的C语言实现:
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];
else
return 0;
}
else
return 0;
}
‘伍’ 数据结构 BF算法
建议动手画一画会比较直观
i,j是这里作位置指针 i指向SString S中的一个位置 j指向SString T的一个位置
while后的括号中是循环继续的条件
很多地方字符串本身可以理解成一个字符构成的数组
S[0]这里指0号位置的内容 这里用既然用i,j和这个0#内容比较来确定何时结束循环
即可以把0号位置的内容理解为i最终的移动位置 j同理
这里++i和i++皆可 先加后加不影响 因为本句里已经没有再用到i的值了
最后一句 如果j>T[0]导致循环结束,此时返回i,这里i是一个在S中移动最终位置
与T[0]的差 相当于两个最终位置间的距离
另外 一般用return 0 表示正常返回
强烈建议动手画 文字表述不能很直观
‘陆’ BF算法的介绍
BF(Brute Force)算法是普通的模式匹配算法,BF算法的思想就是将目标串S的第一个字符与模式串T的第一个字符进行匹配,若相等,则继续比较S的第二个字符和 T的第二个字符;若不相等,则比较S的第二个字符和T的第一个字符,依次比较下去,直到得出最后的匹配结果。BF算法是一种蛮力算法。
‘柒’ BF算法的算法思想
首先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: ababcababa
T: ababa
BF算法匹配的步骤如下: i=0, j=0 i=1, j=1 i=2,j=2 i=3, j=3 i=4, j=4(失败) ababcababa ababcababa ababcababa ababcababa ababcababa ababa ababa ababa ababa ababa i=1,j=0(失败) ababcababa ababa i=2,j=0 i=3,j=1 i=4,j=2(失败) ababcababa ababcababa ababcababa ababa ababa ababa i=3,j=0(失败) ababcababa ababa i=4,j=0(失败) ababcababa ababa i=5,j=0 i=6,j=1 i=7,j=2 i=8,j=3 i=9,j=4(成功) ababcababa ababcababa ababcababa ababcababa ababcababa ababa ababa ababa ababa ababa
‘捌’ 数据结构中BF算法描述中为什么是i=i-j+2
i-(j-1)+1:
(j-1)是j移动的距离
而i-(j-1)是让i回到它的起始位
因为i和j进行比较所以移动距离是相同的
而i-(j-1)+1是让i起始位+1
‘玖’ 什么叫EBF算法
通常我们用K-平均法和K-邻近法估计椭圆基函数(EBF)中心位置与函数宽度等参数.但上述的方法在输入矢量包含相关元素时存在性能次优化问题.另外,对于EBF网络来说,如何选择适当的类的数目仍是一个难以解决的问题.本文提出用结合改进的RPCL算法和EM算法的EBF网络结构来解决上述问题.在话者识别的软件开发中,证明这种结构具有更优越的样本表征能力以及更好的识别率.
‘拾’ VR中BF算法是什么
BF(Brute Force)算法是普通的模式匹配算法,BF算法的思想就是将目标串S的第一个字符与模式串T的第一个字符进行匹配,若相等,则继续比较S的第二个字符和 T的第二个字符;若不相等,则比较S的第二个字符和T的第一个字符,依次比较下去,直到得出最后的匹配结果。BF算法是一种蛮力算法。
首先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)。