第5讲匹配问题及算法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
4. 令圈0元素对应位置的Xij=1,其余元素为0,得 最优分配,对应位置处权和为最低消耗。
【匈牙利算法的Matlab实现】
见Word文档。三个文件 fc01.m fc02.m fc03.m
四、最优分配问题
最优分派问题是在人员分派问题中把工人对各 种工作的效率考虑进去,以便工人的总效率达 到最大,此问题称为最优分派问题。 显然,最优分派问题等价于再赋值二分图中寻 找一个最大权值的完美匹配,不妨称此匹配为 最优匹配。欲求最优匹配,只需要用匈牙利算 法求其相等子图的完美匹配。但是,实际中经 常遇到没有完美匹配的情况,此时可利用KM算 法求最优匹配。
第五讲 匹配问题及算法
1. 二分图和匹配 2. 较大基数匹配算法 3. 匈牙利算法 4. Leabharlann Baidu优分配问题 5. Kuhn-Mukres算法
下 回

问题起源
匹配问题起源于数学中著名的婚配问题。某 团体有若干未婚的漂亮姑娘和帅气小伙,所有姑 娘都已到结婚年龄,若没有另外的条件限制,为 了满足姑娘们的愿望,唯一的必备条件是可供选 择的小伙至少要和姑娘一样多。而每位姑娘都不 会草率的处理自己的终身大事,她们往往有一个 可以接受的配偶名单。问:这个团体里的每位姑 娘是否都可以与自己认可的小伙子结婚?显然, 这并非永远可以,因为或许有三位姑娘,她们的 名单都列出相同的两位小伙子,也就是这三张名 单竟完全一样。
应用案例:Bernolli-euler错放信笺问题
某人给六个人各写一封信,准备了六个写有收 信人地址的信封,问有多少种投放信笺的可能 性,使得每份信笺与信封上的收信人不符。
F(n)=(n-1)[f(n-1)+f(n-2)], F(2)=1
二、较大基数匹配算法
【算法思想】
1. 任意取得图中一边,将其存入匹配M中;
2. 从该图中将与匹配M中的每一条边相邻的边 删除;
3. 只到所剩子图全为孤立点,算法结束,否则 转1.
function J=matgraf(W) n=size(W,1); J=zeros(n,n); while sum(sum(W))~=0 a=find(W~=0); t1=mod(a(1),n); if t1==0 t1=n; end if a(1)/n>floor(a(1)/n) t2=floor(a(1)/n)+1; else t2=floor(a(1)/n); end J(t1,t2)=1,J(t2,t1)=1; W(t1,:)=0;W(t2,:)=0; W(:,t1)=0;W(:,t2)=0; end J;
Kuhn-Munkras算法步骤
1. 初始化可行顶标的值
2. 用匈牙利算法寻找完备匹配
3.若未找到完备匹配则修改可行顶标的值 4. 重复(2)(3)直到找到相等子图的完备匹配为止
【KM算法的Matlab实现】
见Word文档
第五讲习题
1. 给定指派问题的矩阵,用匈牙利算法求出最大解 和最小解。
707 506 505 b 340 265 202 101 343 187 245 125 95 98 49 616 460 440 320 290 176 88 686 535 490 375 350 196 98 805 663 575 469 453 230 115 448 302 320 210 190 128 64 686 530 490 370 340 196 98
2. 圈0元素。在C’中未被直线通过的含0元素最少 的行(列)中圈出0元素,通过这个0元素作一 条竖(或横)线。重复此步,若能圈出不同行 列的n个0元素,转4,否则转3
3. 调整耗费矩阵,在C’中没有被直线穿过的数集 D中,找出最小数d,D中所有数据都减去d, 相交处元素加d。新的耗费矩阵依旧记作D.
既然并非永远可行,那么:
在什么条件下可以满足每位姑娘的心愿?当这种 条件不具备时,又问:
1. 最多有几位姑娘的愿望得以实现 2. 如何配对,才能使婚后这个团体的家庭最美满
很多实际问题都与上述婚配问题的模型一 致,为了解决诸如此类问题,研究匹配问题和 有效算法。
一、二分图和匹配
二分图、偶图、完全二分图、完全偶图
若图的顶点集分为两个非空子集X和Y,并且每 条边都有一个顶点在X中,一个顶点在Y中,则称 此图为二分图,或者偶图;进一步,若X中每个顶 点都与Y中每个顶点相连,则称为完全二分图或完 全偶图。 若完全二分图的顶点个数分别为m和n,则此 二分图可记为Km,n
匹配、完美匹配、最大匹配
设M是图G中边集E的子集,如果M中任何两边 都不邻接,则称M为G的一个匹配(或对集);匹 配M中边元素个数称为此匹配的基数,而在匹配M 中边的端点称为M-饱和点,其他顶点称为未饱和 点。 进一步,若G中每个顶点都是M-饱和点,即匹 配M将G中所有顶点都匹配成功,则称M为G的完 美匹配;而若在图G中不存在另一个匹配M2,使得 |M2|>|M|,则称M为最大匹配,其中|M|称为G的匹 配数。
【算法的Matlab程序】
三、匈牙利算法
人员分配问题 某公司准备分派n名工人X1,X2,…,Xn做n件工作 Y1,Y2,…,Yn,已知这些工人中每人都胜任一件 或几件工作,试问能否把所有工人都分派一件 他所胜任的工作?此问题就是著名的人员分派 问题。 下面给出匈牙利算法的基本步骤:
1. 将原消耗矩阵C的每行,每列各元素都减去该 行,该列的最小值,构成等价的消耗矩阵C’.
相关文档
最新文档