二分図最大マッチング--ハンガリーアルゴリズム


二分図が何なのかはくどくどしない.
ハンガリーアルゴリズムの核心は、Pが図Gの2つの非整合頂点を連通する経路であり、Mに属するエッジとMに属さないエッジ(すなわち、整合されたエッジと整合されるエッジ)がP上に交互に現れる場合、PをMに対する拡張経路と呼ぶ.(Mは一致)を選択し、このパスを反転すると、一致するエッジが1増加します.
C言語コード:
#include<stdio.h>
#include<string.h>
 
bool g[201][201];
int n,m,ans;
bool b[201];
int link[201];
 
bool init()
{
        int _x,_y;
        memset(g,0,sizeof(g));
        memset(link,0,sizeof(link));
        ans=0;
        if(scanf("%d%d",&n,&m)==EOF)return false;
        for(int i=1;i<=n;i++)
        {
                scanf("%d",&_x);
                for(int j=0;j<_x;j++)
                {
                        scanf("%d",&_y);
                        g[ i ][_y]=true;
                }
        }
        return true;
}
 
bool find(int a)
{
        for(int i=1;i<=m;i++)
        {
                if(g[a][ i ]==1&&!b[ i ])
                {
                        b[ i ]=true;
                        if(link[ i ]==0||find(link[ i ]))
                        {
                                link[ i ]=a;
                                return true;
                        }
                }
        }
        return false;
}
 
int main()
{
        while(init())
        {
                for(int i=1;i<=n;i++)
                {
                        memset(b,0,sizeof(b));
                        if(find(i))ans++;
                }
                printf("%d
",ans); } }

http://course.cug.edu.cn/21cn/%E7%A6%BB%E6%95%A3%E6%95%B0%E5%AD%A6%EF%BC%88%E5%8C%97%E5%A4%A7%EF%BC%89/part4/chapter18/18_03_02_01.htm
二、Hall定理
 
定理18.5
(
ホールの定理
)二部図G=1
,V
2
,E>中,|V
1
|≤|V
2
|.GにはVから
1
Vまで
2
の完全一致は、V
1
中任意k(k=1,2,…,|V
1
|)個の頂点は少なくともV
2
のk個の頂点が隣接しています.
本定理の条件を「相異性条件」と呼ぶことが多い.
証定理の必要性は明らかである.以下では,相異性条件を満たす限り,Gにおける最大整合が完全整合であることを証明する.MをGの中の1つの最大マッチングとする.Mが完全整合でなければ,vx∈V 1がMである非飽和点が必ず存在する.e∈E 1=E−Mがvxに関連付けられる必要があります.そうしないと、vxは孤立点になり、相異性条件と矛盾します.また,V 2におけるvxに隣接する頂点はすべてM−飽和点であり,vy∈V 2(vxに隣接する)が非飽和点である場合,M′=M∈(vx,vy)も一致し,これは明らかにMが最大整合であることと矛盾する.vxからの可能な限り長いすべてのインタリーブ経路を考慮すると、Mは最大整合であるため、定理18.4から分かるように、これらのインタリーブ経路は拡張可能ではない.すなわち、各経路がvxと異なる端点はM−飽和点であるに違いない.そこで、これらの端点はすべてV 1にあり、
S={v|v∈V 1,vはvxからのインタリーブ経路上}T={v|v∈V 2,vはvxからのインタリーブ経路上}
各交錯経路の2つの端点が全てS中であるため、|S|=|T|+1となる.これはV
1
中|T|+1個の頂点はVのみ
2
中|T|個の頂点が隣接しており、これは相異性条件と矛盾しているため、V
1
中にはM−非飽和点は存在し得ないので,Mは完全整合である.
図18.4(3)において、V 1に存在する2つの頂点は、V 2のうちの1つの頂点にのみ隣接しているため、相異性条件を満たさず、(3)において完全な一致は存在しない.一方,(1),(2)はいずれも相異性条件を満たすため,完全なマッチングが存在する.
定理18.5からは、以下の定理も得られる.
定理18.6は、二部図G=において、V 1の各頂点が少なくともt(t≧1)のエッジを関連付け、V 2の各頂点がtのエッジまで関連付けられると、GにはV 1~V 2の完全なマッチングが存在するとする.
定理中の条件から分かるように、V 1中の任意のk(1≦k≦|V 1|)個の頂点は、少なくともkt個のエッジに関連付けられているが、V 2中の各頂点は、t個のエッジに関連付けられているため、このkt個のエッジは、少なくともV 2中のk個の頂点に関連付けられている.
定理18.6と呼ばれる条件はt条件である.図18.4において、(2)はt=2のt条件を満たし、もちろん完全マッチングが存在し、(1)はt条件を満たしていないが、相異性条件を満たすため、完全マッチングが存在する.