数学建模图论算法学习总结

本文深入探讨了图论算法在数学建模中的应用,包括Dijkstra与Floyd算法求解最短路径,Kruskal与Prim算法求解最小生成树,以及最大流问题和二分匹配的匈牙利算法。通过实例解析,对比不同算法的优劣,提供MATLAB、C#和C语言的实现代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数学建模图论算法学习总结

图论基本知识

B站视频:
https://www.bilibili.com/video/av18374161/?p=35
https://www.bilibili.com/video/av37498689/?p=7
图论中的圈与块:
https://wenku.baidu.com/view/44777a20a5e9856a5612604a.html

一、Dijkstra& Floyd求解最短路径

1.1 Dijkstra (MATLAB C#)

采用贪心算法(Greedy Algorithm)范式进行设计
B站MATLAB实现:https://www.bilibili.com/video/av20238704/?p=6
C#实现:https://www.cnblogs.com/mingjiatang/p/5974451.html

1.2 Floyd (MATLAB) Bellman-Ford

用于计算带权有向图中单源最短路径。
采用动态规划(Dynamic Programming)进行设计
在这里插入图片描述
B站MATLAB实现:https://www.bilibili.com/video/av20238704/?p=6
总结:到问题,转化为带权邻接矩阵,然后输入程序。数学建模时可以用不同算法比较分析,更有说服力。

二、Kruskal& Prim求解最小生成树

B站视频,讲的特别好!
https://www.bilibili.com/video/av47042691?from=search&seid=4115249733910833698

2.1最小生成树

生成树:
i. 不能有环
ii. 必须连接图中的全部顶点
所以最小生成树的任意两个顶点之间可以连通,对于有N个顶点的树,其边的个数为N-1。
最小生成树:
对于一个图,可以有很多生成树,边的权值相加最小的就是最小生成树。
应用:
如几个城市之间铺设光缆,按最小生成树铺设,就可以实现几个城市之间都能连通,所需成本又最小。

2.2 Kruskal

上面B站视频截图:
在这里插入图片描述
算法思想:
i. 把图中所有边按权值从小到大排列。
ii. 每次选择权值最小的边放入图中。如果没有形成环,那么这条边就是最小生成树中的一条边,否则,丢弃它,继续选择剩下的最小的边尝试。
iii. 直到选择了N-1条边,结束。
C语言实现:
https://www.cnblogs.com/skywang12345/p/3711496.html

2.3 Prim

上面B站视频截图:
在这里插入图片描述
算法思想:
i. 从一个顶点开始,选择与该顶点相连的权值最小的边,将这条边的另一个顶点纳入已选集合。
ii. 找出已选集合所有顶点和未选集合所有顶点之间的相连的权值最小的边,将该边和与其相连的顶点加入已选集合。
iii. 循环ii,结束。
实现:(有很多,网上搜)
https://www.cnblogs.com/ITgaozy/p/5198119.html
https://cloud.tencent.com/developer/article/1051931

三、最大流

管道网络中每条边的最大通过能力(容量)是有限的,实际流量不超过容量。
最大流问题(maximum flow problem),一种组合最优化问题,就是要讨论如何充分利用装置的能力,使得运输的流量最大,以取得最好的效果。
基本概念:
https://baike.baidu.com/item/%E6%9C%80%E5%A4%A7%E6%B5%81%E9%97%AE%E9%A2%98/19144252?fr=aladdin
算法:FF算法、EK算法、dinic算法
https://blog.youkuaiyun.com/qq_41357771/article/details/79416899
EK算法:BFS找增广路
https://www.bilibili.com/video/av18567992/?p=1
dinic算法
https://www.bilibili.com/video/av18800207?from=search&seid=15254823874702529609

四、二分匹配,匈牙利算法

https://www.bilibili.com/video/av16362938?from=search&seid=12661245930214840970
二分图
找增广路
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值