数据结果核心知识.pptVIP

  1. 1、本文档共30页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结果核心知识

数据结构 朱全民 KMP算法 KMP的基本原理 假设主串为s1s2…sn ,模式串为p1p2…pm , 当模式串发生失配 (sipj)时,模式串”向右滑动”可行距离有多远? 假设此时应与模式中的第k (kj)个字符继续比较,则模式中的前k-1个字必须与主串的前k-1个字符相等,有 p1p2…pk-1= s i-k+1si-k+2…si-1 由已经得到的部分匹配结果可知 pj-k+1pj-k+2…pj-1= s i-k+1si-k+2…si-1 所以有 p1p2…pk-1= pj-k+1pj-k+2…pj-1 由上式可知,当主串第i个字符与模式串第j个字符不相等时候,仅需将模式串向右滑动到模式串中的第K个字符和主串中的第i个字符对齐,此时模式中的头K-1个字符的子串肯定与主串中第i个字符之前的K-1个子串相等. 怎样求K KMP示例 求next函数 next[1]=0,设next[j]=k,表明, p1p2…pk-1= pj-k+1pj-k+2…pj-1 (1) 若pk= pj ,则在模式串中有 p1p2…pk= pj-k+1pj-k+2…pj 显然 next[j+1]=k+1 (2) 若pk pj ,则杂模式串中有 p1p2…pk pj-k+1pj-k+2…pj 则可将求next函数的问题看成整个模式串既是主串又是模式串的问题,应将模式串滑动到next[k]个字符和主串的第j个字符相比较.若next[k]=k’,且pj=pk’,则说明在主串中第j+1个字符之前存在一个长度为k’的最长子串,和模式串中从首字符起长度为k’的子串相等,即 p1p2…pk’ = pj-k’+1pj-k+2…pj 也就是说next[j+1]=k’+1=next[k]+1 求NEXT算法 Proc get_next(t:strtp) { next为全程变量} j:=1 ;k:=0;next[1]:=0; While jt.curlen do if (k=0) or (t.ch[j]=t.ch[k]) then [j:=j+1;k:=k+1;next[j]:=k] else k:=next[k] endP DNA病毒 科学家最近发现了某种病毒,通过对该病毒的分析,它的DNA是是环状的,科学家为了方便研究,将病毒DNA表示成由一些字母组成的字符串,现在科学家怀疑有人中了这种病毒,如何判断是否中了病毒呢?主要是看这种病毒代码是不是在人的DNA中出现过,如果出现过,则此人中了病毒,否则没有中病毒。例如,假设人的DNA代码为abcddcba,而病毒代码为ccdd,则abcddcba的下划线部分为病毒部分,该人中了毒。 科学家有一些任务,他们已找出了病毒的DNA和人的DNA,现在要你提供帮助,看看哪些是否中了毒。 约束 输入:DNA.in 第一行一个数n,表示有n个任务,(k=300)。 接下来的每个任务都包括两行,第2i行的字符串表示第i个人的DNA (长度=8000) ,第2i+1行的字符串,表示第i个病毒的DNA。(长度=8000)。 (注意,人的DNA是线性的,而病毒DNA是环状的) 输出:DNA.out n行,每行一个词”YES”或者NO。分别所对应那个任务的判断情况。 样例 DNA.IN 2 bbab abb ababab Ab DNA.OUT YES YES 分析 扩展的kmp:即可以在(n+m)的时间内,求出模式s的每一个位置i可以和j匹配到哪儿。然后求出a[i]:s的每一个位置向后匹配与t开始向后匹配可以匹配到哪儿。 然后求出b[i]:从s的每一个位置向前匹配与t从后开始向前匹配可以匹配到哪儿。 如果a[i]+b[i-1]=length(T)就输出’yes’,否则是no. 二叉排序树 它或者是一颗空树,或者是具有如下性质的二叉树:1)若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值2) 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值3)它左右子树分别为二叉排序树。 查找 FUNC bstsrch(t:bitreptr;K:keytype):bitree if (t=nil) or (t^.key=K) then return(t) else if t^.keyK then return(bstsrch(t^.lchild,k)) else return(bstsrch(t^.rchild,k

文档评论(0)

ligennv1314 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档