|
© h.hofstede (h.hofstede@hogeland.nl)
|
|
Routes in een Graaf. |
|
Een route
(ook wel pad
genoemd) in een graaf is....... nou eigenlijk precies wat je je
erbij voor zou stellen! Als de knooppunten steden zijn en de
verbindingslijnen de wegen ertussen, dan is een route precies wat je je
in het dagelijks leven ook als route voor zou stellen. Alleen is er één
voorwaarde: elke verbindingslijn mag maar één keer voorkomen in
een route (Als dat niet zo is, dan spreken we van een
wandeling)
Wiskundig gezien is dat trouwens een waardeloze prut-uitleg.
Oké dan... ik ben er niet een erg grote voorstander van, maar laat ik
voor één keer maar eens een formele wiskundige aanpak gebruiken. Daar
komt íe.... (voor het gemak ga ik even uit van een ongerichte graaf). |
|
|
Een ongerichte graaf bestaat uit een
eindige verzameling K plus een verzameling V bestaande uit
deelverzamelingen van twee elementen van K. |
|
|
Heb je het door? Die verzameling K zijn de knooppunten, en die
verzameling V zijn de verbindingslijnen.
Het graafje in het voorbeeld hiernaast is weer te geven door:
K = {a, b, c, d} V = {(a, c), (a, b),
(b, c), (c, d)}
Een route is dan een geordende serie elementen uit V waarvoor geldt dat
twee opeenvolgende elementen steeds een zelfde knooppunt bevatten, en
waarin elk element hoogstens één keer voorkomt.
In de graaf hiernaast zou je de route (d, c)(c,
a)(a, b)(b, c) kunnen maken. |
|
Nou goed, snel terug naar de
normale wereld.
Eerst nog even een paar termen: |
• |
de lengte van een
route is het aantal knooppunten dat er in voorkomt. |
• |
een cykel is een
route met hetzelfde beginpunt als eindpunt (heet ook wel "circuit"
of "gesloten pad") |
• |
een graaf is
samenhangend
als er vanuit elk knooppunt een route bestaat naar elk ander knooppunt. |
• |
een Eulerroute is
een route waarin elke verbindingslijn van de graaf precies één keer voorkomt. |
• |
een Eulercykel is
een gesloten Eulerroute (dus met hetzelfde begin- en eindpunt). |
|
|
|
De Eulerroutes/cykels gaan we
eerst maar eens nader
onderzoeken..... |
|
|
|
Eulerroutes. |
|
|
|
Eulerroutes, die ken je misschien
al wel!
Kijk maar naar het huisje met het kruis erin hiernaast. De vraag
daarbij is "Kun je dit tekenen zonder je potlood van papier te
halen waarbij elke lijn precies één keer getrokken wordt?"
Zo'n route, waarbij dus elke verbindingslijn precies één keer gebruikt
wordt, heet een Eulerroute.
Bij het huisje hiernaast kan dat inderdaad (click er maar op....) op
meerdere manieren. |
|
|
|
Nou kun je heel snel beredeneren
of het mogelijk is zo'n route te vinden door het volgende te bedenken: |
|
"elke keer dat je een knooppunt
passeert voegt dat
twee nieuwe verbindingslijnen aan het knooppunt toe" |
|
|
|
|
Logisch toch? Je bent via de ene
lijn bij het knooppunt aangekomen en vertrekt via de andere weer. Dat
zijn dus bij elke passage twee lijnen extra. Maar dat betekent dat bij
alle knooppunten een EVEN AANTAL verbindingslijnen moeten
samenkomen (dus dat alle knooppunten een even graad moet hebben).
Alle?......
Nou, er zijn twee uitzonderingen. Het punt waar je bent begonnen en het
punt waar je eindigt hebben een oneven aantal verbindingslijnen, immers
daar ben je één keer begonnen (of geëindigd) en verder gaf elke
doorkomst twee extra lijnen.
Dus voor het bestaan van een Eulerroute mogen er precies twee
knooppunten oneven graad hebben, de rest moet even graad hebben. Die
twee met oneven graad zijn dan meteen beginpunt en eindpunt van de
route.
Voor een Eulercykel heeft ook het begin/eindpunt een even graad:
je bent er begonnen + geëindigd, en elke andere doorkomst gaf twee
verbindingslijnen extra.
Een graaf met een Eulercykel heet een
Eulergraaf. |
|
|
|
Een samenhangende graaf is een
Eulergraaf als alle knooppunten een even graad
hebben. |
|
|
|
|
|
Ik hoop dat je nu inziet dat ik
dat strikt genomen nog niet bewezen heb. Ik heb alleen nog maar
laten zien dat deze voorwaarde NODIG is voor het
bestaan van een Eulercykel. Nog niet DAT die cykel dan ook altijd
bestaat...... (Dus dat die voorwaarde ook VOLDOENDE is).
(Verder moest de graaf natuurlijk samenhangend zijn omdat anders zeker
niet alle punten zijn te bereiken.)
Overigens kwam Euler op het idee dankzij zijn wekelijkse wandelingen
door Königsberg.
Hiernaast kun je daar meer over lezen.... |
|
|
Het Fleury- Algoritme. |
|
|
Het Fleury-algoritme
is een manier om, als aan één van beide voorwaarden van hierboven is
voldaan, ook daadwerkelijk zo'n Euler-route/cykel te maken. |
De regels voor het
maken van zo'n route zijn als volgt: |
|
|
|
1. |
Kies een beginpunt,
rekening houdend met de graad van de knooppunten (zoals hierboven
omschreven, dus beginnen bij één van beide oneven punten als die er
zijn). |
2. |
Kies vanaf dat punt
een willekeurige verbindingslijn naar een volgend punt, waarbij je op
één voorwaarde moet letten: |
|
de graaf moet samenhangend blijven als
deze verbindingslijn verdwijnt |
|
|
|
|
|
(In vaktermen:
je mag geen lijnsnede van de overblijvende graaf kiezen) |
|
|
|
3. |
Verwijder de gekozen
verbindingslijn, en ga vanaf het nieuwe knooppunt weer naar stap 2. |
|
|
|
Nou, dat levert zeker
een Eulerroute op!
Hier heb je een voorbeeldje van hoe het werkt. |
|
|
|
|
|
|
|
Het Fleury-algoritme
werkt prima, maar het heeft een groot nadeel. Je kunt je
voorstellen dat we graag een computerprogramma zouden schrijven om zo'n
Eulerroute te vinden. Bij erg grote grafen is het met de hand namelijk
nogal veel werk.....
Maar een computer heeft veel moeite om te ontdekken/berekenen wanneer
een graaf nou samenhangend blijft en wanneer niet! Daar is ook wel
weer een algoritme voor (Tarjan's algoritme), maar om dat elke keer toe
te moeten passen kost nogal veel tijd....
Er is een betere oplossing: |
|
|
|
Het Hierholzer-Algoritme. |
|
|
|
Het Hierholzer
algoritme werkt wat sneller.
Het gaat als volgt: |
|
|
|
1. |
Kies een
begin-knooppunt (volgens de regels van even/oneven hierboven) en maak
een willekeurig rondje (cykel) langs een aantal ander knooppunten. (Dat lukt
altijd want de knooppunten hebben allemaal even graad). |
|
|
|
2. |
Kies nu vanaf een
knooppunt van dit rondje waar nog ongebruikte verbindingslijnen aan
zitten weer een nieuw rondje (dat lukt ook, want de overgebleven
knooppunten hebben even graad).
Voeg dit rondje toe aan het vorige ("Insert") |
|
|
|
3. |
Herhaal stap 2 tot er
geen ongebruikte verbindingslijnen meer zijn. |
|
|
|
Een voorbeeldje met
dezelfde graaf: |
|
|
|
|
|
|
|
OPGAVEN |
|
|
|
1. |
Vijf Kamer Puzzel |
|
|
|
|
|
|
|
|
|
|
Hier zie je een
plattegrond van 5 kamers met 16 deuren.
Kun je een wandeling maken waarbij je elke deur precies één keer
passeert?
Als dat zo is, laat dan zo'n wandeling zien.
Als dat niet zo is, toon dan aan waarom dat niet kan. |
|
|
|
2. |
Hier zijn er nog
drie.
Leg van de figuren waar geen wandeling mogelijk is uit, welke deur je
zou kunnen dichtmetselen zodat er wel een wandeling mogelijk wordt. |
|
|
|
|
|
|
|
3. |
Als alle knooppunten
van een graaf graad minstens 2 hebben dan bevat die graaf een cykel.
Toon dat aan. |
|
|
|
4. |
Hieronder zie je alle
dominostenen met alle nummers van (0,0) tot en met (6,6) |
|
|
|
|
|
|
|
|
|
Bij domino mogen
stenen aan elkaar liggen als aangrenzende vlakken hetzelfde aantal ogen
hebben.
Kun je één lange rij van al deze dominostenen maken? |
|
|
|
|
|
|
© h.hofstede (h.hofstede@hogeland.nl)
|