ImageVerifierCode 换一换
格式:PPT , 页数:44 ,大小:487.50KB ,
资源ID:5007697      下载积分:10 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.docduoduo.com/d-5007697.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(特殊的线性表串.ppt)为本站会员(weiwoduzun)主动上传,道客多多仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知道客多多(发送邮件至docduoduo@163.com或直接QQ联系客服),我们立即给予删除!

特殊的线性表串.ppt

1、第4章 特殊的线性表串,问题的提出,查毒程序 搜索引擎,1. 串的逻辑结构,串:由零个或多个任意字符组成的有限序列。 串长度:串中所包含的字符个数。 空串:长度为0的串,记为:“ “。 非空串通常记为: S=“a1 a2an” 其中:S是串名,双引号是定界符,双引号引起来的部分是串值 ,ai(1in)是一个任意字符。,1. 串的逻辑结构,两个串相等:如果两个串的长度相等且对应字符都相等。 子串:串中任意连续的字符组成的子序列称为该串。 主串:包含子串的串。 子串的第一个字符在主串中的序号称为子串的位置。,顺序串:用数组来存储串中的字符序列。,(1)用一个变量来表示串的长度 。,2. 串的存储结

2、构顺序串,如何表示串的长度?,顺序串:用数组来存储串中的字符序列。,(2)在串尾存储一个不会在串中出现的特殊字符作为串的终结符 。,2. 串的存储结构顺序串,如何表示串的长度?,顺序串:用数组来存储串中的字符序列。,(3)用数组的0号单元存放串的长度,串值从1号单元开始存放。,2. 串的存储结构顺序串,如何表示串的长度?,链接串:用链接存储结构来存储串。p55,2. 串的存储结构链接串,3. 串的基本操作,串的链接 串的比较 串的复制 习题4.4、4.5、4.6 习题4.7。编写一个函数来颠倒单词在字符串里的出现顺序。【程序员面试攻略(第2版)p81】 例如,把字符串“Do or do not

3、, there is no try. ”转换为“try. no is there not, do or Do”。假设所有单词都以空格为分隔符,标点符号也当做字母来对待。 请对你的设计思路做出解释,并对你的解决方案的执行效率进行评估。,3. 串的基本操作,删除特定字符。 【程序员面试攻略(第2版)p78】 用C语言编写一个高效率的函数来删除字符串里的给定字符。这个函数的调用模型如下所示:void RemoveChars(char str,char remove); 注意,remove中的所有字符都必须从str中删除干净。比如说,如果str是“Battle of the Vowels: Hawai

4、i VS. Grozny”,remove是“aeiou”,这个函数将把str转换为“Bttl f th Vwls: Hw vs. Grzny”。 请对你的设计思路做出解释,并对你解决方案的执行效率进行评估。,4. 串的应用模式匹配,模式匹配:给定主串S=“s1s2sn“和模式T=“t1t2tm“,在S中寻找T 的过程称为模式匹配。如果匹配成功,返回T 在S中的位置,如果匹配失败,返回0。,4. 串的应用BF模式匹配算法,基本思想:从主串S的第一个字符开始和模式T 的第一个字符进行比较,若相等,则继续比较两者的后续字符;否则,从主串S的第二个字符开始和模式T 的第一个字符进行比较,重复上述过程,

5、直到T 中的字符全部比较完毕,则说明本趟匹配成功;或S中字符全部比较完,则说明匹配失败。,例:主串S=“ababcabcacbab“,模式T=“abcac“,i=3,j=3失败; i回溯到2,j回溯到1,第1 趟,a b c a c,4. 串的应用BF模式匹配算法,i=3,j=3失败; i回溯到2,j回溯到1,j,i,第1 趟,a b c a c,例:主串S=“ababcabcacbab“,模式T=“abcac“,4. 串的应用BF模式匹配算法,i=2,j=1失败 i回溯到3,j回溯到1,第2 趟,a b c a c,例:主串S=“ababcabcacbab“,模式T=“abcac“,4. 串

