- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
最小表示法精选
最小表示法在字符串循环同构中的应用
主讲人:孙权
ACMLab519HNAU
一、问题引入
二、算法流程
三、例题推荐
参考资料:周源(最小表示法).ppt
什么是同构?
有两条环状的项链,每条项链上各有N个多种颜色的珍珠,相同颜色的珍珠,被视为相同。
前言
“最小表示法”比起动态规划、贪心等思想,在当今竞赛中似乎并不是很常见。但是在解决判断“同构”一类问题中却起着重要的作用。
本文即将讨论字符串中的同构问题,如何巧妙地运用最小表示法来解题呢,让我们继续一起思考吧。
例题分析 poj1509
(英文题太长了),直接上题意:
题意:给你一个字符串,将字符串第i位开始的字串提到前面形成A[i],求n个这种串中字典序最小的串的i。
Input
2
aaabaaa
helloworld
Output
5
10
题解
方法一:暴力O(n^2);
方法二:传说中的“最小表示法”!!!
定义:“最小表示法”
但在循环字符串的最小表示法可以通俗的理解为:
对于一个字符串S,求S的循环的同构字符串S’中字典序最小的一个。
定义:设有事物集合T={t1,t2,…,tn},
映射集合F={f1,f2,…,fm}。
任意f∈F均为T到T的映射,fi:T→T。
如果两个事物s,t ∈ T,有一系列F的映射的连接 fi1•fi2•…•fik(s)=t,则说s和t是F本质相同的。
不明觉厉!!!
算法流程
1.两个指针i=0,j=1.
2.从s[i]和s[j]开始比较,字符s[i+k]和字符s[j+k]是否相同,当k==len时,返回i,j中的最小值.
3.当s[i+k]和s[j+k]不相同时,若s[i+k]s[j+k],则可见从s[i+1]到s[i+k]都不会是最小字典序的起始位置,所以i=i+k+1.当s[i+k]s[j+k]时同理.
4.若移动后i==j,则使i++或者j++;
还是看图最实际啦!
不怎么理解?有点抽象!
总之两句话
总之,(1)当两个字符相同时,一直向前比较,直到k=len;
(2)两指针向后滑动比较失败以后,
指向较大字符的指针向后滑动k+1个位置。
下面让我们将这种方法应用于一个实例。
看图解1 (其中k为每次成功匹配的个数)
设s1=‘babba’,s2=‘bbaba’。
i
j
比较失败时k=1
不相等
因为u[i+k]w[j+k]
所以移动指针j
看图解2 (其中k为每次成功匹配的个数)
设s1=‘babba’,s2=‘bbaba’。
i
不相等
因为u[i+k]w[j+k]
所以移动指针i
j
比较失败时k=0
看图解3 (其中k为每次成功匹配的个数)
设s1=‘babba’,s2=‘bbaba’。
不相等
因为u[i+k]w[j+k]
所以移动指针i
j
i
比较失败时k=2
为什么较大的向前跳k+1,因为[0,k]任一字符开头,下面都存在一个比它小的一个字符串
看图解4 (其中k为每次成功匹配的个数)
设s1=‘babba’,s2=‘bbaba’。
j
i
所以s1和s2是循环同构的!
Attention
注意最小表示法 是针对单个字符串,在一个字符串中匹配,上面的图解为了更清晰,所以画了两个字符串。
例题推荐
poj 1509
hdu 2609
文档评论(0)