![](https://img-blog.csdnimg.cn/direct/dd3c9e3c55f24dfc9a0e3f08662343b8.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
算法学习笔记
文章平均质量分 78
记录笔者学习过的算法
_Piper
这个作者很懒,什么都没留下…
展开
-
算法学习笔记(Tarjan)
本文介绍Tarjan求强联通分量、找割点和割边、找环。原创 2024-05-14 22:20:59 · 1009 阅读 · 0 评论 -
算法学习笔记(LCA)
LCA:树上两个点的最近公共祖先。(两个节点所有公共祖先中,深度最大的公共祖先)LCALCAxyxyxyLCAxyxyyxLCAxyyLCAxyzLCAxLCAyz))LCAx1x2...xnLCAdfs序最大点,dfs序最小点本文主要介绍求LCA的两种方法:倍增法和Tarjan。原创 2024-05-14 19:12:52 · 928 阅读 · 0 评论 -
算法学习笔记(匈牙利算法)
匈牙利算法可以求解二分图的最大匹配问题(二分图:如果无向图GVE的所有点可以分为两个集合V1V2,所有的边都在V1和V2之间,而V1或V2的内部没有边,称G是一个二分图。直接引用例题进行解释。原创 2024-05-13 22:29:26 · 766 阅读 · 0 评论 -
算法学习笔记(二分图染色)
首先我们需要明确什么是二分图:如果无向图GVE的所有点可以分为两个集合V1V2,所有的边都在V1和V2之间,而V1或V2的内部没有边,称G是一个二分图。直接说结论:如果一个图是二分图,那么它一定没有边数量为奇数的环。判断一个图是否为二分图,一般用“染色法”进行判断。用两种颜色对所有点进行染色,要求处在一条边上的两个点的颜色不能相同,染色结束后,如果没有相邻点颜色相同,那就是二分图。例题;原创 2024-05-13 21:58:40 · 1370 阅读 · 0 评论 -
算法学习笔记(博弈论中的SG函数)
定义SG函数:对于状态x和它的所有k个后继状态y1y2...ykSGxmexSGy1SGy2...SGyk)}mex函数的值表示不属于集合的最小非负整数)现在对所有起点的SG函数值做异或和,若异或和为0,则这个状态为必败状态。若不为0,则为必败状态。现给出证明:当一个状态没有后继状态时,求mex集合为空集合,SG函数的值为0。即最终态的SG函数值必为0,而对于一个SG函数值不为0。原创 2024-05-11 20:04:31 · 587 阅读 · 0 评论 -
算法学习笔记(Nim游戏)
Nim。原创 2024-05-11 14:22:00 · 990 阅读 · 0 评论 -
算法学习笔记(差分约束系统)
然后从这个虚拟源点出发跑一遍最短路,若出现负环,则不等式组无解,因为出现负环时,最后因为不等式组的解不唯一,输出时挑一个满足题意的解,只需要将距离数组。的不等式(或等式)组,请你判断这个不等式(或等式)组是否有解。那具体如何判断所给不等式组是否有解?可以拟定一个虚拟源点。而这个不等式就相当于题目中第一个不等式。,换句话说,若存在一条边连接着点。,这也就是差分约束的原理。的距离更远,用公式来讲就是。对于每组样例,第一行输出。行,每行一个不等式组。,可以假定有一条权值为。原创 2024-05-07 21:32:38 · 890 阅读 · 0 评论 -
算法学习笔记(最短路——spfa)
spfa是Bellman−Ford算法的改进。在Bellman−Ford中,我们在每一轮中枚举了每一条边,但是实际上,在上一轮中没有被更新的点所延伸出来的边是不需要访问的,因为上一轮中没有被更新的点值没变,边权没变,再向下也只是重复一次,不会更新出新的值,所以是无效访问。spfa就是省略了Bellman−Ford中的这些无效访问。具体写法参考BFS思路,用队列维护需要更新的点。原创 2024-05-04 15:42:59 · 861 阅读 · 0 评论 -
算法学习笔记(最短路——Bellman-Ford)
BellmanFord是一种单源最短路径算法,可以用于边权为负的图,但是只能用于小图。0n−1Dijkstra算法复杂度:很明显需要n−1个点都需要枚举一次,每次都需要枚举m条边,复杂度为Onm。同时这个算法还可以判断是否存在负环。只要更新完n−1次后,还有点可以被更新最短路,那就是存在负环的,因为只有负环是每走一圈路径长度都会往下减,就可以无限更新,而正常图我们只要枚举n−1遍。也可以记录每个节点最短路的路径。原创 2024-05-02 21:39:56 · 647 阅读 · 1 评论 -
算法学习笔记(最短路——Dijkstra)
Dijkstra是最常用,效率最高的最短路径算法,是单源最短路算法。核心是BFS和贪心。BFSDijkstra2如何快速地取得步骤2中描述的所谓最近邻点?可以使用优先队列来实现。就是说用优先队列来代替原来BFS中的普通队列。Omlog2n。算法缺点:边权不能为负数,若出现负边,则上述贪心思想失效(出现从另外一点经过一负边到达“最近点”的距离比原本到达“最近点”的距离短)。存图:邻接表、前向星。原创 2024-05-01 22:00:03 · 407 阅读 · 0 评论 -
算法学习笔记(Floyd进阶应用——传递闭包)
给定一个集合,以及若干元素的传递关系,传递闭包问题是求解所有元素的联通关系,如给定集合。但是求解传递闭包问题时,我们需要求得所有点对之间的联通关系,复杂度就达到了。具体方案是用点对间的联通关系来代替原本的路径长度进行递推。,这个操作其实可以用或操作来取代。,这么高的复杂度,我们可以用相同复杂度但是代码简单的。如果是借已知单向图推两点间的联通关系,可以用。但实际上这个代码还能再进行优化,因为。的循环,可以减少一点计算时间。,在稠密图中,复杂度约等于。,还可以直接进行位运算。,优于直接搜索,可以处理。原创 2024-04-30 21:32:14 · 698 阅读 · 1 评论 -
算法学习笔记(最短路——Floyd)
Floyd−Warshall算法,简称Floyd算法On3Floyd算法的原理:从小图扩张到全图。很容易看出这是动态规划的思想,定义dpkij:以点k为中继点(如果有更优则不做中继点)的点对ij间的最短路径。dpkijmindpk−1ijdpk−1ikdpk−1kj])因为是以k为中继点,所以以点i到点k的距离加上点k到点j与更新至现在点i到j。原创 2024-04-24 22:14:19 · 988 阅读 · 0 评论 -
算法学习笔记(动态规划——完全背包)
完全背包又叫无穷背包,与01背包的差别就是每种物品能拿的数量从1个变成了无数个。01背包:https://zhuanlan.zhihu.com/p/687752469 )从例题入手:https://www.starrycoding.com/problem/47。原创 2024-03-27 19:18:20 · 895 阅读 · 0 评论 -
算法学习笔记(动态规划——01背包)
先来聊聊动态规划,动态规划是分治法的一种体现,把一个问题分解成若干个子集,通过当前状态,经过操作得到下一个状态,最后得到最优问题解的一种方法。其中的01背包解决的是关于选择的动态规划问题,0和1代表的是选与不选。原创 2024-03-19 01:44:01 · 874 阅读 · 1 评论 -
算法学习笔记——dfs与bfs
时间复杂度:都是O(m),m为图中的边的数量。空间复杂度:都是O(n), n为点的数量。一些有趣的性质:dfs因为是递归来实现,运用递归的性质可以实现回溯。经典例题:N皇后问题。力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台回溯法的大致思路:添加图片注释,不超过 140 字(可选)而bfs,从运行的情况来讲,因为是一层一层往下访问,所以可以找到在最上边的叶子节点,也就是说bfs能查找最短路径,具体就不详细赘述了,感兴趣可以自行了解一下。原创 2024-01-26 18:16:07 · 879 阅读 · 1 评论 -
算法学习笔记(前缀和)
算法学习笔记(前缀和) - Piper的文章 - 知乎。原创 2024-03-04 13:45:03 · 346 阅读 · 1 评论 -
算法学习笔记(st表)
有点懒了,麻烦各位读者配合以下链接食用。原创 2024-03-05 23:17:14 · 652 阅读 · 1 评论 -
算法学习笔记(并查集)
并查集是一种比较高级的数据结构,它可以快速查询两个节点是否联通,所以在处理一些联通问题时很好用。当然并查集作为一种数据结构,运用不止在联通问题上。这里我就不细细展开了。并查集是一个树形的结构。每个节点都有一个父亲节点,我们通过查看两个节点的根节点是否相同来判断这两个节点是否处在同一个联通块之中。原创 2024-02-03 01:58:12 · 864 阅读 · 1 评论 -
算法学习笔记(二维差分)
前置:在之前一维差分的文章中,我们知道差分是前缀和的逆运算,二维差分也自然是二维前缀和的逆运算。也就是说,差分的计算公式其实与用前缀和求区间长度为1的区间和的计算公式其实是一样的。prer−prel−1prer−prer−1ardiffiai−ai−1两者确实是一样的。那么根据差分是前缀和逆运算的性质,我们就可以根据二维前缀和求矩阵内元素和的计算公式倒推出二维差分的计算公式:prex2y2−prex2y1−。原创 2024-03-07 01:44:02 · 1783 阅读 · 0 评论 -
算法学习笔记(差分)
有点懒了,麻烦各位读者配合以下链接食用https://zhuanlan.zhihu.com/p/685151795原创 2024-03-04 13:46:58 · 312 阅读 · 1 评论 -
算法学习笔记(二维前缀和)
有点懒了,麻烦各位读者配合以下链接食用。原创 2024-03-05 23:20:26 · 370 阅读 · 1 评论 -
算法学习笔记(STL容器-priority_queue)
作为一个实用主义,此篇暂时不介绍堆的具体结构,只快速地帮助读者了解如何使用。priorityqueue:优先队列,是一种堆。priorityqueueintvectorintlessint>>qpriorityqueueintq因为优先队列默认为大根堆。对他操作时一般只在堆顶操作,因为堆顶有一个特性就是:堆顶是堆中最大的元素,也就是qtop是堆中最大的元素。priority。原创 2024-03-08 01:17:51 · 911 阅读 · 1 评论