- ACM
数据结构专题训练总结
- @ 2024-1-7 14:15:09
二队(郑洪章+王声洋+胡正伟)
整理内容
STL,并查集,单调栈,st表,堆,树状数组,线段树,分块,dfs序,重链剖分,平衡树,莫队,LCT。
模板
模板内容见附件:
阶段总结
对于训练的专题内容,我们都进行了初步的学习和训练,以下是我们队各个成员所进行的总结:
郑洪章:
训练内容比以往有着显著的提升,所学的知识也提升了很多,但在限定的时间内耗费太久,对于某个知识点,可能需要耗费大量时间翻去看,比如LCA,LCA前置知识为splay和树链剖分,但由于之前没有去加强这方面的内容,只是看了板题,所以学习LCA时又耗费了时间去复习了splay和树链剖分,导致在总体的进度上面太慢了。
在学习算法的过程中,也让我本身感到了充实,在网上查找资料、看其他大佬写的博客时,在这个过程,也对我自身的思维得到了提升,对于某一道题该怎么解,写代码的时候怎么写能使其方便一点,也得到了新的收获。还有经过训练之后,对于树方面的知识,有了很多的了解,但对于其中的算法进行熟练的使用,还需要自己下去花功夫进行训练。
王声洋:
不足
由于我自己的拖沓,导致学习专题的时间过长,浪费了很多的时间。并且在学习过程中并没有与队友进行一些讨论与交流,导致在学习某个算法知识的时候,自己需要花费大量的时间去思考自己无法理解的部分以及出现的问题。
收获
在学习算法专题的时候使我深深的理解了关于树的各种应用,列如如何用树链剖分去把一棵树的维护转换为区间问题,进而用线段树或树状数组去解决以及如何用动态树与LCT去把一棵树的动态变化问题转化为与平衡树相关的问题,通过平衡树作为中间变化去解决原树的动态变化。在进行思考算法无法理解的部分的时候我也学会了去搜索相关的知识博客去自主解决问题,并且把相关有用且重要的解释以及代码复制下来在总结做修改变为自己可以去更容易理解的解释和代码。
在进行专题训练的时候,遇到不会的题去看题解的时候也会去联想该题与自己所学的专题算法如何去把他们去联想在一起,并且在以后遇到考察这个算法的题型时是否能联想到这个算法。总之这次算法的收获大大提高了我的自主学习能力以及总结能力。
胡正伟:
在学习数据结构算法中,我重点学习了并查集,单调栈,st表,树状数组,线段树,分块,dfs序,重链剖分。以下是我对这些算法的总结与收获
- 并查集:用于解决集合的合并与查询问题,常用于判断图的连通性以及求解最小生成树等,核心思想为路径压缩。
- 单调栈:通过维护一个单调递增或递减的栈,实现对元素的插入和弹出等操作,常用于寻找下一个更大或者更小的元素问题,例如洛谷P2866 [USACO06NOV] Bad Hair Day S。
- 链表:通过节点之间的指针连接起来存储数据,常用于实现队列,栈等数据结构
- St表:运用倍增的思想,运用空间换时间,实现高效区间查询。
- 树状数组:二进制的思想,动态维护一个数列的前缀和,支持单点查询,区间修改,单点修改等操作,虽然树状数组功能不如线段树强大,但是代码量小于线段树。
- 线段树:通过递归建立一个二叉树,处理区间查询,区间最值,区间和等。
- 分块:将一个大的问题划分为若干个小的问题,通过预处理和查询操作,实现对区间的高效操作。
- Dfs序:深度优先搜索的遍历顺序,常用于树剖中,解决与节点路径有关的问题。
- 重链剖分:将一颗树划分为若干链,高效处理与路径相关的操作。