---------图论----------
黎曼猜想·
剑之所至,心之所往~
展开
-
Kruskal算法(最小生成树)
克鲁斯卡尔(Kruskal)算法是实现图的最小生成树最常用的算法。克鲁斯卡尔算法是一种用来寻找最小生成树的算法。在剩下的所有未选取的边中,找最小边,如果和已选取的边构成回路,则放弃,选取次小边。通常认为克鲁斯卡尔算法时间复杂度为O(elog2e). (2为log的下标)克鲁斯卡尔算法是一种按权值的递增次序选择合适的边来构造最小生成树的方法。假设G=(V,E)是一个具有n个顶点的带权原创 2017-11-10 16:52:35 · 739 阅读 · 0 评论 -
Prim算法(最小生成树)
普里姆算法(Prim算法),图论中的一种算法,可在加权连通图里搜索最小生成树。意即由此算法搜索到的边子集所构成的树中,不但包括了连通图里的所有顶点(英语:Vertex (graph theory)),且其所有边的权值之和亦为最小。该算法于1930年由捷克数学家沃伊捷赫·亚尔尼克(英语:Vojtěch Jarník)发现;并在1957年由美国计算机科学家罗伯特·普里姆(英语:Robert C.原创 2017-11-10 13:17:20 · 2106 阅读 · 0 评论 -
Dijkstra算法(一个节点到其他所有节点的最短路径)
Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。Dijkstra算法是很有代表性的最短路径算法,在很多专业课程中都作为基本内容有详细的介绍,如数据结构,图论,运筹学等等。注意该算法要求图中不存在负权边。问题描述:在无向图 G=(V,E) 中,假设每条边 E[i] 的长度为 w[i],...原创 2017-11-09 20:51:17 · 12582 阅读 · 0 评论 -
图的两种存储结构及其互相转换
图的存储结构除了要存储 图中各个顶点本身的信息,还要存储边的信息。常见的图的存储结构有邻接矩阵和邻接表。邻接矩阵是表示顶点之间相邻关系的矩阵。图的邻接矩阵是唯一的,适于存储边的数目较多的稠密图。无向图的邻接矩阵一定是一个对称矩阵,可采用压缩存储的思想,只存储上(下)三角形阵的元素即可。不带权的有向图的邻接矩阵一般是一个稀疏矩阵。局限性:要确定图中有多少条边,必须按行,按列对每个元素原创 2017-11-11 10:36:17 · 7951 阅读 · 0 评论 -
图的遍历(DFS和BFS)
根据搜索方法的不同,图的遍历方法有两种:深度优先遍历(DFS)和广度优先遍历(BFS)深度优先遍历(Depth-First Traversal)假设给定图G的初态是所有顶点均未曾访问过。在G中任选一顶点v为初始出发点(源点),则深度优先遍历可定义如下:首先访问出发点v,并将其标记为已访问过;然后依次从v出发搜索v的每个邻接点w。若w未曾访问过,则以w为新的出发点继续进行深度优先原创 2017-11-11 11:13:26 · 1081 阅读 · 0 评论 -
Bellman-Ford算法(求最短路径,并检测负权回路)
Bellman - ford(贝尔曼-福特)算法是求含负权图的单源最短路径的一种算法,效率较低,代码难度较小。其原理为连续进行松弛,在每次松弛时把每条边都更新一下,若在n-1次松弛后还能更新,则说明图中有负环,因此无法得出结果,否则就完成。算法时间复杂度O(VE)。因为算法简单,适用范围又广,虽然复杂度稍高,仍不失为一个很实用的算法。(百度百科)网上关于这个算法的讲解文章比较多,总原创 2017-11-11 13:16:41 · 2527 阅读 · 2 评论 -
SPFA算法 (基于Bellman-Ford算法)
SPFA(Shortest Path Faster Algorithm)(队列优化)算法是求单源最短路径的一种算法,它还有一个重要的功能是判负环(在差分约束系统中会得以体现),在Bellman-ford算法的基础上加上一个队列优化,减少了冗余的松弛操作,是一种高效的最短路算法。(百度百科)SPFA算法由Fanding Duan于1994年在西南交通大学学报上发表。算法思想:设立一个原创 2017-11-18 10:30:27 · 576 阅读 · 0 评论 -
topological-sort(拓扑排序)
在图论中,拓扑排序(Topological Sorting)是一个有向无环图(DAG, Directed Acyclic Graph)的所有顶点的线性序列。且该序列必须满足下面两个条件:每个顶点出现且只出现一次。若存在一条从顶点 A 到顶点 B 的路径,那么在序列中顶点 A 出现在顶点 B 的前面。有向无环图(DAG)才有拓扑排序,非DAG图没有拓扑排序一说。对一个有向原创 2017-11-14 16:05:44 · 1255 阅读 · 0 评论 -
Floyd算法(任意两点间的最短路径)
Floyd(弗洛伊德)算法是解决任意两点间的最短路径的一种算法,可以正确处理有向图或负权的最短路径问题,同时也被用于计算有向图的传递闭包。Floyd算法的时间复杂度为O(N3),空间复杂度为O(N2)。算法思想: Floyd算法是一个经典的动态规划算法。用通俗的语言来描述的话,首先我们的目标是寻找从点i到点j的最短路径。从动态规划的角度看问题,我们需要为这个目标重新做一个诠原创 2017-11-10 11:42:14 · 22528 阅读 · 3 评论