标签:== 就是 二维数组 需要 时间复杂度 mp算法 uil 复杂 das
一.本章内容小结
本章我们学习了串,数组和广义表
首先,我们学习了串,线性表主要由顺序表示或链式表示。在实际应用中,常以栈,队列,字符串等特殊形式使用。线性表和串的操作基本类似,但串的操作针对串的整体,而线性表则针对单个元素。
概念的理解并不复杂,接下来是实现所用的算法
1.BF算法
BF算法即暴风算法,是普通的模式匹配算法。BF算法的思想:将目标串S的第一个字符与模式串T的第一个字符进行匹配,若相等,则继续比较S的第二个字符和 T的第二个字符;若不相等,则比较S的第二个字符和T的第一个字符,依次比较下去,直到得出最后的匹配结果。BF算法的优势在于他在思维上的简单,代码容易打,但是时间复杂度较大。
2.KMP算法
KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt提出的,因此人们称它为克努特—莫里斯—普拉特操作(简称KMP算法)。KMP算法的核心是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。具体实现就是通过一个next()函数实现,函数本身包含了模式串的局部匹配信息
Position KMP(char *string,char* pattern) { int n=strlen(string); int m=strlen(pattern); int s,p,*match; if(n<m) return NotFound; match=(int *)malloc(sizeof(int) *m); BuildMatch(pattern,match); s=p=0; while(s<n&&p<m) { if(string[s]==pattern[p]){s++;p++; } else if(p>0)p=match[p-1]+1; else s++; }
以上是部分代码;
2.数组
分为一维数组,二维数组,和多维数组,概念相对简单。学习了压缩数组。对称矩阵多用下三角法,稀疏矩阵可用三元表法
3.广义表
从定义上,广义表是一种递归的线性表。
二.作业心得体会
本章作业中的编程题为 串的模式匹配
一开始要面对自己独立完成KMP算法,有点模糊,感觉难以下手,通过阅读老师在博客园的代码和复现完成了本次作业,争取以后能独立完成代码
int kmp(string sstring, string pstring) { int *next = new int[pstring.length()]; calc_next(pstring, next);//得到 next[]数组 char *s = trans(sstring), *p = trans(pstring); //转字符串为字符数组 int i=0, j=0; int pos = 0; while( i<=sstring.length() || j<=pstring.length()){ if( j == -1 || s[i] == p[j]){ i++; j++; }else{ j = next[j]; } if(j == pstring.length()){//匹配成功 pos = i-j+1; break; } } return pos; }
而实践一在了解到sort函数之前一直在实现sort的功能而反复调试,后面掌握了sort函数后基本行云流水。
代码就不放在这里了,在main函数就可以解决所有问题。
存在的问题:
在数据结构这门课上还是感觉比较吃力,难以独自完成,都是要通过帮助,其实也印证了我的学习还不够深入,理解也不够透彻,希望能加以改进。
下一阶段的目标:
将复现过的代码争取都能直接复现,而不需要各种各样的提示,当然对下一章内容也要能很好的掌握。
标签:== 就是 二维数组 需要 时间复杂度 mp算法 uil 复杂 das
原文地址:https://www.cnblogs.com/pjc1435211553/p/12828033.html