字符串匹配——朴素算法Brute-Force(布鲁特-福斯算法)
来源:互联网 发布:中控打卡机软件 编辑:程序博客网 时间:2024/05/17 01:23
布鲁特-福斯算法
简单的模式匹配算法是一种带回溯的匹配算法。
一.算法思想
从主串S的第pos个字符开始,和模式串T的第一个字符开始比较,如果相等就继续比较后续字符,如果不等,则从(回溯到)主串S的第pos+1个字符开始重新和模式串T进行比较,直到模式串T中的每一个字符和主串的每一个连续字符子序列全部相等,则称匹配成功,返回和T第一个字符相等的字符在主串S中的位置;或者主串中没有和模式串相等的字符序列,则称匹配不成功。
二.算法实现代码
设置i,j,start三个指示器:
i——指向主串S中当前比较的字符,起始指向S的首字符,此后每比较一步,后移一个位置,一趟匹配失败时,回溯到该趟比较起点的下一个位置。
j——指向子串T中当前比较的字符,起始指向T的首字符,此后每比较一步,后移一个位置,一趟匹配失败时,回溯到T的首字符处。
start——记录每趟比较时在主串S中的起始位置,每趟比较后,后移一个位置,以便确定下一趟的起始位置。
#include <stdio.h>#include "SstringHeader.h "/*主串S,模式串T*/int navie_string_matcher(SString s,int pos,SString t){ int i,j,start; start = pos; i = start; j = 0;/*主串从pos开始,模式串从头开始*/ if (t.len==0) return 0; /*模式串为空串时,是任意串的匹配串*/ while (i < s.len && j < t.len ) if (s.ch[i]==t.ch[j])/*当前对应字符相等时推进*/ { i++; j++; } else { start++; /*对应字符不等时回溯*/ i = start;/*主串从start+1开始,模式串从头(0)开始*/ j =0; } if (j >= t.len) return(start); /*匹配成功时返回匹配起始位置*/ else return -1; /*匹配不成功时,返回-1*/}
算法实现结果截图:
三.算法实现举例
主串S:a b a b c a b c a c b a b
子串T:a b c a c
pos = 0; start = pos=0;i=start = 0;j=0;
s.len = 13; t.len=5分别为字符串s,t的长度
while (i < s.len && j < t.len ) if (s.ch[i]==t.ch[j])/*当前对应字符相等时推进*/ { i++; j++; } else { start++; /*对应字符不等时回溯*/ i = start;/*主串从start+1开始,模式串从头(0)开始*/ j =0; }
(1) i=0;j=0;i<13&&j<5为真
if( s.ch[i]==t.ch[j]),即判断s.ch[0]==t.ch[0],s.ch[0]=a,t.ch[0]=a,为真,
i++;j++;
i=1;j=1;
i=1;j=1;也满足字符匹配;
i=2;j=2时,s.ch[2]=a,t.ch[2]=c
(2)start=1,i=1,j=0;过程同上,只给出匹配结果图:
(3)start=2,i=2;j=0;
(4)start=3;i=3;j=0;
(5)start=4;i=4;j=0;
(6)start=5;i=5;j=0;
j=5,while循环不满足;
执行
if (j >= t.len) return(start); /*匹配成功时返回匹配起始位置*/
返回start=5;
四.算法复杂度分析
算法的最坏时间复杂度为O((s.len-t.len+1)*t.len)
Reference:
《数据结构——用C语言描述》,耿国华著 . 4.2串的存储实现
- 字符串匹配——朴素算法Brute-Force(布鲁特-福斯算法)
- 字符串匹配——Brute-Force 简单匹配算法
- 字符串匹配算法(Brute-Force)
- 串匹配-朴素(brute force)算法
- 数据结构字符串匹配——Brute-Force算法
- 字符串匹配算法之Brute force algorithm
- 字符串匹配算法---Brute force、KMP、Sunday
- 字符串模式匹配 BF(Brute Force)算法
- POJ3080 基本字符串库函数的应用 ..Brute Force/朴素模式匹配算法
- 对比了一下数据结构上的朴素模式匹配(Brute Force)和KMP算法
- 串的模式匹配——Brute-Force算法
- 时序分析:串匹配—Brute-Force算法
- Brute-Force模式匹配算法
- 串的模式匹配算法1——Brute-Force(BF)算法
- 字符串匹配算法SMA 总结之一:Brute force
- 字符串模式匹配之Brute force、KMP、Horspool算法
- 数据结构例程——串的模式匹配(Brute-Force算法)
- 数据结构复习——Brute-Force算法
- echarts的简单使用案例-柱形图
- 如何利用dos命令快速启动软件(环境变量)
- SQL Anywere 12 JDBC URL
- JSP的三大指令和七大动作基本语法
- Tricky and Clever Password 【KMP+Manacher】【蓝桥杯试题】
- 字符串匹配——朴素算法Brute-Force(布鲁特-福斯算法)
- *图1
- 《java入门第一季》之面向对象(抽象类到底多抽象)
- RxJava----操作符:错误处理
- 5-35 城市间紧急救援 (25分)
- android开发之shape详解
- 存档……【假装自己会刷题【怎么写着写着成了日记啊
- bzoj 2330: [SCOI2011]糖果 差分约束系统
- LeetCode: Excel Sheet Column Title