数据结构专题(更新ing...)

模式匹配kmp例题

HDU 2087
分析:
解题报告:HDU 2087 剪花布条(kmp)

——next数组理解

HDU 1686
分析: 求解完next数组后在原字符串中开始匹配直至匹配累加长度与串长度相等,之后next数组溯回,next数组溯回就已经是在之前能匹配程度最大的条件下再次累加长度进行继续匹配,这样每次累加到长达为串长度ans++
解题报告:HDU 1686 Oulipo(KMP+计算匹配成功次数)

HDU 3746
分析: 主要考察对next数组的使用理解
如果 i%(i-nex[i])==0 说明字符串循环
其中有循环节长度为: i-next[i]
循环次数为: i/(i-next[i])

HDU 1358
分析:
跟上题同类型,其中循环节长度为: i-next[i]
循环次数为: i/(i-next[i])
O(n)从头遍历,每次匹配成功输出当前匹配长度,匹配长度与循环节的商值即可

总结报告:数据结构——kmp中next数组理解

树状数组

HDU 1166
分析: 这道题可用线段树做也可树状数组,树状数组用数组减少了一半的复杂度
解题报告:hdu 1166 敌兵布阵 (树状数组)

Acwing 107
分析:这道题可以直接模拟超快速排序,另一个思路是用树状数组进行处理,因为数据量过不能直接查询记录,考虑在每次输入时将层数记录,直接操作节点数值。
结题报告Ultra-QuickSort(树状数组+离散化)

线段树

首先是模板题,线段树模板看过很多博客感觉实际写的时候局限还是过多,下面是几道比较适合练习线段树的板子 线段树题目很灵活,可以处理大部分关于区间合并查询的问题,同时可以分为区间树(叶子节点记录 区间信息)和点树(叶子节点记录点 信息) 小结: 1、要注意题目中给定数组的存入,如果从0开始,可以在build或者查询的时候 (x+1,y+1,left,rigth,1)进行转化

HDU 1166
分析
结题报告HDU 1166 敌兵布阵-(单点更新,区间询问)

HDU 3397
结题报告HDU 3397 I HATE IT(单点更新,区间询问)

HDU 1698
分析:跟上面不同点在于模板中在区间更新上进行直接加和而不是逐点递归增加,省掉区间求和的过程,但是同样也可以逐点递归区间最值查询
结题报告HDU 1698 Just a Hook(区间更新+查询)

百练 3439:
结题报告百练 3439:A Simple Problem with Integers(区间更新+查询)

Codeforces 750E
分析
结题报告New Year and Old Subsequence - 线段树 - 动态规划

主席树

主席树是在线段树的基础上进行的多线段树合并思想+离散化+树状数组+的结构 处理线段树问题时经常会遇到有关第k级逻辑关系的处理问题 如果只用 线段树数组存储的话限制性较大,但是一旦数据包过大就算链表建树都救不了,所以题目查询+修改同时应付大数据时难以处理

1175
分析: 其实这道题一开始用数组每次数组存储查询更新时的数值,但是
当然也可以写,不过这种暴力性的算法限制太大,
解题报告:1175 区间中第K大的数

哈夫曼树

(复习)数据结构——哈夫曼树(huffmantree)

二叉树

(复习)数据结构——二叉树

模式匹配

数据结构——模式匹配(kmp,bf)
马拉车(manacher)算法
最小最大表示法

发布了247 篇原创文章 · 获赞 22 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_43658924/article/details/101218518