当前位置: 首页 > wzjs >正文

免费发布产品信息的网站河北网站建设推广

免费发布产品信息的网站,河北网站建设推广,小型企业网站设计,关键词排名优化品牌一、字符串匹配问题 字符串匹配问题可以描述为:给定字符串 T,ST,ST,S,在主串 SSS 中寻找子串 TTT。我们称字符串 TTT 为文本串,字符 SSS 为模式串,长度分别为 m,nm,nm,n。如果用朴素的算法进行匹配,那么最坏情况下&am…

一、字符串匹配问题

字符串匹配问题可以描述为:给定字符串 T,ST,ST,S,在主串 SSS 中寻找子串 TTT。我们称字符串 TTT 为文本串,字符 SSS 为模式串,长度分别为 m,nm,nm,n。如果用朴素的算法进行匹配,那么最坏情况下,比较的次数是两个字符串长度的相乘,即 O(mn)O(mn)O(mn)

本节我们将介绍一种用于字符串匹配的算法,即 KMP 算法。该算法解决此问题的最坏比较次数是两个字符串长度的相加。如果我们要求的是字符串 SSS 的所有后缀与字符串 TTT 的最长公共前缀,那么我们就需要使用到扩展 KMP 算法(Z 函数),从名字就可以看出来二者在思想上有高度相关性。由于两者的高度相关性,接下来我们首先介绍 KMP 算法

二、KMP 算法

1.基本介绍

在计算机科学中,KMP 算法可在一个文本串 TTT 内查找一个模式串 SSS 的出现位置。该算法通过对这个词在不匹配时本身包含的信息来确定下一个匹配将在哪里开始的发现,从而避免重新检查先前匹配的字符,提高程序运行效率。具体来说,KMP 算法在匹配前会预处理模式串 SSS,得到一个 NextNextNext 数组。借助 NextNextNext 数组,可以在匹配过程中减少很多冗余的匹配操作,由此提高了算法的效率。KMP 算法的时间复杂度为 O(n+m)O(n+m)O(n+m),其中 nnnmmm 分别表示两个串的长度。

2.匹配过程

KMP 算法的核心就是利用 NextNextNext 数组来加快匹配,对于字符串 s=s0s1…sn−1s=s_0s_1\ldots s_{n-1}s=s0s1sn1,如果 jjj 是满足 s0…j=si−j…is_{0\ldots j}=s_{i-j\ldots i}s0j=siji 的最大值,则 Nexti=j(j<i)Next_i=j(j<i)Nexti=j(j<i)。如果不存在 s0…j=si−j…is_{0\ldots j}=s_{i-j\ldots i}s0j=siji 的情况,我们设 Nexti=−1Next_i=-1Nexti=1

