十四 数学与经济管理之图论应用

349 阅读2分钟

本文已参与「掘力星计划」,赢取创作大礼包,挑战创作激励金。
小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

图论应用

最小生成树

有两种方法:普里姆算法和克鲁斯卡尔算法,实际计算建议采用克鲁斯卡尔算法。

  • 克鲁斯卡尔算法 将图中所有的边按权值从小到大排序,从权值最小的边开始选取,判断是否为安全边(即不构成环),直至选取了n-1条边,构成了最小生成树。 最小生成树并不唯一,但权值之和都相等且最小,只要求出一个就可以。

image.png

  • Kruskal算法 此算法可以称为“加边法”,初始最小生成树边数为0,每迭代一次就选择一条满足条件的最小代价边,加入到最小生成树的边集合里。
  1. 把图中的所有边按代价从小到大排序;
  2. 把图中的n个顶点看成独立的n棵树组成的森林; 
  3. 按权值从小到大选择边,所选的边连接的两个顶点ui,viui,vi,应属于两颗不同的树,则成为最小生成树的一条边,并将这两颗树合并作为一颗树。
  4. 重复(3),直到所有顶点都在一颗树内或者有n-1条边为止。

image.png

最短路径

  • 计算从起点到终点的最短路径,注意与关键路径截然相反,不要混淆。
  • 方法:从起点开始,依次向终点推导,每个经过的中间节点都直接计算出到该中间节点最短的路径,这样递归推导到终点,就是最短路径。

image.png 如上图,以A为开头,求A到各个点的最短距离 得到最终结果 {A(0),B(4),C(5),D(6),E(10),F(9),G(16)}

网络与最大流量

计算从一个节点到另一个节点的最大运输能力,取决于节点之间运输能力的短板:首先看有多少条路径可走,最大流量等于所有路径最大流量之和,而每条路径的最大流量是节点之间运输能力最小的流量决定的(短板决定)。

解题技巧:

  1. 取每条路径上的最小权值即为此条路径的最大流量,每次走完一条路径后,需要实时修改此条路径还剩下的运输流量值,若为0,则删掉此连线。
  2. 重复第1步,直至从起点到终点无路径连通,而后将每条路径上的流量相加得到整体最大流量。