数据结构——BF算法
(本文章仅对上课所学进行总结)
BF(Brute-Force)算法:最简单直观的模式匹配算法。
[算法步骤]
1.分别利用计数指针i和j指示主串S和模式串T中当前正待比较的字符位置,i初值为pos,j的初值为0。
2.如果两个串均未比较到串尾,即i和j均分别小于等于S和T的长度时,则循环执行以下操作:
·S.ch[i]和T.ch[j]比较,若相等,则i和j分别指示串中下个位置,继续比较后续字符;
·若不等,指针后退重新开始匹配,从主串的下一个字符(i=i-j+1)起再重新和模式串的第一个字符(j=0)比较。
3.如果j>T.length-1,说明模式串T中的每个字符依次和主串S中的一个连续的字符序列相等,则匹配成功,返回和模式T中第一个字符相等的字符在主串S中的序号(i-T.length+1);否则称匹配不成功,返回0。
[算法描述]
int BF(SString S,SString T,int pos)
{int i,j;i=pos;j=0;while(i<S.length&&j<T.length){if(S.ch[i]==T.ch[j]){i++;j++;}else{i=i-j+1;j=0;}}if(j>T.length-1) return i-T.length+1;else return 0;
}int BF(SString,SString,int);
[算法分析]
BF算法的匹配过程易于理解,且在某些应用场合效率也较高。在匹配成功的情况下,考虑以下两种极端情况。
(1)最好的情况下,每趟不成功的匹配都发生在模式串的第一个字符与主串中相应字符的比较。
设主串的长度为n,子串的长度为m,假设从主串的第i个位置开始与模式串匹配成功,则在 前i-1趟匹配中字符总共比较了i-1次;若第i趟成功的字符比较次数为m,则总比较次数为i-1+m。 对于成功匹配的主串,其起始位置由1到n-m+1,假定这n-m+1个起始位置上的匹配成功概率相 等,则最好的情况下匹配成功的平均比较次数为
即最好情况下的平均时间复杂度为O(n+m)。
(2)最坏的情况下,每趟不成功的匹配都发生在模式串的最后一个字符与主串中相应字符的比较。
假设从主串的第i个位置开始与模式串匹配成功,则在前i-1躺匹配中字符总共比较了(i-1) *m次;若第i躺成功的字符比较次数为m,则总比较次数为i*m。因此最坏情况下匹配成功的平均 次数为
即最坏情况下的平均时间复杂度为O(n*m)。
[代码演示]
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define Maxsize 10
typedef struct//定义串
{char ch[Maxsize+1];int length;
}SString;
int BF(SString,SString,int);
int main()
{SString S,T;int k=0;printf("Please input the main string:");//输入主串scanf("%s",S.ch);printf("Please input the pattern string:");//输入模式串scanf("%s",T.ch);S.length=strlen(S.ch);T.length=strlen(T.ch);k=BF(S,T,0);printf("The position of pattern string is %d",k);
}
int BF(SString S,SString T,int pos)
{int i,j;i=pos;j=0;while(i<S.length&&j<T.length){if(S.ch[i]==T.ch[j]){i++;j++;}else{i=i-j+1;j=0;}}if(j>T.length-1) return i-T.length+1;else return 0;
}
[运行结果]
数据结构——BF算法相关推荐
- C++ 数据结构——BF算法
/*BF算法*/ #include <iostream> #include <string> using namespace std; int main() {string s ...
- 数据结构与算法 / 字符串匹配 / BF、PK 算法
零.前言 为了下面便于说明,先定义两个名词,分别是主串和模式串.在字符串 A 中查找字符串 B,则 A 为主串,B 为模式串. 假设,主串中字符数量为 L1,模式串的字符数量为 L2 . 一.BF 算 ...
- 【数据结构与算法】字符串匹配 BF算法 RK算法
单模式串匹配 BF 算法和 RK 算法 BM 算法和 KMP 算法 多模式串匹配算法 Trie 树和 AC 自动机 一.BF 算法 1,BF算法是Brute Force的缩写,中文译作暴力匹配算法,也 ...
- c语言实现bf算法的定位函数,数据结构c语言版严蔚敏清华大学出版社第四章串.ppt...
数据结构c语言版严蔚敏清华大学出版社第四章串 模式匹配(定位) 设有主串S和子串T(将S称为目标串,将T称为模式串),在主串S中,从位置start开始查找,如若在主串S中找到一个与子串T相等的子串,则 ...
- 数据结构与算法之美笔记——基础篇(下):图、字符串匹配算法(BF 算法和 RK 算法、BM 算法和 KMP 算法 、Trie 树和 AC 自动机)
图 如何存储微博.微信等社交网络中的好友关系?图.实际上,涉及图的算法有很多,也非常复杂,比如图的搜索.最短路径.最小生成树.二分图等等.我们今天聚焦在图存储这一方面,后面会分好几节来依次讲解图相关的 ...
- 【数据结构】字符串 模式匹配算法的理解与实现 Brute Force算法(BF算法)与KMP算法 (C与C++分别实现)
#笔记整理 若不了解串的定义,可至: 串(string)的定义与表示 查看 串的模式匹配算法 求子串位置的定位函数 Index(S, P, pos) 求子串的定位操作通常称作串的模式匹配(其中子串P称 ...
- 数据结构与算法(5)字符串(BF算法、KMP算法及KMP算法优化)
目录 一.BF算法(暴力算法) 二.KMP算法 三.KMP算法优化 一.BF算法(暴力算法) 一个一个往后匹配,匹配失败继续从母串下一个和头(子串的头)往后继续匹配. 虽然简单,但是需要较多的时间复杂 ...
- 数据结构第二版之(课后题)BF算法病毒感染检测
//vs2013下编译通过.换别的编译器自行补充头文件和修改源代码#include<iostream> #include<fstream> #include <strin ...
- 【数据结构与算法】动画:什么是 BF 算法 ?
本文是图解 什么是 BF算法.KMP算法.BM算法 三部曲之一. 定义 Brute-Force算法,简称为 BF算法,是一种简单朴素的模式匹配算法,常用于在一个主串 S 内查找一个子串 T 的出现位置 ...
- 《数据结构》实验报告四:串的模式匹配(BF算法、KMP算法)
一.实验目的 1.了解串的基本概念. 2.掌握串的模式匹配算法的实现 . 二.实验预习 说明以下概念 1.模式匹配: 串的模式匹配就是子串的定位运算. 设有两个字符串 S 和 T ,S为主串(正文串) ...
最新文章
- SQL Server 2005 的版本和组件[转载]
- python接口自动化测试面试题_Python 接口自动化测试实战
- c primer plus(第五版)读书笔计 第二章(3)
- 软件工程学习进度第九周暨暑假学习进度之第九周汇总
- JAVA转smali软件_Java2Smali(Java代码转Smali工具)
- shopnum1商城系统
- JFinal自动扫描表绑定model(包含jar包扫描)
- 3par linux多路径软件,Redhat6.X 配置HP3PAR7200存储多路径过程
- lzg_ad:XPE的发布与部署步骤详解
- 微信小程序换行 br 无效解决方法
- 《假如给我三天光明》读后感及其摘录(2)
- 2019参加Python开发培训靠谱吗?
- [原创] Bandwagon 追加 swap 大小
- ja_charity模板研究_contin_1
- 利用dcmtk工具查询PACS,找到同一患者两次以上的检查的数据
- JESD79-4 第5章 片上终结电阻ODT(5.1-5.3)
- chrome android 中文版下载,Chrome浏览器安卓版
- arcgis不闭合线转面_ArcGIS不闭合线转面
- 迅为国产开发板值得入手的三款开发板
- 微信小程序拍照截取指定区域图片(话不多说,直接上代码)
热门文章
- linux系统处理excel,Apache POI处理Excel文档
- 简单的走迷宫小游戏(C语言编写,无指针,无链表)
- 小米路由器sn算ssh密码_路由宝刷小米mini编程器固件,开SSH.
- 定时播放音频、定时播放视频解决方案 —— 定时执行专家
- sprintf,snprintf的用法(可以作为linux中itoa函数的补充)
- 角色和武器Shader特效开发
- python模拟鼠标操作_python 捕捉和模拟鼠标键盘操作
- 生产计划排产软件如何解决生产难题?
- 蜂鸣器干扰通讯_提高蜂鸣器响度和降低蜂鸣器及驱动电路干扰电源的电路的制作方法...
- python3学习笔记---类