- 21
- 0
- 约8.12千字
- 约 14页
- 2016-12-30 发布于重庆
- 举报
判定子串算法比较一、问题描述本文主要讨论分别用Las Vegas,Monte Carlo,KMP算法判断某个字符串是不是另一个字符串的子串。同时,分别统计出这三种算法的时间,以及Monte Carlo算法的出错率,并进行相应的分析比较。二、问题分析关于Las Vegas,及Monte Carlo的算法思想见课件。下面说明一下KMP算法思想。设有字符串x和y,其长度分别为LengthX和LengthY。看y是否为x的子串。KMP算法基本策略是:预处理模式y,获得其中与模式匹配有关的子字符串关系规律,从而当发生匹配失败时,可以确定继续与x当前位置匹配的y的新位置,同时不要求在x中回溯。这样保证,只要遍历一次字符串x和y,即可判断出结果。此时算法消耗时间为O(LengthX+LengthY).得到最佳性能。设x=,…, ,y=,…,,当前正在比较与是否相等。如果相等,则i、j各向前推进一步,继续比较。如果不等,则如图(1)所示,有两种情况需要处理:j=0,只需要继续比较与即可。j0,设p=,…,,s是p两头匹配的最大真子字符串,且s=,…,,则由已匹配的结果,Yji+1iX,…,=,…,=s,从而,…,=,…,,因此可与继续比较。而且,由于s是p两头匹配的最大真子字符串,用反证法不难证明,与继续比较不会遗漏模式。当然,p也是其本身两头匹配的最大字符串,但p不能作为s用,否则比较就会陷入无限循环。j=0sii-1 XYK+1ssjj-1p(2) j0于是可得到模式的失败函数定义如下模式y=,…,的失败函数f定义如下最大kj,使得,…,=,…,如果这样的k=0存在的话-1否则f(j)=例如:对于y=abcabcacab,有j0123456789yabcabcacabf-1-1-10123-101显然,失败函数f刻画了y与模式匹配有关的子字符串关系规律,后面求解f(j),于是我们会得到Find函数,见后面下面求解失败函数首先,f(0)=-1.下面由f(j-1)求出f(j)UVPPYjf (j-1)j-1SS若u=v,则f(j)=f(j-1)+1,否则标记(j)=f(j),(j)=f(.-1如果j=0若u=w,则f(j)=+1,否则可以继续计算下去,直至找到某个m,使第(j-1)+1个位置的字符与u相等,或(j-1)=-1且第0位置的字符仍不等于u.由此,可得失败函数f另一种形式:如果上述k不存在m是使得x(=x(j)的最小kf(j)=-1具体的fail算法见附录三、各个算法流程图①Las Vegas算法开始yj为字符串y前m个字符,m为x的长度求出字符串yj的指纹lpyj求出字符串x的指纹lpxN返回位置jY lpx==lpyj由lpyj求出lpy(j+1)②Monte Carlo算法f[0]=-1i=f[j-1],j=1If(x(j)!=x(i+1)和i=0)NYi=f(i)③KMP算法Ni0利用失败函数fail()求出x字符串匹配的规律,并放入数组f中。Yi=f(i)f(j)=-1用find函数判断x是否为y的子串Find函数流程图X和y均在长度范围内NYNNj==0 xj==yiYYi++j=f[j-1]+1i++,j++jx.length或x.length==0NY返回y中第一个与x匹配的位置返回-1四、结果分析注:运行电脑,双核均为2.27GHz,所用语言C++,测试5000对字符串,部分测试了20000对L:Las Vegas所用时间,M:Monte Carlo所用时间 K:KMP所用时间E:Error Monte Carlo出错个数 P:所用的素数Y的长度X的长度L/msM/msK/msE/个标准505067212 78131 14871 49151 610114 均值7.48.413.41.8 错误率0.036%2%50801310152 1316134 91072 1413150 915113 均值11.612.812.22.2 错误率0.044%1.25%501001511234 1513166 1312221 919151 1712161 均值13.813.418.42.6 错误率0.052%1%500500748211238475124295631073 均值81.274.2118.82.2 错误率0.044%0.20%下面测试了20000对30100044146134823 44843032910 43442936419 43643434924 43644133016 均值43943934418.4 错误率0.092%0.10%40100044143336815 42447836315 42641035912 40542834520 4304293599 均值425.2
您可能关注的文档
- 一万个小时天才理论精深.docx
- 一万次旅行也拯救不了平庸的你.doc
- 一上入学准备期作业.doc
- 一上语文易错题汇总.doc
- 一下音乐计划表(2012~2013学年下学期).doc
- 一个9号的心灵独白.doc
- 一个ID的距离有多远.doc
- 一个五毛钱的故事.doc
- 一个人必须掌握的139条绝对真理.doc
- 一个人的状态,总是最糟的.doc
- 小区绿化施工协议书.docx
- 墙面施工协议书.docx
- 1 古诗二首(课件)--2025-2026学年统编版语文二年级下册.pptx
- (2026春新版)部编版八年级道德与法治下册《3.1《公民基本权利》PPT课件.pptx
- (2026春新版)部编版八年级道德与法治下册《4.3《依法履行义务》PPT课件.pptx
- (2026春新版)部编版八年级道德与法治下册《6.2《按劳分配为主体、多种分配方式并存》PPT课件.pptx
- (2026春新版)部编版八年级道德与法治下册《6.1《公有制为主体、多种所有制经济共同发展》PPT课件.pptx
- 初三教学管理交流发言稿.docx
- 小学生课外阅读总结.docx
- 餐饮门店夜经济运营的社会责任报告(夜间贡献)撰写流程试题库及答案.doc
原创力文档

文档评论(0)