这篇文章讲一下图的一些应用。
一、最小连通代价问题
二、最短路径问题
三、有向图在工程中的应用(AOV网络、AOE网络)
一、最小连通代价问题
无向连通图的生成树有很多,如果图的边具有权值,那么各个生成树的边的权值之和大小就不同。在所有生成树中,权值之和最小的一棵成为最小生成树。
1.最小生成树:假设图是一个加权连通图,具有最小权值之和的生成树称为最小代价生成树。Minimum Cost Spanning Tree (MST)
举一个例子:假设有一个网络,用以表示n个城市之间假设通信线路,边上的权值代表架设通信线路的成本。如何架设才能使线路架设成本达到最小?
这个问题的答案:
2.MST性质:假设 G=(V,E) 是加权连通图,U是V的非空子集, 若(u0, v0)是一条最小权值的边,其中u0∈U,v0∈V-U;则: (u0, v0)必在最小生成树上。 (这里给大家说一下,所谓最小权值的边,我认为是与u0相连的所有带权值边中权值最小的边,而不是所有带权值边中权值最小的边(也可能理解的不对,有不对的地方还请大家批评指正))
3.最小生成树的构造方法
有多种算法,最常用的是以下两种:Kruskal(克鲁斯卡尔)算法——边归并 、Prim(普里姆)算法 ——顶点归并。
这两种方法都是采用的贪心策略,都是基于MST性质的。
贪心准则:选两个顶点不在同一连通分量上的边中权值最小的。
(1)克鲁斯卡尔(Kruskal)方法:
设 N= { V , E}是有n 个顶点的连通网,
步骤:
①首先构造一个只有n个顶点但没有边的非连通图T={V,∅},图中每个顶点自成一个连通分量;
②在边集E中选择具有最小权值的边,若该边的两个顶点落在T中不同的连通分量上,则将此边加入到生成树的边集合T 中;否则将此边舍去,重新选择一条权值最小的边;
③如此重复下去,直到所有顶点在同一个连通分量上为止。 此时的T即为所求(最小生成树)。
举例:
右图中边的权值由小到大代表该边被选择的顺序(如权值为2的边,代表该边是第二个被选择的边)。
(2)普利姆(Prim)方法:
设:N =(V , E)是个连通网, 另设U为最小生成树的顶点集,TE为最小生成树的边集。
步骤:
①初始状态:令U={u0},u0∈V,TE={},T={V,TE};
②在所有u∈U,v∈V-U的边(u,v)中找一条权值最小的(u',v'),(u',v')并入TE,即TE=TE∪{(u′,v′)},v′并入U,即U=U∪{v′};
③ 重复第二步,直到U=V为止。此时TE中必有n-1条边, T=(U,TE)就是最小生成树。
举例:
二、最短路径问题
在现实中,有时要从甲地到乙地,有两种型录的方案: