运筹说 第81期 | 图与网络分析经典例题讲解

news2024/10/5 22:24:55

通过前几期的学习,我们已经学会了图与网络分析的相关概念和基本方法的原理,并且掌握了图与网络分析相关模型的建立和具体的求解方法,本期小编带大家学习图与网络分析在经济管理中的应用

在实际工作中,我们能发现图与网络分析在经济管理中有着许多应用,本期小编选择了其中一些典型例子,包括最小树问题最短路问题最大流问题最小费用最大流,进行详细讲解。

01最小树问题

接下来我们先从经典的最小树问题开始讲起。

在现实生活中,最小生成树最优二叉树有很高的实用价值。正确地理解掌握如何构造连通图的最小生成树问题以及最优二叉树问题,将会给我们带来巨大的经济效益社会效益。随着最小生成树理论与算法的发展与完善,其在现实生活中的应用越来越广泛。本次小编选取了两道例题,包括经济学应用中具有代表性的最小投资问题以及数据通信问题,来为大家进行详细讲解。

例1、最小生成树问题

问题描述

发展轨道交通是解决城市内和城际间人员流动量大与交通设施运载力不足之间矛盾的主要途径,规划建设城际间快速轨道交通已经成为经济发展的迫切需要。某省份决定在包含9座城市的城市群内架设快速轨道交通干线,从最小投资角度出发,如何设计能连接城市群内所有城市的交通干线,并使得造价最低总道路长度最短

结合现实道路连通情况,对9座城市间交通道路图进行图论抽象,得到现实距离无向图如下图所示,不仅可以看到城市群所处的大致地理方位,亦可得知其间道路连通及其间距离的大致情况如下图所示。

问题解析

对于该城市群快速轨道交通干线问题,用小圆圈表示城市,用边表示城市之间联通道路,边上的权是用以表示两地间距离的公里数。网络的构成可采用点-点邻接关系来描述。边的权决定了路线选择的结果和最终轨道干线的投资。

利用第74期介绍的Kruskal算法对上图进行推算,最终可获得一条连通各城市、总路程最短(即投资最小)的交通干线,符合节约费用的原则。该算法的实质推论过程是:在无向图中,按照边的权值从小到大依次进行排序,从而获得边的权值递增序列,进而在图中依次递增序列选择边的集合。如果新选择的边与已经确认的边构成了回路(即首尾相连的环形边序列),则放弃该边,继续选择权递增的边序列中的下一条边,直到序列中的最后一条边。

问题求解

(1)首先选择权最小的边。从图中可知,DK,KL,GH的权均为55,从中任选一条均可。此处我们选择KL作为第一条边。

(2)接着再从除去边KL的其余边中选择权最小且不构成回路的第二条边。DK,GH权均为55,可从中任选一条。此处我们选择DK作为第二条边。

(3)选择HG作为第三条边。

(4)除去KL,DK,GH三条边后,可以继续选择权为60的边CU,UH和AB,它们均可满足权最小且不构成回路的条件。

(5)DL,GA的权均为65,如果选择边DL,那么DK,KL和DL将构成封闭的三角形回路,故舍弃边DL,选择边GA

(6)继续选择下一条边时也遇到构成回路的情况。边HA和GB的权为70,但如果选择它们必将产生回路,即:HG,GA,AH三角环回路或AG,AB,GB三角环回路。因此,不能选择此两边,必须选择不构成回路、但权稍大的其他边继续该算法。此处选择权为80的边AK

(7)此时继续算法将会全部产生回路,算法结束,图中粗线展示了根据算法求解最小生成树的过程。

得到最小生成树如下图所示:

例2、最优二叉树问题

下面小编带大家学习一下最优二叉树问题。先来看如下定义。

(1)节点的带权路径长度:从树根节点到某节点之间的路径长度与该节点上权值的乘积称为该节点的带权路径长度。

(2)树的带权路径长度(WPL):树中所有叶子节点的带权路径长度之和称为该树的带权路径长度。

最优二叉树又称霍夫曼树,它是n个带权叶子结点构成的所有二叉树中,带权路径长度WPL最小的二叉树。假设有n个权值,则构造出的霍夫曼树有n个叶子结点。n个权值分别设为w1,w2,…,wn,则霍夫曼树的构造规则为:

