08 2022 档案

摘要:启发式合并 定义 一个基于直观或经验构造的算法,在可接受的花费(指计算时间和空间)下给出待解决组合优化问题每一个实例的一个可行解,该可行解与最优解的偏离程度一般不能被预计。 举个栗子:并查集的按秩合并。 每次我们将大集合合并到小集合里,新集合至少为大集合的两倍,每次合并都会变大为两倍,每个元素至多经 阅读全文
posted @ 2022-08-10 20:23 古雨梨花 阅读(30) 评论(0) 推荐(0) 编辑
摘要:前置知识 lowbit 求出最后一个二进制中最后一个1在什么位置 int lowbit(int x) { return x & (-x); } 原理:原码 & 补码 例如:11 & (-11) 11原码: 0000 1011 -11原码: 1000 1011 -11反码: 1111 0100 -11 阅读全文
posted @ 2022-08-10 20:21 古雨梨花 阅读(25) 评论(0) 推荐(0) 编辑
摘要:简介 常用来维护区间信息的数据结构,可以在Olog(n)的时间内实现区间修改,区间信息合并,单点修改。 结构 建树 注意:线段树空间需要开到四倍。 struct Node { int minv; } seg[N * 4]; // 根据左右儿子更新父亲节点信息 void update(int id 阅读全文
posted @ 2022-08-10 20:21 古雨梨花 阅读(25) 评论(0) 推荐(0) 编辑
摘要:倍增 定义 倍增法,顾名思义就是翻倍. 它能够使线性的处理转化为对数级的处理,大大地优化时间复杂度 这个方法在很多算法中均有应用,其中最常用的是 RMQ 问题和求LCA,无修改的路径信息。 路径最小值 注意:路径上的信息需要可以合并,例如求最值 const int N = 201000; const 阅读全文
posted @ 2022-08-10 20:20 古雨梨花 阅读(87) 评论(0) 推荐(0) 编辑
摘要:KMP 代码实现 时间复杂度O(n+m) int n, m; int next[M + 1], f[N + 1]; char s[N + 2], p[M + 2]; void kmp() { n = strlen(s + 1), m = strlen(p + 1); int j = 0; n 阅读全文
posted @ 2022-08-10 20:19 古雨梨花 阅读(18) 评论(0) 推荐(0) 编辑
摘要:相关定义 二分图(偶图)是一种无向图:其中的顶点可以分为两个交集为空的集合X和Y,对于途中的每条边,其中一个端点在X中,另一个端点在Y中,且X和Y内部顶点之间没有边。 完全二分图:集合X和Y每对顶点之间有且仅有一条边的图,记作Kn,m,n和m分别为X和Y集合中的顶点个数。 匹配:任意两条边 阅读全文
posted @ 2022-08-10 20:18 古雨梨花 阅读(91) 评论(0) 推荐(0) 编辑
摘要:定义 树链剖分用于将树分割成若干条链的形式,以维护树上路径的信息。 具体来说,将整棵树剖分为若干条链,使它组合成线性结构,然后用其他的数据结构维护信息。 树链剖分(树剖/链剖)有多种形式,如 重链剖分,长链剖分 和用于 Link/cut Tree 的剖分(有时被称作“实链剖分”),大多数情况下(没有 阅读全文
posted @ 2022-08-09 14:02 古雨梨花 阅读(248) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示