数据结构--第四章串、数组和广义表总结

知识点:

 1.串:

关于串的学习,我最大的收获是理解了KMP算法(解决串的模式匹配问题)和了解了Manacher算法(解决求字符串最长回文问题)。

在这一过程中,我常惊叹算法的巧妙,感慨前人的智慧结晶,以下是我对这两种算法的理解:

 

(1)KMP算法:

  这里就不贴代码了,就说说它的实现原理。具体可以看这里利用KMP算法解决串的模式匹配问题(c++) -- 数据结构

主串和模式串匹配到某一个位置发现 主串中1的部分和模式串中2部分不匹配时,

模式串就会移动一定的位置,如下图:

 

那么我们该移动多少呢?

我们继续往下看,上下这两个字符串分别是原来模式串的位置,和移动后模式串的位置。

能够这样移动的前提是保证 A == B,原来的匹配点截至到了1和2(即d)部分,

模式串移动之后匹配点就变成了1和c部分的比较。

 

 

为了能够实现KMP算法中模式串的移动,需要引入一个next[ ]数组。

next[ ] 存放已匹配子串中最长前后缀长度

 以红色部分c为例子:

已匹配的子串:abaab   →  最长前后缀ab  长度为2

 

 

KMP算法应用:PowerString问题(求字符串的最小周期)

 

(2)Manacher算法(马拉车算法):

 

 谈谈我对Manacher算法的理解

 

2.数组:

至于数组的学习,最大的收获和成就就是理解了十字链表的原理和操作过程,并成功将以实现。

以下博客已经写得挺详细的了,就不再重复声明:

利用十字链表压缩稀疏矩阵(c++)-- 数据结构

 


 

编程时遇到的困难:

 

1.利用KMP算法解决串的模式匹配问题(c++) -- 数据结构

2.利用十字链表压缩稀疏矩阵(c++)-- 数据结构

 


 

总结及学习心得:

 在作业和实践的题目中,我都选择了相对来说困难的完成方式,这对我来说是一种得到锻炼和学习的最好方式。

纵使过程很痛苦,熬了大半个星期的夜,幸运的是结果还算是差强人意。

 

——林子里有两条路,我选择了行人稀少的那一条,它改变了我的一生。(《未选择的路》)

 


 

目标:

 保持当前的学习热情,高要求严格自己,学习更多更巧妙的算法。

 


 

posted @ 2019-04-13 15:25  陈述v  阅读(1593)  评论(1编辑  收藏  举报