(1)将w1,w2,…,wn看成是有n棵树的森林(每棵树仅有一个结点);

(2)在森林中选出两个根结点的权值最小的树合并,作为一棵新树的左、右子树,且新树的根结点权值为其左、右子树根结点权值之和;

(3)从森林中删除选取的两棵树,并将新树加入森林;

(4)重复上面两步,直到森林中只剩一棵树为止,该树即为所求得的最优二叉树。

因此,霍夫曼树的特征有:

(1)越靠近根节点,权值越大;

(2)初始结点全是后来的叶子结点;

(3)叶子结点权值越大,离根节点越近(路径越短);

(4)如果把路径标上0和1,则每一个叶子结点有一个唯一编码(不定长)。

霍夫曼树的应用:霍夫曼编码

编码:在数据通信中,经常需要将传送的文字转换为二进制字符0、1组成的字符串,这个过程称为编码。

霍夫曼编码:需要编码的字符集合为{d1,d2,...,dn},各个字符在电文中出现的次数集合{w1,w2,...,wn},那么以d1,d2,...,dn作为叶子节点,以w1,w2,...,wn作为个节点的权值构造一颗霍夫曼树,一般规定霍夫曼树中左分支为0,右分支为1,则从根节点到叶节点所经过的分支对应的0和1序列就称为该节点对应字符的编码,这样的编码就是霍夫曼编码。

霍夫曼编码的优点在于能最大程度的节省空间

问题描述

一组字符{A,B,C,D,E,F,G}出现的频率分别是{9,11,5,7,8,2,3},设计最经济的编码方案并求出带权路径长度

问题求解

利用构造规则画出霍夫曼树:(不唯一,只要根结点是45就是对的)

将霍夫曼树所有的左子树标记为0,右子树标记为1(也可以左子树标1,右子树标0,霍夫曼编码和霍夫曼树不是唯一的,只要遵循一个统一的规定,就可以构建出霍夫曼编码),然后将所有的权值与字母对应起来。

相应的编码就是从根结点到相应位置的路径。

A对应的霍夫曼编码为00

B对应的霍夫曼编码为10

C对应的霍夫曼编码为010

D对应的霍夫曼编码为110

E对应的霍夫曼编码为111

F对应的霍夫曼编码为0110

G对应的霍夫曼编码为0111

WPL=9×2+11×2+5×3+7×3+8×3+2×4+3×4=120

带权路径长度为120

02最短路问题

最短路问题是在图的基础上衍生出来的,也是网络优化中的一个基本问题,广泛应用于计算机科学交通工程通信工程系统工程运筹学、信息论、控制理论等众多领域。本次小编选取一道公路网络运输中的最短路问题,运用第76期详细介绍的经典Dijkstra算法进行求解。

例3、最短路问题

问题描述

6v1,v2,...,v6城市之间的一个公路网如下图所示,每条公路为图中的边,边上的权数表示该段公路的长度(单位:百公里),假如小明处在城市v1,需要将某物品运送到所有的城市,那么从v1v6应选择哪一路径可以使小明的费用最省

问题求解

解法一:Dijkstra算法

首先设每百公里所用费用一样,求v1v6的费用最少,即v1v6的最短路线。为了方便计算,我们先作出该网络的距离矩阵,如下:

(1)设W(v1)=0,T(v)=∞,vj∈{v2,v3,v4,v5,v6}

(2)第一次迭代:

①计算T(vj)j=2,3,4,5,6如下:

②取minvj∈s-{T(vj)}=2=T(v3),令W(v3)=T(v3)=2

③由于k=3≠(n=6),令s-={v2,v4,v5,v6}i=3

第二次迭代:

①计算T(vj)j=2,4,5,6如下:

②取minvj∈s-{T(vj)}=3=T(v2),令W(v2)=T(v2)=3

③由于k=2≠(n=6),令s-={v4,v5,v6}i=2

第三次迭代:

①计算T(vj)j=4,5,6如下:

②取minvj∈s-{T(vj)}=8=T(v4),令W(v4)=T(v4)=8

③由于k=4≠(n=6),令s-={v5,v6}i=4

第四次迭代:

①计算T(vj)j=5,6如下:

②取minvj∈s-{T(vj)}=10=T(v5),令W(v5)=T(v5)=10

③由于k=5≠(n=6),令s-={v6}

