© h.hofstede (h.hofstede@hogeland.nl)

Matchings.
       
Voordat we ingewikkelder roosterproblemen gaan bekijken  moeten we ons eerst verdiepen in Matchings.

We beginnen, zoals intussen gebruikelijk, maar weer met een zooi termen.

Een matching M van een graaf G is een verzameling verbindingslijnen van G die "nergens bij elkaar komen". Dat betekent dat er geen enkel knooppunt van G is dat aan twee van die lijnen vastzit. Een matching noemen we perfect als elk knooppunt van G ergens aan een lijn van M vastzit.
       

       
 
Een perfecte matching is trouwens wat anders dan een maximale matching. Hiernaast zie je een graaf met een maximale matching (groter kan niet) die toch niet perfect is.

Een alternerend pad in een graaf G met matching M is een pad waarvan de wegen om en om wél en niet bij de matching M horen.  Een M-vergrotend pad is een alternerend pad waarvan begin- en eindlijn niet bij M horen.

Zo, dat waren de termen, over naar de stellingen.

       
Stelling 1.   

 Een matching is maximaal      Er bestaat geen M-vergrotend pad.

   
Let op de dubbele richting van de pijl:  deze stelling geldt beide kanten op!
  Bewijs.
 

       
    Neem van het M-vergrotende pad gewoon de eerste, derde, vijfde, enz.  lijn, dan heb je een nieuwe matching die één groter is!
Dus als er wél een M-vergrotend pad bestaat dan is de matching niet maximaal. Dus als de matching wel maximaal is bestaat er geen M-vergrotend pad.
       
  Stel dat M niet maximaal is, en noem een maximale matching Mmax.
Bekijk nu de nieuwe graaf H die bestaat uit alle verbindingslijnen van G (plus aanliggende knooppunten) die OF in M OF in Mmax zitten, maar NIET in beiden.
       
   

       
    H bestaat dan uit een aantal componenten met om-en-om een lijn uit M en uit Mmax.
Maar omdat Mmax meer lijnen heeft dan M moet er dus een pad P in H zijn dat begint en eindigt met een lijn uit Mmax . Dat pad P is dan een M-vergrotend pad.  
     
       
Matchings in Bipartiete grafen.
       
Stel dat  V een deelverzameling is van de knooppunten van een graaf G.  Dan definiëren we de buurverzameling  B(V)  als alle knooppunten van G die grenzen aan knooppunten van  V.
Stel nu dat G een bipartiete graaf is met de twee verzamelingen knooppunten X en Y zodat elke verbindingslijn tussen een punt van X en een punt van Y loopt.
Dan geldt:
       
Stelling 2.   

 Er is een matching met elk knooppunt van X erin      B(V)    V  voor elke V uit X.

   
Dit is trouwens de "stelling van Hall".
Let weer op de dubbele pijl!
   
  Bewijs.
  Stel dat er een matching is die elke knoop van X bevat.
Kies dan een deelverzameling V van X.
De buren van de knopen van V zijn dan in ieder geval evenveel knopen uit Y, want elke knoop van V is verbonden aan minstens één knoop van Y. Dus is  B(V) ≥  V
       
  uit het ongerijmde:
Stel dat elke deelverzameling uit X meer buren heeft dan de verzameling zelf groot is. Stel verder dat er géén matching bestaat waar alle knooppunten van X in zitten.
We zullen nu proberen op een tegenstrijdigheid uit te komen....

Laat Mmax een maximale matching van G zijn. Dan is er volgens onze aanname dus een knooppunt K in X dat niet in Mmax zit.
Bekijk nu alle Mmax-alternerende routes vanaf knooppunt K.
Dan kan er op zo'n route niet NOG een knooppunt van X voorkomen dat niet in Mmax zit, want dan zou er een Mmax-vergrotend pad zijn en dat kan niet volgens stelling 1 hierboven. Kortom:  K is het enige knooppunt van alle alternerende routes dat NIET in Mmax zit.
       
   

       
    Als je nu kijkt naar het aantal Y-knooppunten op die alternerende routes en het aantal X-knooppunten dan vinden we de gezochte tegenstrijdigheid!
•  Het aantal Y-knooppunten is eentje minder dan het aantal X-knooppunten (want K zelf is er nog)
•  Maar het aantal buren van de X-knooppunten is gelijk aan het aantal Y-knooppunten.
•  Dus is het aantal buren van de X-knooppunten eentje minder dan het aantal X-knooppunten.
Dat is in strijd met onze aanname aan het begin.  Gelukkig maar!
     
       
Stelling 3:   De bruiloftsstelling.
     

"Elke k-reguliere bipartiete graaf heeft een perfecte matching".

   
Waarom de bruiloftsstelling? 
Nou kijk: stel dat ieder meisje in een dorpje precies k jongens kent waarmee ze zou willen trouwen en elke jongen kent ook precies k meisjes waarmee hij zou willen trouwen. Dan zegt deze stelling dat  alle jongens en meisjes dan zouden kunnen trouwen!!

  Bewijs:
