![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
基础算法
文章平均质量分 55
Jarden_
这个作者很懒,什么都没留下…
展开
-
枚举子集复杂度 O(n^3) 证明
困扰多年的问题,居然在学习离散数学后的一分钟内得到解决。形式化问题为,求满足A⊆B⊆S的有序对的个数。原创 2022-12-16 21:17:09 · 860 阅读 · 1 评论 -
KMP算法是怎么被设计出来的
定义我们假设要在主串中寻找子串出现的所有位置我们记主串中的开始位置为匹配位置,如在 “abc” 中匹配 “bc” ,则匹配位置为 (2)暴力我们把匹配过程拆解为枚举匹配位置验证主串从匹配位置开始是否一一匹配子串以此,有显然的 O(nm)O(nm)O(nm) 算法基于优化推出KMP主串:ABCABCABD子串:ABCABD枚举匹配位置 (1),已经验证了ABCAB是匹配的,现在发现C和D匹配不上显然我们该要枚举下一个匹配位置,但是我们其实已经在刚刚的验证过程中知道了下一个匹配位置原创 2022-01-26 11:44:33 · 1667 阅读 · 0 评论 -
关于Nextpermutation的思考
考虑n=6的情况,列出前几个排列...123645123654124356124365124536124563124635...\\123645\\123654\\124356\\124365\\124536\\124563\\124635...123645123654124356124365124536124563124635如123563123563123563和124635124635124635,观察第一个顺序的565656对,我们现在要把555之后大于555的最小的一个数和555交换(一定存在,原创 2021-09-18 08:35:16 · 64 阅读 · 0 评论 -
数学蒟蒻的矩乘小结
矩阵乘法基础A∗B={123456}∗{142536}={14323277}A*B=\left\{ \begin{matrix}1&2&3\\4&5&6 \end{matrix} \right\}*\left\{ \begin{matrix}1&4\\2&5\\3&...原创 2019-04-08 18:24:44 · 247 阅读 · 1 评论 -
欧几里得&卢卡斯定理&中国剩余定理&扩展
欧几里得LL gcd(LL a,LL b){ if(!b) return a; return gcd(b,a%b);}扩展欧几里得ax+by=cax+by=cax+by=c有解的充要条件是gcd(a,b)|cgcd(a,b)|cgcd(a,b)|c 解方程:ax+by=1ax+by=1ax+by=1 求a的乘法逆元ax≡1(mod m)ax≡1(mo...原创 2018-08-24 21:25:15 · 160 阅读 · 0 评论 -
计数类问题
排列组合数Amn=n!(n−m)!Cmn=n!m!(n−m)!Cmn=Cm−1n−1+Cmn−1Cmn=Cmn−1+Cmn−2+...+Cmm=∑i=mnCmiAnm=n!(n−m)!Cnm=n!m!(n−m)!Cnm=Cn−1m−1+Cn−1mCnm=Cn−1m+Cn−2m+...+Cmm=∑i=mnCimA^m_n=\frac {n!}{(n-m)!}\\C^m_n=\frac {n!...原创 2018-08-24 20:56:58 · 184 阅读 · 0 评论 -
求回文子串长:Manacher算法(马拉车算法)
算法问题描述求回文子串算法思想字符串的思想一般都是用前面求过的加速后面的,马拉车算法也不例外,先强行搞一个东西,在每个字符中间插入一个不会出现的字符‘#‘’’以处理奇回文和偶回文(代码方便) 如果现在有一个大的以id为对称轴的回文串,现在要更新id右边的某个i的最大回文半径,如果i在id回文串内,是不是可以直接用i的关于id的对称点的回文半径呢? 所以我们分情况讨论一下。记i的...原创 2018-08-20 21:37:58 · 238 阅读 · 0 评论 -
Tarjan算法
算法问题描述不知道不知道,你想知道吗,出门左转百度谢谢算法思想天知道什么思想代码void Tarjan(int u){ //点双 dfn[u]=low[u]=time++; s.push(u); vis[u]=1; for(int i=head[u];i!=-1;i=edge[i].next){ int v=edge[i].v;...原创 2018-08-19 23:52:50 · 163 阅读 · 0 评论 -
CDQ分治
CDQ分治就是先把第一维的信息排序好,确保左边对右边有影响,每次分治用第二维的信息再次判断让现在取到的左边只对现在取到的右边有影响原创 2018-08-16 23:46:18 · 833 阅读 · 0 评论 -
后缀数组SA
算法问题描述给定一个字符串s,按字典序排序s的所有子串算法思想鬼知道什么思想,好像没有什么思想。哦,想起来了,是倍增。 考虑最简单的后缀间O(n)O(n)O(n)比较和快排O(nlogn)O(nlogn)O(nlogn),总复杂度O(n2logn)O(n2logn)O(n^2logn)。考虑优化字符串间的比较,用倍增的思想,假设k/2k/2k/2长度的已经比完了,比较长度为kkk...原创 2018-08-15 16:56:50 · 158 阅读 · 0 评论 -
混合图欧拉回路
代码#include <bits/stdc++.h>#define maxn 100005#define MAXN 2000005#define INF 0x3f3f3f3f#define LL long longusing namespace std;int cnt,tot,n,m,S,T,lev[maxn],head[maxn],ind[maxn],oud[ma...原创 2018-08-13 07:09:05 · 126 阅读 · 0 评论 -
树链剖分
算法问题描述在树上的节点间的路径上进行各种操作算法思想对于序列区间,我们有强有力的工具——线段树,但对于树这种结构本身并不是一长条链,但我们可以人为剖分出一条一条链来进行区间维护,最后合并这一条条链就得到树上区间的答案了。接下来的问题是如何剖分,显然对于随机数据我们随机剖分的复杂度应该是满足logn的性质的,但通常数据会可以编造,所以我们需要启发式剖分。启发式剖分每个节点向自己...原创 2018-08-12 11:12:42 · 110 阅读 · 0 评论 -
最短路
算法问题描述单源最短路:在一张有源点S的有向图中,求S到所有点的最短路 全图最短路(误):在一张有向图中,求所有点间的最短路Dijstra算法算法思想本质是贪心算法,每次从走过的点集U中挑最小的dis[u]用dis[u]+u->v松弛没走过点集V中的dis[v]。 时间复杂度O(n^2)通常选择堆优化到O(nlogn)正确性想象在源点的时候,显然最短的那条路S-&...原创 2018-08-12 10:11:01 · 96 阅读 · 0 评论 -
网络最小费用最大流
算法问题描述在网络流的基础上,每条边有一个单位流量代价,要求最大流的情况下的最小费用流SPFA流算法思想显然我们可以通过跑最短路找出一条流量一定下的费用最小的增光路,增广过程中和常规最大流不同的仅仅是建反向边时,反向边的代价是负值,保证代价可以回退。因为有负权,所以我们选择SPFA实现代码bool SPFA(int s,int t){ memset(dis,0x...原创 2018-08-12 09:21:45 · 394 阅读 · 0 评论 -
网络最大流
算法问题描述网络流就是网络流,无FUCK说最大流最小割定理证明:∵对于任一割(S,T),S到T的流量f必定全部从这一割经过∴|f|<=c(S,T)又当图中不存在增光路时,一定存在一个割(S,T)的容量被流满即|f|=c(S,T)∴f是F集合中最大的,c(S,T)是集合C中最小的,且f=c(S,T)朴素算法考虑贪心找有残余流量的一条S->T增光路,但该方...原创 2018-08-11 16:08:15 · 154 阅读 · 0 评论