第五次迭代:

①计算T(vj)j=6如下:

③由于k=6=n,因此已经找到v1v6的最短距离为12,计算结束

(3)找最短路线,逆向追踪得:

v1→v3→v2→v4→v5→v6

最短距离为2+1+5+2+2=12,即按上述路线从城市v1v6的距离最短,费用最省。

解法二:Floyd算法

某些问题中,要求网络上任意两点间的最短路。这类问题可以用Dijkstra算法依次改变起点的办法计算,但比较烦琐。这里介绍的Floyd方法来求解本例题,可直接求出网络中任意两点间的最短路,步骤如下

回到例题本身,由上图可得:

03最大流问题

最大流问题是一类应用极为广泛的问题,例如在交通运输网络中有人流、车流、货物流,供水网络中有水流,金融系统中有现金流,通信系统中有信息流等等。20世纪70年代福特(Ford)、富克逊(Fulkerson)建立的“网络流理论”,是网络应用的重要组成部分。本次小编选取一道电力公司供电问题中的最大流问题,运用第78期详细介绍的Ford-Fulkerson 标号算法进行求解。

例4、最大流问题

问题描述

某地的电力公司有三个发电站,它们负责5个城市的供电任务,其输电网络如下图所示。由图可知,城市8由于经济发展,要求供应电力65MW,三个发电站在满足城市4、5、6、7的用电需要量后,它们还分别剩余15MW,10MW和40MW,输电网络剩余的输电能力见下图节点上的数字。三个发电站在满足城市4、5、6用电量之后,剩余发电能力共有65MW,与城市8的用电需求量刚好相等。问题是输电网络的输电能力是否满足输电65MW的电力,如不满足,需要增建哪些输电线路

问题解析

根据上述对该问题的描述,可以转换成一个最大流的问题求解。图中的输电网络图有三个发点(即三个发电站),一个终点(城市8)。如果能求得从三个发点到终点的最大流,就知道输电网络的最大输电能力,也知道是哪些已饱和了的弧限制了输电能力的提高,从而可以据此确定应增建哪些输电线路。

问题求解

为了应用Ford-Fulkerson标号法求解上图所示的网络最大流,需要增设一个发点S,把网络图化为只有一个发点和一个终点的容量网络图,如下图所示。

应用Ford-Fulkerson标号法有如下表1所示的求解过程:

由上表可知最大流为55MW,最后的可行流见下图弧旁带括号的数值

结果分析

从上图可知,城市8用电需求量为65MW,而输电网络的最大输电量只有55MW,相差10MW。为了增输10MW,最好的方案是在饱和弧⑤→⑧(最小割集上的弧)上增建输送10MW的新线路,而把非饱和弧S→③、⑥→⑤各增加10MW使之饱和,最后扩建方案如下图所示。如在饱和弧⑦→⑧上增建10MW的新线路,则还须把弧③→⑦扩容10MW

04最小费用最大流问题

上一个例题求解的网络最大流问题只考虑了流的数量,没有考虑流的费用。在实际应用场景中,许多问题要考虑流的费用最小问题。本次小编选取一道天然气运输问题中的最小费用最大流问题,运用第80期详细介绍的方法进行求解。

例5

最小费用最大流问题

问题描述

中国石油天然气集团公司在东海有一个油气田(节点vs),该公司要将开采的天然气通过管道运送到上海的一个配送中心(节点vt),天然气在运送途中要经过管道更换接点(节点v2、v3、v4),换接前后的管道长短不一,而且不同的管道对应不同的单位流量费。下图是天然气运输的管道网络图,弧线表示管道,弧旁的数字(cij,dij)表示管道上的单位流量容量和费用。公司希望选择一个经济实惠的管道路线运输天然气,既运输最多的天然气又使总运输费用最少

问题求解

f(0)={0}开始,作L(f(0))如下图所示,用Dijkstra算法求得L(f(0))网络中的最短路为vs→v2→v3→vt,在网络G中相应的可增广链μ1={vs,v2,v3,vt}上用最大流算法进行调整:

结果见图

f(1)

L(f(1))如下图所示,由于边上有负权,所以求最短路不能用Dijkstra算法,可用逐次逼近法。最短路为vs→v3→vt,在网络G内相应的可增广链上进行调整,得流f(2),如下图所示。

