联系方式

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

分类:联系方式 作者:admin 来源:网络整理 发布:2019-10-01 07:56
  


盖尔沙普利算法规律:

整个设定初值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);
   
   
}

例如,触及婚配互插成绩。,我希望的事外面的对权力都有扶助。。
原始互连: 原文求教于

上一篇:想投资理财网
下一篇:没有了
-

文章分类

-