数据结构-串的模式匹配

网上有关“数据结构-串的模式匹配”话题很是火热,小编也是针对数据结构-串的模式匹配寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。 串...

网上有关“数据结构-串的模式匹配”话题很是火热,小编也是针对数据结构-串的模式匹配寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。

串的模式匹配就是子串定位操作。给定两个串s="s0 s1 ... s(n-1)"和t="t0 t1 ... t(m-1)"(其中n和m分别是串s和t的长度),在主串s中寻找子串t的过程称为模式匹配,t称为模式。如果在s中找到等于t的子串,则称匹配成功,返回t在s中的首次出现的下标位置;否则匹配失败,返回-1。

本文介绍三个串模式匹配算法,分别是简单回溯算法(Brute-Force,BF算法)、KMP算法、KMP算法的改进。

从主串s的第0个字符开始,与模式串t的第0个字符开始逐字符比较,不相同时回溯到模式串t的第0个和主串s的第1个字符,重新开始比较。以此类推,直到t的所有字符完成匹配,则匹配成功,否则匹配失败。

BF算法速度慢的原因是存在大量不必要的回溯,即在某一趟与t的匹配过程失败后,需要返回s串开始字符的下一字符重新开始比较,这对于某些模式串t来说是不必要的。例如,若s=12123123132,t=12313,在t与12 12312 3132中加粗子序列进行比较时,在 2 处发生失配,BF算法接下来将t与121 23123 132、1212 31231 32、12123 12313 2比较。由于t中的231、312与其开始的123并不相同,显然t与121 23123 132、1212 31231 32的比较是不必要的。

KMP算法就是利用模式串中与模式串开头部分子串的重复性来减少重复回溯,实现新一轮比较的直接跳转。 具体来说,KMP算法利用一个数组记录模式串中每一个字符前面有几个字符与模式串从头重复,在与s串比较失配时,直接跳转到重复子串的下一个字符继续比较,而不用跳转至模式串t的第0个字符。

算法步骤: ①计算跳转数组next。②利用KMP算法进行模式匹配。

next数组通过递推计算,即如果当前字符 t[j] 的前一个字符 t[j-1] 与其 next[j-1] 指向的字符 t[next[j-1]] 相同,意味着 t[j] 前的 next[j-1]+1 个字符与从 t[0] 到 t[next[j-1]] 的子串相同,因此 next[j]=next[j-1]+1 ;如果不相同,则递推至 t[next[j-1]] 的next值指向的字符,与 t[j-1] 比较,直到确认 t[j] 前与 t 串从头重复的字符数,或者无重复字符标记为 0 。

注意此处的函数返回参数类型为int*,用于 返回一位数组 ,且返回的这个一位数组必须在函数中用static定义。

KMP算法进行模式匹配时,只需在回溯时将 j 指针赋值为 next[j] 。需要注意的是,若 next[j] 为 -1 ,则意味着 t[j] 前面没有与 t 从头重复的字符,且 t[j] 与 s[i] 失配,则 i 和 j 均加 1 。

考虑更特殊的模式串,还能进一步减少不必要的回溯次数。例如,s=111211112,t=11112,按照上述next的计算方式,next={-1,0,1,2,3}。当 i=3, j=3 时失配,此时 s[i]=2, t[j]=1 ,由于 next[j]=2 ,于是 j 跳转为 2 ,t=11 1 12与s=111 2 11112比较。由于 t[next[j]]=t[j] 也为 1 ,必然与 s[i]=2 不相同,显然这次回溯也不必要。

总结来说, 当失配的字符与待跳转的字符相同时,跳转一步并无意义,可再跳一步 ,即将当前字符置为跳转后字符的next值。

关于“数据结构-串的模式匹配”这个话题的介绍,今天小编就给大家分享完了,如果对你有所帮助请保持对本站的关注!

本文来自作者[admin]投稿,不代表笔记号立场,如若转载,请注明出处:https://bijckbb.cn/cshi/202501-4855.html

(134)

