数 据 结 构 - 金融智能和金融工程四川省重点实验室.ppt

数 据 结 构 - 金融智能和金融工程四川省重点实验室.ppt

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

串的模式匹配算法KMP 考虑s=“00000000000000000000000001” t=“0000001” 每当一趟匹配过程出现字符不相等时,主串指示器不用回溯,而是利用已经得到的“部分匹配”结果,将模式串的指示器向右“滑动”尽可能远的一段距离后继续进行比较。 串的模式匹配算法KMP 串的模式匹配算法KMP 设主串s=“s1s2…sn” ,模式串t=“t1t2 …tm” 。当si≠tj (1≦i≦n-m,1≦jm)时,主串s的指针i不必回溯,模式串t的指针j回溯到第k(kj)个字符继续比较。 模式串t的前k-1个字符必须满足下式,而且不可能存在k’k满足该式。 t1t2…tk-1= si-(k-1) si-(k-2) … si-2 si-1 (4-1) 而已经得到的 “部分匹配”的结果为: tj-(k-1) tj-k… tj-1=si-(k-1) si-(k-2) … si-2 si-1 (4-2) 由式(4-1)和式(4-2)得: t1t2…tk-1=tj-(k-1) tj-k… tj-1 (4-3) 串的模式匹配算法KMP 0 当j=1时 Max{k|1kj∧t1t2…tk-1=tj-(k-1) tj-k… tj-1 } 该集合不空时 1 其它情况 next[j]= 定义next[j]函数为 KMP函数思想 求得next[j]值之后,KMP算法的思想: 目标串(主串)为s,模式串为t ,并设i指针和j指针分别指示目标串和模式串中正待比较的字符,设i和j的初值均为1。 若有si=tj,则i和j分别加1。 否则,i不变,j退回到j=next[j]的位置,再比较si和tj 若相等,则i和j分别加1 否则,i不变,j再次退回到j=next[j]的位置。 依此类推。 KMP函数思想 直到下列两种可能: (1)j退回到某个下一个[j]值时字符比较相等,则指针各自加1继续进行匹配。 (2)退回到j=0,将i和j分别加1,即从主串的下一个字符si+1模式串的t1重新开始匹配。 KMP算法示例 KMP的实现 数 据 结 构 刘家芬 Sept 2012 第四章 串 在非数值处理、事务处理等问题常涉及到一系列的字符操作。字符串的处理比单纯数值处理复杂。 例如:文字编辑系统、编译程序、图像、音乐处理、信息检索等。 本章目标 串的定义 串的存储结构和操作实现 *串的模式匹配算法 串的概念 串(字符串):是零个或多个字符组成的有限序列。记作: S=‘a1a2a3…’。 S是串名,单引号括起来的字符序列是串值。 ai(1≦i≦n) 可以是单个字母、数字或其它字符 串长:串中所包含的字符个数称为该串的长度 空串(空的字符串):长度为零的串称为空串,它不包含任何字符。 空格串(空白串):构成串的所有字符都是空格的串称为空白串。 注意空串和空白串的不同,例如“ ”和“”分别表示长度为1的空白串和长度为0的空串。 子串的概念 串中任意个连续字符组成的子序列称为该串的子串,包含子串的串相应地称为主串。 通常将子串在主串中首次出现时的该子串的首字符对应的主串中的序号,定义为子串在主串中的序号(或位置)。 例如,设A和B分别为 A=“This is a string” B=“is” 则B是A的子串,A为主串。B在A中的序号是? B在A中出现了两次,其中首次出现所对应的主串位置是3。称B在A中的序号(或位置)为3。 空串是任意串的子串,任意串是其自身的子串。 串相等 串相等:如果两个串的串值相等(相同),称这两个串相等。只有当两个串的长度相等,且各个对应位置的字符都相同时才相等。 串值可用单引号或双引号括起来,但引号本身不属于串,用于区分串的边界而已。 串常量和串变量 通常在程序中使用的串可分为两种:串变量和串常量。 串常量在程序中只能被引用,不能改变其值,即只能读不能写。例如C语言中的printf(Succeed!) 串变量和其它类型的变量一样,其值可以改变。 串的抽象数据类型定义 ADT String{ 数据对象:D = { ai|ai∈CharacterSet, i=1,2,…,n, n ≥0 } 数据关系:R = {ai-1, ai| ai-1, ai∈D, i=2,3,…,n } 基本

文档评论(0)

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

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

1亿VIP精品文档

相关文档