- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
1;文本……;求串长
取子串
定位子串(串匹配)
子串替换
两个串的连接
…;C语言函数库中提供的串处理函数
gets(str) : 输入一个串;
puts(str) :输出一个串;
strcat(str1, str2) : 串联接函数;
strcpy(str1, str2, k) : 串复制函数;
strcmp(str1, str2) :串比较函数;
strlen(str) : 求串长函数;
C++标准库中的string类
, , ==, !=, =, =, + , =, …
size, assign, append, compare, find, replace, reserve, …
;顺序存储
静态数组
动态数组
块链存储
链式,每个结点存储一定长度的子串;#define MAXSTRLEN 255
typedef unsigned char SString[MAXSTRLEN + 1];
//用户可在255以内定义最大串长,
//超过予定义长度的串值则被舍去,称之为“截断” ;
// 0号单元存放串的长度
;typedef struct {
char *ch; // 按串长分配存储区
int length; // 串长度
} HString;
;
#define CHUNKSIZE 80 // 块大小
typedef struct Chunk {
char ch[CUNKSIZE];
struct Chunk *next;
} Chunk;
typedef struct // 串的链表结构
Chunk *head, *tail; // 串的头和尾指针
int curlen; // 串的当前长度
} LString;;str 是不变类型
对象创建后,内容(和长度)不变
采用顺序存储表示 ——动态数组;串匹配与KMP算法;许多计算机应用的最基本操作是字符串匹配。如
用编辑器或字处理系统工作时,在文本中查找单词或句子(中文字或词语),在程序里找拼写错误的标识符等
email 程序的垃圾邮件过滤器,google 等网络检索系统
各种防病毒软件,主要靠在文件里检索病毒模式串
在分子生物学领域:DNA 细胞核里的一类长分子,在遗传中起着核心作用。DNA 内有四种碱基:腺嘌吟(adenine),胞嘧啶(cytosine),鸟嘌吟(guanine),胸腺嘧啶(thymine)。它们的不同组合形成氨基酸、蛋白质和其他更高级的生命结构
DNA 片段可看作是a,c,g,t构成的模式,如 acgatactagacagt
考查在蛋白质中是否出现某个 DNA 片段,可看成与该 DNA 片段的串匹配问题。DNA 分子可以切断和拼接,切断动作由各种酶完成,酶也是采用特定的模式确定剪切位置;实际中模式匹配的规模(n 和 m)可能非常大,而且有时间要求
被检索的文本可能很大
网络搜索需要处理亿万的网页
防病毒软件要在合理时间内检查数以十万计的文件(以 GB 计)
运行在服务器上的邮件过滤程序,可能需要在一秒钟的时间内扫描数以万计的邮件和附件
为疾病/药物研究/新作物培养等生物学工程应用,需要用大量 DNA模式与大量 DNA 样本(都是 DNA 序列)匹配
由于在计算机科学、生物信息学等许多领域的重要应用,串模式匹配问题已成为一个极端重要的计算问题。高效的串匹配算法非常重要
有几个集中关注字符串匹配问题的国际学术会议,曾经有过专门的国际竞赛(见 wiki 页和万维网)
目前全世界一大半的计算能力是在做串模式匹配(做 DNA 分析);matching(t, p) # index(t, p)
返回子串p在t中的 位置;若不存在,返回-1
t = t0t1t2 … tn-1 称为主串(目标串)
p = p0p1p2 … pm-1 称为子串(模式串)
通常有 m n
;def na?ve_matching(t, p):
j, i = 0, 0
while j len(t) and i len(p):
if t[j] == p[i] :
j, i = j + 1, i + 1
else: # 不同时,j回溯,i回到头
j, i = j - i + 1, 0
if i == len(p):
return j - i
return -1
;朴素的串匹配算法;每次匹配失败时,j回溯到i-j+1,i回溯到0
效果:模式每次向前滑动一步,从头比较;
时间复杂度:O(n * m)
例:t50=000…00
文档评论(0)