随笔分类 - 知识点讲解
摘要:重谈并查集 当初学并查集的时候记得是森哥讲的@zcs0724。但是没太学明白(是因为蒟蒻太菜,跟森哥没半毛钱关系),于是今天来重新捋一下并查集,顺便补个讲解。就叫重谈并查集吧。(没有爆粗)(滕总笑) 并查集的概念 并查集(Disjoint-Set)是一种可以维护若干个不重叠的集合,并支持集合合并与查
阅读全文
摘要:重谈DFS序、时间戳和欧拉序 本篇随笔复习总结一下算法竞赛中的DFS序、时间戳、欧拉序的相关知识。 DFS序的部分抄的是本蒟蒻今年年初的博客,链接放在下面: 浅谈DFS序 DFS序的概念 先来上张图: 树的DFS序列,也就是树的深搜序,它的概念是:树的每一个节点在深度优先遍历中进出栈的时间序列。 树
阅读全文
摘要:详解主席树(可持久化线段树) 本篇随笔详细解读一下算法竞赛中的一种数据结构:主席树。(可持久化线段树) 前置知识当然是线段树,也应该有动态开点。 如果没有掌握请移步: 简单线段树详解 权值线段树详解 动态开点详解 一、关于可持久化 可持久化数据结构是一个家族,可持久化线段树只是其中的一部分。 关于可
阅读全文
摘要:浅谈启发式合并 本篇随笔简单浅谈一下启发式合并。 启发式合并的概念 顾名思义,启发式合并解决的是合并类的问题。 现在给一个最基本的合并问题。 我们要把$N$个集合,总共$M$个元素合并成一个大集合。 很容易得出,最坏的情况下需要合并$N$次,每次合并$M$个元素,也就是$O(MN)$的时间复杂度。
阅读全文
摘要:浅谈换根DP 本篇随笔浅谈一下算法竞赛中的换根DP。 换根DP概念 换根DP其实是树形DP的一种延伸技巧或者说是方法。 它的使用范围是,对树上的每个点跑树形DP。这样的话,不用换根DP一点一点跑的复杂度就是$O(n2)$,必炸。那么换根DP应运而生。简单来讲,就是我们会通过推理发现,我们先以一个选定
阅读全文
摘要:区间反转问题 本篇随笔浅谈一下算法竞赛中的区间反转问题。 例题 洛谷 P3391 【模板】文艺平衡树 题目传送门 题目描述 您需要写一种数据结构(可参考题目标题),来维护一个有序数列。 其中需要提供以下操作:翻转一个区间,例如原有序序列是 5\ 4\ 3\ 2\ 15 4 3 2 1,翻转区间是 [
阅读全文
摘要:Splay算法旋转操作的模拟 本篇随笔简单讲解一下Splay算法维护平衡树时的旋转操作。重点集中在如何模拟旋转。 对Splay没有概念的同学请移步: Splay详解 先上图再讲: 这是右旋。 针对一个节点,我们需要维护它的父亲、两个儿子、值和子树大小这些信息。在本文中用以下符号表示: ch[x][0
阅读全文
摘要:Splay算法详解 本篇随笔浅谈一下算法竞赛中的$Splay$算法。 Splay的概念 Splay在我看来应该算作一种算法而非数据结构。无论是Treap,AVL,SBT,替罪羊树还是Splay其实都应该算作算法,因为它们都在解决一种数据结构存在的问题:二叉搜索树$BST$。 对于二叉搜索树和Trea
阅读全文
摘要:浅谈对引用变量的理解 本篇随笔简单记录一下本蒟蒻对C++程序语言中引用变量的理解。 引用的概念 int a; int b=a; 在上面的代码块里,$a$与$b$的值相等。(额 但是$a,b$指向的并不是同一块内存空间,也就是,虽然$a,b$的值是相等的,但是其实他俩并不是同一个变量,因为他们的内存空
阅读全文
摘要:浅谈树形DP 本篇随笔简单讲解一下DP中的树形DP问题。 树形DP的概念 树形DP在本蒟蒻心目中的印象就是转移过程中,某个节点维护的信息是由其子节点给出的。换句话说,树形DP就是在树上跑DP,将需要维护的答案信息一层一层地传递到根节点,然后得出整个问题的答案。 实际上,我更喜欢把图理解为一些元素加一
阅读全文
摘要:浅谈记忆化搜索算法 本篇随笔简单讲解一下算法竞赛中搜索算法的“记忆化搜索”部分。 来看一道例题: 洛谷 P1434 [SHOI2002]滑雪 题目传送门 题解传送门 题目描述 Michael 喜欢滑雪。这并不奇怪,因为滑雪的确很刺激。可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不
阅读全文
摘要:关于地图遍历问题的总结 先来看一道例题: 洛谷 AT1350 深さ優先探索 题目传送门 题解传送门 题意翻译 高桥先生住的小区是长方形的,被划分成一个个格子。高桥先生想从家里去鱼店,高桥先生每次可以走到他前后左右四个格子中的其中一个,但不能斜着走,也不能走出小区。 现在给出地图: s:代表高桥先生的
阅读全文
摘要:树堆(Treap)详解 本篇随笔详细讲解一下一种随机化数据结构——树堆($Treap$)。 树堆的概念 首先给一个字符串等式: $$ Treap=Tree+heap $$ 所以$Treap$树堆其实就是树+堆。树是二叉查找树$BST$,堆是二叉堆,大根堆小根堆都可以。 关于$BST$的相关知识,请看
阅读全文
摘要:浅谈动态开点线段树 本篇随笔简单讲解一下线段树的常见优化技巧——动态开点。 要学动态开点首先得会线段树,如果不会的话,看官请走这边—— 简单线段树详解 权值线段树详解 动态开点的概念和功能 现在要让你维护一棵值域为$10^9$的权值线段树。 掐指一算,按线段树开的话,四倍空间是$4\times10^
阅读全文
摘要:详解二叉查找树(BST) 本篇随笔简单讲解一下数据结构——二叉查找树($Binary\,\,Sort\,\,Tree,BST$),(后文的“二叉查找树”一词均用$BST$代替)。 BST的概念 首先,$BST$是一棵二叉树。 它的定义是,根节点左子树全部 严格小于 根节点,右子树 大于等于 根节点,
阅读全文
摘要:浅谈迭代加深 本篇随笔简单讲解一下算法竞赛中搜索算法中的迭代加深DFS。 为什么需要迭代加深 先来上发讲解图: " " 在学习迭代加深深搜之前,我们先简单回顾一下深搜。深搜的本质是对图的深度优先遍历。也就是“先往深了走,走完了没找到就换条路继续走”。对于那种无法一眼看出来是图论的问题,我们需要先把问
阅读全文
摘要:浅谈传递闭包问题 本篇随笔简单讲解一下算法竞赛中的“传递闭包问题”。 传递闭包问题的概念 简单地来讲,传递闭包问题就是一类具有传递性的问题。 放一波标准定义: 在交际网络中,给定若干个元素和若干对二元关系,且这些关系具有传递性, 通过这些传递性推导出尽量多的元素之间的关系的问题 叫做传递闭包。 也就
阅读全文
摘要:详解权值线段树 本篇随笔详细讲解一下算法竞赛中的一种数据结构——权值线段树。 前置知识 在讲解权值线段树之前,我们首先要明确:权值线段树属于一种线段树,它的本质仍然是线段树。所以在学习权值线段树之前,如果还对普通线段树并没有一个深刻的了解的话,请先移步这篇博客来学习简单线段树。 简单线段树知识点详解
阅读全文
摘要:算法竞赛中桶的概念与应用 在算法竞赛和计算机科学中,有一种特殊的数据结构,我们把它叫做——桶。 有许多和桶有关的算法和数据结构,想要学习它们,必须先明确好桶的概念与应用。 桶的概念 刚刚已经讲过,桶是一种数据结构。数据结构的用途是以一种特殊方式统计数据,使得我们能够快速地修改、查询我们想要的那部分数
阅读全文
摘要:浅谈Miller-Rabin素数检测 对于素数判断的操作,我们通常使用的是时间复杂度为$O(\sqrt N)$的试除法。按理说这种复杂度已经是较优秀的了,但是假如给定的需要判断的数极其之大,并且给定的时限不够以$O(\sqrt N)$的试除法来判断,该怎么办? 题出错了 想得美。 于是,今天的主角出
阅读全文