欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    扩展KMP算法.ppt

    • 资源ID:85506443       资源大小:517KB        全文页数:17页
    • 资源格式: PPT        下载积分:16金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要16金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    扩展KMP算法.ppt

    扩展的扩展的KMP算法算法刘雅刘雅琼 【扩展的扩展的KMPKMP算法算法】扩扩展的展的KMPKMP问题问题:给定母串S,和子串T。定义n=|S|,m=|T|,extendi=Si.n与T的最长公共前缀长度。请在线性的时间复杂度内,求出所有的extend1.n。容易发现,如果有某个位置i满足extendi=m,那么T就肯定在S中出现过,并且进一步知道出现首位置是i而这正是经典的KMP问题。因此可见“扩展的KMP问题”是对经典KMP问题的一个扩充和加难。例子 S=aaaaaaaaaabaaa,T=aaaaaaaaaaa。extend2=9。为了计算extend2,我们是不是也要进行10次比较运算呢?不然。因为通过计算extend1=10,我们可以得到这样的信息:S1.10=T1.10 S2.10=T2.10。计算extend2的时候,实际上是S2开始匹配T。因为S2.10=T2.10,所以在匹配的开头阶段是“以T2.10为母串,T为子串”的匹配。设辅助函数nexti表示Ti.m与T的最长公共前缀长度。对上述例子,next2=10。也就是说:T2.11=T1.10 T2.10=T1.9 S2.10=T1.9。这就是说前9位的比较是完全可以避免的!我们直接从S11T10开始比较。这时候一比较就发现失配,因此extend2=9。下面提出一般的算法。设extend1.k已经算好,并且在以前的匹配过程中到达的最远位置是p。最远位置严格的说就是i+extendi-1的最大值,其中i=1,2,3,k;不妨设这个取最大值的i是a。(下图黄色表示已经求出来了extend的位置)第一种情况第一种情况第二种情况第二种情况整个算法描述结束。上述算法是线性线性算法。原因如下:容易看出,在计算的过程中,凡是访问过的点,都不需要重新访问了。一旦比较,都是比较以前从不曾探访过的点开始。因此总的时间复杂度是O(n+m),是线性的。如何求解如何求解nextnext数组数组还剩下一个问题:next这个辅助数组怎么计算?复杂度是多少?我们发现计算next实际上以实际上以T为母串、为母串、T为子串的一个特殊为子串的一个特殊“扩展的扩展的KMP”。用上文介绍的完全相同的算法计算next即可。(用next本身计算next,具体可以参考标准KMP)此不赘述。总结总结算法的思想 已经访问过的点绝不再访问,充分利用已经访问过的点绝不再访问,充分利用已经得到的信息。已经得到的信息。扩展扩展KMPKMP的一些应用的一些应用求解最长公共前缀长度求字符串中重复子串的长度 (利用next数组,nexti表示Ti.m与T的最长公 共前缀长度。找重复子串,比如abababccc,ababab就是重复子串;再比如 ababa,这个也是重复的,只是最后一个循环节不完整,端点处的循环节不完整的串也算作重复串。因此i+nexti的长度就是重复子串的长度。)例如poj2185比如ababab,next2=4,2,3匹配0,1;然后4,5匹配2,3;相当于还是匹配0,1;所以0,1被重复了3次,所以只要是能匹配上的,就是在重复前i个字符,能匹配多长,就是重复了多长,直接用i+nexti就是最长的长度。求解extend数组的模板void GetExtand(const EleType str,int strLen,int extand,const EleType mode,int modeLen,int next)int i,a,p,j(-1);for(i=0;i strLen;+i,-j)if(j=p)if(j 0)j=0,p=i;while(p strLen&j modeLen&strp=modej)+p,+j;extandi=j,a=i;else extandi=nexti-a;根据上面的模板,大家可以仿照写计算next的函数。poj2185主要求解next数组,唯一的不同在于此题是一个二维char数组,我们可以先把每一列看作一个点,这样整个二维数组看成一个字符串,算出nexti;在把每一行看作一个点,又一个字符串,再求出一组nexti。这两个过程中,分别对求出来的nexti,根据i+nexti=len(表示循环长度覆盖了整个串),进行判断筛选,将行与列的结果进行组合,即求得可行解。(题目要求的是面积)Thank you!

    注意事项

    本文(扩展KMP算法.ppt)为本站会员(hwp****526)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开