数模学习第七天---图论

哥尼斯堡七桥问题

在这里插入图片描述

数学家欧拉将七桥问题变为:
从任一点出发一笔画出七条线再回到起点。
欧拉证明了这样的走法不存在,并给出了这类问题的一般结论:
凡是由偶点组成的连通图,一定可以一笔画成。画时可以把任一偶点为起点,最后一定能以这个点为终点画完此图。(偶点有偶数个边同它相连,奇点同理)
凡是只有两个奇点的连通图(其余都为偶点),一定可以一笔画成。画时必须把一个奇点为起点,另一个奇点终点。
其他情况的图都不能一笔画出。(有偶数个奇点除以二便可算出此图需几笔画成。)

前言

图与网络是运筹学(Operations Research)中的一个经典和重要的分支。许多经济管理、工业工程、交通运输、计算机科学与信息技术、通讯与网络技术等诸多领域的问题图的优化问题。
常见问题有最小支撑树、最短路径问题、一笔画问题、中国邮递员问题、TSP问题、最大流量问题,最小费用最大流问题。

基本概念

在这里插入图片描述
常用d(v)表示图G中与顶点v关联的边的数目,称为顶点v的度数.
用N(v)表示图G中所有与顶点v相邻的顶点的集合.

有限简单图

1.顶点个数是有限的;
2.任意一条边有且只有两个不同的点与它相互关联;
3.若是无向图, 则任意两个顶点最多只有一条边与之相联结;
4.若是有向图, 则任意两个顶点最多只有两条边与之相联结. 当两个顶点有两条边与之相联结时,这两条边的方向相反.
如果某个有限图不满足(2)(3)(4),可在某条边上增设顶点使之满足。
在这里插入图片描述

图的矩阵表示

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

图论算法(最小生成树)

Prim算法

首先置S={1},然后,只要S是V的真子集,就作如下的贪心选择:选取满足条件i属于S,j属于V-S,且c[i][j]最小的边,将顶点j添加到S中。这个过程一直进行到S=V时为止。
在这个过程中选取到的所有边恰好构成G的一棵最小生成树。 计算复杂度为o(n)

在这里插入图片描述
在这里插入图片描述

Kruskal算法

将G的n个顶点看成n个孤立的连通分支。将所有的边按权从小到大排序。然后从第一条边开始,依边权递增的顺序查看每一条边,并按下述方法连接2个不同的连通分支:当查看到第k条边(v,w)时,如果端点v和w分别是当前2个不同的连通分支T1和T2中的顶点时,就用边(v,w)将T1和T2连接成一个连通分支,然后继续查看第k+1条边;如果端点v和w在当前的同一个连通分支中,就直接再查看第k+1条边。这个过程一直进行到只剩下一个连通分支时为止。
复杂性:O(|e|log|e|) ,|e|为边数
在这里插入图片描述

图论算法(最短路径)

Dijkstra算法

在这里插入图片描述

Floyd 算法

状态转移方程如下: dist[i,j]:=min{dist[i,k]+dist[k,j],dist[i,j]}
算法:
1,从任意一条单边路径开始。所有两点之间的距离是边的权,如果两点之间没有边相连,则权为无穷大。
2,对于每一对顶点 u 和 v,看看是否存在一个顶点 w 使得从 u 到 w 再到 v 比已知的路径更短。如果是更新它。
时间复杂度为O(n3方);

二分图匹配

二分图(或二部图):如果图的顶点可以被分为两组,并且使得所有边的顶点分别属于两组。
二分图的一个等价定义:不含有“含奇数条边的环”的图。
在这里插入图片描述

匹配:一个「匹配」(matching)是一个边的集合,其中任意两条边都没有公共顶点。例如,图 3、图 4 中红色的边就是图 2 的匹配。
最大匹配:一个图所有匹配中,所含匹配边数最多的匹配,称为这个图的最大匹配。图 4 是一个最大匹配,它包含 4 条匹配边。

完美匹配:如果一个图的某个匹配中,所有的顶点都是匹配点,那么它就是一个完美匹配。图 4 是一个完美匹配。

完美匹配一定是最大匹配(完美匹配的任何一个点都已经匹配,添加一条新的匹配边一定会与已有的匹配边冲突)。但并非每个图都存在完美匹配。

中国邮政员算法

1 如果G是连通图,转2,否则返回无解并结束;
2 检查G中的奇点,构成图H的顶点集;
3 求出G中每对奇点之间的最短路径长度,作为图H对应顶点间的边权;
4 对H进行最小权匹配;
5 把最小权匹配里的每一条匹配边代表的路径,加入到图G中得到图G’;
6 在G’中求欧拉回路,即所求的最优路线。

TSP算法

旅行商问题,即TSP问题(Travelling Salesman Problem)
假设旅行商人要拜访n个城市,每个城市只能拜访一次,最后要回到原来出发的城市。
目标: 经历路径的路程为所有路径之中的最小值
解法 :
动态规划
分支定界法
近似算法
LKH (K. Helsgaun)算法
遗传算法(genetic algorithm)
神经网络(neural network)

案例分析

锁具装箱问题

某厂生产一种弹子锁具,每个锁具的钥匙有5个槽,每个槽的高度从{1,2,3,4,5,6}中任取一数.由于工艺及其它原因,制造锁具时对5个槽的高度有两个限制:
(1)至少有3个不同的数;
(2)相邻两槽的高度之差不能为5.

该问题用图论中的邻接矩阵解决较为简单
易见, x=t-s,其中,t代表相邻两槽高度之差不为5的锁具数,即:满足限制条件(2)的锁具数,s代表相邻两槽高度之差不为5且槽高仅有1个或2个的锁具数,即:满足限制条件(2)但不满足限制条件(1)的锁具数。

构造无向图:
在G中t每一条长度为4的道路对应于一个相邻两槽高度之差不超过5的锁具,即满足限制条件(2)的锁具,反之亦然,于是可以通过G的邻接矩阵A来计算t的值,具体步骤如下:
在这里插入图片描述
如图,矩阵第一行第二列5代表的意思是从1到2有5条长度为2的路。
在这里插入图片描述
在这里插入图片描述
下面用6个循环来解决(注意:因为数字较小,所以可以用循环求解)

clear,clc
n=6;
s=[];% s 为仅满足条件2的序列
for a=1:n
    for b=1:n
        for c=1:n
            for d=1:n
                for e=1:n
                    x=[a,b,c,d,e];
                    t=diff(x);%计算沿大小不等于 1 的第一个数组维度的 X 相邻元素之间的差分:
                    M=max(abs(t));%返回数组 X 中元素的绝对值的最大值
                    if M<5
                        s=[s;x];
                    end
                end
            end
        end
    end
end
s0=[];% s0 为同时满足两个条件的序列
for i=1:size(s,1)%size为返回维度1的长度
    t=s(i,:);
    t1=unique(t);%返回与t中相同的数据,但是不包含重复项
    if length(t1)>2
        s0=[s0;t];
    end
end

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

看星河的兔子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值