6、的应用BF模式匹配算法,i=2,j=1失败 i回溯到3,j回溯到1,第2 趟,i,j,a b c a c,例:主串S=“ababcabcacbab“,模式T=“abcac“,4. 串的应用BF模式匹配算法,a b c a c,i=7,j=5失败 i回溯到4,j回溯到1,第3 趟,例:主串S=“ababcabcacbab“,模式T=“abcac“,4. 串的应用BF模式匹配算法,a b c a c,i=7,j=5失败 i回溯到4,j回溯到1,第3 趟,i,j,例:主串S=“ababcabcacbab“,模式T=“abcac“,4. 串的应用BF模式匹配算法,a b c a c,i=4,j=1失败

7、 i回溯到5,j回溯到1,第4 趟,例:主串S=“ababcabcacbab“,模式T=“abcac“,4. 串的应用BF模式匹配算法,a b c a c,i=4,j=1失败 i回溯到5,j回溯到1,第4 趟,i,j,例:主串S=“ababcabcacbab“,模式T=“abcac“,4. 串的应用BF模式匹配算法,a b c a c,i=5,j=1失败 i回溯到6,j回溯到1,第5 趟,例:主串S=“ababcabcacbab“,模式T=“abcac“,4. 串的应用BF模式匹配算法,a b a b c a b c a c b a b,a b c a c,i=5,j=1失败 i回溯到6,j回

8、溯到1,第5 趟,i,j,例:主串S=“ababcabcacbab“,模式T=“abcac“,4. 串的应用BF模式匹配算法,a b a b c a b c a c b a b,a b c a c,i=11,j=6,T中全部字符都比较完毕,匹配成功。,第6 趟,例:主串S=“ababcabcacbab“,模式T=“abcac“,4. 串的应用BF模式匹配算法,1. 在串S和串T中设比较的起始下标i和j; 2. 循环直到S或T的所有字符均比较完;2.1 如果Si=Tj,继续比较S和T的下一个字符;2.2 否则,将i和j回溯,准备下一趟比较; 3. 如果T中所有字符均比较完,则匹配成功,返回匹配的

9、起始比较下标;否则,匹配失败,返回0;,4. 串的应用BF模式匹配算法,int BFmatching(char s , char t ) i=1; j=1; while (it0) return (i-j+1); else return 0; ,4. 串的应用BF模式匹配算法,4. 串的应用BF模式匹配算法,设串s长度为n,串t长度为m,在匹配成功的情况下,考虑两种极端情况: 最好情况:不成功的匹配都发生在串t的第一个字符。 例如:s=“aaaaabcd“ t=“bcd“ 设匹配成功发生在si处,则在i-1趟不成功的匹配中共比较了i-1次,第i趟成功的匹配共比较了m次,所以总共比较了i-1+m

10、次,所有匹配成功的可能情况共有n-m+1种,则:设从si开始与t串匹配成功的概率为pi,在等概率情况下pi=1/(nm+1),平均比较的次数是因此最好情况下的时间复杂度是O(n+m)。,4. 串的应用BF模式匹配算法,设串s长度为n,串t长度为m,在匹配成功的情况下,考虑两种极端情况: 最坏情况:不成功的匹配都发生在串t的最后一个字符。 例如:s=“aaaaab“ t= “aaab“ 设匹配成功发生在si处,则在i-1趟不成功的匹配中共比较了(i-1)m次,第i趟成功的匹配共比较了m次,所以总共比较了im次,因此平均比较的次数是一般情况下,mn,因此最坏情况下的时间复杂度是O(nm)。,4.

11、串的应用BF模式匹配算法,为什么BF算法时间性能低? 在每趟匹配不成功时存在大量回溯,没有利用已经部分匹配的结果。 如何在匹配不成功时主串不回溯? 主串不回溯,模式就需要向右滑动一段距离。 如何确定模式的滑动距离?,i=3,j=3失败; s2=t2;t1t2 t1s2,第1 趟,a b c a c,4. 串的应用KMP模式匹配算法,i=3,j=3失败; s2=t2;t1t2 t1s2,i,j,第1 趟,a b c a c,a b c a c,第3 趟,4. 串的应用KMP模式匹配算法,a b c a c,第3 趟,i=7,j=5失败s4=t2;t1t2 t1s4,4. 串的应用KMP模式匹配算

