第八章柔性字符串匹配3.ppt

  1. 1、本文档共89页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第八章柔性字符串匹配3

第八章 字符串匹配 介绍 字符串匹配算法是计算机科学中研究得最为广泛和古老的问题之一。取证领域需要各种字符串的有哪些信誉好的足球投注网站、排除技术。 目前存在各种各样复杂的字符串算法,同时也存在各种的误解 例如:KMP算法在实际中比蛮力方法慢一倍。BM算法中真正实用的是对原算法高度简化后的方法 介绍 经典的数据结构中对字符串算法介绍得比较少,但是在安全领域,用得非常广范,例如IDS,FireWall,Anti Virus等 字符串匹配技术本身也在发展例如多模式匹配、扩展模式匹配、近似模式匹配等等 但是由于课程时间限制,我们仅仅介绍概念上比较简单,又很实用的算法 经典字符串匹配相关算法 1.字符串匹配算法 2.多字符串匹配 3.正则表达式匹配 4.近似字符串匹配 第一部分 字符串匹配 1.1位并行和位运算 位并行利用了计算机机器字位运算的内在并行性,即可以把多个值装入同一个机器字内,然后只需要一次运算就能更新所有值。 还可以做算术运算,但是如果一个串跨多个机器字的时候要注意进位的影响 1.2基本概念 The string matching problem is that of finding all the occurrences of a given pattern p = p1p2…pm in a large text T = t1t2…tn, where both T and p are sequences of characters from a finite character set Σ. Given strings x, y, and z, we say that x is a prefix of xy, a suffix of yx, and a factor of yxz. 1.3 Brute Force算法 (3)BF算法的时间复杂度 若n为主串长度,m为子串长度,则串的BF匹配算法最坏的情况下需要比较字符的总次数为(n-m+1)*m=O(n*m) 最好的情况是:一配就中!主串的前m个字符刚好等于模式串的 m个字符,只比较了m次,时间复杂度为O(m)。 最恶劣情况是:模式串的前m-1个字符序列与主串的相应字符序列比较总是相等,但模式串的第m个字符和主串的相应字符比较总是不等,此时模式串的m个字符序列必须和主串的相应字符序列一共比较n-m+1次,所以总次数为:m*(n-m+1),因此其时间复杂度为O(n×m)。 1.4 可以改进的地方 前缀有哪些信誉好的足球投注网站 从左到右有哪些信誉好的足球投注网站,如果发现T中已有哪些信誉好的足球投注网站字符串的后缀是p的前缀,那么就可以移动比1更多的距离,移动到II的后面 后缀有哪些信誉好的足球投注网站 在有哪些信誉好的足球投注网站窗口内从右往左逐个读入正文串中的字符,有哪些信誉好的足球投注网站其与模式串的最长公共后缀。因为这种有哪些信誉好的足球投注网站方式能跳过正文的一些字符,因而具有亚线性的平均时间复杂度。 基于后缀有哪些信誉好的足球投注网站思想的方法中最著名的就是Boyer-Morre(BM)算法,而其它方法几乎都是在其基础上的改进,比较有代表性的如Horspool(BMH)、Tuned-BM(TBM)、Sunday(QS)、SSABS、BR等。BM算法的时间复杂度在最好的情况下为O(n/m),但最坏的情况下却为O(nm)。尽管理论上BM算法比基于前缀和子串的方法好,但实际应用中却并不是最快的算法。 Factor有哪些信誉好的足球投注网站 基于子串有哪些信誉好的足球投注网站思想的方法中,有哪些信誉好的足球投注网站窗口的移动简单而优雅(不需对齐匹配),但其主要难点是如何识别模式串的所有子串,这是一个非常复杂的问题。BDM算法使用后缀自动机来有哪些信誉好的足球投注网站子串,而在其基础上引入位并行技术的BNDM算法则更加简洁而有效。这类方法目前研究得较多,已经出现了不少有效的改进算法,如SBNDM、SBNDMq等。 KMP算法的思想: 设s为主串,t为模式串,设i为主串s当前比较字符的下标,j为模式串t当前比较字符的下标,令i和j的初值为0。当si = tj时,i和j分别增1再继续比较;否则i不变,j改变为next[j]值(即模式串右滑)后再继续比较。依次类推,直到出现下列两种情况之一:一是 j退回到某个j=next[j]值时有si = tj ,则i和j分别增1后再继续比较;二是j退回到j=-1时,令主串和子串的下标各增1,随后比较si+1和t0 。这样的循环过程一直进行到变量i大于等于size或变量j大于等于size时为止。 BF与KMP算法的运行效率比较 如何求next 举个例子 假设子串为P:“abacabab”, 且我们将要求的是‘b’的next值, e.g. next[7] 假设next[0~6]均为已知: next[0]=-1, next[1]=-1 , next[2]=0 , next[3]=-1 , next[4]=0 , next[5]=1 ,next[

文档评论(0)

dajuhyy + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档