![](https://img-blog.csdnimg.cn/20210209135042160.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
一文系列
文章平均质量分 68
介绍一些经典的算法
阿飞算法
这个作者很懒,什么都没留下…
展开
-
数据结构设计之线段树[White Rhinoceros]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-690ChcrN-1652613175233)(https://pic.leetcode-cn.com/1598177709-RslKQm-timg%20(2)].jpg)方法0:种子上图中right修改成 right=2*node+2下面为在做queryTreequeryTreequeryTree时做加速 if (start >= L && end <= R) return tree[原创 2022-05-15 19:15:44 · 129 阅读 · 0 评论 -
一文掌握树状数组
定义树状数组或二叉索引树(英语:Binary Indexed Tree),又以其发明者命名为Fenwick树,最早由Peter M. Fenwick于1994年以A New Data Structure for Cumulative Frequency Tables为题发表在SOFTWARE PRACTICE AND EXPERIENCE。其初衷是解决数据压缩里的累积频率(Cumulative Frequency)的计算问题,现多用于高效计算数列的前缀和, 区间和。原码,反码,补码的产生过程,就..原创 2022-05-15 19:10:09 · 130 阅读 · 0 评论 -
一文掌握Kruskal算法
一文掌握Kruskal算法Union-Find class UnionFind { int[] parents; int[] ranks; public UnionFind(int n) { parents = new int[n]; ranks = new int[n]; for (int i = 0; i < n; i++) { par原创 2021-08-09 10:32:16 · 156 阅读 · 0 评论 -
一文掌握Bellman-Ford算法
一文掌握Bellman-Ford算法方法1:朴素版Bellman-Ford算法思想Bellman-Ford算法能在更普遍的情况下(存在负权边)解决单源点最短路径问题。对于给定的带权(有向或无向)图 G=(V,E),其源点为s,加权函数 w是 边集 E 的映射。对图G运行Bellman-Ford算法的结果是一个布尔值,表明图中是否存在着一个从源点s可达的负权回路。若不存在这样的回路,算法将给出从源点s到 图G的任意顶点v的最短路径d[v]。Bellman-Ford算法流程分为三个阶段:(1) 初原创 2021-08-09 10:31:12 · 1264 阅读 · 0 评论 -
一文掌握SPFA算法
一文掌握SPFA算法何为SPFA(Shortest Path Faster Algorithm)算法:**给定一个加权连通图,选取一个顶点,称为起点,求取起点到其它所有顶点之间的最短距离,其显著特点是可以求含负权图的单源最短路径,且效率较高。(**spfa是求单源最短路径的一种算法,它还有一个重要的功能是判负环(在差分约束系统中会得以体现),在Bellman-ford算法的基础上加上一个队列优化,减少了冗余的松弛操作,是一种高效的最短路算法。)**spfa算法思想:**spfa就是BellmanFo原创 2021-08-09 10:30:25 · 254 阅读 · 0 评论 -
一文掌握Prim算法
一文掌握Prim算法思路PrimPrimPrim 算法是依据顶点来生成的,它的每一步都会为一颗生长中的树添加一条边,一开始这棵树只有一个顶点,然后会添加 N−1N - 1N−1 条边,每次都是将下一条连接树中的顶点与不在树中的顶点且权重最小的边加入到树中。算法流程:记录每个顶点到其他顶点的权重;设计一个boolean[]boolean[]boolean[],判断是否被读取过;每次读取堆顶元素,如果曾经被读取过就不再读取,否则把其所有边加入堆; static class Pair {原创 2021-08-09 10:29:46 · 188 阅读 · 0 评论 -
一文掌握Floyd算法
一文掌握Floyd算法结构体typedef struct struct_graph{ char vexs[MAXN]; int vexnum;//顶点数 int edgnum;//边数 int matirx[MAXN][MAXN];//邻接矩阵 } Graph;伪代码//这里是弗洛伊德算法的核心部分 //k为中间点 for(k = 0; k < G.vexnum; k++){ //v为起点 for(v原创 2021-08-09 09:20:52 · 130 阅读 · 0 评论 -
一文掌握Dijkstra算法
一文掌握Dijkstra算法迪杰斯特拉(Dijkstra)算法是典型最短路径算法,用于计算一个节点到其他节点的最短路径。它的主要特点是以起始点为中心向外层层扩展(广度优先搜索思想),直到扩展到终点为止。基本思想通过Dijkstra计算图G中的最短路径时,需要指定起点s(即从顶点s开始计算)。此外,引进两个集合S和U。S的作用是记录已求出最短路径的顶点(以及相应的最短路径长度),而U则是记录还未求出最短路径的顶点(以及该顶点到起点s的距离)。初始时,S中只有起点s;U中是除s之外的顶点,并原创 2021-08-08 18:03:28 · 217 阅读 · 0 评论 -
一文掌握并查集算法
欢迎阅读、点赞、转发、订阅,你的举手之间,我的动力源泉。{:width=“400px”}定义并查集,在一些有N个元素的集合应用问题中,我们通常是在开始时让每个元素构成一个单元素的集合,然后按一定顺序将属于同一组的元素所在的集合合并,其间要反复查找一个元素在哪个集合中。这一类问题近几年来反复出现在信息学的国际国内赛题中,其特点是看似并不复杂,但数据量极大,若用正常的数据结构来描述的话,往往在空间上过大,计算机无法承受;即使在空间上勉强通过,运行的时间复杂度也极高,根本就不可能在比赛规定的运行时间(.原创 2021-08-06 09:56:49 · 286 阅读 · 0 评论 -
一文掌握Fleury算法
一些概念:割点在一个无向图中,如果有一个顶点集合,删除这个顶点集合以及这个集合中所有顶点相关联的边以后,图的连通分量增多,就称这个点集为割点集合,如果某个割点集合只含有一个顶点 X(也即{X}是一个割点集合),那么X称为一个割点割边在一个无向图中,如果有一个边集合,删除这个边集合以后,图的连通分量增多,就称这个边集为割边集合,如果某个割边集合只含有一条边 X(也即{X}是一个边集合),那么X称为一个割边,也叫做桥步骤1.如果要找欧拉回路,可以从任意点开始,如果要找欧拉路径,需要从有着奇数度的原创 2021-02-09 09:14:57 · 2929 阅读 · 1 评论 -
一文掌握Hierholzer算法
Hierholzer算法的精髓是当每次访问一条边的时候,删除这条边,当遍历完一个节点所连的所有节点后,才将该节点入栈,最后将栈中的节点反转,即可得到欧拉路径 public void printCircuit(List<List<Integer>> adj) { //edgeCount记录记录有向图的边的条数,从当前节点v出发 Map<Integer, Integer> edgeCount = new HashMap<&g.原创 2021-02-08 21:28:56 · 1413 阅读 · 0 评论