全本小说

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

分类:全本小说 作者:admin 来源:网络整理 发布:2019-10-01 07:40
  


盖尔沙普利算法规律:

整个设定初值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集中中边的全部含义就会筹集1,当未获得知识增广远远地时,此刻,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);
   
   
}

到这程度,触及婚配互相牵连成绩。,我打算下对各位都有扶助。。
原始关系: 原文顾及

下一篇:没有了
-

文章分类

-