摘要:
二分图是一类比较特殊的图,图内所有的环上节点的个数是偶数(二分图中只有偶环),属于图的一种定义,除以之外还有二分图匹配,最大匹配,最大权匹配等算法。 二分图的定义 二分图内的所有环都为偶环,即在一个有向图 G=(V, E) 中,所有的顶点可以分成两个集合,使得所有的边全部都满足两边的顶点分别位于不同 阅读全文
摘要:
AC自动机是比较常用的一种多模式串匹配的算法,算法以Trie树为基础,以失配指针为重点。本篇基于KMP来讲解 暴力多模式串匹配 暴力多模式串匹配有好多方法,最基本的就是每个模式串都进行一次文本串匹配,复杂度为 $O(tnm)$,其中 $t$ 为模式串数量,$n, m$ 分别为每个模式串。其次就是每个 阅读全文
摘要:
Trie树,也叫字典树或者前缀树,是一类用空间换时间的数据结构,字典树同时也是AC自动机的重要前置算法,本身就可以降低字符串排序的复杂度。一般来说Trie树的题目,字符串的数量很多,但是每一条字符串很短,且字符串包含的字符属于给定的一个范围类(比如全为小写字母) Trie树的建立 先来看看一条字符串 阅读全文
摘要:
KMP算法是判断一个字符串(模式串)是不是另一个字符串(文本串)的子串的常用算法,其中KMP算法的失配指针的概念(在本算法也叫next数组)在AC自动机中也有突出使用。 朴素的字符串匹配算法 朴素的字符串匹配算法,即判断文本串的以每一个字符为开头,与模式串等长的子字符串是否与模式串本身相等。很明显复 阅读全文
摘要:
容斥原理是概率统计中的一条定理,它主要用来求一些集合的并集,由于这些集合可能有交集,所以它们的并集可能不是简单的相加减,而容斥原理,就可以很好地用数学公式的形式来求得集合的并集 容斥原理 原理: 先不考虑重叠的情况,把包含于某内容中的所有对象的数目先计算出来,然后再把计数时重复计算的数目排斥出去,使 阅读全文
摘要:
gcd及扩展gcd可以用来求两个数的最大公因数,扩展gcd甚至可以用来求一次不定方程ax+by=c的解 辗转相除法与gcd 假设有两个数a与b,现在要求a与b的最大公因数,我们可以设 a=b*q+p 如果a是与b的最大公约数是gcd(a,b),那么b与p的最大公约数也是gcd(a,b) 即 gcd( 阅读全文
摘要:
线性基主要解决关于一些数的异或等问题,其中包括解决一堆数中任意几个数异或的最大值,最小值,第k大值等等。 线性基介绍及特点 前言 线性基对于萌新来说刚开始学肯定有点难度的,网上很多博客都把线性基讲复杂了(一开始就讲什么线性无关,什么张成),虽然学过线性代数再来理解线性基的确很容易,但是没学过线性代数 阅读全文
摘要:
FWT也称快速沃尔什变换,是用来求多项式之间位运算的系数的。FWT的思想与FFT有异曲同工之妙,但较FFT来说,FWT比较简单。 前言 之前学习FFT(快速傅里叶变换)的时候,我们知道FFT是用来快速求两个多项式乘积的,即求序列C: $$C_k=\sum_{i+j=k}A_iB_j$$ 而FWT解决 阅读全文
摘要:
FFT,即快速傅里叶变换,是离散傅里叶变换的快速方法,可以在很低复杂度内解决多项式乘积的问题(两个序列的卷积) 卷积 卷积通俗来说就一个公式(本人觉得卷积不重要) $$C_k=\sum_{i+j=k}A_i*B_i$$ 那么这个表达式是啥意思了: 有两个序列A和B,其中$A=\left\{A_1,A 阅读全文
摘要:
优先队列是队列的高级版,最大的特点是可以内部实现排序 优先队列的定义 优先队列内部使用堆排序,从而实现队列内一直保持着某种顺序规律(比如递增,递减等) 在使用优先队列时,首先要引入头文件:#include <queue> 定义一个新类型的优先队列,通常使用: priority_queue<[type 阅读全文