- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
四、匹配问题
例1 求二部图G中的最大匹配。
X1
X2
X3
X4
Y1
Y2
2019/5/13
Y3
Y4
四、匹配问题
M
xS
B
{x2y2,x3y3} x1 {x1}
{x1,x2} {y2}
{x1y2,x2,y x4 {x4}
1,x3y3}
{x4,x1} {y2}
N(s) y N(S) B yu M P
2019/5/13
五、旅行商问题
Euler图和Hamilton图
定义 经过G 的每条边的迹叫做G 的 Euler 迹;闭的 Euler 迹叫做 Euler 回路或 E 回路;含 Euler 回路的图叫做 Euler 图。
定义 包含G 的每个顶点的轨叫做 Hamilton(哈密顿)轨;
闭的 Hamilton 轨叫做 Hamilton 圈或 H 圈;含 Hamilton 圈的图
{y2} y2饱和 y2x2 点
{y1,y2,y y1非饱
4}
和点
x1y2x 2y1
{y2,y3} y2饱和 y2x1
{y2,y3} y3饱和 y3x3
{x4,x1, {y2,y {y2,y3} N(s)=B 结束
x3}
3}
2019/5/13
四、匹配问题 • 最大匹配就是:
X1
X2
X3
X4
Y1
Y2
<<a(1,2)=50; a(1,3)=60; a(2,4)=65; a(2,5)=40; a(3,4)=52;a(3,7)=45; a(4,5)=50; a(4,6)=30;a(4,7)=42; a(5,6)=70; <<leasttree_2(a)
2019/5/13
三、最小生成树问题
调用mintreek.m的m函数文件。 命令形式: [a,b]=mintreek (n,w) 功能:w是权矩阵,该矩阵中的主对角全部是inf; n是顶点数; a返回最小生成树的权的总长度,b是返回其具体 的节点。并最终返回最小生成树的图形。
2019/5/13
三、最小生成树问题
例15 用Kruskal算法求右图的最小生成树。
<<a1=[1 2 50;1 3 60]; a2=[2 4 65;2 5 40]; a3=[3 4 52;3 7 45]; a4=[4 5 50;4 6 30;4 7 42]; a5=[5 6 70]; map=[a1;a2;a3;a4;a5] [out,len]=kruskal(map)
(iii) G 中有 Euler 迹的充要条件是 G 连通且至多有两个奇次
点。
2019/5/13
五、旅行商问题
例5 旅行商问题
网络流
一名推销员准备前往若干城市推销产品。 如何为他(她)设计一条最短的旅行路线(从 驻地出发,经过每个城市恰好一次,最后返回 驻地)?这一问题的研究历史十分悠久,通常 称之为旅行商问题。
命令形式: [M,MaxZjpp]=km(A,n)
功能:A是输入二部图的权矩阵,n是匹配点。 M—输出匹配矩阵; MaxZjpp—输出最优匹配的总长度。
<<A=[3 5 5 4 1;2 2 0 2 2;2 4 4 1 0;0 1 1 0 0;1 2 1 3 3]; [M,MaxZjpp]=km(A,5)
叫做 Hamilton 图。
2019/5/13
五、旅行商问题
Euler图和Hamilton图
定理 (i)G 是 Euler 图的充分必要条件是 G 连通且每顶
点皆偶次。
(ii)
G
是
Euler
图的充分必要条件是 G
连通且 G
d
Ci
, Ci
是
i 1
圈, E(Ci ) E(C j ) (i j) 。
2019/5/13
三、最小生成树问题
调用leasttree_2.m的m函数文件。 命令形式: leasttree_2(a) 功能:a是权矩阵,该矩阵中的主对角全部是0, 并且不包含重复的权; 返回树的节点和权值。
2019/5/13
三、最小生成树问题
例12 用Kruskal算法求右图的最小生成树。
2019/5/13
三、最小生成树问题
例13 用Kruskal算法求右图的最小生成树。
<<M=Inf;a1=[M,50,60,M,M,M,M]; a2=[50,M,M,65,40,M,M]; a3=[60,M,M,52,M,M,45]; a4=[M,65,52,M,50,30,42]; a5=[M,40,M,50,M,70,M]; a6=[M,M,M,30,70,M,M]; a7=[M,M,45,42,M,M,M]; w=[a1;a2;a3;a4;a5;a6;a7] <<n=7;[a,b]=mintreek(n,w)
2019/5/13
四、匹配问题
KM算法步骤
• Kuhn-Munkras算法流程: • (1)初始化可行顶标的值 • (2)用匈牙利算法寻找完备匹配 • (3)若未找到完备匹配则修改可行顶标的值 • (4)重复(2)(3)直到找到相等子图的完备匹配
为止
2019/5/13
四、匹配问题
调用km.m的m函数文件。
• 选择这样的边数最大的子集称为图的最 大匹配问题。
• 如果一个匹配中,图中的每个顶点都和 图中某条边相关联,则称此匹配为完全 匹配,也称作完备匹配。
2019/5/13
四、匹配问题
匈牙利算法
• 求最大匹配的一种显而易见的算法是:先找出 全部匹配,然后保留匹配数最多的。但是这个 算法的复杂度为边数的指数级函数。 • M中任意一条边的端点v称为(关于M的)饱和 点,G中其他定点称为非饱和点。 • 若P是图G中一条连通两个未匹配顶点的路径, 并且属M的边和不属M的边(即已匹配和待匹配的 边)在P上交替出现,则称P为相对于M的一条增 广路径。
2019/5/13
四、匹配问题
二分图的概念
• 二分图又称作二部图,是图论中的一种特殊 模型。
• 设G=(V,{R})是一个无向图。如顶点集V可
分割为两个互不相交的子集,并且图中每条
边依附的两个顶点都分属两个不同的子集。
则称图G为二分图。
1
2
3
4
5
2019/5/13
1
2
3
4
四、匹配问题
最大匹配
• 给定一个二分图G,在G的一个子图M中, M的边集{E}中的任意两条边都不依附于 同一个顶点,则称M是一个匹配。
2019/5/13
四、匹配问题
• 修改方法如下: • 先将一个未被匹配的顶点u(u in {x})做一次增广 路,记下哪些结点被访问那些结点没有被访问。求 出d=min{lx[i]+ly[j]-w[i,j]}其中i结点被访问,j结点没 有被访问。然后调整lx和ly:对于访问过的x顶点, 将它的可行标减去d,对于所有访问过的y顶点,将 它的可行标增加d。修改后的顶标仍是可行顶标,原 来的匹配M仍然存在,相等子图中至少出现了一条 不属于M的边,所以造成M的逐渐增广。
2019/5/13
Y3
Y4
四、匹配问题
调用pipei.m的m函数文件。 格式:[e,total]=pipei(d) 功能:d是二部图矩阵(0-1矩阵)。
e—输出匹配的路径; total—最大匹配的边数。
<<d=[0 1 0 0;1 1 0 1;0 1 1 0;0 1 1 0] [e,total]=pipei(d)
2019/5/13
四、匹配问题
例2 考虑完全的2部图,其中 X {x1, x2,, x5},
Y {y1, y2,, y5} 。边上的权如下矩阵。
3 5 5 4 1
2 2 0 2 2
W
2
4
410源自 0 1 1 0 0 1 2
13
3
l(x1) 5,l(x2 ) 2,l(x3) 4,l(x4 ) 1,l(x5) 3 l( y1) l( y5) 0
2019/5/13
四、匹配问题
KM算法
• 对于任意的G和M,可行顶标都是存在的: • l(x) = maxw(x,y) • l(y) = 0 • 欲求完全二分图的最佳匹配,只要用匈牙利算法求
其相等子图的完备匹配;问题是当标号之后的Gl无 完备匹配时怎么办?1957年,Kuhn和Munkras给出 了一个解决该问题的有效算法,用逐次修改可行顶 标l(v)的办法使对应的相等子图之最大匹配逐次增 广,最后出现完备匹配。
漳州师范学院数学建模课件
图与网络建模方法
第十二讲 图与网络建模方法
2019/5/13
主要内容
• 最小生成树问题 • 匹配问题 • 旅行商问题 • 最大流问题 • 最小费用最大流问题
2019/5/13
三、最小生成树问题
Kruskal算法构造最小生成树
Kruskal 算法如下: (i)选 e1 E(G) ,使得 w(e1) min 。 (ii)若 e1, e2 ,, ei 已选好,则从 E(G) {e1,e2,,ei}中选取 ei1 ,使得 ① 中无圈,且 G[{e1,e2 ,,ei ,ei1}] ② 。 w(ei1 ) min (iii)直到选得 e 1为止。
2019/5/13
三、最小生成树问题
调用kruskal.m的m函数文件。
命令形式: [out,len]=kruskal (map)
功能:map是输入矩阵,
map=[起点1 终点1 边长1;起点2 终点2 边长2;............;起点n 终点n 边长n]