知识大全 串 - 串的存储结构 - 串运算的实现(二)
Posted 位移
篇首语:知识的领域是无限的,我们的学习也是无限期的。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 串 - 串的存储结构 - 串运算的实现(二)相关的知识,希望对你有一定的参考价值。
顺序串上的子串定位运算
( )朴素的串匹配算法的基本思想
即用一个循环来依次检查n m+ 个合法的位移i( ≤i≤n m)是否为有效位移
具体过程【 参见动画演示 】
( )顺序串上的串匹配算法
以下以第二种定长的顺序串类型作为存储结构 给出串匹配的算法
#define MaxStrSize //该值依赖于应用 由用户定义
typedef struct
char ch[MaxStrSize]; //可容纳 个字符 并依次存储在ch[ n]中
int length;
SeqString;
int Naive StrMatch(SeqString T SeqString P)
//找模式P在目标T中首次出现的位置 成功返回第 个有效位移 否则返回
int i j k;
int m=P length; //模式串长度
int n=T length; //目标串长度
for(i= ;i<=n m;i++) // <=i<=n m是合法的位移
j= ;k=i; //下面用while循环判定i是否为有效位移
while(j
k++;j++;
if(j==m) //既T[i..i+m-1]=P[0..m-1]
return i; //i为有效位移,否则查找下一个位移
//endfor
return -1; //找不到有效位移,匹配失败
//NaiveStrMatch
(3)算法分析
①最坏时间复杂度
该算法最坏情况下的时间复杂度为O((n-m+1)m)。tW.wINGwIT.Com
分析:当目标串和模式串分别是"a n-1 b"和"a m-1 b"时,对所有n-m+1个合法的位移,均要比较m个字符才能确定该位移是否为有
效位移,因此所需比较字符的总次数为(n-m+1)m。
②模式匹配算法的改进
朴素的串匹配算法虽然简单,但效率低。其原因是在检查位移i是否为有效位移时,没有利用检查位移i-1,i,…,0时的部分匹配
结果。
若利用部分匹配结果,模式串右滑动的距离就不会是每次一位,而是每次使其向右滑动得尽可能远。这样可使串匹配算法的最坏
时间控制在O(m+n)数量级上。具体可【参阅有关文献】。
5、链串上的子串定位运算
用结点大小为1的单链表做串的存储结构时,实现朴素的串匹配算法很简单。只是现在的位移shift是结点地址而非整数,且单链
表中没有存储长度信息。若匹配成功,则返回有效位移所指的结点地址,否则返回指针。具体算法如下:
LinkStrNode *LinkStrMatch(LinkString T,LinkString P)
//在链串上求模式P在目标T首次出现的位置
LinkStrNode * shift,*t,*p;
shift=T; //shift表示位移
t=shift;p=P;
while(t&&p)
if(t->data==p->data) //继续比较后续结点中字符
t=t->next;
p=p->next;
else //已确定shift为无效位移
shift=shift->next; //模式右移,继续判定shift是否为有效位移
t=shift;
p=P;
//endwhile
if(p==NULL)
return shift; //匹配成功
else
return NULL; //匹配失败
该算法的时间复杂度与顺序表上朴素的串匹配算法相同。
cha138/Article/program/sjjg/201311/23903相关参考
因为串是特殊的线性表故其存储结构与线性表的存储结构类似只不过由于组成串的结点是单个字符所以存储时有一些特殊的技巧 串的顺序存储 顺序串 串的顺序存储结构简称为顺序串 与顺序表类似顺序串是用
串的链式存储 链串 > 用单链表方式存储串值串的这种链式存储结构简称为链串 链串的结构类型定义 typedefstructnode chardata; structnode*next
串的顺序存储 串的顺序存储结构简称顺序串顺序串是用一组地址连续的存储单元依次存储串中的字符序列 静态存储分配的顺序串 顺序串最简单的描述形式是直接使用定长的字符数组来定义数组的上界预先
因为串是特殊的线性表故其存储结构与线性表的存储结构类似只不过由于组成串的结点是单个字符所以存储时有一些特殊的技巧串的顺序存储顺序串 串的顺序存储结构简称为顺序串 与顺序表类似顺序串是用一组地址
串的基本运算cha138/Article/program/sjjg/201311/23402
串的链式存储cha138/Article/program/sjjg/201311/23382
顺序串上的子串定位运算 子串定位又称串的模式匹配(PatternMatching)或串匹配(StringMatching) 在串匹配中一般将主串称为目标(串)子串称为模式(串) 假设T为目标串P
串的基本运算 对于串的基本运算很多高级语言均提供了相应的运算符或标准的库函数来实现 为叙述方便先定义几个相关的变量 chars[]=dir/bin/appls[]=fileasms[]*p;
本章介绍了串的逻辑结构存储结构及串上的基本运算由于在高级语言中已经提供了较全善的串处理功能因此本章的重点是掌握在串上实现的模式匹配算法同时这也是本章的难点但是从全书来讲这属于较简单的一章内容 串
串(又称字符串)是一种特殊的线性表它的每个结点仅由一个字符组成 在早期的程序设计语言中串仅在输入或输出中以直接量的形式出现并不参与运算随着计算机的发展串在文字编辑词法 扫描符号处理以及定理证明