随笔分类 -  从0.5开始的算法学习记录

摘要:ST表(Sparse Table,稀疏表) 主要用来解决 RMQ,可重复贡献问题 问题,相比于线段树,ST表能够做到在 \(O(n\log n)\) 的时间内预处理,以 \(O(1)\) 的速度查询 基于倍增算法,预处理每个区间,这里以维护区间最大值为例 原理是利用倍增法递推,用两个等长的小区间拼凑 阅读全文
posted @ 2025-02-28 14:11 才瓯 阅读(1) 评论(0) 推荐(0) 编辑
摘要:LIS相关问题及简单Dilworth定理 这里以一道经典的题目为例 题目描述 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭。由于该系统还在试用阶段,所 阅读全文
posted @ 2025-02-28 14:11 才瓯 阅读(2) 评论(0) 推荐(0) 编辑
摘要:最长公共子序列LCS 笔记 假设存在两个相同长度平凡的序列,我们希望找到它们最长的公共子序列,在没有其他特殊条件的情况下,利用动态规划计算的时间复杂度为 \(O(n^2)\) ,并且可以记录这个子序列 考虑两个指针作用于两个序列上,记 \(dp_{i,j}\) 表示为连续子序列 \([a_1,a_i 阅读全文
posted @ 2025-02-28 14:10 才瓯 阅读(1) 评论(0) 推荐(0) 编辑
摘要:最长上升(不下降)子序列LIS 笔记 动态规划基础 线性DP做法: dp数组 \(f_i\) 记录以 \(a_i\) 结尾的最长上升子序列的长度,在每轮枚举 \(a_i\) 时,利用 \(j\) 指针,从头扫描找到 \(a_j<a_i\) ,这样 \(a_i\) 可以作为 \(a_j\) 的后续,接 阅读全文
posted @ 2025-02-28 14:10 才瓯 阅读(2) 评论(0) 推荐(0) 编辑
摘要:线性DP应用及滚动数组优化 题目描述 设 \(A\) 和 \(B\) 是两个字符串。我们要用最少的字符操作次数,将字符串 \(A\) 转换为字符串 \(B\)。这里所说的字符操作共有三种: 删除一个字符; 插入一个字符; 将一个字符改为另一个字符。 \(A, B\) 均只包含小写字母。 典型的动态规 阅读全文
posted @ 2025-02-24 00:02 才瓯 阅读(4) 评论(0) 推荐(0) 编辑
摘要:RMQ问题——线段树+懒标记 线段树,基于分治思想,用来维护区间信息的二叉树结构 例如RMQ,区间和,区间GCD问题,在平均 \(O(\log n)\) 的时间复杂度内执行区间修改和查询操作 朴素的线段树的每个节点包含三个元素:左区间,右区间,区间元素统计值(以区间和为例) struct node{ 阅读全文
posted @ 2025-02-15 21:18 才瓯 阅读(4) 评论(0) 推荐(0) 编辑
摘要:可持久化权值线段树(主席树)笔记 区别于普通线段树,权值线段树维护的信息不同 普通线段树:节点区间是序列的下标区间,维护区间最值,区间和等信息 权值线段树:节点区间是序列的值域,维护值域内数出现的次数 *图片引自董晓算法 给定一个区间,询问该区间内的第 \(k\) 小值是多少,暴力的方案就是每次都开 阅读全文
posted @ 2025-02-14 23:21 才瓯 阅读(6) 评论(0) 推荐(0) 编辑
摘要:树状数组笔记 树状数组相比于线段树类的操作,支持单点修改与区间查询,代码量小于线段树类的一种精简算法 普通的树状数组可以维护满足结合律且可以差分运算的信息 树状数组的每个元素表示它管辖范围内的元素总值,(前缀和,乘积,异或等) 相比于线段树的每个父节点管辖两个儿子,树状数组允许一个父节点管辖多个儿子 阅读全文
posted @ 2025-02-12 21:38 才瓯 阅读(6) 评论(0) 推荐(0) 编辑
摘要:数论基础E 同余式 如果两个整数 \(a,b\) 对 \(m\) 取余的余数相同,则 \(a,b\) 模 \(m\) 同余,记作 \(a\equiv b(mod\ m)\) 乘法逆元 若两个整数 \(a,b\) 互质,且满足同余方程 \(a\cdot x\equiv 1(mod\ b)\) ,则定义 阅读全文
posted @ 2025-02-09 21:09 才瓯 阅读(5) 评论(0) 推荐(0) 编辑
摘要:数论基础D 整除分块/数论分块 快速计算一群向下取整的和式,打包同时计算拥有相同的 \(\lfloor\frac{n}{i}\rfloor\) 的分式,时间复杂度可以优化到 \(O(\sqrt n)\) 例如需要计算 \[\sum_{i=1}^{n} \lfloor \frac{n}{i} \rfl 阅读全文
posted @ 2025-02-05 22:19 才瓯 阅读(3) 评论(0) 推荐(0) 编辑
摘要:数论基础C 欧拉函数 \(1\) ~ \(n\) 中与 \(n\) 互质的数的个数叫做欧拉函数,记作 \(\phi (n)\) 有性质如下: 存在质数 \(p\) ,则 \(\phi(p)=p-1\) 存在质数 \(p\) ,则 \(\phi(p^k)=(p-1)p^{k-1}\) 于是可以推出欧拉 阅读全文
posted @ 2025-02-05 22:19 才瓯 阅读(4) 评论(0) 推荐(0) 编辑
摘要:Kruskal最小生成树算法 基于并查集实现的最小生成树算法,贪心选取最短的边,如果这条边连接的两个节点不在同一集合内,那就加入树 查询是否在同一集合已经合并集合的操作通过并查集实现 #include<bits/stdc++.h> using namespace std; struct edge{ 阅读全文
posted @ 2025-01-25 19:47 才瓯 阅读(6) 评论(0) 推荐(0) 编辑
摘要:Prim最小生成树算法 首先给出最小生成树的概念:把给定的无向图中转换成一棵树,且树的边权和最小 Prim算法基于贪心的思想,每次在图中选取距离最小生成树最近的点加入树 首先给出朴素的模板算法: struct edge{ int v,w; }; int n,m; vector<edge> e[501 阅读全文
posted @ 2025-01-19 16:39 才瓯 阅读(8) 评论(0) 推荐(0) 编辑
摘要:数论基础B 试除法判定质数 暴力做法:枚举 \(2\) ~ \(n-1\) 的所有数,判断能否将 \(n\) 整除,如果存在一个数能把 \(n\) 整数,说明 \(n\) 不是质数 实际上只需要枚举到 \(\sqrt{n}\) 即可,如果 \(a\) 是 \(n\) 的约数,那么 \(\frac{n 阅读全文
posted @ 2025-01-02 15:18 才瓯 阅读(7) 评论(0) 推荐(0) 编辑
摘要:Bellman-Ford单源最短路算法 不采用 SPFA 实现的Bellman-Ford算法 " 题目中的图没有特殊性质时,若 SPFA 是标算的一部分,题目不应当给出 Bellman–Ford 算法无法通过的数据范围 " Bellman-Ford的原理如下 先枚举节点,在枚举边,每进行一轮循环,对 阅读全文
posted @ 2024-12-31 21:47 才瓯 阅读(10) 评论(0) 推荐(0) 编辑
摘要:最短路——分层图问题 这里以一道题目为例 题目描述 Alice 和 Bob 现在要乘飞机旅行,他们选择了一家相对便宜的航空公司。该航空公司一共在 \(n\) 个城市设有业务,设这些城市分别标记为 \(0\) 到 \(n-1\),一共有 \(m\) 种航线,每种航线连接两个城市,并且航线有一定的价格。 阅读全文
posted @ 2024-12-30 17:10 才瓯 阅读(26) 评论(0) 推荐(0) 编辑
摘要:数论基础A 欧几里得算法(辗转相除法)求最大公约数GCD 有两个整数 \(a,b(a>b)\) ,记它们的最大公约数为 \(gcd(a,b)\),对于任意的 \(a,b\ne 0\) 满足等式 : \[gcd(a,b)=gcd(b,a\% b) \] 充分性证明: 设 \(d\) 为 \(a,b\) 阅读全文
posted @ 2024-12-29 17:38 才瓯 阅读(6) 评论(0) 推荐(0) 编辑
摘要:快速幂优化矩阵幂、乘法 对于一般的矩阵计算有 \(A_{m,n}*B_{n,p}=C_{m,p}\),其中作为乘积因子的两个矩阵必须满足前因子列数与后因子行数相同 积的行数等于前因子的行数,列数等于后因子的列数 ,任意的 \(c_{i,j}\) 可由定义的计算得出 \(c_{i,j}=\sum_{k 阅读全文
posted @ 2024-12-28 14:26 才瓯 阅读(30) 评论(0) 推荐(0) 编辑
摘要:动态规划入门——状态转移方程的简单构造思想 动态规划,往往是作为DFS的最终优化方案,由DFS的递归公式 到 状态转移方程 动态规划的题目一般是给出一组数据,每组数据都对应一个最终的解,我们需要选择出最优的一个解 怎么在过程中确定选择哪组数组才能得到最优解呢? 可以构造一个或多个状态转移方程来对解的 阅读全文
posted @ 2024-12-24 17:01 才瓯 阅读(21) 评论(0) 推荐(0) 编辑
摘要:Dijkstra单源最短路堆优化算法 使用基于堆的优先队列,我们可以在进行松弛操作前对找边进行优化操作 时间复杂度为 \(O(m\log m)\) ,其中 \(m\) 为边的数量,优先队列找边的时间复杂度为\(O(\log m)\) 优先队列 默认为一个大根堆,即堆顶的元素的优先级最高,体现在某个变 阅读全文
posted @ 2024-12-23 13:39 才瓯 阅读(34) 评论(0) 推荐(0) 编辑

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