• Nem Talált Eredményt

Fák és tulajdonságaik

In document A számítástudomány alapjai (Pldal 23-26)

2.2.1. definíció.

Az összefüggő körmentes gráfokat fáknak nevezzük.

Most a fákra vonatkozó néhány egyszerű tételt bizonyítunk be.

2.2.2. tétel.

Minden legalább 2 pontú fában van legalább két elsőfokú pont.

Bizonyítás:

Bizonyítsunk a pontszámra vonatkozó teljes indukcióval. -re az állítás triviálisan teljesül. Tegyük fel, hogy az állítás igaz minden -ra. Az előző tétel szerint minden pontú fában van elsőfokú pont. Ha elhagyjuk ezt a pontot és a hozzá tartozó egyetlen élet,

akkor mivel a maradék pontú fára már igaz az állítás, látható, hogy az pontú

eredeti fának éle van. □

2.2.4. definíció.

Az F gráf a G gráf feszítőfája, ha F fa, és részgráfja G-nek.

2.2.5. tétel.

Minden összefüggő G gráf tartalmaz feszítőfát.

Bizonyítás:

Ha G-ben van kör, akkor hagyjuk el a kör egy tetszőleges élét. Ha a maradék gráfban megint van kör, ismét hagyjuk el ennek egy élét, és ezt az eljárást folytassuk egészen addig, amíg találunk kört. Ha már nincs több kör, akkor nézzük meg, mit kaptunk. Az eljárás folyamán soha sem sérült meg az összefüggőség, hiszen mindig egy kör egyik élét hagytuk el. Nem hagytuk el a gráfnak egy pontját sem. Így a maradék gráf láthatóan G egy feszítőfája. □

2.2.6. definíció.

A körmentes gráfokat erdőnek nevezzük. Egy F gráf a G gráf feszítőerdője, ha F erdő és minden komponense feszítőfája G megfelelő komponensének.

Könnyen látható, hogy egy erdő összefüggő komponensei fák. Így teljesen hasonlóan a fentiekhez belátható, hogy ha az F erdő pontjainak száma n, komponenseinek száma k, akkor F-nek pontosan éle van. Ennek speciális esete, amikor F fa, hiszen ekkor 1 komponensből áll.

Cayley bebizonyította, hogy az pontokon – ha most különbözőknek tekintjük az egyébként izomorf gráfokat – pontosan darab különböző fa adható meg. Ennek a tételnek a bizonyításához lesz szükségünk a Prüfer-kódra.

Az pontokon adott fához rendeljünk egy számsorozatot a következőképpen. Hagyjuk el a fa elsőfokú pontjai közül a legkisebb indexűt, és jegyezzük fel a szomszédja (a vele összekötött egyetlen pont) indexét. Legyen ez . Ismételjük az eljárást a maradék fára, majd folytassuk egészen addig, amíg csak egy pont marad. Világos, hogy az utolsó pont az n sorszámú. Ugyanis ezt biztosan nem hagytuk el soha, hiszen mindig legalább két elsőfokú pont volt, és nyilván nem lehetett a kisebb sorszám az n. Ezért nem is kell, hogy a számsorozat végén feltüntessük.

2.2.7. definíció.

Az így kapott sorozatot a fa Prüfer-kódjának nevezzük.

Például a 2.5. ábrán látható fa Prüfer-kódja .

2.5. ábra

-2.2.8. tétel (Cayley).

Az pontokon különböző fa adható meg.

Bizonyítás:

A definícióból könnyen látható, hogy egy fához nem tartozhat két különböző Prüfer-kód, és az is, hogy minden fához tartozik Prüfer-kód. Azt kell még belátnunk, hogy minden sorozathoz tartozik egy fa, melynek a Prüfer-kódja épp az adott sorozat, valamint azt, hogy a kapott sorozatok száma épp .

Abból, hogy hány számból áll a Prüfer kód, könnyen meghatározhatjuk -et, hiszen az biztosan n-nel egyenlő. Legyen az a pont, amelyik elhagyásánál -t feljegyeztük. Elég tehát meghatározni -t minden k-ra, ebből már egyértelműen rekonstruálható a fa. a legkisebb szám, ami nem fordul elő a Prüfer-kódban, pontosabban között.

Általában pedig a legkisebb szám, ami nem fordul elő a számok között. Mivel ez legfeljebb darab különböző szám, mindig van ilyen legkisebb szám.

Így megkaptuk a éleket. Belátjuk, hogy ezek

az élek tényleg fát határoznak meg, és akkor persze könnyen látható, hogy ennek a fának Prüfer-kódja éppen . Indirekt tegyük fel, hogy nem, azaz a kapott gráfban van kör. Minden egyes újabb felírásakor egy újabb pontját és egy újabb élét kapjuk a gráfnak. Kell lenni egy olyan lépésnek, amikor éppen a kör utolsó élét kapjuk meg, de ekkor olyan -t kellene felírnunk, amit már korábban felírtunk. Ez azonban nem lehetséges a fenti eljárásban.

Tehát minden olyan elemű sorozathoz, amelyben az első elem mindegyike lehet , és az utolsó elem n, tartozik egy-egy fa, és különböző sorozathoz különböző fa tartozik. Mivel ilyen sorozat van, ennyi a különböző fák száma is. □

2.1. A mohó algoritmus

Rendeljünk egy G gráf éleihez súlyokat, nemnegatív valós számokat. Jelöljük -vel az e-hez rendelt súlyt.

Ha , akkor X súlya . Adjunk algoritmust, amely megkeresi a minimális súlyú kiválasztottakkal. Ha ilyen nincs, megállunk, ha van, akkor ezt az eljárást ismételjük.

Egy algoritmust mohó algoritmusnak nevezünk, ha végrehajtása folyamán minden lépésben az éppen a legjobbnak tűnő lehetőséget választjuk és nem törődünk azzal, hogy esetleg egy most rosszabbnak tűnő választással végül jobb eredményt kaphatnánk. A Kruskal algoritmus nyilván egy mohó algoritmus a legkisebb súlyú feszítőerdő megkeresésére. A mohó algoritmus azonban más feladatok, például a legkisebb súlyú kör megkeresése vagy páros gráfban a maximális párosítás megkeresése (lásd 9.1) esetén nem feltétlenül ad jó megoldást.

2.2.10. tétel.

Az előbbi algoritmus G minimális súlyú feszítőerdőjét adja.

Bizonyítás:

Nyilvánvaló, hogy az algoritmus végén a kiválasztott élek egy F feszítőerdőt alkotnak.

Tegyük fel indirekt, hogy minimális súlyú feszítőerdő, és . Ha több ilyen ellenpélda van, akkor ezek közül azt válasszuk -nak, amelynek a lehető legtöbb közös éle

van F-fel. Legyen . (Lásd a 2.6. ábrát.)

2.6. ábra

-Ha -t hozzávesszük F-hez, akkor kapunk egy C kört. Ha valamely

élre állna, akkor az algoritmus során e helyett -t választottuk volna. Így minden -re. Mivel két komponensből áll, van legalább

egy olyan él, melynek két végpontja két

különböző komponenséhez tartozik. Nyilván feszítőerdő is. Már

láttuk, hogy . Nem lehet azonban , mert ekkor

volna, ami ellentmond minimalitásának. Csak

lehetne, de ekkor olyan ellenpélda lenne, amelynek eggyel több közös éle van F-fel, mint -nak. Ez pedig ellentmond a feltevésnek. □

In document A számítástudomány alapjai (Pldal 23-26)