12、法,a b c a c,第3 趟,i=7,j=5失败s5=t3;t1t3 t1s5,4. 串的应用KMP模式匹配算法,a b c a c,第3 趟,i=7,j=5失败s5=t3;t1t3 t1s5,匹配成功,4. 串的应用KMP模式匹配算法,4. 串的应用KMP模式匹配算法,结论: i可以不回溯,模式向右滑动到的新比较起点k ,并且k 仅与模式串T有关! 需要讨论两个问题: 如何由当前部分匹配结果确定模式向右滑动的新比较起点k? 模式应该向右滑多远才是最高效率的?,请抓住部分匹配时的两个特征:,(1)设模式滑动到第k个字符,则T1Tk-1 Si-(k-1) Si-1,4. 串的应用KMP模式匹

13、配算法,请抓住部分匹配时的两个特征:,两式联立可得:T1Tk-1Tj-(k-1) Tj-1,(2)则Tj-(k-1) Tj-1 Si-(k-1) Si-1,(1)设模式滑动到第k个字符,则T1Tk-1 Si-(k-1) Si-1,4. 串的应用KMP模式匹配算法,T1Tk-1Tj-(k-1) Tj-1说明了什么? (1) k 与 j 具有函数关系,由当前失配位置 j ,可以计算出滑动位置 k(即比较的新起点); (2)滑动位置k 仅与模式串T有关。,从第1位往右 经过k-1位,从j-1位往左 经过k-1位,kmax k |1kj 且T1Tk-1Tj-(k-1) Tj-1 ,T1Tk-1Tj-(

14、k-1) Tj-1的物理意义是什么?,模式应该向右滑多远才是最高效率的?,4. 串的应用KMP模式匹配算法,next j ,0 当j1时 /不比较 max k | 1kj 且T1Tk-1=Tj-(k-1) Tj-1 1 其他情况,令k = next j ,则:,nextj函数表征着模式T中最大相同首子串和尾子串(真子串)的长度。 可见,模式中相似部分越多,则nextj函数越大,它既表示模式 T 字符之间的相关度越高,模式串向右滑动得越远,与主串进行比较的次数越少,时间复杂度就越低。,4. 串的应用KMP模式匹配算法,4. 串的应用KMP模式匹配算法,计算nextj的方法: 当j=1时,next

15、j=0;/nextj=0表示根本不进行字符比较 当j1时,nextj的值为:模式串的位置从1到j-1构成的串中所出现的首尾相同的子串的最大长度加1。 当无首尾相同的子串时nextj的值为1。nextj=1表示从模式串头部开始进行字符比较,j=1时, next j 0; j=2时, next j 1;,j=3时, t1t2,因此,k=1;,j=4时, t1t3,因此,k=2;,j=5时, t1t4,因此,k=2;,以此类推。,4. 串的应用KMP模式匹配算法,void GetNext(char t ) next1=0; j=1; k=0;while (jt0)if (k=0)| |(tj= =t

16、k) j+; k+; nextj=k; else k=nextk; ,求模式串t的next函数值算法,4. 串的应用KMP模式匹配算法,1. 在串s和串t中分别设比较的起始下标i和j; 2. 循环直到s中所剩字符长度小于t的长度或T中所有字符均比较完毕2.1 如果si=tj,继续比较S和T的下一个字符;否则2.2 将j向右滑动到nextj位置,即j=nextj;2.3 如果j=0,则将i和j分别加1,准备下一趟比较;3. 如果t中所有字符均比较完毕,则返回匹配的起始下标;否则返回0;,4. 串的应用KMP模式匹配算法,例:设主串s=“abcabcabd“,模式串p=“abcabd“,按KMP算法进行模式匹配,当“s0s1s2s3s4“=“p0p1p2p3p4“,且s5p5时,应进行 比较。A、s5和p2 B、s5和p3 C、s1和p0 D、s8和p5,4. 串的应用KMP模式匹配算法,特殊线性表,栈,队 列,串,栈的定义 操作特性 ADT定义,队列定义 操作特性 ADT定义,串的定义 基本概念 ADT定义,顺序栈,链栈,循环队列,链队列,顺序存储,链接存储,逻辑结构,存储结构,逻辑结构,逻辑结构,存储结构,存储结构,比 较,模式匹配,比较,比较,基本操作的实现 时间性能,基本操作的实现 时间性能,特殊线性表串,

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报