随笔分类 -  算法

后缀数组
摘要:后缀数组 前情回顾: KMP&AC自动机 马拉车&回文自动机 在写后缀自动机之前先写一个小清新的后缀相关算法,也就是后缀排序。后缀数组记录的就是排序之后的这个序,具体来说有三个重要的数组。 现在有一个字符串 s,为了方便记 s 的长度为 Nsi 表示 s
44
0
0
AC 自动机
摘要:(如果学了 KMP 会使得 AC 自动机好理解一点吗?或许是的,不过我是用 AC 自动机来理解 KMP 的。KMP 可以看做单串 AC 自动机,建出来的自动机是一条链,但是其 Fail 树变成了一个叫[失配树](https://www.luogu.com.cn/problem/P5829)的东西,跟
71
0
1
马拉车(manacher) & 回文自动机(PAM)
摘要:回文自动机 & 马拉车 补充,PAM 的 a[0]=-1,这一点我每次写都要忘记。 读了徐安矣2023年集训队论文写的,对于差分性质和习题,我会在理解清楚之后再补充。本篇博客仅讨论前两种算法。 首先,马拉车和回文自动机都是处理回文串问题的。但在此之前,学习一些更加简单的回文算法。 小 trick:把
127
0
1
从行列式到矩阵树定理(含高斯消元)
摘要:没写完。不知道啥时候写完。 高斯消元 此为前置知识。 高斯消元为工具,而不是难点所在。就像网络流难点不在跑网络流一样。此处只讲算法的实现,而关于如何根据题目列出方程,以后有机会会单独写博客。 一元一次方程,只要一次项系数不为 0,就一定有解。 二元一次方程组,2 个方程,可能会无解,可能会有
35
0
0
学习原根 by OI-wiki
摘要:根据 OI-wiki 的讲解,加以自己的理解和简化。偏重于算法竞赛而不是数学竞赛。 前置知识: 费马小定理:ap11(modp)p 为质数。 欧拉定理:aφ(m)1(modm),m 为任意正整数。 拉格朗日定理:p
175
0
2
博弈论(转载)
摘要:转载 找个时间自己证明一下关于异或的一些结论。(NOIP 后吧,毕竟 NOIP 大概率不考博弈)
36
0
0
虚树
摘要:在给定树上给出一些关键点,要求构造一棵树,满足所有关键点都在这棵树上,且树的形态与关键点在原树上的形态不变:即本不是祖先/后辈关系的点成为祖先/后辈是不允许的,本来是祖先/后辈的点如果在这棵树上也得是祖先/后辈。 更通俗一点的话,就是把所有关键点找出来,把两两关键点的 LCA 找出来,再根据之前的祖
67
0
0
笛卡尔树
摘要:在我的心里 NOI 大纲内提高级最难的知识点是圆方树、平衡树和笛卡尔树,平衡树自从自学了 DHQ-treap 后倒是有所改观,今天又重学笛卡尔树,发现貌似并不是那么难(原理上)。看来是我第一次听的时候重视代码而忽略原理了…… 笛卡尔树可以定义为:一棵每个节点有 2 个值的二叉树,第一个值为 inde
104
0
1
基数排序
摘要:以前没学过,以为是个很难的算法(不然也不会这么快)。 然后今天要用到,就学了一下。最开始没看懂网上的题解,就自己琢磨了一下,然后有点理解了。 桶排序(在 OI-wiki 上称作计数排序,桶排序是另一种)的原理是开一个大小为值域的数组,把需要排序的数字都放在其值在桶里对应的下标处(可以用 vector
59
1
1
李超线段树
摘要:李超发明的一种维护平面上有限值域的直线或线段纵坐标大小的一种数据结构。 因为是根据线段树研发的,代码也基于线段树,所以叫李超线段树。 常规支持: 插入一条线段或直线。 查询单点最大的直线或线段上的纵坐标 查询通俗一点讲就是:给一堆直线和线段,求从一个横坐标的正无穷高往下做一条直线与给定的一堆直线和线
125
0
1
DSU on Tree
摘要:反正就是利用重链剖分:一个点到根最多只会经过 logN 条轻边。然后就对于一个点,求其子树内的一些东西,要记录这个子树内所有节点的某些信息——这个点的重儿子递归下去不清空信息,轻儿子递归下去清空信息,然后对于这个节点又把轻儿子及它们的子树内节点记录一遍,再计算这个点的贡献。 比如例题 CF7
39
1
0
树链剖分
摘要:解决树上的很多问题。比如子树操作,链操作等等,但是不能处理动态问题(处理动态树问题大都要用 LCT)。 树链剖分同可持久化线段树一样,只是一个工具,难点都在维护的东西上。像什么树上 DDP,就是用树链剖分维护,难点全在列矩阵上。(用完全平衡二叉树可以更快,但没必要) 树链剖分就是利用了重链剖分剖出来
51
1
1
自学FHQ-treap的草稿
摘要:更新:能过模板题(和加强版)的代码: 普通平衡树: (请自行实现读入和输出函数) 点击查看代码 #include <iostream> #include <random> #include <time.h> const int MAXN=1e6+50; std::mt19937 Rand(time(
35
0
1
可持久化线段树
摘要:可持久化线段树1 考虑不会变得太多,每次该值操作只会改变一个位置的值,其它位置是可以继承的。如果用数组,那就是下标继承。如果把数组分成 2 半,那改一个值,就一半继承,另一半重新赋值。而用线段树,就可以做到区间继承 log 的时间复杂度。 所以就是:当前区间分成 2 半,一半直接继承原
33
1
1
Kruskal 重构树
摘要:Kruskal 重构树 是一棵二叉树,一张 N 个点的无向连通图的 Kruskal 重构树有 2N1 个节点。 叶子节点为原图中节点,非叶子节点有点权,表示想在原图上从一边的子树内的叶子节点所对应的原图上节点走到另一边的子树内的叶子节点所对应的原图上节点所需经过的最长边的最小可能值。 建树
102
2
0
记录一些多项式代码
摘要:FFT const double PI=acos(-1.0); struct Complex { double R,I; Complex(){} Complex(double _R,double _I) { R=_R; I=_I; } }; Complex operator + (Complex x
74
2
1
线段树合并
摘要:by 0htoAi 于 2021.7.31 早年作品不保证可靠。 1.关于线段树合并: 多棵大小相同的线段树,对应节点相加组成的新线段树。 新线段树既可以单独成树,也可以附在一棵参与合并的旧线段树上。 附1:大多数时候线段树合并都是权值线段树合并。 附2:大多数时候合并都是附在一棵参与合并的线段树上
688
0
3
Beam Search
摘要:老早之前写的,修了一些 bug,随便看看就好。 观前提示: 此算法是不完备算法,仅适用于随机数据或想不出其它更好的方法时骗分。 目录: 一、Beam Search算法简介 例题 1 二、Beam Search算法框架 三、适用范围+例题 例题 2 例题 3 四、算法小结 一、Beam Search
284
0
0
点击右上角即可分享
微信分享提示
深色
回顶
收起