{算法}所谓ExKmp

来源:互联网 发布:高达ma 知乎 编辑:程序博客网 时间:2024/06/05 06:45

你想学会ExKmp吗?
首先 在心中说:

ExKmp其实很简单的

Preparations

毕竟名字里还有个KMP 所以没有学过KMP的同学请参见
M67大神的KMP{看得懂}
本蒟蒻的辣鸡广告{点一下 或更多}

Analysis

首先 ExKmp的核心任务相同于KMP
也就是判断T串是否为S串的子串
还是从暴力开始考虑
设a[i]表示满足T[i...i+a[i]]==T[1...a[i]]最大的a[i]
O(nm)暴力显然 枚举即可

为了表述方便 我们称两字符串”全等”当且仅当它们完全相同
观察匹配过程

ST
如图 已知红色部分是全等的 现在 我们希望得到蓝色部分的全等
注意到它们有公共部分 换一张复杂些的图
ST
简单解释一下 令绿色部分长度等于黄色部分
黄色部分是红串中同一区域 所以它们已知全等
同理 绿色部分已知全等
我们发现 S串中绿色部分与T串中黄色部分是需要判断是否全等的
如果全等 就可以延续这继续往后做了
尝试总结一下我们需要求的

S串 已匹配[红色] 与 其后缀[红蓝交集]中 最长的公共前缀[绿色部分]

也就是说 对于被匹配的部分 我们需要求其后缀的最长公共前缀
其中 显然的 绿色部分可以小于黄色部分
这就是ExKmp的核心思想

Code?

所以 具体做法中
1. 记载一个尾尽量远的串[红串]
2. 保存一个其本身与后缀[黄串]的最长公共前缀[绿串]
3. 不断更新它们

O(n) Proving

你看这几根指针都没有后退欸
所以说勒…

Ending

本以为ExKmp是什么高级玩意儿 打算消化一两天
然而 大失所望

ExKmp究竟比Kmp强在哪里呢?
你看它多算了很多很奇怪的东西啊

Q:我们有Kmp 为什么要用ExKmp
A:当即出一道题”求字符串中后缀的最长公共前缀”

The rest is silence.

1 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 狗咬了没破皮没出血有点疼怎么办 狗咬了没出血肿起来了怎么办 广州已经过了幼儿园报名时间怎么办 大专学费没交学校开始查了怎么办 如果申请留学的本科成绩不够怎么办 硕士读了三年无法毕业怎么办啊 孩子在美国读研读不下去怎么办? 在地割草中过失死亡法律^怎么办 高中毕业申请国外大学没录取怎么办 英国研究生老师没给写推荐信怎么办 申请悉尼大学博士奖学金被拒怎么办 硕士延迟毕业但被博士录取怎么办 考完初级职称还是不会做账怎么办 美国留学生在中国办日本签证怎么办 留学雅思过了gpa低怎么办澳洲 护士电子化注册用户名忘记了怎么办 护士电子化注册证书编码错误怎么办 澳洲预科上半学期成绩不达标怎么办 美国大学绩点不够怎么办学习证明 研一想换导师导师不答应怎么办 日本留学在留下来不想去了怎么办 加拿大工签3年到期了怎么办 鞋子穿久了会有臭味怎么办 考研忘了自己填写的通讯地址怎么办 基础教育教师培训网注册错了怎么办 11个月宝宝便秘大便有血怎么办 两岁宝宝两天没拉粑粑了怎么办 两岁宝宝两天没拉大便怎么办 两岁宝宝便秘两天没拉怎么办 昨天带孩子上早教课一直哭怎么办 网页账号注册无法获取验证码怎么办 我总是为一些事情而烦恼怎么办 手机键盘打出的字是繁体字怎么办 阴阳师协助任务对方接了不做怎么办 wow牧师选错了圣物怎么办 淘宝有几个订单被管控了怎么办 埋线双眼皮一个宽一个窄怎么办 把维D和维C一起吃了怎么办 微信出现当前登录环境异常该怎么办 去麦加朝觐人要出现死亡怎么办 炉石传说偶数骑削弱后怎么办