W(f(2))=3,d(f(2))=2×1+2×2+3×1+1×3=12

L(f(2))如下图所示,与vs关联的弧指向vs不存在vsvt的最短路。故下图所示的f(2)为最小费用最大流。费用为:

W(f(2))=3,d(f(2))=2×1+2×2+3×1+1×3=12

以上就是本期图与网络分析例题讲解的全部内容啦,通过对这一期的学习,相信大家一定能够加深对图与网络分析的理解,进而在生活实践中学会应用!

作者 | 陈志昂 林鑫

责编 | 刘文志

审核 | 徐小峰

 ·YUNCHOUSHUO· 

·知乎|运筹说·

·简书|运筹说·

·CSDN|运筹说·

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1385790.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

分类预测 | Matlab实现ZOA-CNN-LSTM-Attention斑马优化卷积长短期记忆神经网络注意力机制的数据分类预测【24年新算法】

分类预测 | Matlab实现ZOA-CNN-LSTM-Attention斑马优化卷积长短期记忆神经网络注意力机制的数据分类预测【24年新算法】 目录 分类预测 | Matlab实现ZOA-CNN-LSTM-Attention斑马优化卷积长短期记忆神经网络注意力机制的数据分类预测【24年新算法】分类效果基本描述程序设计参考…

Grind75第10天 | 133.克隆图、994.腐烂的橘子、79.单词搜索

133.克隆图 题目链接:https://leetcode.com/problems/clone-graph 解法: 这个题是对无向图的遍历,可以用深度优先搜索和广度有限搜索。 下面这个图比较清楚的说明了两种方法的区别。 DFS:从A开始克隆,遍历两个邻居…

高级分布式系统-第14讲 分布式控制经典理论

模糊控制 模糊控制是一种以模糊集合论、模糊语言变量以及模糊逻辑推理为数学基础的控制方法,它模拟人的思维,构造一种非线性控制,以满足复杂的不确定的过程控制的需要,属于智能控制范畴。 由于模糊控制是对人的思维方式和控制经验…

yarn和npm修改源

前提:由于npm,yarn默认镜像源,访问很慢,需要切换到国内的镜像源 npm (1)查看npm源的当前地址 npm config get registry (2)设置淘宝镜像 npm config set registry https://reg…

《C++大学教程》4.25星号正方形

题目: //while循环实现int main() {int n;cout << "请输入边长&#xff1a;";cin >> n;int i 1; while (i < n){ // 控制行数int j 1;while (j < n){ // 控制列数if (i 1 || i n || j 1 || j n){cout << "*";}else{cout <…

python解决求最短路径、最短时间问题

对于一个求最短路径的经常遇到的问题&#xff0c;对于从某一个节点到其余全部节点所需要的最短时间的问题&#xff0c;可以使用广度优先搜索算法的思路来进行解决&#xff0c;这是一个广度优先搜索算法在二维空间的应用。 问题描述为给定一个节点总数为N和一个列表list&#x…

代码随想录 Leetcode454. 四数相加 II

题目&#xff1a; 代码 (首刷看解析 2024年1月15日&#xff09;&#xff1a; class Solution { public:int fourSumCount(vector<int>& nums1, vector<int>& nums2, vector<int>& nums3, vector<int>& nums4) {int n nums1.size();u…

浙江宁波象山县福利院部署清雷科技数字医养解决方案

“通过前台触屏电脑一体机&#xff0c;可以实时查看每位长者的生命体征情况&#xff0c;包括呼吸、心率、在离床状态、睡眠质量报告等&#xff0c;对呼吸异常、跌倒风险异常的长者还会特别标注提醒&#xff0c;不仅提高了照护人员的工作效率&#xff0c;还提升了对长者的安全保…

2719. 统计整数数目

给你两个数字字符串 num1 和 num2 &#xff0c;以及两个整数 max_sum 和 min_sum 。如果一个整数 x 满足以下条件&#xff0c;我们称它是一个好整数&#xff1a; num1 < x < num2min_sum < digit_sum(x) < max_sum. 请你返回好整数的数目。答案可能很大&#xff…

C语言关于指针函数可变参数的使用方法和打印相应数据

