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

  • 12
  • 0
  • 约8.49千字
  • 约 14页
  • 2018-07-04 发布于湖北
  • 举报
判定子串算法比较一、问题描述 本文主要讨论分别用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=x0,…,xm-1 ,y=y0,…,yn-1,当前正在比较xi与yj是否相等。如果相等,则j=0,只需要继续比较xi+1与yj0,设p=y0,…,yj-1,s是p两头匹配的最大真子字符串,且s=y0,…≠Yji+1iXxi-k-1,…,xi-1=yj-k-1,…,yj-1=s,从而xi-k-1,…,xi-1=y0,…,yk,因此xi可与yk+1继续比较。而且,由于s是p两头匹配的最大真子字符串,用反证法不难证明,xi与y≠Yji+1iXj=0sii-1sii-1 X≠≠

文档评论(0)

1亿VIP精品文档

相关文档