文章推荐

  • 4开头的股票是什么股

    网上有关“4开头的股票是什么股”话题很是火热,小编也是针对4开头的股票是什么股寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。4开头的股票是进入三板市场的股票。4开头代码的股票是进入三板市场的股票,即4开头的股票是退市股票。三板市场的全称是“代办股份转让系

    2024年12月19日
    153
  • 600010包钢股份

    网上有关“600010包钢股份”话题很是火热,小编也是针对600010包钢股份寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。此股是A股中股价最低了,就目前而言。看K线,试图三次跌破3.96,都没成功,庄家在护盘,而且也没跌的了,再跌,会被其他人抄底。拿住

    2024年12月18日
    156
  • A股市场未来3至5年能翻十倍或百倍的股票在哪些行业

    网上有关“A股市场未来3至5年能翻十倍或百倍的股票在哪些行业”话题很是火热,小编也是针对A股市场未来3至5年能翻十倍或百倍的股票在哪些行业寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。俗话说得好?炒股要跟党走?,也就是要跟政策走;股票要涨出10倍或100

    2024年12月19日
    127
  • 中国A股市场包括哪几个市场-交易代码分别有以什么数字开头-_2

    网上有关“中国A股市场包括哪几个市场?交易代码分别有以什么数字开头?”话题很是火热,小编也是针对中国A股市场包括哪几个市场?交易代码分别有以什么数字开头?寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。A股的正式名称是人民币普通股票。它是由我国境内的公司发

    2024年12月23日
    152
  • 买什么股票赚钱_1

    网上有关“买什么股票赚钱”话题很是火热,小编也是针对买什么股票赚钱寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。1、稀缺行业、新兴行业——机器人最近不错。建筑园林:东方园林属于建筑细分景观设计行业2、行业龙头:比如建筑装饰行业中的金螳螂。龙头上市最早,最

    2024年12月26日
    120
  • 军工板块和航天板块里分别有哪些股票?_1

    网上有关“军工板块和航天板块里分别有哪些股票?”话题很是火热,小编也是针对军工板块和航天板块里分别有哪些股票?寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。军工板块和航天板块在龙头股票2007年军工板块分析前景一片光明600150沪东重机60045

    2024年12月29日
    161
  • 医疗器械龙头股排名

    网上有关“医疗器械龙头股排名”话题很是火热,小编也是针对医疗器械龙头股排名寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。医疗器械龙头股排名:1.医疗器械龙头鱼跃医疗2.体外诊断医械龙头迈瑞医疗3.心血管医械龙头乐普医疗4.再生医学龙头正海生物

    2024年12月29日
    184
  • 市值100亿能换成现金吗

    网上有关“市值100亿能换成现金吗”话题很是火热,小编也是针对市值100亿能换成现金吗寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。市值100亿能否换成现金要看公司持股比例对应的市值是否有100亿。如果公司持有的市值有100亿,并且全部都是流通股的情况下,在

    2025年01月09日
    180
  • 怎么查看免费的美股实时行情

    网上有关“怎么查看免费的美股实时行情”话题很是火热,小编也是针对怎么查看免费的美股实时行情寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。1、打开百度,在百度搜索框输入老虎证券。2、在搜索结果中选择带有官网字样的网址。3、然后点击进入老虎证券官网首页。4、

    2025年01月09日
    186
  • 大盘为什么不会涨停?

    网上有关“大盘为什么不会涨停?”话题很是火热,小编也是针对大盘为什么不会涨停?寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。涨停和跌停是国内A股的特殊设定,目的是为了限制股市波动率,保护投资者不会在短期遭受太大损失。世界上其他国家和地区,包括中国香港的港股,

    2025年01月01日
    155

发表回复

本站作者后才能评论

评论列表(4条)

  • admin
    admin 2025年01月14日

    我是笔记号的签约作者“admin”!

  • admin
    admin 2025年01月14日

    希望本篇文章《数据结构-串的模式匹配》能对你有所帮助!

  • admin
    admin 2025年01月14日

    本站[笔记号]内容主要涵盖:国足,欧洲杯,世界杯,篮球,欧冠,亚冠,英超,足球,综合体育

  • admin
    admin 2025年01月14日

    本文概览:网上有关“数据结构-串的模式匹配”话题很是火热,小编也是针对数据结构-串的模式匹配寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。 串...

    联系我们

    邮件:笔记号@sina.com

    工作时间:周一至周五,9:30-18:30,节假日休息

    关注我们