BF算法,即暴力(Brute Force)算法,是普通的模式匹配算法,BF算法的思想就是将目标串S的第一个字符与模式串T的第一个字符进行匹配,若相等,则继续比较S的第二个字符和 T的第二个字符;若不相等,则比较S的第二个字符和T的第一个字符,依次比较下去,直到得出最后的匹配结果。BF算法是一种蛮力算法。

中文名

BF算法

B    F

Brute Force属    于

普通的模式匹配算法

最坏情况

要进行M*(N-M+1)次比较

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=0i=1, j=1i=2,j=2i=3, j=3i=4, j=4(失败)

ababcababaababcababaababcababaababcababaababcababa

ababaababaababaababaababai=1,j=0(失败)

ababcababa

ababai=2,j=0i=3,j=1i=4,j=2(失败)

ababcababaababcababaababcababa

ababaababaababai=3,j=0(失败)

ababcababa

ababai=4,j=0(失败)

ababcababa

ababai=5,j=0i=6,j=1i=7,j=2i=8,j=3i=9,j=4(成功)

ababcababaababcababaababcababaababcababaababcababa

ababaababaababaababaababa

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算法C#语言实现:

编辑

语音

static int BPTest(string haystack, string needle)

{

int needleLen = needle.Length;

for (int i = 0; i <= haystack.Length - needleLen; i++)

{

for (int j = 0; j < needleLen; j++)

{

if (haystack[j + i] != needle[j])

{

break;

}

if (j == needleLen - 1)

{

return i;

}

}

}

return -1;

}

词条图册

更多图册

bf算法c语言'',BF算法相关推荐

  1. 老鼠走迷宫php算法,C语言经典算法 - 老鼠走迷官(一)

    C语言经典算法 - 老鼠走迷官(一) 说明老鼠走迷宫是递回求解的基本题型,我们在二维阵列中使用2表示迷宫墙壁,使用1来表 示老鼠的行走路径,试以程式求出由入口至出口的路径. 解法老鼠的走法有上.左.下 ...

  2. 克鲁斯卡尔算法c语言,Kruskal算法(一)之 C语言详解

    最小生成树 在含有n个顶点的连通图中选择n-1条边,构成一棵极小连通子图,并使该连通子图中n-1条边上权值之和达到最小,则称其为连通网的最小生成树. 例如,对于如上图G4所示的连通网可以有多棵权值总和 ...

  3. bfgs算法c语言,机器学习算法实现解析——liblbfgs之L-BFGS算法

    在博文"优化算法--拟牛顿法之L-BFGS算法"中,已经对L-BFGS的算法原理做了详细的介绍,本文主要就开源代码liblbfgs重新回顾L-BFGS的算法原理以及具体的实现过程, ...

  4. 四元数算法 c语言,四元数算法运算规则及基本概念

    [酷飞网 51kufei.com]上周,我们为大家介绍了求解求解无人机姿态角的各种算法,那么四元数算法基本的运算法则又是什么呢?今天,我们将为大家介绍四元数算法运算规则及基本概念. 大家知道,四元数可 ...

  5. apriori算法 c语言,数据挖掘算法——Apriori算法

    Apriori算法 首先,Apriori算法是关联规则挖掘中很基础也很经典的一个算法. 转载来自:链接:https://www.jianshu.com/p/26d61b83492e 所以做如下补充: ...

  6. 高斯平滑算法 c语言,高斯模糊算法(gaussian)

    项目上对图像处理需要用到点高斯算法,网上找到一篇对原理及部分问题分析讲解的还不错的文章,分享一下,后付自己的一段代码 - 理论 - 高斯分布函数可表示为一个一维的函数G(x) 或者一个二维的函数G(x ...

  7. prim算法c语言,Prim算法(一)之 C语言详解

    本章介绍普里姆算法.和以往一样,本文会先对普里姆算法的理论论知识进行介绍,然后给出C语言的实现.后续再分别给出C++和Java版本的实现. 普里姆算法介绍 普里姆(Prim)算法,和克鲁斯卡尔算法一样 ...

  8. 自动寻路算法C语言,bfs算法(c语言贪吃蛇自动寻路算法)

    广度优先法(BFS)算法C/C++代码,要说明和图解!谢谢! #include #define MAX 10 int front=-1,rear=-1; struct node { int value ...

  9. 最小延迟调度问题算法c语言,【算法概论】贪心算法:最小延迟调度问题

    最小延迟调度问题 Scheduling to Mnimizing Lateness 问题描述: 假定有一单个的资源在一个时刻只能处理一个任务.现给定一组任务,其中的每个任务 i 包含一个持续时间 ti ...

最新文章

  1. 从1到N,AI落地现在进行时
  2. verilog中数组的定义_开源仿真工具Icarus Verilog中的verilog parser
  3. 证明sinx/x的极限等于1(x趋向于0)
  4. nginx1.9基于端口的四层负载均衡实践,基于端口的转的负载均衡
  5. 全国计算机等级考试题库二级C操作题100套(第25套)
  6. Android实现打开本地文件,Android 打开本地文件(示例代码)
  7. python 中 __name__ 的使用
  8. Ext grid 根据行号获取行数据
  9. 【OS学习笔记】十七 保护模式五:保护模式下如何进行内存保护 与 别名段的意义与作用
  10. update关联一个视图的时候特别慢_实现一个简单的Vue.js
  11. matlab 流固耦合,详讲流固耦合
  12. mysql 插入优化_MySQL批量SQL插入性能优化
  13. (87)FPGA面试题-同步FIFO与异步FIFO区别?异步FIFO代码设计
  14. Spring DI依赖注入方式
  15. Spring源码剖析-Spring核心类认识(一)
  16. sakai mysql_开源网络教学平台SAKAI开发环境的搭建 | 学步园
  17. 解决 Eclipse不支持tomcat9
  18. 常见的网络攻击方法与防范措施
  19. 像电影里的黑客高手一样敲代码攻击入侵网站!装逼神器 !
  20. “麒”聚信创,共赢未来——信创解决方案分享会(首场)成功举办

热门文章

  1. 与其走的快,不如放慢脚步让自己走的稳,走的好!
  2. ${pageContext.request.contextPath}用法
  3. ets5怎么找到数据文件夹_mac怎么清理磁盘空间?如何找到并清理Mac电脑“其他”文件?...
  4. Windows Server 2022 预览版简要体验
  5. 计算两个矩阵的行向量之间的欧式距离
  6. linux安全加固浅谈
  7. OFC 2022 Th3E.1 coherent optics for access from P2P to P2MP
  8. uvm环境中收集coverage的方法
  9. 密码学协议举例(一):带有防欺骗的承诺
  10. OPC之DCOM配置