串的匹配算法:BF以及KMP
来源:互联网 发布:淘宝促销文案范文 编辑:程序博客网 时间:2024/05/21 09:14
串的模式匹配,即在给定主串S中找到等于子串T的过程称为模式匹配。T称为模式。
串的匹配算法有两种:简单匹配算法(也称BF算法)和KMP匹配算法。
int i =pos ; j =1 ;while( i <= S[0] && j<T[0]) if(S[i]==T[j]) { i++ ; j ++; } else { i = i-j+2 ; j=1 ; } //此处为回溯 +2是因为j比已查的字符数多1,即减j的时候多减了个1,然后S中pos位置已经查了故i+1,即 i - j +2 ; 其也可直接用 i = pos+1 ; j=1 ;代替。
if (j>t[0]) return ( i-t[0]) ; else return 0 ;KMP算法思想:
先求出next[j]表,然后根据next[b]进行匹配。匹配思想为:
令i的初值为pos ,j 的初值为1,在匹配过程中,s[i] = t[j] ,则 i++ ,j++
若 不等,则i不变,j进行回溯,即 j = next [ j ] ;
回溯后有两种情况:
1. j退到某个next值时,字符比较相等,则i++,j++继续进行匹配;
2. j退到值为0,(即模式的第一个字符失配),此时也需要i++ , j++ ;即j的值变为1
算法描述:s为主串,t为子串,即模式
int i = pos , j =1 ;
while( i<= s[0] && j<= t[0])
if ( j ==0 || s[i] == t[j]) { i++ ; j++ ; }
else j = next[j] ;
if ( j>t[0] ) return i-t[0] ; //返回找到的子串第一个字符在主串中的位置。
特殊法验证: 在 abcdabdcf 中找寻 abd
123456789 , i的值在匹配完之后为8, t[0] = 3 , return 5 ; 正确;
next函数值获取算法(只与模式t有关):
int i =1 , j = 0 ;
next[1] =0 ;
while( i<t[0] )
if (j==0 || t[i] == t[j]) { i++ ; j++ ; j = next[j] }
else j = next[i] ;
- 串的匹配算法:BF以及KMP
- 数据结构- 串的模式匹配算法:BF和 KMP算法
- 串的模式匹配算法:BF和KMP算法
- 串的模式匹配(BF算法,KMP算法)
- 数据结构- 串的模式匹配算法:BF和 KMP算法
- 串匹配问题的BF算法和KMP算法
- 串的模式匹配算法:BF和 KMP算法
- 串的模式匹配算法之KMP与BF
- 串的模式匹配算法(BF、KMP)
- 数据结构(c++) 串的匹配BF->KMP->BM算法
- 数据结构编程笔记十一:第四章 串 定长顺序串以及模式匹配算法(BF和KMP)的实现
- 字符串匹配-KMP、BF算法
- 串的BF匹配算法
- 字符串模式匹配的BF算法与KMP算法
- 字符串匹配的BF算法和KMP算法学习
- 串的模式匹配算法(BF算法和KMP算法)
- 串模式匹配之BF算法和KMP算法
- 算法:字符串匹配、BF/KMP/近似匹配
- adb小记
- java 语言 基础 总结【1】- java背景以及优点和其他
- 种子填充算法(简单和扫描线)
- hdu 5943 二分图+素数
- 2017外汇公司国际品牌排行榜
- 串的匹配算法:BF以及KMP
- Go Hack 17:Killy 日记
- Win10+Python3.6.3(Anaconda3)+OpenCV3.2.0安装配置
- arm中system模式的作用
- redis入门综合概要介绍
- javascript:void(0)使用介绍与伪协议
- Linux系统postgresql及tomcat安装
- MySQL InnoDB Cluster搭建高可用数据库集群(centos7.x)
- git 设置默认分支