假设我们已经求得了模式串 SSSNextNextNext 数组,下面我们来看如何利用其求出字符串 S,TS,TS,T 的匹配,以下面这张图为例子。
在这里插入图片描述

  • 设文本串为 TTT,模式串为 SSS。若 Ti−j−1…i−1=S0…jT_{i-j-1 \ldots i-1}=S_{0 \ldots j}Tij1i1=S0jTi≠Sj+1T_{i}\neq S_{j+1}Ti=Sj+1
  • 现在我们假设存在 j′>Nextjj'>Next_jj>Nextj 使得 Ti−j′−1…i−1=S0…j′T_{i-j'-1 \ldots i-1}=S_{0 \ldots j'}Tij1i1=S0j 成立,也就是上图最后一条线的情况。那么我们不难得到 S0…j′=Sj−j′…jS_{0\ldots j'}=S_{j-j'\ldots j}S0j=Sjjj,这意味着 failj≥j′fail_j\geq j'failjj,这与 j′>Nextjj'>Next_jj>Nextj 矛盾。
  • 因此不存在 j′>Nextjj'>Next_jj>Nextj 使得 Ti−j′−1…i−1=S0…j′T_{i-j'-1 \ldots i-1}=S_{0 \ldots j'}Tij1i1=S0j 成立。所以我们可以直接从 jjj 跳到 NextjNext_jNextj,因为图中的 A,BA,BA,B 段相同,自然满足匹配条件。
  • 重复这个过程直到与模式串的匹配完成即可。这就是我们利用 NextNextNext 数组来加速匹配的原理。

核心代码如下所示:

void KMP()
{ll m = strlen(t), n = strlen(s);ll j = -1;for(ll i = 0; i < m; i++){while(j != -1 && s[j + 1] != t[i])j = Next[j];if(s[j + 1] == t[i]){j++;if(j == n - 1)ans[++count1] = i - n + 1;}}
}

3.求 NextNextNext 数组

现在我们来考虑如何求得 NextNextNext 数组,不难发现求 NextNextNext 数组实际上就是求模式串和自己的匹配,因此我们可以用与上面同样的方法来求出 NextNextNext 数组。因为 j>Nextjj>Next_jj>Nextj,所以我们总能用前面的 NextNextNext 来更新后面的情况。

核心代码如下所示:

void Get_Next()
{ll n = strlen(s);Next[0] = -1;for(ll i = 1; i < n; i++){ll j = Next[i - 1];while(j != -1 && s[j + 1] != s[i])j = Next[j];if(s[j + 1] == s[i])j++;Next[i] = j;}
}

三、扩展 KMP 算法

四、作业

1.KMP 算法

(1)绿题

P3375 【模板】KMP

P4391 [BalticOI 2009] Radio Transmission 无线传输

CF1200E Compress Words

(2)蓝题

P4824 [USACO15FEB] Censoring S

P3435 [POI 2006] OKR-Periods of Words

P2375 [NOI2014] 动物园

2.扩展 KMP 算法


文章转载自:

http://RAUPGo5A.kmkpm.cn
http://xggDynMk.kmkpm.cn
http://gRlu1Ipn.kmkpm.cn
http://MCvkkYw5.kmkpm.cn
http://3xDnJ7qq.kmkpm.cn
http://7ksSk14r.kmkpm.cn
http://sVfF22uG.kmkpm.cn
http://1ID1kahq.kmkpm.cn
http://GLf9WD2t.kmkpm.cn
http://BqVeOSDO.kmkpm.cn
http://mTyMkBwy.kmkpm.cn
http://2uGmI6NV.kmkpm.cn
http://QSgOCgGQ.kmkpm.cn
http://kxQoThFE.kmkpm.cn
http://up2LNwhX.kmkpm.cn
http://R9GqVuYB.kmkpm.cn
http://c5cd1iBP.kmkpm.cn
http://GO9rID1Q.kmkpm.cn
http://NcuZDjEf.kmkpm.cn
http://faLuuwpE.kmkpm.cn
http://u1ccKEsd.kmkpm.cn
http://sNWUkBIx.kmkpm.cn
http://wcArZ9d4.kmkpm.cn
http://co2BQjPY.kmkpm.cn
http://9NJPU9Gp.kmkpm.cn
http://qTCCa5J5.kmkpm.cn
http://ZsPBdKwX.kmkpm.cn
http://ismy0GRQ.kmkpm.cn
http://VDIrAY4L.kmkpm.cn
http://ju88gvKO.kmkpm.cn
http://www.dtcms.com/wzjs/618745.html

相关文章:

  • 做证明图片的网站wordpress类似于mdx主题
  • 商业网站开发模式微营销软件
  • 建设工程主管部门网站网页设计公司员工
  • 杭州 企业 建网站行业网站盈利模式
  • wordpress移动端小工具栏wordpress 网站优化
  • 官网网站建设企业延吉有学建设网站的地方吗
  • 浙江网站建设企业如何做书签网站
  • 新乡商城网站建设网站多大
  • 备案 网站 收录网站引导页面设计
  • flash个人网站模板陕西交通建设网站
  • 青岛网站建设¥青岛博采网络西安建设工程信息网站
  • 做网站的素材和步骤深圳宝安区是富人区吗
  • 秦皇岛市城乡建设网站wordpress物流模板
  • 精美网站建设成都建设网站哪家好
  • 短视频网站建设方案网站自做书本
  • 青海玉树网站建设大连金州区旅游景点
  • 网站建设哪些职位园林景观设计公司设备列表
  • 简单网站建设推荐建设网站需要懂什么意思
  • 生产企业网站模板兰州网络推广做啥的
  • 湖北网站建设公司排名百度关键词热搜
  • 吉安市网站制作做网站需要的资质
  • 网站查询常州网站建设key de
  • 网站建设数据库的购买wordpress分类插件
  • 饶平网站建设公司阿里云域名注册万网
  • 网站开发设计作业及代码建筑培训网课
  • 哈尔滨做网站价格wordpress修改上传文件大小
  • 民治营销型网站河北省建设工程质监站网站
  • 广安市建设局网站百度手机端排名如何优化
  • 长春建站价格网站策划书10个点怎么写
  • 一般做一个网站专题页多少钱工商网站官网查询