2022年的小伙伴们正在积极备考,大多数考生对计算机综合(408)考研知识点都感到很茫然。研学长为大家按照2020年考研大纲的考察目标对计算机综合(408)考研知识点进行了系统化的整合。下面,各位考生就跟着研学长一起了解一下“考研知识点-计算机综合(408)数据结构-查找 ”,希望能给各位考生带来帮助。
这一章,需要识记关键字、主关键字、次关键字的含义;静态查找与动态查找的含义及区别; 平均查找长度ASL的概念念及在各种查找算法中的计算方法和计算结果, 特别是一些典型结构的ASL值, B-树的概念和基本操作冲突解决方法的选择和冲突处理过程的描述,B+树的概念(新增考点),特别要注意B-树和B+树概念的对比,以及Hash表相关的概念。要熟练掌握序表、链表、二叉树上的查找方法,特别要注意顺序查找、二分查找的适用条件(比如链表上用二分查找就不合适)和算法复杂度。
考研-计算机综合(408)-知识点01-分块查找法
索引项包括两个字段:关键码字段(存放对应子表中的最大关键码值);指针字段(存放只想对应子表的指针),并且要求索引项按关键码字段有序。
查找时,先用给定值key在索引表中检测索引项,以确定所要进执行的查找表中的查找分块(由于索引项按关键码字段有序,可用顺序查找或折半查找)然后对于该分块,在对该分块进行顺序查找。
分块查找的平均查找长度由两部分构成,即查找索引表时的平均查找长度为LB,以及在相应块内进行顺序查找的平均查找长度为Lw, AS Lbs=LB+Lw。
考研-计算机综合(408)-知识点02-字符串模式匹配
(一)简单匹配算法
假设我们要从主串s="goodgoogle"找到t="google"这个子串的位置,我们需要下列步骤
1、主串s的第1位开始,s与t前三个字符都匹配成功,第四个字符不匹配(竖线表示相等,闪电状弯折表示不想等)
2、主串s的第2位开始,匹配失败
3、主串s的第3位开始,匹配失败
4、主串s的第4位开始,匹配失败
5、主串s的第5位开始,s与t,6个字符全部匹配成功
对主串的每一个字符作子串开头,要与匹配的字符串进行匹配。对主串作大循环,每一个字符开头作t长度的小循环,直到匹配成功或者全部遍历完为止。
复杂度:
最好的情况,比如在"googlegood"中找"google",时间复杂度为O(1)
稍差一点,比如"abcdefgoogle"中找"google",时间复杂度O(n+m),其中n为主串长度,m为子串长度,根据等概率原则,平均(n+m)次查找,时间复杂度为O(n+m)
最坏的情况,每次不成功都发生在串t的最后一个字符,比如子串t="0000000001",9个"0"和一个"1";主串s="00000000000000000000000000000000000000000000000001",49个"0"和一个"1";时间复杂度为O((n-m+1)*m)
(二)KMP匹配算法
假设主串s="abcdefgab",t="abcdex"
"abcdex"的首字符"a"与后面的串"bcdex"中任何一个字符都不相等,子串t与主串s的前5个字符分别相等,意味着子串t的首字符"a"不可能与s串的第2位到第5位的字符相等
上面的案例,子串t中没有重复的字符,下面给出一个有重复字符的例子
假设s="abcababca",t="abcabx"
第一步,前5个字符相等,第6个字符不相等,根据前面的经验,t的首字符"a"与t中第二位、第三位字符军部等,不需要判断
子串t中第1位与第4位相等,第2位与第5位相等;主串s中第4位,第5位分别与子串t中第4位,第5位相等,意味着子串的第1位与第2位分别与主串第4位与第5位相等,不需要判断
总结:i值不回溯,j值的变化只与子串有关,取决于t串中的结构中是否有重复的字符串。
我们把t串各个位置的变化定义为一个数组next,next的长度就是t串的长度
时间复杂度:对于get_next来说,t的长度为m,由于只涉及到简单循环,其时间复杂度为O(m);i的值不回溯,主串的长度为n,while循环的时间复杂度为O(n),因此整个代码的数减复杂度为O(n+m)