字符串与模式匹配算法.ppt
《字符串与模式匹配算法.ppt》由会员分享,可在线阅读,更多相关《字符串与模式匹配算法.ppt(59页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Hu JunfengHu JunfengPeking UniversityPeking University字符串与模式匹配算法2009/03/05Hu JunfengHu JunfengPeking UniversityPeking University内容:内容:作业讲解字符串概念与抽象数据类型串模式匹配2Hu JunfengHu JunfengPeking UniversityPeking University1-1 链表插入3Hu JunfengHu JunfengPeking UniversityPeking University1-2 按逆序输出4Hu JunfengHu Junf
2、engPeking UniversityPeking University1-3 删除重复值节点5Hu JunfengHu JunfengPeking UniversityPeking University1-3 删除重复值节点6Hu JunfengHu JunfengPeking UniversityPeking University1-3 删除重复值节点7Hu JunfengHu JunfengPeking UniversityPeking University1-3 删除重复值节点8Hu JunfengHu JunfengPeking UniversityPeking Universit
3、y循环链表合并(循环链表合并(2-1)9Hu JunfengHu JunfengPeking UniversityPeking University10Hu JunfengHu JunfengPeking UniversityPeking University11Hu JunfengHu JunfengPeking UniversityPeking University字符串基本概念字符串基本概念 字符串字符串简称串,是一种特殊的线性表,其特殊性主要在于表中的每个元素是一个字符。一个串可以记作s=s0s1sn-1(n0),其中s是串的名字,双引号括起来的字符序列s0s1sn-是串的值。例如:A
4、=123B=ABBABBCC=BBD=BBE=12Hu JunfengHu JunfengPeking UniversityPeking University13Hu JunfengHu JunfengPeking UniversityPeking UniversityC语言中定义的字符串语言中定义的字符串存储结构:字符指针0操作:char*strcpy(char*dst,char*sorc)intstrcmp(char*str1,char*str2);char*strcat(char*dest,constchar*sorc,size);char*strstr(char*str,constch
5、ar*strSearch);size_tstrlen(constchar*str);gets(char*);puts(char*);14Hu JunfengHu JunfengPeking UniversityPeking University15Hu JunfengHu JunfengPeking UniversityPeking University由字符串构成的线性表由字符串构成的线性表16Hu JunfengHu JunfengPeking UniversityPeking University自定义自定义字符串字符串ADTString createNullStr(void)创建一个空
6、串。int IsNullStr(String s)判断串s是否为空串,若为空串,则返回1,否则返回0。int length(String s)返回串s的长度。String concat(String s1,Sting s2)返回将串s1和s2拼接在一起构成的一个新串。String subStr(String s,int i,int j)在串s中,求从串的第i个字符开始连续j个字符所构成的子串。int index(String s1,String s2)如果串s2是s1的子串,则可求串s2在串s1中第一次出现的位置。17Hu JunfengHu JunfengPeking UniversityP
7、eking University顺序结构顺序结构字符串字符串ADT的的定义定义struct SeqString/*顺序串的类型*/int MAXNUM;/*串允许的最大字符个数*/int n;/*串的长度,nMAXNUM*/char *c;typedef struct SeqString *PSeqString;18Hu JunfengHu JunfengPeking UniversityPeking University顺序串示例顺序串示例s=“abcdefg”a b c d efgs.n=7s.c 0 1 2 3 4 5 6 MAXNUM-119Hu JunfengHu JunfengPe
8、king UniversityPeking University自定义自定义字符串字符串ADT 创建顺序结构空串创建顺序结构空串PSeqStringcreateNullStr_seq(intm)PSeqStringpstr=(PSeqString)malloc(sizeof(structSeqString);if(pstr!=NULL)pstr-c=(char*)malloc(sizeof(char)*m);if(pstr-c!=NULL)pstr-n=0;pstr-MAXNUM=m;return(pstr)elsefree(pstr);printf(Outofspace!n);returnN
9、ULL;struct SeqString int MAXNUM;int n;char *c;20Hu JunfengHu JunfengPeking UniversityPeking University自定义自定义字符串字符串ADT 初始化字符串初始化字符串21Hu JunfengHu JunfengPeking UniversityPeking University自定义自定义字符串字符串ADT 取指定子串取指定子串22Hu JunfengHu JunfengPeking UniversityPeking University链接结构链接结构字符串字符串ADT的的定义定义structStr
10、Node;/*链串的结点*/typedefstructStrNode*PStrNode;/*结点指针类型*/structStrNode/*链串的结点结构*/charc;PStrNodelink;typedefstructStrNode*LinkString;/*链串的类型*/字符串结尾?长度?23Hu JunfengHu JunfengPeking UniversityPeking University字符串的链接存储示例字符串的链接存储示例sabcdsabcd不带头结点不带头结点带头结点带头结点abcds带尾指针的循环链表带尾指针的循环链表24Hu JunfengHu JunfengPeki
11、ng UniversityPeking University链接存储链接存储字符串的字符串的基本运算基本运算创建空链串联结两个串取单链串的子串取单链串的子串删除子串追加方式插追加方式插入子串入子串子串定位模式匹配求串长25Hu JunfengHu JunfengPeking UniversityPeking University创建带头结点的空链串创建带头结点的空链串LinkStringcreateNullStr_link(void)LinkStringpst;pst=(LinkString)malloc(sizeof(structStrNode);if(pst!=NULL)pst-link=
12、NULL;elseprintf(Outofspace!n);/*创建失败*/return(pst);26Hu JunfengHu JunfengPeking UniversityPeking University取单链串的子串取单链串的子串27Hu JunfengHu JunfengPeking UniversityPeking University串模式匹配串模式匹配问题问题设有两个串t和p:t=t0t1tn-1,p=p0p1pm-1其中1m=n(通常mn)模式匹配的目的是在t中找出和p相同的子串。此时,t称为“目标”,而p称为“模式”。模式匹配的结果有两种:匹配成功:t中存在等于p的子串,
13、返回子串在t中的位置匹配失败:返回一个特定的标志(如-1)。28Hu JunfengHu JunfengPeking UniversityPeking University两种模式匹配方法两种模式匹配方法模式匹配是一个比较复杂的字符串操作,下面的讨论是基于字符串的顺序存储顺序存储结构进行。分为朴素的模式匹配方法和无回溯的模式匹配方法匹配思想匹配示例匹配算法算法时间效率分析29Hu JunfengHu JunfengPeking UniversityPeking University朴素的模式匹配思想朴素的模式匹配思想p p中字符依次与中字符依次与t t中字符一一比较:中字符一一比较:t t0
14、0 t t1 1 t tj j t tj+1j+1 t tj+m-1j+m-1 t tn n p p0 0 p p1 1 p pm-1m-1 如果对于所有的如果对于所有的i i(0=i=m-1)(0=istrlen(t0);31Hu JunfengHu JunfengPeking UniversityPeking University朴素子串匹配法示例(朴素子串匹配法示例(每次每次p右移一个单元)右移一个单元)下标j01234567891011121314151617目标taabcbabcaabcaababc模式pabcaababcabcaababcabcaababcabcaababcabca
15、ababcabcaababcabcaababcabcaababcabcaababcabcaababc32Hu JunfengHu JunfengPeking UniversityPeking University33Hu JunfengHu JunfengPeking UniversityPeking University算法时间效率分析算法时间效率分析朴素模式匹配算法一旦比较不等,p右移一个字符并且下次从p0开始重新进行比较,对于目标t,存在回溯现象。匹配失败的最坏情况:每趟匹配皆在最后一个字符不等,且有n-m+1趟匹配(每趟比较m个字符),共比较m*(n-m+1)次,由于mn,因此最坏时间
16、复杂度O(n*m)。匹配失败的最好情况:n-m+1次比较每趟只比较第一个字符。匹配成功的最好情况:m次比较。匹配成功的最坏情况:与匹配失败的最坏情况相同。综上讨论:朴素模式匹配算法的时间复杂度为O(m*n)34Hu JunfengHu JunfengPeking UniversityPeking University无回溯的模式匹配方法无回溯的模式匹配方法(KMP算法算法)基本思想无回溯的模式匹配算法匹配算法的时间效率分析next数组计算next数组计算的时间效率分析35Hu JunfengHu JunfengPeking UniversityPeking University基本思想基本思想
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 字符串 模式 匹配 算法
限制150内