一个字符串是否为另一个的子串.docxVIP

  • 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

文档评论(0)

1亿VIP精品文档

相关文档