数据结构学习笔记
文章平均质量分 79
峰不二子的小迷弟
有志者,事竟成
展开
-
数据结构学习笔记 - 带权并查集(食物链题解)
前言前言并查集的概念:将编号分别为 1~n 的 n 个对象划分为不相交集合,在每个集合中,选择其中某个元素代表所在集合。并查集的基本应用是集合问题。在加上权值之后,利用并查集的合并优化和路径压缩,可以对权值所代表的具体应用进行高效的操作。查询的优化(路径压缩)普通的查询函数是查询元素 i 所属的集需要搜索路径到根节点并返回,这样显然会浪费很长时间。如果我们在返回时顺便把 i 所属的集改为根节点,那么下次再搜的时候可以直接 O(1) 得到结果。带权并查集除了并查集的基本应用 - 处理集合问题。原创 2022-11-12 15:17:48 · 709 阅读 · 0 评论 -
数据结构学习笔记 - 分块和莫队
分块和莫队 我们可能已经了解了树状数组是基于二进制划分与倍增思想,线段树基于分治思想。它们之所以能够高效地在一个序列上执行指令并统计信息,就是因为它们把序列中的元素聚合成大大小小的“段”,花费额外的代价对这些“段”进行维护,从而使得每个区间的信息可以快速由几个已有的“段”结合而成。 当然,树状数组与线段树也有其缺点。比如在维护较为复杂的信息(尤其是不满足区间可加,可减性的信息)时显得吃力,代码实现也不是那么简单、直观,需要深入理解并注意许多细节。在此,我们将介绍分块算法。 基本思想是通过适当的划分,预处理原创 2022-08-07 23:08:46 · 311 阅读 · 0 评论 -
数据结构学习笔记 - Trie(字典树)
前言 Trie(字典树)是一种用于实现字符串快速检索的多叉树结构,Trie的每个节点都拥有若干个字符指针,若在插入或检索字符串时扫描到一个字符 c,就沿着当前节点的 c 字符指针,走向该指针指向的节点。 具体步骤 初始化 一棵空 Trie 仅包含一个根节点,该点的字符指针均指向空。 插入 当需要插入一个字符串 S 时,我们令一个指针 P 起初指向根节点。然后,依次扫描 S 种的每个字符 c: 若 P 的 c 字符指针指向一个已经存在的节点 Q,则令 P = Q。 若 P 的 c 字符指针指向原创 2022-03-01 23:29:30 · 301 阅读 · 0 评论 -
数据结构学习笔记 - 线段树(基础)
前言 众所周知线段树这个数据结构,比较麻烦。但在解决类似于区间修改和查询这种问题的时候会很方便,其实也没有那么方便。具体来说,之所以不用暴力或者树状数组来进行上述操作,是因为有的题目对算法效率要求高,普通的算法就不行了。总结来说,我们在学习线段树之前,应该要理解我们为什么要学线段树,学了之后在哪种情况下会用到,和怎么把模板变成题目要求的代码。这些问题是我们要考虑到的。 定义 线段树是一种基于分治思想的二叉树结构,用于在区间上进行信息统计。与按照二进制(2的次幂)进行区间划分的树状数组相比,线段树是一种原创 2022-02-09 15:45:45 · 519 阅读 · 0 评论 -
数据结构学习笔记 - 树状数组
基础知识 转载请注明出处:bestsort.cn 我们先回想一下二叉树(什么你说你不知道什么是二叉树?) 也就是类似这张图的一种数据结构,我们不难看出,最底层是按照 2 的 n 次方不断增加的。 那如果我们把第一层设为 [1,N] ,然后开始不断往下下放,什么你问我 N 一定会被分成不同的 2 的 x(x∈Z)的 m 个数之和? 这个问题问的好,要不咱仔细想想计算机为什么是 2 进制的 然后我们变一下形(其实不变也可以只不过这样好理解)如图 接着讲,我们于是就可以不断在 2...原创 2021-11-13 15:32:11 · 312 阅读 · 0 评论