Als de graaf k-regulier is, dan zijn er evenveel X als Y knooppunten  (immers het aantal verbindingswegen is  k • X  en  ook  k • Y).
Als V nu een willekeurige deelverzameling van knopen uit X is, dan is het aantal buren B(V) van V groter of gelijk aan het aantal knopen in V zelf  (er zijn kV verbindingen vanaf V en omdat er bij elke buur maximaal k lijnen kunnen aankomen zijn er minstens evenveel buren).
Volgens stelling 2 is er nu een matching te vinden met elk knooppunt van X erin.
Maar omdat er evenveel Y als X zijn moet dus ook wel elk knooppunt van Y daarin zitten. Kortom: er is een perfecte matching. Iedereen kan trouwen!!
     
       
Toepassing:  Taken toekennen aan Werkers.
       
Stel er is een fabriek met een aantal werkers  W1, W2, ....Wn  en evenveel  taken T1, T2, ....Tn  die gedaan moeten worden.  Elke werker is echter niet geschikt voor alle taken; iedere werker heeft zijn eigen specialisme(n) en kan slechts een aantal taken doen.
De vraag is dan natuurlijk:  Kunnen we alle taken onder alle werkers verdelen?

Deze situatie kun je natuurlijk voorstellen als een bipartiete graaf van de Werkers naar de Taken waarbij een verbindingslijn aangeeft dat de betreffende werker de taak kan doen. De vraag is dan  "Is er een perfecte matching?"

We zullen hier een recept  (oké:  algoritme, dat klinkt beter) bekijken om te ontdekken of er zo'n perfecte matching is, en ook (als er inderdaad zo'n matching is) om zo'n matching daadwerkelijk te vinden.

Basisrecept:
   1.  Begin met een willekeurige matching M.
   2.  Kies een knooppunt K uit  X dat nog niet in M voorkomt  (als dat er niet is ben je klaar).
   3.  Maak met deze K een M-vergrotend pad. Als dat pad niet te vinden is, dan is er geen perfecte matching te maken.
   4.  De eerste, derde, vijfde  enz verbindingslijnen van dat pad geven een nieuwe matching. Ga daarmee weer naar 2.

Ziet er erg simpel uit, vind je niet?  De moeilijkheid zit hem natuurlijk in stap 4:  daar staat wel luchtigjes "Maak een M-vergrotend pad",  maar ja, hoe doe je dat?  En lukt dat wel altijd?? 

Hoe maak je een M-vergrotend pad?
Begin bij K, en ga nu als volgt een boom tekenen:

We bekijken twee verzamelingen knooppunten:  V is de verzameling van knooppunten in X en W een verzameling van knooppunten in Y. In de figuur hieronder zijn de knopen van V  geel gemaakt en die van W groen.
In het begin kies je één knoop K voor V, en is W nog leeg. Kies voor die K een knoop die nog niet in de matching M zit (als die er niet is, dan zijn we klaar en hebben we een perfecte matching!)

Nu gaan we V en W als volgt uitbreiden:
Kies een willekeurige buur K1 van K  (hieronder de blauwe lijn)
Nu zijn er twee mogelijkheden:   K1 zit in M of K1 zit niet in M:

       

       
Als K1 niet in M zit zijn we klaar, want dan kunnen we M uitbreiden met route KK1.  Dan beginnen we weer helemaal opnieuw bij stap 2 van het basisrecept hierboven.
Als K1 wel in M zit, dan is er dus een M-route K1K2. We voegen K1 toe aan  verzameling W en K2 aan verzameling V.

Kijk nu eerst of er nog nieuwe buren van V te vinden zijn (dus buren van gele knooppunten die nog niet groen zijn).  Als dat niet zo is, dan kunnen we wel stoppen want dan hebben we een verzameling van knooppunten V waarvan de verzameling van buren W één kleiner is (tijdens dit hele proces is W steeds één kleiner dan V). Stelling 2 hierboven zegt dat er dan geen perfecte matching te vinden is.

Als er nog wel nieuwe buren te vinden zijn, dan gaan we weer een willekeurige nieuwe buur van een knoop van V kiezen, en begint het hele verhaal opnieuw.

Op deze manier komen we OF bij een perfecte matching uit  OF we ontdekken dat er geen perfecte matching bestaat.

Wacht, dit toch wel wat verwarrende verhaal is misschien duidelijker in een stroomdiagram:
       

       
Twee voorbeelden van het systeem in werking:
       
VOORBEELD 1.
       

       
VOORBEELD 2.
       

       
  Merk nog even op dat dit vastloopt omdat we een verzameling knooppunten V uit X vinden V = {X1, X3, X6} waarvan de verzameling buren  in W uit Y kleiner is W = {Y2, Y3}.
Die twee verzamelingen zijn voor de volgende les van belang!!
       
OPGAVEN
       
1. Uit een schaakbord worden het veld linksboven en het veld rechtsonder weggelaten.
Toon aan dat de overgebleven velden niet bedekt kunnen worden met rechthoekjes van 2 bij 1.
       
     
       

© h.hofstede (h.hofstede@hogeland.nl)