
信息学|算法略解
文章平均质量分 85
YangHao5
这个作者很懒,什么都没留下…
展开
-
Dijkstra算法略解
一种很显然的思路是,如果 a->b 的最短路径经过 c,那么 a->b 的最短路径一定是 a->c 的最短路径和 c->b 的最短路径。也就是说,我们可以先求出较为好求的节点的最短路径(c),再根据这些数据来计算其他节点的最短路径(b)。不难想到,1号点(a)到另一个不与 1 号点直接相连的点(b)的路径有很多条。显然是被 1 号点直接指向的节点。当我们求出 1 号点及其直接指向的节点的最短路径以后,我们就可以使用他们来计算其他节点的最短路径。条边的有向图,求从 1 号节点到每一个节点的最短路径长度。原创 2022-09-28 18:03:46 · 360 阅读 · 0 评论 -
并查集略解
下次我们访问3的时候,我们会先找到3指向的元素2,再找到2指向的元素1。因为不用支持分开集合的操作,所以为了防止每次都线性遍历一边这个“链”,我们可以合并链,让集合里的每个元素都直接指向这个集合的代表。下次我们访问2元素的时候,检索到2指向1,我们就能知道12属于同一个集合。,这个代表不会有指向另一个元素的边。现在我们合并1,2元素。不妨认为把2加入到1所属的集合中,我们连一条边。现在我们将3加入到1,2所属的集合中。我们有四个元素,初始状态下各自为一个集合。初始状态下,每个元素各自为一个集合。原创 2022-09-13 11:06:38 · 240 阅读 · 0 评论 -
树状数组略解
显然朴素算法会超时。不妨想,优化时间复杂度的方法是用一个元素表示多个元素的信息。如果用二分思想,单次修改或查询的时间复杂度将会下降到。由构图方式可知,一个节点与父亲的距离=这个节点管辖的节点数。这样,我们就实现了树状数组的构建与维护。下面给出例题的代码。这种建树方式与 2 的若干次幂有关,不难想到观察编号的二进制表示。下面我们探究每次修改或查询时,从叶子节点到根节点的路径的节点的编号的规律。他能帮我们消去多余的1。(二进制意义下),但是最右边的1仍保留。是一种被用于解决区间问题的算法。复杂度的修改和查询。原创 2022-09-11 16:30:06 · 396 阅读 · 0 评论 -
康托展开与逆康托展开
康托展开 和 逆康托展开 与排列与排名密切相关。康托展开康托展开 被用来求一个排列的排名,时间复杂度 O(nlogn)O(n\log n)O(nlogn)。假设我们要求排列 n=5,a[]={3,4,1,5,2}n=5,a[]=\{3,4,1,5,2\}n=5,a[]={3,4,1,5,2} 的排名。定义 s[i]s[i]s[i] 表示在 a[i]a[i]a[i] 后面的数中,有多少个比...原创 2019-11-08 11:08:26 · 277 阅读 · 0 评论 -
简单博弈论之阶梯 Nim 游戏
第一篇博弈论博弈论我们把动物利用大自然移动的瘾魂,在决策人期待的空间里,形成三维均衡的语文学理论,称为 博弈论。博弈论是二人在平等的对局中各自利用对方的策略变换自己的对抗策略,达到取胜的目的。阶梯 Nim 游戏例 1 矿物运输已知,矿坑与矿坑之间形成了有向的树形结构,即除 0 号矿坑以外每个矿坑都有与其相连的父亲矿坑。Jim总共开采了 nnn 个矿坑并将其从0到 n−1n-1n−1 编...原创 2019-11-08 09:37:43 · 575 阅读 · 0 评论 -
扫描线略解
问题引入求 nnn 个矩形的面积并。1≤n≤1051\leq n\leq 10^51≤n≤105。离散化坐标首先,通过离散化,可以让矩形的坐标从 10910^9109 级别降至 10510^5105 级别。尽管如此,开一个 N2N^2N2 的二维数组来存储坐标系里的每个点,仍然还会导致空间超限。扫描线本章节中,部分图片来自这里。看到图中的虚线了吗?想想有一条平行于 y 轴的直线从...原创 2019-11-03 16:05:29 · 364 阅读 · 0 评论 -
可持久化数据结构学习笔记
文章目录1 可持久化线段树1.1 问题引入1.2 权值线段树1 可持久化线段树1.1 问题引入您需要写一个数据结构,维护一个数列 a[1...N]a[1...N]a[1...N],支持以下操作:输入 l r k(l≤r,k≤r−l+1l\leq r,k\leq r-l+1l≤r,k≤r−l+1),求 a[l...r]a[l...r]a[l...r] 中第 kkk 大的数。这就是经典的 ...原创 2019-11-01 15:28:59 · 252 阅读 · 0 评论 -
分块
分块由于我在网上找不到定义,只好编一个。分块 是一种将问题分解成若干个子问题,逐项解决子问题后得到原问题答案的思想。块考虑这样一个问题。你有一个序列 a[1...N]a[1...N]a[1...N],你需要写一个数据结构维护它,支持以下操作:修改 a[x]a[x]a[x] 的值;查询 a[L...R]a[L...R]a[L...R] 的最大值、和、按位与和、或和、异或和、与非和、或...原创 2019-10-24 14:41:19 · 285 阅读 · 0 评论 -
基环树略解
基环树基环树,也叫 环套树,是一种图的类型。如果连通图 G={V,E}G=\{V,E\}G={V,E} 有 ∣V∣=∣E∣|V|=|E|∣V∣=∣E∣,则我们称它是 基环树。顾名思义,基环树就好似是在一棵树上加一条边得到的图。基环树有且仅有一个环,所以也被成为环套树。如上图所示的图就是一棵基环树。用途基环树没什么用。它只能解决部分特殊问题,而这类问题通常会注明“边数=点数”,解法也...原创 2019-10-23 14:38:14 · 401 阅读 · 0 评论 -
素数与π
关于素数的初步讲解,请戳这儿。本文包含读《隐藏在素数规律中的π》 的学习笔记。今有结论如下。若一整数N=2c⋅p1x1p2x2...paxa⋅q1y1q2q2...qbqbN=2^c·p_1^{x_1}p_2^{x_2}...p_a^{x_a}·q_1^{y_1}q_2^{q_2}...q_b^{q_b}N=2c⋅p1x1p2x2...paxa⋅q1y1q2q2......原创 2019-04-23 15:36:02 · 661 阅读 · 0 评论 -
素数与Miller-Rabin测试
素数素数又称质数。指整数在一个大于 111 的自然数中,除了 111 和此整数自身外,没法被其他自然数整除的数。题目描述 loj10197\text{loj10197}loj10197给定两个整数L,RL,RL,R,求闭区间[L,R][L,R][L,R]中相邻两个质数差值最小的数对与差值最大的数对。当存在多个时,输出靠前的素数对。输入格式多组数据。每行两个数L,RL,RL,R。输出格式...原创 2019-04-09 08:48:11 · 3013 阅读 · 1 评论 -
Mobius 反演与杜教筛
杜教筛杜教筛 是在低于线性的时间复杂度,求一个积性函数前缀和的算法。(找不到定义,只好自己编一个)积性函数积性函数 指对于所有互质的整数 aaa 和 bbb 有性质 f(ab)=f(a)f(b)f(ab)=f(a)f(b)f(ab)=f(a)f(b) 的数论函数。特别地,若所有的整数 aaa 和 bbb 有性质 f(ab)=f(a)f(b)f(ab)=f(a)f(b)f(ab)=f(a...原创 2019-07-03 11:15:16 · 267 阅读 · 0 评论 -
线段树略解(20191028更新)
线段树线段树是一种二叉搜索树,与区间树相似,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点。如上图所示的线段树维护 [1,10][1,10][1,10] 区间。每个节点上的区间表示该节点维护的区间。线段树的时间复杂度 O(logN)O(\log N)O(logN)(建树复杂度为 O(N)O(N)O(N)),空间复杂度 T(N)T(N)T(N)。单点修改操作从根...原创 2019-10-20 20:42:31 · 483 阅读 · 0 评论 -
C++ set 用法略解(20191031更新)
先看一段代码。原创 2019-10-14 20:14:18 · 463 阅读 · 0 评论 -
快速傅里叶变换(FFT)略解
我们发现(2x+3)(4x+5)=8x2+22x+15...(∗)23×45=1035(2x+3)(4x+5)=8x^2+22x+15\quad...(*)\\23\times45=1035(2x+3)(4x+5)=8x2+22x+15...(∗)23×45=1035而如果我们把 (∗)(*)(∗) 式右边的每一位的系数看做一个数每位上的数码,正好得到了 103510351035。事实上,对...原创 2019-06-27 15:18:32 · 990 阅读 · 0 评论 -
STL的vector略解
本文部分内容参考于这儿。vector 的基础知识,上文已经阐述地很详尽了。笔者谨给出 vector 的声明及其常用函数。代码抬头需包含#include<vector>using namespace std;定义一个存储 int 类型的 vector 类型 cvector<int> c;常用的 vector 函数如下表vector<int...原创 2019-04-16 16:50:57 · 237 阅读 · 0 评论 -
基于STL的队列略解
什么是STL以下内容摘自这儿。STL(Standard Template Library,标准模板库)是惠普实验室开发的一系列软件的统称。它是由Alexander Stepanov、Meng Lee和David R Musser在惠普实验室工作时所开发出来的。现在虽说它主要出现在C++中,但在被引入C++之前该技术就已经存在了很长的一段时间。队列队列 是一种特殊的线性表,特殊之处在于它...原创 2019-04-16 15:57:05 · 227 阅读 · 0 评论 -
基于STL的堆略解
什么是STL以下内容摘自这儿。STL(Standard Template Library,标准模板库)是惠普实验室开发的一系列软件的统称。它是由Alexander Stepanov、Meng Lee和David R Musser在惠普实验室工作时所开发出来的。现在虽说它主要出现在C++中,但在被引入C++之前该技术就已经存在了很长的一段时间。堆堆 是计算机科学中一类特殊的数据结构的统称...原创 2019-04-16 15:38:01 · 267 阅读 · 0 评论 -
模拟退火略解
模拟退火模拟退火 算法(Simulate Anneal,SA)是一种通用概率演算法,用来在一个大的搜寻空间内找寻命题的最优解。模拟退火的出发点是基于物理中 固体物质的退火过程 与一般组合优化问题之间的相似性。固体物质的退火过程lz前天的市物理竞赛爆炸(被防AK了)……心情极度不爽听说oi同志们物理都很好 (翘物理竞赛辅导课) ,还是提一下这东西吧。根据牛顿冷却定律 (Newton’s ...原创 2019-04-15 10:47:15 · 933 阅读 · 0 评论 -
网络流略解 网络流 24 题索引
题目题解P2756 飞行员配对方案问题已解决P2761 软件补丁问题未解决原创 2019-04-11 15:43:02 · 836 阅读 · 0 评论 -
区间动态规划略解
坑原创 2019-04-11 08:48:10 · 702 阅读 · 0 评论 -
最小生成树略解
最小生成树一个有 nnn 个结点的连通图的生成树是原图的极小连通子图,且包含原图中的所有 nnn 个结点,并且有保持图连通的最少的边。最小生成树是最小权重生成树的简称。Kruskal\text{Kruskal}Kruskal 算法使用 Kruskal\text{Kruskal}Kruskal 算法求出一无向图 GGG 的最小生成树步骤如下:将边按照权升序排序;从第 111 条边开始,判...原创 2019-04-03 14:16:27 · 2306 阅读 · 0 评论 -
博弈论略解
博弈论我们把动物利用大自然移动的瘾魂,在决策人期待的空间里,形成三维均衡的语文学理论,称为博弈论。博弈论是二人在平等的对局中各自利用对方的策略变换自己的对抗策略,达到取胜的目的。题目描述 loj10241\text{loj10241}loj10241有一种有趣的游戏,玩法如下:玩家: 人;道具: NNN 颗石子;规则:游戏双方轮流取石子;每人每次取走若干颗石子(最少取 111 颗,最...原创 2019-04-03 08:15:16 · 2313 阅读 · 0 评论 -
矩阵乘法略解
矩阵乘法对于一个 n×mn\times mn×m 的矩阵 AAA 和一个 m×km\times km×k 的矩阵 BBB,有且仅有一个 n×kn\times kn×k的矩阵 CCC 使 A×B=CA\times B=CA×B=C,且对于∀i∈[1,n]&∀j∈[1,k]\forall i\in [1,n] \& \forall j\in [1,k]∀i∈[1,n]...原创 2019-04-02 09:41:17 · 2203 阅读 · 1 评论