数模中的图论问题

前言

  • 本文总结了图论常见的两大问题:单源最短路径、最小生成树
  • 涉及方法:Dijkstra算法、Prim算法、Kruskal算法等
  • 由于无例子,仅可作为初学者的数模图论问题学习提纲

单源最短路径

简介

  1. 定义:从图中某个顶点出发,到达另一个顶点所经过的边的权重之和最小的一条路径
  2. 边带有方向的图是有向图,否则为无向图
  3. 基本性质:最短路径上的任一子路径也是最短路径(贪心和动态规划的基础 )
  4. 典型特征:能做出图,从某个起点到某个终点,始终围绕起点到终点的总路径求最优,常常与规划结合

适用赛题

  1. 货物运输类问题
  2. 设备更新问题
  • 购置新设备需要一笔费用,继续使用旧设备需要维修费且逐年增大
  • 在一定年限内,如何安排购置新设备和使用旧设备,使得总支付费用最小

代码求解

  1. 常用算法:
  • Dijkstra算法(迪杰斯特拉算法):基于贪心算法
  • Floyd算法:求出所有顶点对之间的最短路径,时间复杂度高
  1. 基本方法:调用shortestpath函数
  • 根据题目画出图,写出邻接矩阵,调用函数
  • shortestpath求两个单一节点之间的最短路径
  • 公式:[path,d]=shortestpath(G,1,6)
  • 名称含义
    G已得的图像
    1,6求第一个点到第六个点的最短路径
    path返回最短路径的依次经过的点
    d返回最短路径的距离
  1. 设备更新问题的抽象
  • 第一年初作为原点
  • 最后一年作为终点
  • 每年的选择作为路径
  • 总支付费用作为总路径
  1. 生成图
  • 生成无向图:graph。G=graph(A),A是邻接矩阵(无穷项要改成0)
  • 生成有向图:digraph

最小生成树

简介

  1. 连通的无环路的无向图称为树
  2. 生成树:连通图的一个子图+包含所有顶点+是树
  3. 最小生成树:生成树+权值之和最小(一个图可能有多个最小生成树)

适用赛题

  1. 通信建设
  2. 管道铺设规划
  3. 辨析:最小生成树是考虑全局的最短,单源最短路径是考虑起点到终点的最短

代码求解

  1. Prim算法(围绕点)
  • 随便从某顶点开始,不断添加权值最小点到树中
  • 适合边多点少的图
  1. Kruskal算法(围绕边)
  • 先构造只有顶点的图,按照权重对边排序,不断将不构成回路的边添加到树中
  • 适合边少点多的图
  1. 方法:
  • 得邻接矩阵(由于无向只要一个三角,写了1到2就不用写2到1了)
  • G=graph(a,'upper')使用a矩阵的上三角构造图形
  • T=minspantree(G,'Method','sparse')‘Method’,'sparse’可以指定使用Kruskal算法,不写则使用Prim算法
  • L=sum(T.Edges,Weight)对最小生成树边权重求和
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值