- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第4章 串 4.1 串 3、C语言的串函数 4.2 串的存储结构 (1)静态数组结构:用静态内存分配方法定义的数组。由于此时数组元素的个数是在编译是确定的,在运行时是不可改变的,所以也称为定长数组结构。 (1)单字符结点链 typedef struct Node { char str; struct Node *next; } SCharNode; 4.3 串操作的实现 (1)初始化操作 void Initiate(DString *S, int max, char *string) { int i, m; S-length = strlen(string); if(S-length max) m = S-length; else m = max; S-maxLength = m; S-str = (char *)malloc(sizeof(char)*m); for(i = 0; i S-length; i++) S-str[i] = string[i]; } 4.3 串的模式匹配算法 (3)BF算法的时间复杂度 若n为主串长度,m为子串长度,则串的BF匹配算法最坏的情况下需要比较字符的总次数为(n-m+1)*m=O(n*m) 最好的情况是:一配就中!主串的前m个字符刚好等于模式串的 m个字符,只比较了m次,时间复杂度为O(m)。 最恶劣情况是:模式串的前m-1个字符序列与主串的相应字符序列比较总是相等,但模式串的第m个字符和主串的相应字符比较总是不等,此时模式串的m个字符序列必须和主串的相应字符序列块一共比较n-m+1,所以总次数为:m*(n-m+1),因此其时间复杂度为O(n×m)。 KMP算法的思想: 设s为主串,t为模式串,设i为主串s当前比较字符的下标,j为模式串t当前比较字符的下标,令i和j的初值为0。当si = tj时,i和j分别增1再继续比较;否则i不变,j改变为next[j]值(即模式串右滑)后再继续比较。依次类推,直到出现下列两种情况之一:一是 j退回到某个j=next[j]值时有si = tj ,则i和j分别增1后再继续比较;二是j退回到j=-1时,令主串和子串的下标各增1,随后比较si+1和t0 。这样的循环过程一直进行到变量i大于等于size或变量j大于等于size时为止。 3、BF与KMP算法的运行效率比较 则说明模式串中的子串“t0t1…tk-1”已和主串“si-ksi-k+1…si-1”匹配。下一次可直接比较si和tk; 此时若模式串中不存在可相互重叠的真子串,则说明在模式串t0t1…tj-1”中不存在任何以t0为首字符的字符串与“si-jsi-j+1…si-1”中以si-1为末字符的字符串匹配,下一次可直接比较si和t0。 关于模式串中的真子串问题。我们把模式串中从第一个字符开始到任一个字符为止的模式串中的真子串定义为next[j]函数,则next[j]函数定义为 next[ j ]= -1 当j=0时 max { k | 0kj 且‘t0 t1 …tk-1’=‘tj-k tj-k+1…tj-1’ } 0 其他情况 当模式串t中的tj与主串s的si比较不相等时,模式串t中需重新与主串s的si比较的字符下标为k,即下一次开始比较si和tk; 若模式串t中不存在如上所说的真子串,有next[j]=0,则下一次开始比较si和t0;当j=0时令next[j]=-1。 * * 主要知识点 串的基本概念和C语言的串函数 串的存储结构 动态数组实现的顺序串 串的模式匹配算法——BF算法 1、串的基本概念 1)串(又称字符串)是由n(n≥0)个字符组成的有限序列。(它是数据元素为单个字符的特殊线性表。) 记为: s =“s0,s1, ……,sn-1” (n≥0 ) 串名 串值(用“ ”括起来) 2)串长 串中字符的个数(n≥0)。 3)空串 串中字符的个数为0 时称为空串 ? 。 4)空白串 由一个或多个空格符组成的串。 5)子串 串S中任意个连续的字符序列叫S的子串; S叫主 串。 6)子串位置 子串的第一个字符在主串中的序号。 7)字符位置 字符在串中的序号。 8)串相等 串长度相等,且对应位置上字符相等。(即两个串中的字符序列一一对应相等。) 问:空串和空白串有无区别? 答:有区别。 空串(Null String)是指长度为零的串; 而空白串(Blank String),是指包含一个或多个空白字符‘ ’(空格键)的字符串. 注:串与
您可能关注的文档
最近下载
- 压力检测及仪表.ppt
- DGTJ08-202-2020钻孔灌注桩施工规程 上海市.pptx VIP
- 光伏发电站场内及并网安全技术白皮书.pdf
- API SPEC 4F 钻井和修井井架、底座规范1995.doc VIP
- 2023年09月浙江温州市平阳县部分事业单位面向高校毕业生退役士兵公开招聘6人笔试历年难易错点考题荟萃附带答案详解_1.docx VIP
- 《中华人民共和国安全生产法》培训解读课件.pptx VIP
- 《中华人民共和国安全生产法》解读与培训.pptx VIP
- 电子商务专业课程体系构建与实践教学方案.docx VIP
- 《中华人民共和国矿山安全法实施条例》深度解读课件.pptx VIP
- 【温州】2024年浙江温州平阳县部分事业单位面向高校毕业生退役士兵招聘工作人员6人笔试历年典型考题及考点剖析附带答案详解.docx VIP
文档评论(0)