图论算法
文章平均质量分 57
mengxiaozuo
计算机视觉 机器学习 模式识别 目标跟踪 图像处理 opencv
展开
-
Dijkstra算法
(单源最短路径,其边的权值为非负数),其定义为以固定的一个顶点作为源点,求源点到其他顶点的最短路径。一: 集合S表示已经加入最短路径的顶点,集合T则表示未加入最短路径的顶点。 二: 为了求源点v0到各个顶点vi的最段短路径需要设置3个数组,即S[n],path[n],dist[n]; 1.S[n]:S[i]=0时表示vi为加入到集合转载 2015-03-24 08:48:13 · 456 阅读 · 0 评论 -
线性规划 整数规划 01规划
在数学中,线性规划(Linear Programming,简称LP)问题是目标函数和约束条件都是线性的最优化问题。线性规划是最优化问题中的重要领域之一。很多运筹学中的实际问题都可以用线性规划来表述。线性规划的某些特殊情况,例如网络流、多商品流量等问题,都被认为非常重要,并有大量对其算法的专门研究。很多其他种类的最优化问题算法都可以分拆成线性规划子问题,然后求得解。在历史上,由线性规划引申出转载 2015-03-11 21:56:31 · 31118 阅读 · 1 评论 -
最小生成树
在一给定的无向图 G = (V, E) 中,(u, v) 代表连接顶点 u 与顶点 v 的边(即 ),而 w(u, v) 代表此边的权重,若存在 T 为 E 的子集(即 )且为无循环图,使得的 w(T) 最小,则此 T 为 G 的最小生成树。最小生成树其实是最小权重生成树的简称。以有线电视电缆的架设为例,若只能沿着街道布线,则以街道为边,而路口为顶点,其中必转载 2015-03-11 21:39:32 · 488 阅读 · 0 评论 -
二分图
二分图又称双分图、二部图、偶图,指顶点可以分成两个不相交的集和( ( and 皆为独立集independent sets),使得在同一个集内的顶点不相邻(没有共同边)的图。二分图又称作二部图,是图论中的一种特殊模型。 设G=(V,E)是一个无向图,如果顶点V可分割为两个互不相交的子集(U,V),并且图中的每条边(i,j)所关联的两个顶点i和j分别属于这两个不同的顶点集(i in转载 2015-03-11 21:32:04 · 632 阅读 · 0 评论 -
在图论中,网络流(Network Flow)
在图论中,网络流(Network Flow)是指在一个每条边都有容量(Capacity)的有向图分配流,使一条边的流量不会超过它的容量。(边有附带容量的图称为网络。)一道流必须符合一个结点的进出的流量相同的限制,除非这是一个源点(Source)──有较多向外的流,或是一个汇点(Sink)──有较多向内的流。一个网络可以用来模拟道路系统的交通量、管中的液体、电路中的电流或类似一些东西在一个结点(No转载 2015-03-11 20:26:55 · 6057 阅读 · 0 评论 -
Ford-Fulkerson Edmonds-Karp算法
在算法导论中对求解最大流问题给出了一般性的解决方法,但并没有涉及到具体的实现。在这里我还是重新的对求解最大流的思想进行一般性的描述,然后再给出具体的实现。 Ford-Fulkerson方法依赖于三种重要思想,这三个思想就是在上一篇网络流基础中提到的:残留网络,增广路径和割。Ford-Fulkerson方法是一种迭代的方法。开始时,对所有的u,v∈V有f(u,v)=0,即初始状态时转载 2015-03-11 10:54:38 · 640 阅读 · 0 评论 -
二分图最大匹配的经典匈牙利算法
二分图最大匹配的经典匈牙利算法是由Edmonds在1965年提出的,算法的核心就是根据一个初始匹配不停的找增广路,直到没有增广路为止。匈牙利算法的本质实际上和基于增广路特性的最大流算法还是相似的,只需要注意两点:(一)每个X节点都最多做一次增广路的起点;(二)如果一个Y节点已经匹配了,那么增广路到这儿的时候唯一的路径是走到Y节点的匹配点(可以回忆最大流算法中的后向边,这个时候后向边是可转载 2015-03-10 20:49:56 · 447 阅读 · 0 评论 -
距离矩阵
在数学中, 一个距离矩阵是一个包含一组点两两之间距离的矩阵(即 二维数组)。因此给定N个欧几里得空间中的点,其距离矩阵就是一个非负实数作为元素的N×N的对称矩阵。这些点两两之间点对的数量,N×(N-1)/2,也就是距离矩阵中独立元素的数量。距离矩阵和邻接矩阵概念相似,其区别在于后者仅包含元素(点)之间是否互相连通,并没有包含元素(点)之间的连通的成本或者距离。因此,距离矩阵可以看成是邻接矩阵的转载 2015-03-12 09:17:21 · 8384 阅读 · 0 评论 -
最短路径
最短路径问题是图论研究中的一个经典算法问题,旨在寻找图(由结点和路径组成的)中两结点之间的最短路径。算法具体的形式包括:确定起点的最短路径问题 - 即已知起始结点,求最短路径的问题。适合使用Dijkstra算法。确定终点的最短路径问题 - 与确定起点的问题相反,该问题是已知终结结点,求最短路径的问题。在无向图中该问题与确定起点的问题完全等同,在有向图中该问题等同于把所有路径方向反转的确定起转载 2015-03-11 21:39:36 · 521 阅读 · 0 评论 -
Dynamic programming
以前在学习非数值算法的时候,曾经了解过动态规划算法(Dynamic programming),以下是对Wikipedia上动态规划的翻译,图也是Wikipedia上的,仓促行文,不到之处,请方家指正。这篇文章的术语实在是太多了,所以我在文中加入了少量注释,一律以粗斜体注明。本文的不足之处将随时修正,MIT的《Introduction to Algorithms》第15章是专门讲动态转载 2015-03-11 20:30:40 · 585 阅读 · 0 评论 -
Bellman-Ford 算法及其优化
Bellman-Ford算法与另一个非常著名的Dijkstra算法一样,用于求解单源点最短路径问题。Bellman-ford算法除了可求解边权均非负的问题外,还可以解决存在负权边的问题(意义是什么,好好思考),而Dijkstra算法只能处理边权非负的问题,因此 Bellman-Ford算法的适用面要广泛一些。但是,原始的Bellman-Ford算法时间复杂度为 O(VE),比Dijkstra算法的转载 2015-03-10 19:14:28 · 730 阅读 · 0 评论 -
任务分配问题
详述[编辑]分为以下几类:线性任务分配问题:是二元组的集合,其中和分别是集合和中的元素。是某一函数,并满足特定约束条件,例如:的每一个元素必须在中出现一次,或者的每一个元素必须在中出现一次,或者以上二者都必须满足。线性任务分配问题的目标就是最大化或者最小化之和。该问题是线性的因为代价函数只取决于特定的二元组而与其它的二元组没有任何关系。二次任务分配问题:给定家工厂和转载 2015-03-11 21:29:48 · 2082 阅读 · 0 评论 -
二分图匹配----基于匈牙利算法和KM算法
设G=(V,{R})是一个无向图。如顶点集V可分割为两个互不相交的子集,并且图中每条边依附的两个顶点都分属两个不同的子集。则称图G为二分图。 v 给定一个二分图G,在G的一个子图M中,M的边集{E}中的任意两条边都不依附于同一个顶点,则称M是一个匹配。v 选择这样的边数最大的子集称为图的最大匹配问题(maximal matching problem)v转载 2015-03-24 09:16:39 · 618 阅读 · 0 评论 -
二分图的最佳匹配(KM 算法)
找了标程研究了一下,修改成自己的风格了,贴上来。 引用:KM算法是通过给每个顶点一个标号(叫做顶标)来把求最大权匹配的问题转化为求完备匹配的问题的。设顶点Xi的顶标为A[i],顶点Yi的顶标为B [i],顶点Xi与Yj之间的边权为w[i,j]。在算法执行过程中的任一时刻,对于任一条边(i,j),A[i]+B[j]>=w[i,j]始终 成立。KM算法的正确性基于以下定理: 若由转载 2015-03-24 09:08:14 · 540 阅读 · 0 评论 -
Dijkstra算法详解:
在解决单源点最短路径的问题时,常常用到经典的Dijkstra算法,其算法的本质思想是: 按路径长度递增依次产生最短路径。下面给出算法的大致流程:1.初始化所有结点并将起始点设为标记,进入以下循环2.在到达某点的最短路径中找最小且未标记的点(可以用一维数组表示) 如:数组下标:0 1 2 3 4 5 Le转载 2015-03-24 08:49:21 · 557 阅读 · 0 评论 -
简单的实现了Dijkstra,
简单的实现了Dijkstra,不考虑效率问题。注释:V表示图的顶点集合,S表示从源节点到集合中的顶点的最终最短路径已经确定的点的集合Dijkstra算法的精髓就是1)初始的时候源节点s到其他所有节点的距离都是无穷大。2)将源节点加入到集合S,然后又该源节点发射出去所有边中,也就是所有能达到的节点,修改源节点s到这些节点的距离(这个就是算法的核心Relax操作)。转载 2015-03-24 08:48:51 · 476 阅读 · 0 评论 -
1 最短路径算法
在日常生活中,我们如果需要常常往返A地区和B地区之间,我们最希望知道的可能是从A地区到B地区间的众多路径中,那一条路径的路途最短。最短路径问题是图论研究中的一个经典算法问题,旨在寻找图(由结点和路径组成的)中两结点之间的最短路径。 算法具体的形式包括:(1)确定起点的最短路径问题:即已知起始结点,求最短路径的问题。(2)确定终点的最短路径问题:与确定起点的问题相反,该问题是已知终结转载 2015-03-24 08:54:36 · 838 阅读 · 0 评论 -
Delaunay三角剖分算法
点集的三角剖分(Triangulation),对数值分析(比如有限元分析)以及图形学来说,都是极为重要的一项预处理技术。尤其是Delaunay三角剖分,由于其独特性,关于点集的很多种几何图都和Delaunay三角剖分相关,如Voronoi图,EMST树,Gabriel图等。Delaunay三角剖分有最大化最小角,“最接近于规则化的“的三角网和唯一性(任意四点不能共圆)两个特点。转载 2015-03-18 21:53:04 · 2305 阅读 · 1 评论 -
最优化
主要研究以下形式的问题:给定一个函数,寻找一个元素使得对于所有中的,(最小化);或者(最大化)。这类定式有时还称为“数学规划”(譬如,线性规划)。许多现实和理论问题都可以建模成这样的一般性框架。典型的,一般为欧几里得空间中的子集,通常由一个必须满足的约束等式或者不等式来规定。 的元素被称为是可行解。函数被称为目标函数,或者代价函数。一个最小化(或者最大化)目标函数的可行转载 2015-03-12 10:10:09 · 695 阅读 · 0 评论 -
图
在数学上,一个图(Graph)是表示物件与物件之间的关系的方法,是图论的基本研究对象。一个图看起来是由一些小圆点(称为顶点或结点)和连结这些圆点的直线或曲线(称为边)组成的。目录 [隐藏] 1 定义1.1 二元组的定义1.2 三元组的定义2 分类2.1 有/无 向图2.2 简单图2.3 多重图3 基本术语4 图的存储表示5 图的遍历转载 2015-03-12 09:23:24 · 941 阅读 · 0 评论 -
匹配 (图论)
在图论中,一个图是一个匹配(或称独立边集)是指这个图之中,任意两条边都没有公共的顶点。这时每个顶点都至多连出一条边,而每一条边都将一对顶点相匹配。严格定义[编辑]对于一个给定的图G = (V,E),这幅图的一个匹配M 是图G 的一个子图(由原来的图的一部分顶点和一部分边构成的图),其中每两条边都不相邻(没有公共顶点)。在匹配图中,一个顶点连出的边数至多是一条。如果这个顶点连出一条边转载 2015-03-11 21:32:50 · 10855 阅读 · 4 评论 -
Bellman-ford算法与Dijkstra算法(RIP和OSPF的基本算法)
这里讨论下RIP和OSPF的基本算法,在CISCO课程中讨论RIP和OSPF的区别有不少,但是回溯源头,它们理论算法里面的原理差不多,比较大的区别主要有三点1.Bellman-ford的链路距离是估算的,Dijkstra是传输链路距离给邻居的。PS:这就说明了为什么RIP要采用跳数,而OSPF用的是cost,也就是带宽作为主要参数,因为估计在具体实现中是不大可行的,故采用不同的具体度量值。转载 2015-03-10 19:17:03 · 5990 阅读 · 0 评论 -
图论术语
基本术语[编辑]一个图(一般记作 )由两类元素构成,分别称为“顶点”(或节点、结点)和“边”。每条边有两个顶点作为其端点,我们称这条边“连接”了它的两个端点。因此,边可定义为由两个顶点构成的集合(在有向图中为有序对,见下文“方向”一节)。图也可以用其他模型来表示,如定义在顶点集合上的二元布尔函数,或者方形(0,1)-矩阵。一个顶点一般表示为一个点或小圆圈。一个图 的顶点转载 2015-03-12 09:28:57 · 8338 阅读 · 0 评论 -
最大流模板(Edmonds-Karp)
最近在看网络流,看了算法导论不是很懂。。不知道书里那个图是不是错了,搞得我有点混乱;然后就从网上查下资料,翻了几个大神的博客,就搞懂了个大概是怎么回事;网络流里有很多算法,因为是入门,所以就写了个EK(Edmonds-Karp)求最大流的算法,顺便做了个模板题;写的时候还行,大概思路没什么问题,就是实现的时候有点小错误,下面是本人学习中的一些理解:Edm转载 2015-03-11 10:52:13 · 534 阅读 · 0 评论 -
【算法导论】0-1背包问题 与 部分背包
【0-1背包】 问题描述:n件物品,第i件物品价值 v[i] 元,重w[i] 磅。希望用 W磅的书包 拿走总价值最贵的物品。(物品不可以分割故称为0-1背包)【部分背包】问题描述:n件物品,第i件物品价值 vi 元,重wi 磅。希望用 W磅的背包 拿走最重的物品。第i件物品可以都拿走,也可以拿走一部分。(物品可以分割所以称为部分背包) 注意:0-1背包不能用贪心算转载 2015-03-10 10:38:27 · 1062 阅读 · 0 评论 -
最短路径算法详细介绍
据 Drew 所知最短路经算法现在重要的应用有计算机网络路由算法,机器人探路,交通路线导航,人工智能,游戏设计等等。美国火星探测器核心的寻路算法就是采用的D*(D Star)算法。 最短路经计算分静态最短路计算和动态最短路计算。 静态路径最短路径算法是外界环境不变,计算最短路径。主要有Dijkstra算法,A*(A Star)算法。 动态路径最短路是外界转载 2015-03-10 16:17:26 · 3250 阅读 · 0 评论 -
最小生成树算法(Prim和Kruskal)
无向连通图的最小生成树 设G=(V,E)是一个无向连通图,生成树上各边的权值之和称为该生成树的代价,在G的所有生成树中,代价最小的生成树即为其最小生成树。Prim(普里姆)算法的基本思想是: 设 G=(V,E) 是一个无向连通图,令T=(U,TE) 是 G 的最小生成树。T的初始状态为 U={v0}(v0∈V),TE={},然后重复执行下述操转载 2015-03-10 16:44:12 · 645 阅读 · 0 评论 -
最短路径算法比较
用于解决最短路径问题的算法被称做“最短路径算法”,有时被简称作“路径算法”。最常用的路径算法有:Dijkstra算法、A*算法、SPFA算法、Bellman-Ford算法和Floyd-Warshall算法,本文主要介绍其中的三种。最短路径问题是图论研究中的一个经典算法问题,旨在寻找图(由结点和路径组成的)中两结点之间的最短路径。算法具体的形式包括:确定起点的最短路径问题转载 2015-03-17 16:49:14 · 484 阅读 · 0 评论 -
spfa
适用范围:给定的图存在负权边,这时类似Dijkstra等算法便没有了用武之地,而Bellman-Ford算法的复杂度又过高,SPFA算法便派上用场了。 我们约定有向加权图G不存在负权回路,即最短路径一定存在。当然,我们可以在执行该算法前做一次拓扑排序,以判断是否存在负权回路,但这不是我们讨论的重点。算法思想:我们用数组d记录每个结点的最短路径估计值,用邻接表来存储图G。我们采取的方法是转载 2015-03-16 19:25:19 · 361 阅读 · 0 评论 -
计算复杂性理论
计算复杂性理论所研究的资源中最常见的是时间(要通过多少步演算才能解决问题)和空间(在解决问题时需要多少内存)。其他资源亦可考虑,例如在并行计算中,需要多少并行处理器才能解决问题。时间复杂度是指在计算机科学与工程领域完成一个算法所需要的时间,是衡量一个算法优劣的重要参数。时间复杂度越小,说明该算法效率越高,则该算法越有价值。空间复杂度是指计算机科学领域完成一个算法所需要占用的存储空间转载 2015-03-16 19:28:58 · 2612 阅读 · 0 评论 -
spfa
SPFA(Shortest Path Faster Algorithm)是Bellman-Ford算法的一种队列实现,减少了不必要的冗余计算。算法大致流程是用一个队列来进行维护。 初始时将源加入队列。 每次从队列中取出一个元素,并对所有与他相邻的点进行松弛,若某个相邻的点松弛成功,则将其入队。 直到队列为空时算法结束。这个算法,简单的说就是队列优化的bellman-ford,利用了转载 2015-03-16 19:24:37 · 476 阅读 · 0 评论 -
0/1背包问题的动态规划法
背包问题: 在M件物品取出若干件放在空间为W的背包里,每件物品的重量为W1,W·2……Wn,与之相对应的价值为P1,P2……Pn。求出获得最大价值的方案。注意:在本题中,所有的重量值均为整数。[算法分析]: 对于背包问题,通常的处理方法是搜索。 用递归来完成搜索,算法设计如下:function make( i {处理到第i件物品} , j{剩余的空间为j}:in转载 2015-03-10 10:27:18 · 653 阅读 · 0 评论 -
最大后验(英文为Maximum a posteriori,
在统计学中,最大后验(英文为Maximum a posteriori,缩写为MAP)估计方法根据经验数据获得对难以观察的量的点估计。它与最大似然估计中的 Fisher 方法有密切关系,但是它使用了一个增大的优化目标,这种方法将被估计量的先验分布融合到其中。所以最大后验估计可以看作是规则化(regularization)的最大似然估计。假设我们需要根据观察数据 x 估计没有观察到的总体参数转载 2015-03-10 09:37:15 · 1244 阅读 · 0 评论 -
Edmonds-Karp算法
基础的最大流算法,每次Bfs寻找最短路进行增广,这时候的增广和匈牙利算法的增广不同,找出一条残余路径就可以了。然后对残余网络进行增广,不要忘记正向增广,相当于负向减少,也要在图中保存记录。最后求一个割集来得到最大流。 最大流模型:点:对点来说要求是进多少出多少边:对边要求是不能超过最大容量,所以c的值为所有的残余边中的最小值 效率转载 2015-03-11 10:49:44 · 749 阅读 · 0 评论 -
用匈牙利算法求二分图的最大匹配
什么是二分图,什么是二分图的最大匹配,这些定义我就不讲了,网上随便都找得到。二分图的最大匹配有两种求法,第一种是最大流(我在此假设读者已有网络流的知识);第二种就是我现在要讲的匈牙利算法。这个算法说白了就是最大流的算法,但是它跟据二分图匹配这个问题的特点,把最大流算法做了简化,提高了效率。匈牙利算法其实很简单,但是网上搜不到什么说得清楚的文章。所以我决定要写一下。最大流算法的核心问题就是找增广转载 2015-03-10 20:56:46 · 454 阅读 · 0 评论 -
Poj1469_匈牙利算法_最大二分匹配
这道题是一个基本的匈牙利算法,求最大二分匹配。之前在算法导论中学习网络流,明白了网络流中的残留网络,增光路和割,但是去模拟书上的伪代码感觉很是费力。就打算从最基本的匈牙利算法做起。下面先介绍一下匈牙利算法:该算法的核心就是寻找增广路径,它是一种用增广路径求二分图最大匹配的算法:匹配是边集的子集。设M是图G的一个匹配,需要掌握一下几个概念:1.M-交错路:M-转载 2015-03-10 19:17:43 · 608 阅读 · 0 评论 -
任务分配问题
任务分配问题是在加权二分图中寻找最大(或最小)加权匹配的问题。目录 [隐藏] 1 详述2 举例3 算法4 参看详述[编辑]分为以下几类:线性任务分配问题:是二元组的集合,其中和分别是集合和中的元素。是某一函数,并满足特定约束条件,例如:的每一个元素必须在中出现一次,或者的每一个元素必须在中出现一次,或者以上二者都必须满足。线转载 2015-03-11 21:32:29 · 4707 阅读 · 0 评论 -
网络流概念及相关算法介绍
一、引言如同我们可以把一个实际的道路地图抽象成一个有向图来计算两点之间的最短路径,我们也可以将一个有向图看作一个流网络来解决另一类型的问题。流网络比较适合用来模拟液体流经管道、电流在电路网络中的运动、信息网络中信息的传递等等类似的过程。二、网络流和最大流问题参看下图,给定一个有向图G=(V,E),把图中的边看作管道,每条边上有一个权值,表示该管道的流量上限。给定源点s和汇点t,现在转载 2015-03-10 20:51:27 · 783 阅读 · 0 评论 -
图论;单源最短路径;拓扑排序+松弛(有向无回路);Bellman-Ford(回路,负权回路)Dijkstra(无负权,可回路);可以用最小堆实现算法的优化;
首先了解松弛技术,即给每个顶点设置到源点的最短距离,设置前驱. 在有限次的对边的松弛之后,可以将所有顶点的前驱与单源最短距离确定. 拓扑排序: 图的深度优先遍历的应用,对一个图进行深度优先的最后将该顶点头插到线性表中,那么线性表中只有自左至右的边,有边的两个的顶点的运行顺序一定是从左至右的,没有边相连的则无所谓. 这就给出了一个线性排序,它能够确定事情发展的先后次序. 从图上转载 2015-03-10 17:14:25 · 1191 阅读 · 0 评论 -
Bellman-ford算法
Bellman-ford算法是求含负权图的单源最短路径算法,效率很低,但代码很容易写。即进行不停地松弛(原文是这么写的,为什么要叫松弛,争议很大),每次松弛把每条边都更新一下,若n-1次松弛后还能更新,则说明图中有负环,无法得出结果,否则就成功完成。Bellman-ford算法有一个小优化:每次松弛先设一个旗帜flag,初值为FALSE,若有边更新则赋值为TRUE,最终如果还是FALSE则直接成功转载 2015-03-10 17:11:52 · 457 阅读 · 0 评论