KMP next nextval算法
- 格式:doc
- 大小:36.00 KB
- 文档页数:3
2022年西安交通大学计算机科学与技术专业《数据结构与算法》科目期末试卷A(有答案)一、选择题1、有一个100*90的稀疏矩阵,非0元素有10个,设每个整型数占2字节,则用三元组表示该矩阵时,所需的字节数是()。
A.60B.66C.18000D.332、将两个各有N个元素的有序表归并成一个有序表,其最少的比较次数是()。
A.NB.2N-1C.2ND.N-13、某线性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素,则采用()存储方式最节省运算时间。
A.单链表B.仅有头指针的单循环链表C.双链表D.仅有尾指针的单循环链表4、已知有向图G=(V,E),其中V={V1,V2,V3,V4,V5,V6,V7}, E={<V1,V2>,<V1,V3>,<V1,V4>,<V2,V5>,<V3,V5>, <V3,V6>,<V4,V6>,<V5,V7>,<V6,V7>},G的拓扑序列是()。
A.V1,V3,V4,V6,V2,V5,V7B.V1,V3,V2,V6,V4,V5,V7C.V1,V3,V5,V2,V6,V7D.V1,V2,V5,V3,V4,V6,V75、用不带头结点的单链表存储队列,其队头指针指向队头结点,队尾指针指向队尾结点,则在进行出队操作时()。
A.仅修改队头指针B.仅修改队尾指针C.队头、队尾指针都可能要修改D.队头、队尾指针都要修改6、已知字符串S为“abaabaabacacaabaabcc”,模式串t为“abaabc”,采用KMP算法进行匹配,第一次出现“失配”(s!=t)时,i=j=5,则下次开始匹配时,i和j的值分别()。
A.i=1,j=0 B.i=5,j=0 C.i=5,j=2 D.i=6,j=27、循环队列放在一维数组A中,end1指向队头元素,end2指向队尾元素的后一个位置。
第3章栈和队列习题1.选择题(1)若让元素1,2,3,4,5依次进栈,则出栈次序不可能出现在()种情况。
A.5,4,3,2,1 B.2,1,5,4,3 C.4,3,1,2,5 D.2,3,5,4,1(2)若已知一个栈的入栈序列是1,2,3,…,n,其输出序列为p1,p2,p3,…,pn,若p1=n,则pi为()。
A.i B.n-i C.n-i+1 D.不确定(3)数组Q[n]用来表示一个循环队列,f为当前队列头元素的前一位置,r为队尾元素的位置,假定队列中元素的个数小于n,计算队列中元素个数的公式为()。
A.r-f B.(n+f-r)%n C.n+r-f D.(n+r-f)%n (4)链式栈结点为:(data,link),top指向栈顶.若想摘除栈顶结点,并将删除结点的值保存到x中,则应执行操作()。
A.x=top->data;top=top->link; B.top=top->link;x=top->link;C.x=top;top=top->link; D.x=top->link;(5)设有一个递归算法如下int fact(int n) { 线性表的链式存储结构 D. 栈(11)用链接方式存储的队列,在进行删除运算时()。
A. 仅修改头指针B. 仅修改尾指针C. 头、尾指针都要修改D. 头、尾指针可能都要修改(12)循环队列存储在数组A[0..m]中,则入队时的操作为()。
A. rear=rear+1B. rear=(rear+1)%(m-1)C. rear=(rear+1)%mD. rear=(rear+1)%(m+1)(13)最大容量为n的循环队列,队尾指针是rear,队头是front,则队空的条件是()。
A. (rear+1)%n==frontB. rear==frontC.rear+1==front D. (rear-l)%n==front(14)栈和队列的共同点是()。
《数据结构》复习重点知识点归纳一.数据结构的章节结构及重点构成数据结构学科的章节划分基本上为:概论,线性表,栈和队列,串,多维数组和广义表,树和二叉树,图,查找,内排,外排,文件,动态存储分配。
对于绝大多数的学校而言,“外排,文件,动态存储分配”三章基本上是不考的,在大多数高校的计算机本科教学过程中,这三章也是基本上不作讲授的。
所以,大家在这三章上可以不必花费过多的精力,只要知道基本的概念即可。
但是,对于报考名校特别是该校又有在试卷中对这三章进行过考核的历史,那么这部分朋友就要留意这三章了。
按照以上我们给出的章节以及对后三章的介绍,数据结构的章节比重大致为:·概论:内容很少,概念简单,分数大多只有几分,有的学校甚至不考。
·线性表:基础章节,必考内容之一。
考题多数为基本概念题,名校考题中,鲜有大型算法设计题,如果有,也是与其它章节内容相结合。
·栈和队列:基础章节,容易出基本概念题,必考内容之一。
而栈常与其它章节配合考查,也常与递归等概念相联系进行考查。
·串:基础章节,概念较为简单。
专门针对于此章的大型算法设计题很少,较常见的是根据KMP进行算法分析。
·多维数组及广义表:基础章节,基于数组的算法题也是常见的,分数比例波动较大,是出题的“可选单元”或“侯补单元”。
一般如果要出题,多数不会作为大题出。
数组常与“查找,排序”等章节结合来作为大题考查。
·树和二叉树:重点难点章节,各校必考章节。
各校在此章出题的不同之处在于,是否在本章中出一到两道大的算法设计题。
通过对多所学校的试卷分析,绝大多数学校在本章都曾有过出大型算法设计题的历史。
·图:重点难点章节,名校尤爱考。
如果作为重点来考,则多出现于分析与设计题型当中,可与树一章共同构成算法设计大题的题型设计。
·查找:重点难点章节,概念较多,联系较为紧密,容易混淆。
出题时可以作为分析型题目给出,在基本概念型题目中也较为常见。
2022年安徽农业大学计算机科学与技术专业《数据结构与算法》科目期末试卷A(有答案)一、选择题1、下述文件中适合于磁带存储的是()。
A.顺序文件B.索引文件C.哈希文件D.多关键字文件2、无向图G=(V,E),其中:V={a,b,c,d,e,f},E={(a,b),(a, e),(a,c),(b,e),(c,f),(f,d),(e,d)},对该图进行深度优先遍历,得到的顶点序列正确的是()。
A.a,b,e,c,d,fB.a,c,f,e,b,dC.a,e,b,c,f, dD.a,e,d,f,c,b3、链表不具有的特点是()。
A.插入、删除不需要移动元素B.可随机访问任一元素C.不必事先估计存储空间D.所需空间与线性长度成正比4、已知串S='aaab',其next数组值为()。
A.0123B.1123C.1231D.12115、已知有向图G=(V,E),其中V={V1,V2,V3,V4,V5,V6,V7}, E={<V1,V2>,<V1,V3>,<V1,V4>,<V2,V5>,<V3,V5>, <V3,V6>,<V4,V6>,<V5,V7>,<V6,V7>},G的拓扑序列是()。
A.V1,V3,V4,V6,V2,V5,V7B.V1,V3,V2,V6,V4,V5,V7C.V1,V3,V5,V2,V6,V7D.V1,V2,V5,V3,V4,V6,V76、下列关于无向连通图特性的叙述中,正确的是()。
Ⅰ.所有的顶点的度之和为偶数Ⅱ.边数大于顶点个数减1 Ⅲ.至少有一个顶点的度为1A.只有Ⅰ B.只有Ⅱ C.Ⅰ和Ⅱ D.Ⅰ和Ⅲ7、下列选项中,不能构成折半查找中关键字比较序列的是()。
A.500,200,450,180 B.500,450,200,180C.180,500,200,450 D.180,200,500,4508、已知一棵二叉树的前序遍历结果为ABCDEF,中序遍历结果为CBAEDF,则后序遍历结果为()。
2022年复旦大学计算机科学与技术专业《数据结构与算法》科目期末试卷A(有答案)一、选择题1、用有向无环图描述表达式(A+B)*((A+B)//A),至少需要顶点的数目为()。
A.5B.6C.8D.92、将两个各有N个元素的有序表归并成一个有序表,其最少的比较次数是()。
A.NB.2N-1C.2ND.N-13、线性表的顺序存储结构是一种()。
A.随机存取的存储结构B.顺序存取的存储结构C.索引存取的存储结构D.Hash存取的存储结构4、用不带头结点的单链表存储队列,其队头指针指向队头结点,队尾指针指向队尾结点,则在进行出队操作时()。
A.仅修改队头指针B.仅修改队尾指针C.队头、队尾指针都可能要修改D.队头、队尾指针都要修改5、在下列表述中,正确的是()A.含有一个或多个空格字符的串称为空格串B.对n(n>0)个顶点的网,求出权最小的n-1条边便可构成其最小生成树C.选择排序算法是不稳定的D.平衡二叉树的左右子树的结点数之差的绝对值不超过l6、下列关于无向连通图特性的叙述中,正确的是()。
Ⅰ.所有的顶点的度之和为偶数Ⅱ.边数大于顶点个数减1 Ⅲ.至少有一个顶点的度为1 A.只有Ⅰ B.只有Ⅱ C.Ⅰ和Ⅱ D.Ⅰ和Ⅲ7、已知关键字序列5,8,12,19,28,20,15,22是小根堆(最小堆),插入关键字3,调整后的小根堆是()。
A.3,5,12,8,28,20,15,22,19B.3,5,12,19,20,15,22,8,28C.3,8,12,5,20,15,22,28,19D.3,12,5,8,28,20,15,22,198、在下述结论中,正确的有()。
①只有一个结点的二叉树的度为0。
②二叉树的度为2。
③二叉树的左右子树可任意交换。
④深度为K的完全二叉树的结点个数小于或等于深度相同的满二叉树。
A.①②③B.⑦③④C.②④D.①④9、下述二叉树中,哪一种满足性质:从任一结点出发到根的路径上所经过的结点序列按其关键字有序()。
2022年青海大学计算机科学与技术专业《数据结构与算法》科目期末试卷A(有答案)一、选择题1、哈希文件使用哈希函数将记录的关键字值计算转化为记录的存放地址,因为哈希函数是一对一的关系,则选择好的()方法是哈希文件的关键。
A.哈希函数B.除余法中的质数C.冲突处理D.哈希函数和冲突处理2、下列排序算法中,占用辅助空间最多的是()。
A.归并排序B.快速排序C.希尔排序D.堆排序3、计算机算法指的是解决问题的步骤序列,它必须具备()三个特性。
A.可执行性、可移植性、可扩充性B.可执行性、确定性、有穷性C.确定性、有穷性、稳定性D.易读性、稳定性、安全性4、最大容量为n的循环队列,队尾指针是rear,队头:front,则队空的条件是()。
A.(rear+1)MOD n=frontB.rear=frontC.rear+1=frontD.(rear-1)MOD n=front5、下列关于AOE网的叙述中,不正确的是()。
A.关键活动不按期完成就会影响整个工程的完成时间B.任何一个关键活动提前完成,那么整个工程将会提前完成C.所有的关键活动提前完成,那么整个工程将会提前完成D.某些关键活动若提前完成,那么整个工程将会提前完成6、若一棵二叉树的前序遍历序列为a,e,b,d,c,后序遍历序列为b, c,d,e,a,则根结点的孩子结点()。
A.只有e B.有e、b C.有e、c D.无法确定7、下列叙述中,不符合m阶B树定义要求的是()。
A.根结点最多有m棵子树 B.所有叶结点都在同一层上C.各结点内关键字均升序或降序排列 D.叶结点之间通过指针链接8、一棵哈夫曼树共有215个结点,对其进行哈夫曼编码,共能得到()个不同的码字。
A.107B.108C.214D.2159、有n(n>0)个分支结点的满二叉树的深度是()。
A.n2-1B.log2(n+1)+1C.log2(n+1)D.log2(n-l)10、若查找每个记录的概率均等,则在具有n个记录的连续顺序文件中采用顺序查找法查找一个记录,其平均查找长度ASL为()。
2022年东北林业大学计算机科学与技术专业《数据结构与算法》科目期末试卷A(有答案)一、选择题1、已知广义表LS=((a,b,c),(d,e,f)),用head和tail数取出LS中原子e的运算是()。
A.head(tail(LS))B.tail(head(LS))C.head(tail(head(tail(LS))))D.head(tail(tail(head(LS))))2、用数组r存储静态链表,结点的next域指向后继,工作指针j指向链中结点,使j沿链移动的操作为()。
A.j=r[j].nextB.j=j+lC.j=j->nextD.j=r[j]->next3、单链表中,增加一个头结点是为了()。
A.使单链表至少有一个结点B.标识表结点中首结点的位置C.方便运算的实现D.说明单链表是线性表的链式存储4、最大容量为n的循环队列,队尾指针是rear,队头:front,则队空的条件是()。
A.(rear+1)MOD n=frontB.rear=frontC.rear+1=frontD.(rear-1)MOD n=front5、已知有向图G=(V,E),其中V={V1,V2,V3,V4,V5,V6,V7}, E={<V1,V2>,<V1,V3>,<V1,V4>,<V2,V5>,<V3,V5>, <V3,V6>,<V4,V6>,<V5,V7>,<V6,V7>},G的拓扑序列是()。
A.V1,V3,V4,V6,V2,V5,V7B.V1,V3,V2,V6,V4,V5,V7C.V1,V3,V5,V2,V6,V7D.V1,V2,V5,V3,V4,V6,V76、下列关于无向连通图特性的叙述中,正确的是()。
Ⅰ.所有的顶点的度之和为偶数Ⅱ.边数大于顶点个数减1 Ⅲ.至少有一个顶点的度为1A.只有Ⅰ B.只有Ⅱ C.Ⅰ和Ⅱ D.Ⅰ和Ⅲ7、排序过程中,对尚未确定最终位置的所有元素进行一遍处理称为一趟排序。
2022年上海师范大学计算机科学与技术专业《数据结构与算法》科目期末试卷A(有答案)一、选择题1、有一个100*90的稀疏矩阵,非0元素有10个,设每个整型数占2字节,则用三元组表示该矩阵时,所需的字节数是()。
A.60B.66C.18000D.332、无向图G=(V,E),其中:V={a,b,c,d,e,f},E={(a,b),(a, e),(a,c),(b,e),(c,f),(f,d),(e,d)},对该图进行深度优先遍历,得到的顶点序列正确的是()。
A.a,b,e,c,d,fB.a,c,f,e,b,dC.a,e,b,c,f, dD.a,e,d,f,c,b3、算法的计算量的大小称为计算的()。
A.效率B.复杂性C.现实性D.难度4、在用邻接表表示图时,拓扑排序算法时间复杂度为()。
A.O(n)B.O(n+e)C.O(n*n)D.O(n*n*n)5、有六个元素6,5,4,3,2,1顺序入栈,下列不是合法的出栈序列的是()。
A.543612B.453126C.346521D.2341566、下列选项中,不能构成折半查找中关键字比较序列的是()。
A.500,200,450,180 B.500,450,200,180C.180,500,200,450 D.180,200,500,4507、下列叙述中,不符合m阶B树定义要求的是()。
A.根结点最多有m棵子树 B.所有叶结点都在同一层上C.各结点内关键字均升序或降序排列 D.叶结点之间通过指针链接8、已知一棵二叉树的前序遍历结果为ABCDEF,中序遍历结果为CBAEDF,则后序遍历结果为()。
A.CBEFDAB.FEDCBAC.CBEDFAD.不定9、设X是树T中的一个非根结点,B是T所对应的二叉树。
在B中,X是其双亲的右孩子,下列结论正确的是()。
A.在树T中,X是其双亲的第一个孩子B.在树T中,X一定无右兄弟C.在树T中,X一定是叶结点D.在树T中,X一定有左兄弟10、在文件“局部有序”或文件长度较小的情况下,最佳内部排序的方法是()。
2022年安徽师范大学计算机科学与技术专业《数据结构与算法》科目期末试卷A(有答案)一、选择题1、已知广义表LS=((a,b,c),(d,e,f)),用head和tail数取出LS中原子e的运算是()。
A.head(tail(LS))B.tail(head(LS))C.head(tail(head(tail(LS))))D.head(tail(tail(head(LS))))2、设有一个10阶的对称矩阵A,采用压缩存储方式,以行序为主存储, a11为第一元素,其存储地址为1,每个元素占一个地址空间,则a85的地址为()。
A.13B.33C.18D.403、静态链表中指针表示的是()。
A.下一元素的地址B.内存储器的地址C.下一元素在数组中的位置D.左链或右链指向的元素的地址4、动态存储管理系统中,通常可有()种不同的分配策略。
A.1B.2C.3D.45、在用邻接表表示图时,拓扑排序算法时间复杂度为()。
A.O(n)B.O(n+e)C.O(n*n)D.O(n*n*n)6、下列关于无向连通图特性的叙述中,正确的是()。
Ⅰ.所有的顶点的度之和为偶数Ⅱ.边数大于顶点个数减1 Ⅲ.至少有一个顶点的度为1A.只有Ⅰ B.只有Ⅱ C.Ⅰ和Ⅱ D.Ⅰ和Ⅲ7、下列选项中,不能构成折半查找中关键字比较序列的是()。
A.500,200,450,180 B.500,450,200,180C.180,500,200,450 D.180,200,500,4508、设X是树T中的一个非根结点,B是T所对应的二叉树。
在B中,X是其双亲的右孩子,下列结论正确的是()。
A.在树T中,X是其双亲的第一个孩子B.在树T中,X一定无右兄弟C.在树T中,X一定是叶结点D.在树T中,X一定有左兄弟9、每个结点的度或者为0或者为2的二叉树称为正则二叉树。
n个结点的正则二叉树中有()个叶子。
A.log2nB.(n-1)/2C.log2n+1D.(n+1)/210、就平均性能而言,目前最好的内排序方法是()排序法。
2022年江苏理工学院计算机科学与技术专业《数据结构与算法》科目期末试卷A(有答案)一、选择题1、有一个100*90的稀疏矩阵,非0元素有10个,设每个整型数占2字节,则用三元组表示该矩阵时,所需的字节数是()。
A.60B.66C.18000D.332、若需在O(nlog2n)的时间内完成对数组的排序,且要求排序是稳定的,则可选择的排序方法是()。
A.快速排序B.堆排序C.归并排序D.直接插入排序3、链表不具有的特点是()。
A.插入、删除不需要移动元素B.可随机访问任一元素C.不必事先估计存储空间D.所需空间与线性长度成正比4、在用邻接表表示图时,拓扑排序算法时间复杂度为()。
A.O(n)B.O(n+e)C.O(n*n)D.O(n*n*n)5、动态存储管理系统中,通常可有()种不同的分配策略。
A.1B.2C.3D.46、下列选项中,不能构成折半查找中关键字比较序列的是()。
A.500,200,450,180 B.500,450,200,180C.180,500,200,450 D.180,200,500,4507、已知字符串S为“abaabaabacacaabaabcc”,模式串t为“abaabc”,采用KMP算法进行匹配,第一次出现“失配”(s!=t)时,i=j=5,则下次开始匹配时,i和j的值分别()。
A.i=1,j=0 B.i=5,j=0 C.i=5,j=2 D.i=6,j=28、一棵哈夫曼树共有215个结点,对其进行哈夫曼编码,共能得到()个不同的码字。
A.107B.108C.214D.2159、一棵非空的二叉树的前序序列和后序序列正好相反,则该二叉树一定满足()。
A.其中任意一个结点均无左孩子B.其中任意一个结点均无右孩子C.其中只有一个叶结点D.其中度为2的结点最多为一个10、分别以下列序列构造二叉排序树,与用其他三个序列所构造的结果不同的是()。
A.(100,80,90,60,120,110,130)B.(100,120,110,130,80,60,90)C.(100,60,80,90,20,110,130)D.(100,80,60,90,120,130,110)二、填空题11、在有n个顶点的有向图中,每个顶点的度最大可达______。
next数组值的求解方法
例如: 模式串abaabcac next值01122312 nextval值01021302
next数组的求解方法是:
第一位的next值为0;
第二位的next值为1;
后面求解每一位的next值时,根据前一位进行比较:
将前一位与其next值对应位的内容进行比较;
如果相等,则该位的next值就是前一位的next值加上1;
如果不等,向前继续寻找next值对应的内容来与前一位进行比较,直到找到某个
位上的next值所指位对应的内容与前一位相等为止,则某个位上的next
值加上1即为需求的next值;
如果到第一位都没有找到与前一位相等的内容,那么需求的位上的next值即为1。
看起来很令人费解,利用上面的例子具体运算一遍。
1.第一位的next值为0
2.第二位的next值为1
后面求解每一位的next值时,根据前一位进行比较
3.第三位的next值:第二位的模式串为b ,对应的next值为1,将第二位的模式串b
与第一位的模式串a进行比较,不相等;则第三位的next值为1。
4.第四位的next值:第三位的模式串为a ,对应的next值为1,将第三位的模式串a
与第一位的模式串a进行比较,相同,则第四位的next值得为第三位a的next值1加上1,
为2。
5.第五位的next值:第四位的模式串为a,对应的next值为2;将第四位的模式串a
与第二位的模式串b进行比较,不相等;第二位的b对应的next值为1,则将第四位的模式
串a与第一位的模式串a进行比较,相同,则第五位的next的值为第二位b的next值1
加上1,为2。
6.第六位的next值:第五位的模式串为b,对应的next值为2;将第五位的模式串b
与第二位的模式中b进行比较,相同,则第六位的next值为第五位b的next值2加上1,
为3
7.第七位的next值:第六位的模式串为c,对应的next值为3;将第六位的模式串c
与第三位的模式串a进行比较,不相等;第三位的a对应的next值为1,则将第六位的模
式串c与第一位的模式串a进行比较,不相同,则第七位的next值为1
8.第八位的next值:第七位的模式串为a,对应的next值为1;将第七位的模式串a
与第一位的模式串a进行比较,相同,则第八位的next值为第七位a的next值1加上1,
为2
(以上这种分析方法,位序是从1开始的,如果位序从0开始,刚第一位的next值为
-1,后面的方法则相同)
在计算nextval之前要先弄明白,nextval是为了弥补next函数在某些情况下的缺陷
而产生的,例如主串为“aaabaaaab”、模式串为“aaaab”那么,比较的时候就会发生一些
浪费的情况:比较到主串以及模式串的第四位时,发现其值并不相等,据观察,我们可以直
接从主串的第五位开始与模式串进行比较,而事实上,却进行了几次多余的比较。使用
nextval可以去除那些不必要的比较次数。
求nextval数组值有两种方法:
一种是不依赖next数组值直接用观察法求得;
一种方法是根据next数组值进行推理;
两种方法均可使用,视更喜欢哪种方法而定。
我们使用例子“aaaab”来考查第一种方法。
1.试想,在进行模式匹配的过程中,将模式串“aaaab”与主串进行匹配的时候,如果第
一位就没有吻合,即第一位就不是a,那么不用比较了,赶快挪到主串的下一位继续与模式
串的第一位进行比较吧,这时,模式串并没有发生偏移,那么,模式串第一位a的nextval
值为0。
2.如果在匹配过程中,到第二位才发生不匹配现象,那么主串的第一位必定是a,而第
二位必定不为a,既然知道第二位一定不为a,那么主串的第一、二两位就没有再进行比较
的必要,直接跳到第三位来与模式串的第一位进行比较吧,同样,模式串也没有发生偏移,
第二位的nextval值仍然为0。
3.第三位、第四位类似2的过程,均为0。
4.匹配过程中,第五位才发生不匹配现象,那么主串的第一位到第四位必定为a,并且
第五位必定不为b,可是第五位仍然有可能等于a;如果第五位为a,那么既然前面四位均
为a,只要第六位为b,第一个字符串就匹配成功了,现在的情况下,就是看第五位究竟是
不是a了。所以发生了下面的比较:
123456
aaaa**
aaaab
aaaab
前面的3个a都不需要进行比较,只要确定主串中不等于b的那个位是否为a,即可以
进行如下的比较:
如果为a,则继续比较主串后面一位是否为b;
如果非a,则此次比较结束,继续将模式串的第一位去与主串的下一位进行比较。
由此看来,在模式串的第五位上,进行的比较偏移了4位(不进行偏移,直接比较下一
位为0),故第五位b的nextval值为4。
我们可以利用第一个例子“abaabcac”对这种方法进行验证。
a的nextval值为0,因为如果主串的第一位不是a,那么没有再比较下去的必要,直接
比较主串的第二位是否为a。
如果比较到主串的第二位才发生错误,则主串第一位肯定为a,第二位肯定不为b,此
时不能直接跳到第三位进行比较,因为第二位还可能是a,所以对主串的第二位再进行一次
比较,偏移了1位,故模式串第二位的nextval值为1。
以此类推,nextval值分别为:01021302。
其中第六位的nextval之所以为3,是因为,如果主串比较到第六位才发生不匹配现象,
那么主串的前五位必定为“abaab”且第六位必定不是“c”,但第六位如果为“a”的话,
那么我们就可以从模式串的第四位继续比较下去。所以,这次比较为:
1234 5678910 11 12
abaab*******
abaabcac
而不是:
1234 5678910 11 12
abaab*******
abaabca
因为前两位a和b已经确定了,所以不需要再进行比较了。所以模式串第六位的nextval
值为这次比较的偏移量3。
再来看求nextval数组值的第二种方法。
模式串abaabcac next值01122312 nextval值01021302
1.第一位的nextval值必定为0。
2.第二位如果与第一位相同则为0,如果不同则为1。
3.第三位的next值为1,将第三位和第一位进行比较,均为a,相同,则,第三位的nextval
值为0。
4.第四位的next值为2,将第四位和第二位进行比较,不同,则第四位的nextval值为
其next值,为2。
5.第五位的next值为2,将第五位和第二位进行比较,相同,第二位的next值为1,则
继续将第五位与第一位进行比较,不同,则第五位的nextval值为第二位的next值,为1。
6.第六位的next值为3,那么将第六位和第三位进行比较,不同,则第六位的nextval
值为其next值,为3。
7.第七位的next值为1,那么将第七位和第一位进行比较,相同,则第七位的nextval
值为0。
8.第八位的next值为2,那么将第八位和第二位进行比较,不同,则第八位的nextval
值为其next值,为2。
在“aaaab”内进行验证。 模式串aaaabnext值01234 nextval值00004