通过使用四个函数来实现 指针函数的可变参数操作&#xff1b; 四个函数分别为&#xff1a; #include <stdarg.h>va_list ap; //初始化 参数列表指针 va_start(ap, count); //将ap指针指向第一个参数COUNT 这个是必须存在的 否则无法定位到后面的参数 va_arg(a…

arrow,一个神奇的 Python 库!

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com 大家好&#xff0c;今天为大家分享一个神奇的 Python 库 - arrow。 Github地址&#xff1a;https://github.com/arrow-py/arrow 日期和时间处理是许多应用程序中的常见任务&#xff0c;但在 Python 中&#xf…

[Python进阶] Python操作MySQL数据库:pymysql

7.7 操作MySQL数据库&#xff1a;pymysql 7.7.1 准备工作(创建mysql数据库) PHPStudy介绍&#xff1a; phpstudy是一款非常有用的PHP开发工具&#xff0c;旨在帮助开发者更加便捷地进行PHP程序的开发与调试。它提供了一个友好的图形用户界面&#xff0c;使得用户能够方便地进…

Unity 编辑器篇|(五)编辑器拓展GUILayout类 (全面总结 | 建议收藏)

目录 1. 前言2. 参数3. 功能3.1 按钮&#xff1a;Button、RepeatButton3.2 文本&#xff1a;Label、TextArea、TextField、PasswordField3.3 工具栏&#xff1a;Toolbar3.4 切换框&#xff1a;Toggle3.5 滚动条&#xff1a;HorizontalScroll 、VerticalScroll3.6 滑条&#xff…

5G工业路由器专业版(视频监控专用5G路由器)

​大家好,今天给大家推荐一款强大的5G工业级路由器——SR510 5G工业级路由器系列产品。这款路由器集4G/5G网络、虚拟专网等多种技术于一体,提供稳定的工业级网络解决方案,非常适合部署在需要高速传输、低延时的视频监控场景中。 x更多详情&#xff1a;&#xff08;key-iot.com…

pytorch12:GPU加速模型训练

目录 1、CPU与GPU2、数据迁移至GPU2.1 to函数使用方法 3、torch.cuda常用方法4、多GPU并行运算4.1 torch.nn.DataParallel4.2 torch.distributed加速并行训练 5、gpu总结 往期回顾 pytorch01&#xff1a;概念、张量操作、线性回归与逻辑回归 pytorch02&#xff1a;数据读取Data…

.NET 反射的介绍和简单应用

什么是反射&#xff1f; 反射就是动态发现类型信息的能力。它帮助程序设计人员在程序运行时利用一些信息去动态地使用类型&#xff0c;这些信息在设计时是未知的&#xff0c;这种能力类似于后期绑定。反射还支持的更高级的行为&#xff0c;能在运行时动态创建新类型&#xff0…

云原生微服务之分布式锁框架 Redisson

&#x1f339;作者主页&#xff1a;青花锁 &#x1f339;简介&#xff1a;Java领域优质创作者&#x1f3c6;、Java微服务架构公号作者&#x1f604; &#x1f339;简历模板、学习资料、面试题库、技术互助 &#x1f339;文末获取联系方式 &#x1f4dd; 系列专栏目录 [Java项目…

倒F天线设计经验分享

一、IFA天线理论分析 为了改善&#xff29;&#xff2c;&#xff21;天线难以使用的缺点&#xff0c;在&#xff29;&#xff2c;&#xff21;天线的基础上再增加一个倒L结构&#xff0c;形成IFA天线&#xff0c;此种天线体积小、易于匹配并具有双极化的特点&#xff0c;而在蓝…

「JavaSE」类和对象2

&#x1f387;个人主页&#xff1a;Ice_Sugar_7 &#x1f387;所属专栏&#xff1a;快来卷Java啦 &#x1f387;欢迎点赞收藏加关注哦&#xff01; 类和对象2 &#x1f349;匿名对象&#x1f349;关键字static&#x1f34c;static修饰成员变量&#x1f34c;static修饰成员方法&…

springboot项目创建及采用本地tomcat打包发布

springboot项目发布 maven使用 解压maven安装包 修改配置文件settings.xml 更改镜像(使用maven添加依赖时&#xff0c;选择下载的地址&#xff0c;百度云已提供) <mirror><id>nexus-aliyun</id><mirrorOf>*</mirrorOf><name>Nexus aliyu…