算法学习笔记
文章平均质量分 67
彡倾灬染|
这个作者很懒,什么都没留下…
展开
-
AcWing算法基础课----动态规划(一) 笔记 ( 背包:01、完全、多重、分组 )
动态规划常用模型背包01背包完全背包多重背包分组背包常用模型背包线性dp区间dp重点:状态转移出发点:1. 状态表示(几维)例如 f(i,j) a.集合 - 所有选法 - 条件 b.属性 Max、Min、数量2. 状态计算(如何一步一步计算出每一步)dp优化:对代码或者方程进行等价变形背包n个物品,容量V的背包,每个物品v体积、w价值01背包n个物品,容量V的背包,每个物品v体积、w价值特点:每件物品最多用一次所有选法满足1.只从前i个物品中选2.总体积<=原创 2021-08-23 09:29:18 · 191 阅读 · 0 评论 -
AcWing算法提高课----图论 笔记 (LCA最近公共祖先 向上标记法 + 倍增法 + Tarjan离线求LCA)
最近公共祖先LCA问题1. 向上标记法 O(n)2. 倍增法 O(mlogn)方法3:Tarjan算法——离线求LCA O(n+m)例题1:AcWing1172.祖孙查询(倍增法)例题2:AcWing1171.距离(Tarjan离线LCA算法)LCA问题解决方法:1. 向上标记法 O(n)从x向上走到根节点, 并标记路径上经过的点从y向上走到根节点, 当遇到第一个被标记的点就找到了LCA(x, y)2. 倍增法 O(mlogn)预处理fa[i,j]表示从i开始,向上走2^j原创 2021-08-18 11:32:41 · 519 阅读 · 0 评论 -
AcWing算法提高课----图论 笔记 (差分约束)
差分约束知识点讲解例题一:AcWing1169.糖果例题二:AcWing.362 区间例题三:AcWing1170. 排队布局知识点讲解差分约束可以求什么:求不等式组的可行解如何求最大值或者最小值Q1:如何求不等式组的可行解形如:xix_ixi <=<=<= xjx_jxj +++ ckc_kck的不等式其中xix_ixi xjx_jxj为自变量 ckc_kck为常量可以看成j-->i(c)的边对于每一条边都会满足dist[i] <= dist原创 2021-08-17 11:05:55 · 587 阅读 · 0 评论 -
AcWing算法提高课----图论 笔记 (SPFA找负环)
SPFA找负环知识点讲解例题1:AcWing904.虫洞01分数规划例题2:AcWing361.观光奶牛知识点讲解负环:在一个有向(无向)图当中, 存在一个环路,使得这个环的边权之和小于0求负环常见方法(基于SPFA、抽屉原理):统计每个点入队的次数,如果某个点入队n次,则说明存在负环(等价于bellman-Ford)统计当前每个点的最短路中所包含的边数,如果某点的最短路所包含的边数大于等于n,则也说明存在负环(推荐)2优于1的原因,若上图环中2的方法O(n),1的方法O(n^2)图中负原创 2021-08-16 10:59:19 · 509 阅读 · 0 评论 -
AcWing算法基础课----数学知识(四) 笔记 ( 容斥原理 + 简单博弈论 )
数学知识容斥原理简单博弈论NIM游戏公平组合游戏ICG有向图游戏Mex运算SG函数有向图游戏的和容斥原理简单博弈论NIM游戏给定N堆物品,第i堆物品有Ai个。两名玩家轮流行动,每次可以任选一堆,取走任意多个物品,可把一堆取光,但不能不取。取走最后一件物品者获胜。两人都采取最优策略,问先手是否必胜。我们把这种游戏称为NIM博弈。把游戏过程中面临的状态称为局面。整局游戏第一个行动的称为先手,第二个行动的称为后手。若在某一局面下无论采取何种行动,都会输掉游戏,则称该局面必败。所谓采取最优策略是指原创 2021-08-10 11:00:09 · 351 阅读 · 0 评论 -
AcWing算法基础课----数学知识(三) 笔记 ( 高斯消元 + 求组合数 )
数学知识高斯消元 O(n^3)求组合数1.递归法求组合数2.Lucas定理3.分解质因数法求组合数高斯消元 O(n^3)解方程: 无解 \ 无穷多解 \ 有唯一解利用线性代数初等行列变换1.把某一行乘一个非零的数2.交换某两行3.把某行若干倍加到另一行上去变换之后结果与解的关系:1.完美阶梯型 唯一解2.不完美阶梯型 0=非零 无解3.不完美阶梯型 0=0 无穷解浮点数判断是否为零 需要和eps比算法步骤:枚举每一列c找到绝对值最大的一行将该行换到最上面将原创 2021-08-09 10:52:05 · 301 阅读 · 0 评论 -
AcWing算法基础课----数学知识(二) 笔记 (欧拉函数 + 快速幂 + 扩展欧几里得 + 中国剩余定理)
数学知识欧拉函数快速幂扩展欧几里得中国剩余定理欧拉函数1~n中与n互质的数的个数求欧拉函数int phi(int x){ int res = x; for (int i = 2; i <= x / i; i ++ ) if (x % i == 0) { res = res / i * (i - 1); while (x % i == 0) x /= i; } if (x &原创 2021-08-03 11:00:54 · 290 阅读 · 0 评论 -
AcWing算法基础课----数学知识(一) 笔记 (数论 质数 + 约数)
数学知识数论质数试除法判定质数 O(sqrt(n))试除法分解质因数 O(logn)~O(sqrt(n))朴素筛法求素数 O(nlogn)线性筛法求素数约数试除法求所有约数 O(sqrt(n))约数个数和约数之和欧几里得算法 (辗转相除法)数论数论问题每一步都要计算时间复杂度,只有每一步都不超时才能做质数定义:质数(素数)是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。试除法判定质数 O(sqrt(n))模板:bool is_prime(int x){原创 2021-07-31 11:04:33 · 280 阅读 · 0 评论 -
AcWing算法基础课----搜索与图论(三) 笔记 (最小生成树 + 二分图)
搜索与图论1. 朴素版prim算法2. Kruskal算法3.染色法判别二分图4.匈牙利算法1. 朴素版prim算法模板:时间复杂度是 O(n2+m), n 表示点数,m 表示边数int n; // n表示点数int g[N][N]; // 邻接矩阵,存储所有边int dist[N]; // 存储其他点到当前最小生成树的距离bool st[N]; // 存储每个点是否已经在生成树中// 如果图不连通,则返回INF(值是0x3f3f3f3f),原创 2021-07-30 17:24:37 · 364 阅读 · 0 评论 -
AcWing算法基础课----搜索与图论(二) 笔记 (最短路:Dijkstra、Bellman-Ford、SPFA、Floyd)
搜索与图论常见的最短路问题朴素dijkstra算法堆优化版dijkstraBellman-Ford算法spfa 算法(队列优化的Bellman-Ford算法)spfa判断图中是否存在负环floyd算法常见的最短路问题源点:起点 汇点:终点n 点数 m 边数单源最短路所有边权都是正数a.朴素Dijkstra算法 O(n^2) 稠密图b.堆优化版的Dijkstra算法 O(mlogn) 稀疏图存在负权边a.Bellman-Ford O(nm) 对边数有限制原创 2021-07-30 11:36:45 · 373 阅读 · 2 评论 -
AcWing算法基础课----搜索与图论(一) 笔记 (DFS与BFS + 拓扑排序)
搜索与图论深度优先搜索 DFS宽度优先搜索 BFS树与图的存储树与图的遍历DFSBFS拓扑排序深度优先搜索 DFS宽度优先搜索 BFS对比DFS、BFSDFS:数据结构:stack 空间:O(h) 不具有最短性BFS:数据结构:queue 空间:O(2^h) 最短路概念,具有最短性树与图的存储树是一种特殊的图,与图的存储方式相同。对于无向图中的边ab,存储两条有向边a->b, b->a。因此我们可以只考虑有向图的存储。(1) 邻接矩阵:g[原创 2021-07-28 20:58:20 · 450 阅读 · 0 评论 -
AcWing算法基础课----数据结构(三) 笔记 (Hash + 字符串哈希 + STL应用)
数据结构Hash表存储结构1.开放寻址法2.拉链法字符串哈希C++STLHash表把特别大的数据映射到0~n存储结构1、 x mod len(质数)2、 冲突解决冲突:1.开放寻址法数组开的范围一般为题目给定的2~3倍模板:int h[N]; // 如果x在哈希表中,返回x的下标;如果x不在哈希表中,返回x应该插入的位置 int find(int x) { int t = (x % N + N) % N; while (h[t]原创 2021-07-28 17:00:12 · 229 阅读 · 0 评论 -
AcWing算法基础课----数据结构(二) 笔记 (Tire树 + 并查集 + 堆)
数据结构原创 2021-07-27 11:02:26 · 182 阅读 · 0 评论 -
AcWing算法基础课----数据结构(一) 笔记 (链表和邻接表 + 栈与队列 +KMP)
数据结构1.链表与邻接表1. 数组模拟单链表 (用的多的是 邻接表:存储数和图)2. 数组模拟双链表 (优化某些问题)2.栈与队列1. 模拟栈(先进后出)2. 模拟队列(先进先出)3.单调栈4.单调队列3.KMP1.链表与邻接表动态链表时间太长(new node)采用:数组模拟链表1. 数组模拟单链表 (用的多的是 邻接表:存储数和图)定义 : e 值 | ne 某点next指针(空节点-1) |int e[N],ne[N]关联:e和ne 通过下标模板静态链表(快!)// head存原创 2021-07-26 10:09:28 · 794 阅读 · 0 评论 -
AcWing算法基础课----基础算法(二) 习题题解
基础算法一 习题基础知识讲解链接791. 高精度加法792. 高精度减法793. 高精度乘法794. 高精度除法795. 前缀和796. 子矩阵的和797. 差分798. 差分矩阵基础知识讲解链接传送门791. 高精度加法题目链接答案#include <iostream>#include <algorithm>#include<bits/stdc++.h>#define ll long long#define mem(a,b) memset(a,b,s原创 2021-05-24 20:55:38 · 380 阅读 · 0 评论 -
AcWing算法基础课----基础算法(二) 笔记 (高精度算数 + 前缀和 + 差分)
基础算法高精度前缀和与差分高精度常用分类:两个大整数相加(A+B) A和B位数大约为1e6两个大整数相减(A-B) A和B位数大约为1e6一个大整数乘一个小整数(A*a)len(A)<=1e6 / a<=1e9一个大整数除一个小整数(A/a) len(A)<=1e6 / a<=1e9大整数如何存储:每一位存到数组中(从个位开始存较好)思路:A+B(模拟人工加法)C[i]=A[i]+B[i]+t(上一位进位)模板// C = A + B, A >原创 2021-05-24 17:02:35 · 410 阅读 · 0 评论 -
AcWing算法基础课----基础算法(一) 习题题解
基础算法一 习题基础知识讲解链接785 快速排序786 第k个数787 归并排序788 逆序对的数量789 数的范围790 数的三次方根基础知识讲解链接传送门785 快速排序题目链接答案#include<bits/stdc++.h>const int N = 1e5 + 10;using namespace std;int dp[N];void quick_sort(int q[], int l, int r) { if (l >= r) return;原创 2021-05-19 21:06:09 · 630 阅读 · 3 评论 -
AcWing算法基础课----基础算法(一) 笔记 (排序 + 二分)
基础算法 排序快速排序归并排序二分整数二分浮点数二分排序学习方法:学习代码的主要思想模板理解+记忆刷题(模板题默写3~5遍)快速排序快排 --> 基于分治y总快排讲解思想:确定分界点(通常为 q[l]、q[(l+r)/2]、q[r]、随机(不常用))★调整区间☆ —>划分为两个区间,第一个区间所有数都小于等于x,第二个区间所有数都大于等于x递归处理左右两端模板:void quick_sort(int *q,int l,int r){ if(l>原创 2021-05-19 17:07:58 · 467 阅读 · 0 评论
分享