匈牙利算法匈牙利算法在计算机C++语言编程中怎么应用?
匈牙利算法 时间:2021-07-16 阅读:(
)
能不能把你的基于matlab的匈牙利算法的代码发给我啊!谢谢了
unction [z,an]=fenpei(marix)
%输入效率矩阵 marix 为方阵;
%若效率矩阵中有 M,则用一充分大的数代替;
%输出z为最优解,an为 最优分配矩阵;
a=marix;
b=a;
%确定矩阵维数
s=length(a);
%确定矩阵行最小值,进行行减
ml=min(a’);
for i=1:s
a(i,:)=a(i,:)-ml(i);
end
%确定矩阵列最小值,进行列减
mr=min(a);
for j=1:s
a(:,j)=a(:,j)-mr(j);
end
% start working
num=0;
while(num~=s)
%终止条件是“(0)”的个数与矩阵的维数相同
%index用以标记矩阵中的零元素,若a(i,j)=0,则index(i,j)=1,否则index(i,j)=0
index=ones(s);
index=a&index;
index=~index;
%flag用以标记划线位,flag=0 表示未被划线,
%flag=1 表示有划线过,flag=2 表示为两直线交点
%an用以记录 a 中“(0)”的位置
%循环后重新初始化flag,an
flag = zeros(s);
an = zeros(s);
%一次循环划线全过程,终止条件是所有的零元素均被直线覆盖,
%即在flag>0位,index=0
while(sum(sum(index)))
%按行找出“(0)”所在位置,并对“(0)”所在列划线,
%即设置flag,同时修改index,将结果填入an
for i=1:s
t=0;
l=0;
for j=1:s
if(flag(i,j)==0&&index(i,j)==1)
l=l+1;
t=j;
end
end
if(l==1)
flag(:,t)=flag(:,t)+1;
index(:,t)=0;
an(i,t)=1;
end
end
%按列找出“(0)”所在位置,并对“(0)”所在行划线,
%即设置flag,同时修改index,将结果填入an
for j=1:s
t=0;
r=0;
for i=1:s
if(flag(i,j)==0&&index(i,j)==1)
r=r+1;
t=i;
end
end
if(r==1)
flag(t,:)=flag(t,:)+1;
index(t,:)=0;
an(t,j)=1;
end
end
end
%对 while(sum(sum(index)))
%处理过程
%计数器:计算an中1的个数,用num表示
num=sum(sum(an));
% 判断是否可以终止,若可以则跳出循环
if(s==num)
break;
end
%否则,进行下一步处理
%确定未被划线的最小元素,用m表示
m=max(max(a));
for i=1:s
for j=1:s
if(flag(i,j)==0)
if(a(i,j)<M)
m=a(i,j);
end
end
end
end
%未被划线,即flag=0处减去m;线交点,即flag=2处加上m
for i=1:s
for j=1:s
if(flag(i,j)==0)
a(i,j)=a(i,j)-m;
end
if(flag(i,j)==2)
a(i,j)=a(i,j)+m;
end
end
end
end
%对while(num~=s)
%计算最优(min)值
zm=an.*b;
z=sum(sum(zm));什么是匈牙利法?
匈牙利法是求解及小型(优化方向为极小)指派问题的一种方法,这种方法最初由w.w.kuhn提出,后经改进而形成,解法基于匈牙利数学家D.K?nig给出的一个定理而得名。
什么是匈牙利算法
谈匈牙利算法自然避不开Hall定理,即是:对于二部图G,存在一个匹配M,使得X的所有顶点关于M饱和的充要条件是:对于X的任意一个子集A,和A邻接的点集为T(A),恒有: │T(A)│ >= │A│
匈牙利算法是基于Hall定理中充分性证明的思想,其基本步骤为:
1.任给初始匹配M;
2.若X已饱和则结束,否则进行第3步;
3.在X中找到一个非饱和顶点x0,作V1 ← {x0}, V2 ← Φ;
4.若T(V1) = V2则因为无法匹配而停止,否则任选一点y ∈T(V1)V2;
5.若y已饱和则转6,否则做一条从x0 →y的可增广道路P,M←M?E(P),转2;
6.由于y已饱和,所以M中有一条边(y,z),作 V1 ← V1 ∪{z}, V2 ← V2 ∪ {y}, 转4;
设数组up[1..n] --- 标记二分图的上半部分的点。
down[1..n] --- 标记二分图的下半部分的点。
map[1..n,1..n] --- 表示二分图的上,下部分的点的关系。
True-相连, false---不相连。
over1[1..n],over2[1..n] 标记上下部分的已盖点。
use[1..n,1..n] - 表示该条边是否被覆盖 。
首先对读入数据进行处理 ,对于一条边(x,y) ,起点进集合up,终点进集合down。
标记map中对应元素为true。
1. 寻找up中一个未盖点 。
2. 从该未盖点出发 ,搜索一条可行的路线 ,即由细边出发, 由细边结束, 且细粗交错的路线 。
3. 若找到 ,则修改该路线上的点所对应的over1,over2,use的元素。
重复步骤1。
4. 统计use中已覆盖的边的条数total,总数n减去total即为问题的解。
匈牙利算法在计算机C++语言编程中怎么应用?
匈牙利算法是图论中完成二分图匹配的经典算法之一.输入排队的Crossbar调度算法是以获得交换机的输入端口和输出端口最大匹配,从而得到高吞吐量为目的.因而在调度算法理论研究中应用了二分图最大匹配的Maximum Size Matching(MSM)和 Maximum Weight Matching(MWM)算法成为各种调度算法性能的评价标准.文中介绍了匈牙利算法在输入排队调度算法仿真中的应用,并且得出相应典型算法的性能仿真曲线,从而为进一步研究调度算法打下理论基础.
我们先普及一下常识吧,每年9月的第一个星期一是美国劳工节。于是,有一些服务商会基于这些节日推出吸引用户的促销活动,比如RackNerd有推出四款洛杉矶和犹他州独立服务器,1G带宽、5个独立IP地址,可以配置Windows和Linux系统,如果有需要独立服务器的可以看看。第一、劳工节促销套餐这里有提供2个套餐。两个方案是选择犹他州的,有2个方案是可以选择洛杉矶机房的。CPU内存SSD硬盘配置流量价格...
妮妮云的来历妮妮云是 789 陈总 张总 三方共同投资建立的网站 本着“良心 便宜 稳定”的初衷 为小白用户避免被坑妮妮云的市场定位妮妮云主要代理市场稳定速度的云服务器产品,避免新手购买云服务器的时候众多商家不知道如何选择,妮妮云就帮你选择好了产品,无需承担购买风险,不用担心出现被跑路 被诈骗的情况。妮妮云的售后保证妮妮云退款 通过于合作商的友好协商,云服务器提供2天内全额退款,超过2天不退款 物...
iWebFusion(iWFHosting)在部落分享过很多次了,这是成立于2001年的老牌国外主机商H4Y旗下站点,提供的产品包括虚拟主机、VPS和独立服务器租用等等,其中VPS主机基于KVM架构,数据中心可选美国洛杉矶、北卡、本德、蒙蒂塞洛等。商家独立服务器可选5个不同机房,最低每月57美元起,而大流量10Gbps带宽服务器也仅149美元起。首先我们分享几款常规服务器配置信息,以下机器可选择5...
匈牙利算法为你推荐
ipad怎么分屏ipad如何分屏使用2020rdl电脑主机上的dvd+rdl是什么意思李昊天铠甲勇士2刑天的李昊天秘密是什么editplus破解版DBTools Manager Professional 破解版在哪里可以下载?弹幕网站谁能给我解释一下什么叫A站,什么叫B站?都是啥网站?药品标准查询《中华人民名共和国卫生部药品标准》【20080802】?alphablenddelphi中都有哪些控件有AlphaBlend属性,也就是可透明数学作业小学一年级数学布置作业怎么布置index是什么意思有些网址后面带有index.html是什么意思滚动条事件前端页面需要用到多处scroll滑动事件,怎么事件之间不影响
www二级域名 深圳域名注册 服务器租用托管 二级域名查询 主机测评网 便宜域名 windows主机 pccw cdn服务器 香港托管 美国仿牌空间 免费网站监控 360抢票助手 国外php空间 刀片服务器是什么 刀片式服务器 泉州电信 国外代理服务器软件 流量计费 美国独立日 更多