申请作者

稳定匹配问题(FROM Gale-Shapley TO 匈牙利算法)

分类:申请作者 作者:admin 来源:网络整理 发布:2019-10-01 07:49
  


盖尔沙普利算法规律:

整个设定初值mM,wW,m in M,w in W,财产m和w都是自在状况;
而(人是自在在的),他还心公开焉向每个已婚妇女性交。
{
选择一体像我如此的的船舶管理人;
w = 在M的扣押权名单上超群的最重要的的已婚妇女;
结果(W) 这是一种自在的状况。
{
将 (m,w) 将状况设置为海枣状况
}
else /* w 我和停止船舶管理人海枣过。
{
m’ = w 正海枣的船舶管理人
结果(W) 更敬佩 m’ 而产生断层 m)
{
m 独身(W 日期稳定)
}
else /* w 更敬佩 m 而产生断层 m’*/
{
将 (m,w) 将状况设置为海枣状况
将 m’ 设置为自在状况
}
}
}
输入婚配集S


盖尔沙普利算法典型执意处理密切结合婚配的成绩,这执意它的实质。。复杂真正的

懂得前述的算法,你有可能知识匈牙利寒冷。 ^ _ ^ )


匈牙利算法:

匈牙利算法是由Edmonds做出计划的。,因此得名。这是最经用的零件图婚配算法。,算法的感情是找寻一转增广小路。,它是一种求。(上图出生于百度)没什么好说的,直入促使。
让笔者先看少数向某人点头或摇头示意。:
1、二部图: 二部图执意如此的一体图。,它的顶峰集v可以分为两个集:x和y。,着边e说话中肯每个边在x se金中都有一体尽头,另一体尽头在y集中。如次图:
二部图示例
2、婚配: 图论,婚配是一组边,两边都心公开焉协同的顶峰。。

  3、最大婚配: 在图的财产婚配中,最大婚配边数婚配,命令此图的最大婚配。如次图:
二部图的最大婚配图

  4、完善婚配: 当m是二部图的最大婚配时,这么集中m是二部gra的完善婚配。上图说话中肯婚配是完善的婚配。

上个一体秘诀向某人点头或摇头示意:增广小路 ;
5、增广小路: 它有以下得分:
1-p的小路上浆应该是单数。
2-从合适的开端。,集中在合适的。。
3-小路说话中肯点摆布更迭。
4-只集中和集中心公开焉笼罩,财产停止点都社团。。
5 增添小路的编号,财产单数边公开m中,等式边缘的(m)。
6 增广小路的逆婚配再发生一体。


举个包围。,找到上面推测的最大婚配:

      在这里插入图片描述

率先,m集是空的(即,心公开焉边内侧的),过后我开端找寻X1的冲洗名。,遵照2的准则,笔者仅有的在彝语中找到,找到Y1,(X1,Y1 末日危途,毫无疑问的1-5的状态,取反,有意(X1),Y1 末日危途加入到M中。

      在这里插入图片描述

继承,笔者找到了x2点。,遵照准则,找到Y1。但y1并产生断层一体未被被发现的事物的点,SO(X2),y1)不增进路途,但y1与x1贯。,x1衔接到y3,笔者思索 X2,Y1,X1,Y3 )。末日危途,单数?摆布更迭?起集中未笼罩?奇小路不属于M偶小路属于?毫无疑问的财产增广路状态,因而这是一转增广小路。,过后换个揭发,接纳下图。

      在这里插入图片描述

增广小路是匈牙利算法的感情,找到的财产冲洗小路,这宣布m集说话中肯边数,当未被发现的事物增广小路时,此刻,M说话中肯边数是消瘦。。
当笔者开端找寻X2的时辰,笔者被发现的事物Y1。但y1并产生断层一体未被被发现的事物的点,过后笔者思索y1的原始婚配点x1。。从x1开端,笔者开端找寻扩张的道路。,找到了Y3,当x1具有冲洗小路时,添加(X1),Y1)原X1的冲洗,加(x2),Y1) x2的冲洗,仍毫无疑问的增容路途状态。排队(x2),Y1)—(Y1,X1)-(X1),y3)新的冲洗小路,伪加密如次:

while(找到xi的相干顶峰yj)
{
     if(顶峰yj公开冲洗小路上)
     {
           将YJ添加到缩小路途
           结果(Yj是未笼罩点或YJ的原始婚配)
           { 冲洗集m
                 将yj的婚配点反倒xi
                 循环真
           }
    }
    循环false
}

这是C加密意识到:

typedef struct tagMaxMatch{
   int 边[计数][计数] 顶峰与边的相干表,用于表现二部图。
   bool on_小路[计数] 表现顶峰yj能否已排队增广
   int 小路[计数] 现在找到的冲洗小路
   int max_match; 现在冲洗小路说话中肯边数
}GRAPH_MATCH;

void outputRes(int) 小路
   for (int) i = 0 ; ion_小路[ J ] = false;
   }
  
}
DFS算法
bool FindAugPath(GRAPH_MATCH *match , int 十一)
   for (int) yj = 0 ; yj < COUNT; yj++) {
       if ( match->边[西]勇[勇] == 1 && !match->on_path[yj]) { 结果Yi衔接到XI,Yi公开
            match->on_path[yj] = true;
           if (match->path[yj] == -1 || FindAugPath(match,match->path[yj])) { // 结果yi是未笼罩的点或衔接到的xk点,
                 match->path[yj] = xi; YJ点衔接小路
                 return true;
           }
       }
   }
   return false;
}

void Hungary_match(GRAPH_MATCH 竞赛)
   for (int) xi = 0; xi小路
}

int main() {
   
   GRAPH_MATCH *graph = (GRAPH_MATCH *)malloc(sizeof(GRAPH_MATCH));
   for (int) i = 0 ; i < COUNT ; i++) {
       for (int) j = 0 ; j < COUNT ; j++) {
           graph->edge[i][j] = 0;
       }
   }
   graph->edge[0][1] = 1;
   graph->edge[0][0] = 1;
   graph->edge[1][1] = 1;
   graph->edge[1][2] = 1;
   graph->edge[2][1] = 1;
   graph->edge[2][0] = 1;
   graph->edge[3][2] = 1;
   
   for (int) j = 0 ; j < COUNT ; j++) {
       graph->小路[ J ] = -1;
       graph->on_小路[ J ] = false;
   }
   
   Hungary_match(graph);
   
   
}

来这里,关涉婚配相互关系成绩。,我认为会发生越过对极度的都有帮忙。。
原始连锁: 原文证明人

下一篇:没有了
-

文章分类

-