**模式匹配**

1.简单算法:

注意:模式匹配中s[0]和t[0]分别存储字符串的长度,从下标1开始做模式匹配

这是简单的模式匹配算法

int StrIndex_BF(char s[],char t[])
{//从串s的第一个字符开始找第一个与串t相等的子串int i=1,j=1;while(i<=s[0]&&j<=t[0]) //都没遇到结束符if(s[i]==s[j]){i++;j++;}else {i=i-j+2;j=1;} //回溯if(j>t[0])return (i-t[0]);//匹配成功,返回存储位置else return 0;
}

分析其复杂度:
设串s长度为n,串t长度为m。
匹配成功的情况下,考虑两种极端情况:
最好情况下,即每次不成功都出现在第一对字符比较时:
例如:s=“aaaaaaaaaabc”,t=“bc”

最好情况下平均比较次数是

ps:pi即为发生匹配不成功的可能,即1/总共匹配次数
i-1+m=(i-1)*1+(i-1)*m;
即最好情况下的时间复杂度是O(m+n)

在最坏情况下,每趟匹配不成功都发生在t的最后一个字符:
例如:s=“aaaaaaaaaaab”,t=“aaab”
因此最坏情况下平均比较的次数是

即最坏情况下的时间复杂度是O(n*m)

2.KMP算法:




如果定义还是有点看不懂,我们利用例题来了解
例:已知模式串S=“ababaaababaa”,求其next数值序列




next函数的缺点:


3.next函数VS nextval函数


模式匹配算法逐步精简相关推荐

  1. KMP字符串模式匹配算法【精简代码模板】

    什么是模式匹配 模式匹配(Pattern Matching)就是在一篇长度为n的文本S中,找某个长度为m的关键字P. KMP算法如何来的? KMP算法是由朴素字符串匹配算法优化而来,就是重新利用了朴素 ...

  2. 字符串的模式匹配 (朴素模式匹配算法 ,KMP算法)

    字符串的模式匹配 寻找字符串p在字符串t中首次出现的起始位置 字符串的顺序存储 typedef struct {char str[MAXSIZE];int length; }seqstring; 朴素 ...

  3. java 模式匹配算法_用Java匹配模式

    java 模式匹配算法 如果您使用的是Java,那么您很有可能以前已经看过它的模式匹配. String#matches(String)方法在内部使用Pattern类型,该类型包含更复杂的功能: 通过编 ...

  4. 第四章:2.串 -- 串的模式匹配算法(KMP)

    前言: 目录: 1.串类型的定义 2.串的表示和实现 3.串的模式匹配算法 4.串操作应用举例 正文: 串的模式匹配即,在给定主串S 中,搜索子串T 的位置,如果存在T 则返回其所在位置,否则返回 0 ...

  5. 图解字符串的朴素模式匹配算法

    复习串的朴素模式匹配算法 模式匹配 : 子串定位运算,在主串中找出子串出现的位置. 在串匹配中,将主串 S 称为目标(串),子串 T 称为模式(串).如果在主串 S 中能够找到子串 T, 则称匹配成功 ...

  6. KMP算法--字符串模式匹配算法

    今天看到第四章<串>了,其中我觉得花的时间多一点的值得我写篇随笔的知识点就是:4.3 串的模式匹配算法:书上介绍了两种字符串匹配算法,一种是最简单最容易想到的逐个字符匹配算法(时间复杂度在 ...

  7. 解析BF(普通串模式匹配算法)算法

    写在前面:博主是一位普普通通的19届双非软工在读生,平时最大的爱好就是听听歌,逛逛B站.博主很喜欢的一句话花开堪折直须折,莫待无花空折枝:博主的理解是头一次为人,就应该做自己想做的事,做自己不后悔的事 ...

  8. 数据结构——基于字符串模式匹配算法的病毒感染检测

    实验四 基于字符串模式匹配算法的病毒感染检测 [实验目的] 1.掌握字符串的顺序存储表示方法. 2.掌握字符串模式匹配BF算法和KMP算法的实现. [实验内容] 问题描述 医学研究者最近发现了某些新病 ...

  9. 模式匹配算法----KMP算法以及next数组的解法

    KMP算法:求字符串匹配(也叫模式匹配)的算法,即给定一个字符串,求其某一子串在其中出现的位置. 普通模式匹配 例如:给定字符串为abcabaaabaabcac,求其子串abaabcac在其中出现的位 ...

  10. 时空权衡在模式匹配算法中的应用(JAVA)--Horspool算法(简化版BM算法)

    模式匹配是数据结构中字符串的一种基本运算,给定一个子串,要求在某个字符串中找出与该子串相同的所有子串.假设P是给定的子串,T是待查找的字符串,要求从T中找出与P相同的所有子串,这个问题成为模式匹配问题 ...

最新文章

  1. pandas使用dropna函数删除dataframe中所有包含缺失值的数据行(drop rows which contain missing vlaues in dataframe)
  2. Nature:研究人员设计稳定器来改善脑机接口
  3. 微服务配置中心是干啥的_微服务入门到精通-分布式配置中心(续)
  4. 程序员跳槽的10个建议
  5. 抢跑直播电商双11,快手电商帝国雏形初显
  6. SpringBatch 自定义ItemReader和可重新启动Reader(十五)
  7. python应用于期货_Python期货量化交易基础教程(17)
  8. 经典java NIO框架
  9. notepad++ 文本文件内容丢失恢复
  10. linux系统Vsftpd搭建FTP
  11. usaco-1.1.1-PROB Your Ride Is Here
  12. java面试题Web篇
  13. 《即兴演讲》学习总结
  14. 程序员不得不了解的硬核知识大全
  15. Bitwise Exclusive-OR Sequence
  16. ئاندرويىد تېلېفۇندىكى ئۇيغۇرچە
  17. 《神经科学:探索脑》学习笔记(第5章 突触传递)
  18. 工业机器人码垛教学实施_《工业机器人码垛工作站安装与调试》教学设计文本.doc...
  19. 计算机网络大赛英文简称是什么,关于“中国高校计算机大赛网络技术挑战赛”(2018年)的通知...
  20. ftp 操作,支持断点续传或者继续下载。

热门文章

  1. Web Resources on Patten Recognition
  2. Fatal error: Uncaught Error: Call to undefined function gzinflate()
  3. Mac OS 加入域
  4. SVN报Previous operation has not finished; run 'cleanup'
  5. 也用 Log4Net 之走进Log4Net (四)
  6. 03-4 BGP 默认路由/MED
  7. Linux 目录结构及主要内容 2
  8. lua collectgarbage
  9. idea复制web项目没有servlet选项
  10. 打开SQlite数据库