算法进阶—进阶指南
文章平均质量分 73
自学算法,以及增加理解
⊱⋛赫宇⋚⊰
这个作者很懒,什么都没留下…
展开
-
Tarjan算法与无向图的连通性
或两个以上不相连的子图,则称x为G的割点.若对于e∈E,从图中删去边e之后,G分裂成两个不相连的子图,则称e为G的桥或割边.一般无向图(不一定连通)的“割点”和“桥”就是它的各个连通块的“割点”和“桥”根据著名计算机科学家RobertTarjan的名字命名的Tarjan算法能够在线性时间内(求出无向图的割点与桥,进一步可求出无向图的双连通分量(本节后半部分将会介绍)。在有向图方面,Tarjan算法能够求出有向图的强连通分量、必经点与必经边(下一节将(会介绍)。罗伯特·塔尔健在数据结构方面也做原创 2022-10-17 21:07:22 · 371 阅读 · 0 评论 -
Fibonacci数性质
从第二项开始,每个偶数项的平方都比前后两项之积多1,每个奇数项的平方都比前后两项之积少1。由8式得,Fibonacci数满足下标的辗转相减。看做斐波那契的第1项,那么到第。看做斐波那契的第2项,那么到第。...原创 2022-07-25 15:11:39 · 163 阅读 · 0 评论 -
康托展开学习笔记
求1∼N的一个给定全排列在所有1∼N全排列中的排名。结果对998244353取模。原创 2022-07-23 20:14:34 · 136 阅读 · 0 评论 -
O(n)递推求乘法逆元和阶乘逆元
i−1∗i≡1(modp)p=k∗i+r(k=⌊ip⌋)(r=pmodi)k∗i+r≡0(modp)k∗r−1+i−1≡0(modp)i−1≡−⌊ip⌋∗pmodi(modp)i−1≡(p−p/i)∗inv[pmodi](modp)阶乘逆元inv[i+1]=(i+1)!1。原创 2022-07-21 15:36:20 · 202 阅读 · 0 评论 -
有向图的强连通分量
有向图的强连通分量基本概念时间戳在图的深度优先遍历过程中,按照每个节点第一次被访问的时间顺序,依次给子N个节点1~N的整数标记,该标记就被称为“时间戳”,记为dfn[x]。搜索树在无向连通图中任选一个节点出发进行深度优先遍历,每个点只访问一次。所有发生递归的边(x,y) (换言之,从x到y是对y的第一次访问)构成一棵树, 我们把它称为“无向连通图的搜索树”。当然,一般无向图(不一定连通)的各个连通块的搜索树构成无向图的“搜索森林”。下图左侧展示了一张无向连通图,灰色节点是深度优先遍历的起原创 2022-05-28 16:56:18 · 124 阅读 · 0 评论 -
Floyd算法
FloydFloyd应用传递闭包无向图最小环类Floyd算法求从起点 S 到终点 E 恰好经过 N 条边(可以重复经过)的最短路。原创 2022-04-26 19:00:54 · 272 阅读 · 0 评论 -
STL讲解
vector #include<algorithm> //对a中的从a.begin()(包括它)到a.end()(不包括它)的元素进行从小到大排列 sort(a.begin(),a.end()); //对a中的从a.begin()(包括它)到a.end()(不包括它)的元素倒置,但不排列,如a中元素为1,3,2,4,倒置后为4,2,3,1 reverse(a.begin(),a.end()); //把a中的从a.begin()(包括它)到a.end()(不包括它)的元素复制到b中,原创 2022-03-27 16:00:08 · 274 阅读 · 0 评论 -
笛卡尔树(Cartesian Tree)
笛卡尔树性质建树Code性质有两个关键字(x,y)(x,y)(x,y)组成如果只看第一个关键字x的时候它满足二叉搜索树(二叉查找树的性质)即:中序遍历为原来的序列,并且idls<idx<idrsid_{ls}<id_x<id_{rs}idls<idx<idrs如果看第二个关键字的话它满足小根堆的性质。即:节点的权值valvalval,大于两个儿子的任意两个点的LCA的权值就是它们之间的RMQ建树对于我们要满足二叉搜索树的性质的时候,我们肯定按顺序加原创 2021-11-16 20:55:22 · 2508 阅读 · 0 评论 -
Dp专题讲解
Dp专题状态机模型简介:比如说当一维度表达不清楚的时候,你们我们会通常会开第二维(f[i][2]f[i][2]f[i][2])来表示清楚状态。例题例1:AcWing 1049. 大盗阿福Problem:平面上有nnn个点,每个点有一个权值aia_iai,要求在平面中取若干个点,取得最大值(不呢取连续两个点)Solution:f[i][0]f[i][0]f[i][0]取到第iii个点,且第iii个点不取的情况f[i][1]f[i][1]f[i][1]取到第iii个点,且第iii个点取的情原创 2021-11-08 17:40:49 · 196 阅读 · 0 评论 -
中国剩余定理
中国剩余定理令M=∏i=1nmiM= {\textstyle \prod_{i=1}^{n}}m_iM=∏i=1nmi, ,Mi=MmiM_i=\frac{M}{m_i}Mi=miM ,ti∗Mi≡1(mod mi)t_i*M_i \equiv1(mod \ \ m_i )ti∗Mi≡1(mod mi)则ai∗ti∗Mi≡ai(mod mi)a_i*t_i*M_i \equiv a_i(mod \ \ m_i )ai原创 2021-10-28 10:20:00 · 81 阅读 · 0 评论 -
高斯消元
高斯消元1.概述高斯消元法(Gaussian elimination)是求解线性方阵组的一种算法,它也可用来求矩阵的秩,以及求可逆方阵的逆矩阵。它通过逐步消除未知数来将原始线性系统转化为另一个更简单的等价的系统。它的实质是通过初等行变化(Elementary row operations),将线性方程组的增广矩阵转化为行阶梯矩阵(row echelon form).2.解决问题求解形如(a1x1+b1x2+c1x3=W1a2x1+b2x2+c2x3=W2a2x1+b2x2+c2x3=W2)\be原创 2021-10-28 09:44:24 · 130 阅读 · 0 评论 -
KMP
文献参考12KMP算法简介KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt提出的,因此人们称它为克努特—莫里斯—普拉特操作(简称KMP算法)。KMP算法的核心是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。具体实现就是通过一个next()函数实现,函数本身包含了模式串的局部匹配信息。KMP算法的时间复杂度O(m+n)模式串匹配,就是给定一个需要处理的文本串(理论上应该很长)和一个需要在文本串中搜索的模式串(理论上长原创 2021-08-24 20:11:24 · 68 阅读 · 0 评论 -
树链剖分(树剖)
树链剖分简介树链剖分,指一种对树进行划分的算法,它先通过轻重边剖分将树分为多条链,保证每个点属于且只属于一条链,然后再通过数据结构(树状数组、BST、SPLAY、线段树等)来维护每一条链。前置知识LCA学习资料树形DP树的遍历线段树链式前向星主要能解决的问题将树从xxx到y结点最短路径上所有节点的值都加上zzz求树从xxx到yyy结点最短路径上所有节点的值之和(最大值/最小值/…)将以xxx为根节点的子树内所有节点值都加上zzz求以xxx为根节点的子树内所有节点值之和原创 2021-08-13 21:44:56 · 583 阅读 · 0 评论 -
矩阵乘法相关内容
矩阵乘法内容简介矩阵相乘最重要的方法是一般矩阵乘积。它只有在第一个矩阵的列数(column)和第二个矩阵的行数(row)相同时才有意义 。一般单指矩阵乘积时,指的便是一般矩阵乘积。一个m×n的矩阵就是m×n个数排成m行n列的一个数阵。由于它把许多数据紧凑地集中到了一起,所以有时候可以简便地表示一些复杂的模型定义设AAA为 n∗mn*mn∗m 的矩阵,BBB为 m∗qm*qm∗q 的矩阵,那么称 的矩阵C=n∗qC=n*qC=n∗q,并且必须满足矩阵A矩阵A矩阵A的列和矩阵B的行数矩阵B的行数矩原创 2021-08-01 22:38:22 · 255 阅读 · 0 评论 -
欧拉函数,欧拉定理
欧拉函数在数论,对正整数n,欧拉函数是小于n的正整数中与n互质的数的数目通式通式1 :φ(x)=x∗(1−1/p1)∗(1−1/p2)∗(1−1/p3)∗…..∗(1−1/pn)φ(x)=x*(1-1/p1)*(1-1/p2)*(1-1/p3)*…..*(1-1/pn)φ(x)=x∗(1−1/p1)∗(1−1/p2)∗(1−1/p3)∗…..∗(1−1/pn)其中p1, p2,p3……pn为x的所有质因数通式2:若x是质数p的k次幂,即x=pk,有φ(x)=pk−pk−1=(p−1)∗pk−1若x原创 2021-07-25 19:58:28 · 157 阅读 · 0 评论 -
费马小定理
费马小定理费马小定理(Fermat’s little theorem)是数论中的一个重要定理,在1636年提出。如果p是一个质数,而整数a不是p的倍数,则有ap−1≡1(mod)pa^{p-1}≡1(mod )pap−1≡1(mod)p根据乘法逆元的定义是:ax≡1(mod)pax≡1(mod )pax≡1(mod)p解x称为a关于模n的乘法逆元将上面的公式转化一下:ap−1≡1(mod)pa^{p-1}≡1(mod )pap−1≡1(mod)p =>=>=>a∗ap−2≡1(原创 2021-07-25 17:10:18 · 385 阅读 · 0 评论 -
同余方程(学习笔记)
同余方程同余方程是一个数学方程式。该方程式的内容为:对于一组整数Z,Z里的每一个数都除以同一个数m,得到的余数可以为0,1,2,…m-1,共m种。我们就以余数的大小作为标准将Z分为m类。每一类都有相同的余数。模板问题描述ax≡1(mod)bax≡1( mod )bax≡1(mod)b如果你看不懂这个式子,那么我就将其转化一下,这个式子就是等于ax%b=1,对于转换过的式子我们可以再将其进行二次转换ax+by=1,这个式子是不是很熟悉啊,没错,这就是拓展欧几里得可以解不等方程,如果不会拓展原创 2021-07-25 15:58:42 · 422 阅读 · 0 评论 -
拓展欧几里得
相信大家都知道欧几里得法(辗转相除)求两个数的gcd(最大公因数)gcd(最大公因数)gcd(最大公因数)根据这个算法的公式是欧几里得gcd(a,b)=gcd(b,agcd(a,b)=gcd(b,agcd(a,b)=gcd(b,a%b)b)b)证明:若r = a%b,则a可以表示成 r=a−k∗b,(k=a/b)r=a -k*b, (k=a/b)r=a−k∗b,(k=a/b)假设ddd是a,ba,ba,b的一个公约数,则有a%d=0, b%d=0,设a=x∗da = x*da=x∗d原创 2021-07-25 11:02:04 · 102 阅读 · 0 评论 -
哈夫曼编码+哈夫曼树
百度百科简介:1.哈夫曼编码(Huffman Coding),又称霍夫曼编码,是一种编码方式,哈夫曼编码是可变字长编码(VLC)的一种。Huffman于1952年提出一种编码方法,该方法完全依据字符出现概率来构造异字头的平均长度最短的码字,有时称之为最佳编码,一般就叫做Huffman编码(有时也称为霍夫曼编码)。2.哈夫曼树给定N个权值作为N个叶子结点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。哈夫曼树是带权路径长度最短的树,权原创 2021-07-23 21:06:47 · 183 阅读 · 0 评论 -
三分算法
三分模板题目链接题目描述如题,给出一个 NNN次函数,保证在范围 [l,r][[l, r][[l,r][ 内存在一点 xxx,使得 [l,x][l, x][l,x]上单调增,[x,r][x, r][x,r] 上单调减。试求出 xxx 的值。原创 2021-07-23 16:18:57 · 97 阅读 · 0 评论 -
ST算法(RMQ)
ST算法简介在RMQ问题(区间最值问题)中,ST算法就是倍增的产物。给定一个长度为N的序列,利用ST算法对其进行预处理O(nlogn)O(nlogn)O(nlogn)之后,O(1)O(1)O(1)地查询区间[L,R][L,R][L,R]之间的最大或者最小值。例题给定一个长度为 NN 的数列,和 M M 次询问,求出每一次询问的区间内数字的最大值。朴素算法朴素算法就是直接暴力地枚举区间,然后取min,maxmin,maxmin,max这样在处理所有子区间和询问多个区间的时候,时间必定要超ST算原创 2021-07-21 18:43:41 · 299 阅读 · 0 评论 -
字符串(最小表示法)
最小表示法模板题题目链接定义给定一个字符串S[1..n]S[1..n]S[1..n],如果我们不断地把它的最后一个字符放到字符串的串的开头,最终会得到nnn个字符串,而这nnn个字符串中,字典序最小的一个字符串,称为字符串S的最小表示法朴素算法将每个字符串存到数组里面,并且将数组进行一个排序,然后输出字符串数组的第一个就是这个字符串SSS的最小表示法,复杂度O(nlogn)O(nlogn)O(nlogn)线性做法实际上我们可以线性求出一个字符串的最小表示法。因为是把最后一个字符转移到原创 2021-07-19 18:49:33 · 212 阅读 · 0 评论