háló- (gráf-) algoritmusok

37
Háló- (gráf-) algoritmusok Háló: G=(V,E), ahol V (vertex): csomópontok/csúcsok halmaza, E (edge): élek/ívek halmaza Élek egyediek, azaz InnenOda csak egyetlen él vezethet Ritka háló: ha |E| sokkal kisebb, mint |V| 2 Hálók ábrázolási módjai: 1. Csúcsmátrixszal (sűrű hálókra) 2. Szomszédsági listával (ritka hálókra) 3. Éllistával (nem lehetnek egyedülálló pontok) Irányított/irányítatlan hálók (honnanhová hováhonnan) Súlyozott hálók: w:ER súlyfüggvény

Upload: elia

Post on 20-Mar-2016

66 views

Category:

Documents


3 download

DESCRIPTION

Háló- (gráf-) algoritmusok. Háló: G=(V,E), ahol V (vertex): csomópontok/csúcsok halmaza, E (edge): élek/ívek halmaza Élek egyediek, azaz Innen Oda csak egyetlen él vezethet Ritka háló: ha |E| sokkal kisebb, mint |V| 2 Hálók ábrázolási módjai: 1. Csúcsmátrixszal (sűrű hálókra) - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Háló- (gráf-) algoritmusok

Háló- (gráf-) algoritmusok• Háló: G=(V,E), ahol V (vertex): csomópontok/csúcsok

halmaza, E (edge): élek/ívek halmaza• Élek egyediek, azaz InnenOda csak egyetlen él vezethet• Ritka háló: ha |E| sokkal kisebb, mint |V|2

• Hálók ábrázolási módjai:– 1. Csúcsmátrixszal (sűrű hálókra)– 2. Szomszédsági listával (ritka hálókra)– 3. Éllistával (nem lehetnek egyedülálló pontok)

• Irányított/irányítatlan hálók (honnanhová hováhonnan)

• Súlyozott hálók: w:ER súlyfüggvény

Page 2: Háló- (gráf-) algoritmusok

További fogalmak• Csomópont elődje: ahonnan él visz a csomópontba• Csomópont utódja: ahová a csomópontból él visz• Élek: csomópontok feletti relációk. Metarelációk:

– Szimmetria: innenoda onnanide (irányítatlan)– Tranzitivitás: innenoda, onnanamodainnenamoda– Reflexivitás: innenide

• Nyelő: csomópont, aminek nincsen utódja• Forrás: csomópont, aminek nincsen elődje• Fa: olyan gráf, csomópontjainak legfeljebb egyetlen elődje,

és legfeljebb egyetlen forrása (gyökere van), és több nyelője (levele) is lehet.

• Körmentes háló: innenide eljutni sem közvetlenül, sem közvetve nem lehetséges

Page 3: Háló- (gráf-) algoritmusok

• Út a hálóban a-tól z-ig: ab,bc,…,yz élsorozat

• Egyedülálló (szingli-szinguláris) csomópont, ha legfeljebb sajátmagával van összekötve

• Egybefüggő a háló, ha minden két csomópontja között létezik összekötő út (figyelem!! Rossz definíció!!)

• Széteső (disjoint) a háló, ha vannak csomópontok, amelyek között nincs összekötő út

• Ritka a háló, ha |E|<<|V|2 Egyébként sűrű.

További fogalmak

Page 4: Háló- (gráf-) algoritmusok

Példa

1 2

4 5

3

6

1 2 3 4 5 61 . * . * . .2 . . * . * .3 . . . . . *4 . * . . . .5 . . . * . .6 . . . . . *

1-2.42-3,53-64-25-46-6

Csúcsmátrix: inkább sűrű hálókra, de egyszerűbbek az algoritmusok- átlója az önmagából önmagába futó élek- irányítatlan gráf az átlóra szimmetrikus

Szomszédsági listák: helytakarékos az ábrázolás, különösen ritka hálókra, viszont bonyolultabbak az algoritmusok

Éllisták: csak egyedülálló pontok nélküli hálókra

1-21-42-32-53-64-25-46-6

Page 5: Háló- (gráf-) algoritmusok

Alapvető hálóalgoritmusok

• Adott csomópont elődeinek-utódainak-szomszédainak meghatározása

• Gráf transzponáltja: minden él irányításának megfordítása (csúcsmátrix: tükrözés az átlóra)

• Gráf komplementere: minden él az ellentettjére változik (csúcsmátrix: invertálás)

• Szimmetrikus lezárás: egyesítés a transzponálttal• Tranzitív lezárás: minden innenoda,

onnanamoda út esetében az innenamoda él felvétele

Page 6: Háló- (gráf-) algoritmusok

Bejárási/keresési algoritmusokszéltében keresés (breadth first)

• Egy adott kezdőpontból kiindulva bejárja a többi csúcsot

• A kezdőcsúcsból vagy az adott rétegből egy lépésben elérhető csúcsok alkotják az első/a következő réteget

• Rátalál minden elérhető csúcsra (eléri a sajtot)• Kiszámítja a legrövidebb (a legkevesebb élből álló)

utat• Létrehoz egy ún. szélességi fát: amelynek a

gyökere a kezdőcsúcs, ágai pedig a keresés lépései• A szélességi fát is rétegenként hozza létre

Page 7: Háló- (gráf-) algoritmusok

Az algoritmus működése• Csúcspontok gyűjtése: réteg, új réteg, már bejárt• Kezdetben egyetlen csúcs sem bejárt• Az első csúcsot bejárjuk, beillesztjük a rétegbe• Ciklus kezdete• Belső ciklus: Felépítjük az új réteget: a régi

rétegből elérhető, de még nem bejárt elemeket betesszük az új rétegbe, és betesszük a már bejártak közé

• Rétegváltás: az aktuális réteg az új réteg• Ciklus vége: kilépünk, ha a réteg üres

Page 8: Háló- (gráf-) algoritmusok

Pár szó az algoritmusról• Ha mindegyik csúcsra ráírjuk az elérési

réteg(hullám) sorszámát, akkor megkapjuk a csúcsok távolságát a kezdőponttól

• Egyszerűsítés: ha csak egy „réteg” változónk van. amely egy FIFO sor. Innen vesszük le az elemeket az elérhetőségi vizsgálathoz, és ennek a végére illesztjük az elérhetőket.

• Keresés esetén: az elem megtalálásakor az algoritmus megáll

Page 9: Háló- (gráf-) algoritmusok

Példa az algoritmus működésérer s t u

v w x y

r s t u

v w x y

r s t u

v w x y

r s t u

v w x y

r s t u

v w x y

r s t u

v w x y

Page 10: Háló- (gráf-) algoritmusok

Az algoritmus pszeudokódja• SzéltébenBejár(s)for minden uV-{s} csúcsra do bejárt[u]=False, táv[u]=végtelen, előd[u]=NILbejárt[s]=True, táv[s]=0előd[s]=NIL, réteg={s}while réteg<>NIL u=réteg.feje for minden vutód(u) do if not bejárt[v] then bejárt[v]=True, táv[v]=táv[u]+1 előd[v]=u, réteg.beszúr(v) réteg.kivesz

Az előd feljegyzése állítja elő a szélességi fát

Kezdőértékezés minden csúcsra

A kiindulási csúcs kezdőértékezése

Page 11: Háló- (gráf-) algoritmusok

• Széltében/mélységben keresés a köv. hálón:• tombKezd = Array(1, 1, 2, 3, 3, 3, 4, 4, 5)

tombVeg = Array(2, 3, 4, 4, 6, 5, 7, 5, 6)Call myGraph.bfSearch(1)Call myGraph.dfSearch(1)

1

2

3

4 5

7

6 1

2

3

4 5

7

6

Page 12: Háló- (gráf-) algoritmusok

Elemzés• Futási idő:• Függ az adatok ábrázolásától. (Réteg, Újréteg, Már

bejártak)• Minden csomópontot legfeljebb egyszer vizsgálunk

meg Tehát a sorba betétel és kivétel ideje: O(V).• Minden ívet legfeljebb csak egyszer vizsgálunk meg

(a szomszédok vizsgálatakor) ezek időszükséglete O(E).

• Teljes időszükséglet: O(E+V)

Page 13: Háló- (gráf-) algoritmusok

Széltében keresés - Legrövidebb utak• s-ből v-be vezető legrövidebb úthosszat jelöljük δ(s,v)-vel• Lemma: ha létezik uv él, akkor δ(s,v)<=δ(s,u)+1• Biz: Ha u elérhető, akkor legrosszabb esetben az uv plusz

lépéssel elérhető v is. Ha u nem elérhető, akkor δ(s,u)=végtelen• Lemma: A SzéltébenKeresés algoritmus táv[u] értékei minden vV

csúcsra kielégíti a táv[v]>=δ(s,v) egyenlőtlenséget.• Biz: Teljes indukcióval a réteg-be beállítás szerint

1. Kiindulás: amikor s-t beállítjuk a „réteg” sorba, akkor táv[s]=0, tehát táv[s]<=0<= δ(s,s) teljesül.2. Indukciós lépés: Tfh. Egy u csúcsra táv[u]>=δ(s,u) teljesül, és egy v csúcs az u utódjainak vizsgálata során még nem bejárt. Ekkor (program értékadás, előzőek miatt): táv[v]=táv[u]+1>= δ(s,u)+1>= δ(s,v) táv[v]>= δ(s,v)

Page 14: Háló- (gráf-) algoritmusok

• Lemma: Tfh. „réteg” a (v1,v2,…,vr) csúcsokat tartalmazza. Ekkor táv[vr]<=táv[v1]+1 és táv[vi]<=táv[vi+1] bármely 1<=i<=r-1 értékre

• Biz: Sor műveletek szerinti teljes indukcióval1. Kiindulás: a „réteg” sor csak az s csúcsot tartalmazza, az állítás triviálisan teljesül2. Indukciós lépés: egy elem kivétele: Ha a sor üres lesz, akkor triviálisan teljesül. Ha nem lesz üres, akkor is teljesül.Egy elem betétele: az új, vr+1csúcs az éppen vizsgált v1

utódja. Ezért (algoritmus): táv[vr+1]=táv[v1]+1 Viszont: táv[vr]<=táv[v1]+1 (indukciós előfeltevés miatt), vagyis táv[vr]<=táv[vr+1].

Széltében keresés - Legrövidebb utak

Page 15: Háló- (gráf-) algoritmusok

• Tétel: táv[v]= δ(s,v) minden s-ből elérhető vV csúcsra.• Biz: A távolság szerinti indukcióval, csak az elérhető csúcsokra.

Jelölje Vk az s-től k távolságra levő csúcsokat. Vk={vV: δ(s,v)=k}Alapeset: V0={s}, táv[s]=0= δ(s,v), ez a legrövidebb útIndukciós lépés: Tfh., hogy adott a Vk halmaz, vagyis amelyre δ(s,u)=k. Ekkor u utódjainak vizsgálata során a köv. lehetőségek vannak:- v már bejárt. (vVi valamely i<=k-ra). Ezt ilyenkor nem vesszük hozzá a Vk+1 halmazhoz.- v még nem járt be. Ilyenkor a δ(s,v)<=δ(s,u)+1 miatt δ(s,v) legfeljebb 1-gyel nő meg, ha v még nem bejárt, akkor éppen 1-gyel.

Széltében keresés - Legrövidebb utak

Page 16: Háló- (gráf-) algoritmusok

Mélységi bejárás/keresés• Balfal tapogatás+Ariadné fonala• Szekvenciális (1 dalia) algoritmus• Minden elágazásnál a legbaloldalsóbbat választjuk

ki először, azon haladunk tovább• Ha már tovább nem tudunk haladni, akkor

visszalépünk, és az utolsó elágazási pontnál a következő alternatívát választjuk

• Kiindulás: vagy egy indulási ponttól vagy ciklusban az el nem ért pontokból

• A Prolog programozási nyelv alapmechanizmusa mélységi keresésen alapul

Page 17: Háló- (gráf-) algoritmusok

Példa az algoritmus működésérer s t

v w x

r s t

v w x

r s t

v w x

r s t

v w x

r s t

v w x

r s t

v w x

Az első kiindulási pontból elérhető elemeket elértük

Az első kiindulási

pont

Új kiindulási

pont

r s t

v w x

Page 18: Háló- (gráf-) algoritmusok

Az algoritmus pszeudokódja• MélységbenMindentBejárfor minden uV forrás csúcsra do MélységbenBejár(u)

• MélységbenBejár(u) bejárt[u]=True, belépés[u]=most, most=most+1 for minden vutód(u) do if not bejárt[v] then előd[v]=u, MélységbenBejár(v) kilépés(u) = most, most=most+1

Page 19: Háló- (gráf-) algoritmusok

Megjegyzések• Az algoritmus előállít egy mélységi erdőt. Ezt

azonban nem rétegenként, hanem a legbaloldalibb ágon azonnal leás, majd vissszalép az utolsó nyitott csomópontig

• Időelemzés: 1. A MélységbenBejár eljárás egyszer hívódik meg minden csomópontra (Θ(|V|)) 2. Az utód(U) függvény egyszer hívódik meg minden élre (Θ(|E|))

• Teljes időszükséglet: (Θ(|V|+|E|))

Page 20: Háló- (gráf-) algoritmusok

További állítások• Zárójelezés tétele: mélységi keresés során bármely u,v

csúcspárra igaz, az alábbiak közül pontosan egy:- belép-kilép[u], ill. belép-kilép[v] diszjunktak, u-v nem leszármazottjai egymásnak- belép-kilép[u] tartalmazza belép-kilép[v]-t, és u a v leszármazottja- u-v-re nézve fordítva

• Biz: A mélységi fában/erdőben két csomópont- vagy egyik a másik leszármazottja- vagy nem (oldalági, vagy független)A mélységi keresés a fában a leszármazottak feldolgozását 1-gyel később kezdi, és 1-gyel hamarabb fejezi be, mint az adott elemét bármely leszármazott feldolgozása részintervalluma az adott elemének.

Page 21: Háló- (gráf-) algoritmusok

Példay z s t

x w v u

s tv u

xy

zw

(s (z (y (x x) y) (w w) z) s) (t (v v) (u u) t)

zts

y w

x

uv

visszamutató él

előre mutató él

kereszt él

Page 22: Háló- (gráf-) algoritmusok

Éltípusok a mélységi erdőben• Fa él: a mélységi erdő élei: u-v a fa éle, ha v-t

először az u-ból kiindulva 1 lépésben értük el• Visszamutató él: u-v visszamutat, ha v

megelőzője u-nak a mélységi fában• Előremutató él: u-v előre mutat, ha v

leszármazottja u-nak a mélységi fában• Kereszt él: az összes többi él• Színezés/élosztályozás:

- fehér: még be nem járt él- szürke: a mélységi fa gyökeréből vezető út- fekete: többi már bejárt csúcs

Page 23: Háló- (gráf-) algoritmusok

A mélységi bejárás további tulajdonságai• A MélységbenBejár algoritmus élosztályozást célzó

módosítása:- ha az utód még nem bejártfa él- ha az utód rajta van a gyökérből idevezető útonvisszamutató él- egyébként: előre mutató vagy kereszt él

• Irányítatlan háló mélységi keresésekor a vizsgált él:- vagy fa él- vagy visszamutató él

• Biz: tfh. az (u,v) él esetén v leszármazottja u-nak. Ekkor:- ha levél felé haladáskor vesszük figyelembefa él- ha a v élt más úton már elértük, akkor visszamutató él

Page 24: Háló- (gráf-) algoritmusok

Topologikus rendezés• Topologikus rendezés irányított körmentes

hálókra: a csúcsok sorbarendezése úgy, hogy ha létezik {x,y} él, akkor x előzze meg y-t. (Vagyis minden él egyirányba mutasson).

• Használata: 1. pl. projektterv, csomópontjai: részfeladatok, élei:előfeltétel kapcsolatok. Topologikus rendezéslehetséges forgatókönyv (több topologikus rendezés is elképzelhető)

• 2. Pl. egy szoftver modul eljárásainak rendezése, ha rekurzió nem megengedett…

Page 25: Háló- (gráf-) algoritmusok

Példa:öltözködési terv

alsónadrág

nadrág

öving

nyakkendő

zokni

zakó

cipő

alsónadrág nadrág öving nyakkendőzokni zakócipő

Topologikus rendezési algoritmus változat (párhuzamos-szerű)- a hálóról lépésenként leválasztjuk a forrás csomópontokat

- ha ilyen nincs, akkor nincs topologikus rendezés a háló nem körmentes

Házi feladat: körmentesség vizsgálata RDBMS környezetben. (Segítség:1. Jelképezzék FROM,TO INTEGER mezők a hálót 2. DELETE SQL utasítással ciklusban töröljük a forrás csomópontokat

Page 26: Háló- (gráf-) algoritmusok

Mélységi keresésen alapuló topologikus rendezési algoritmus

• TopologikusRendezés:MélységbenMindentBejár hívása úgy, hogy a csomópontokat a feldolgozásukból kilépés időpontja szerint csökkenő listába gyűjtjük

alsónadrág (11/16)

nadrág (12/15)

öv (6/7)

ing (1/8)

nyakkendő (2/5)

zokni (17/18)

zakó (3/4)

cipő (13/14)

karóra (9/10)

alsónadrág nadrág öving nyakkendőzokni zakócipő karóra

Ennél a gyökérpontnál indul

Egyedülálló csomópont (2.

fa gyökere)

Harmadik fa gyökere

Page 27: Háló- (gráf-) algoritmusok

Topologikus rendezés helyessége• Tétel: a háló körmentes nincs a mélységi

keresés során visszamutató él• Biz: tfh. Létezik (u,v) visszamutató él. Viszont

v őse u-nak a mélységi fában. Vagyis uvu kört képezellentmondás: tfh. a háló mégis tartalmaz kört. Legyen v a c kör elsőnek elért eleme, és (u,v) a c kör v-t megelőző eleme. v-ből kiindulva elérjük u-t, ekkor azonban v már bejárt lesz, vagyis (u,v) vissza mutat

Page 28: Háló- (gráf-) algoritmusok

Topologikus rendezés helyessége• Tétel: a mélységi keresésen alapuló algoritmus tényleg

egy irányított körmentes háló topologikus rendezését állítja elő. Biz: Azt kell belátni, hogy u és v csúcsokra, ha v elérhető u-ból, akkor Kilépés[v]<Kilépés[u]. Amikor a MélységiKeresés során egy (u,v) élt megvizsgálunk, akkor v nem eshet a gyökérből az u-ba vivő útra, hiszen a gráf körmentes. Kétféle lehetőség állhat fenn:1. v-t már más ágon bejártuk: ekkor nyilvánvalóan Kilépés[v]<Kilépés[u],2. v új csúcs. Ekkor csak v feldolgozása után fejezzük be u feldolgozását, vagy Kilépés[v]<Kilépés[u]

Page 29: Háló- (gráf-) algoritmusok

Erősen összefüggő komponensek• Def: G=(V,E) háló erősen összefüggő komponense

a csúcsok egy olyan maximális U részhalmaza, hogy u,vV esetén uv és vu is fennáll.

• Jelentősége: nagyméretű hálókat komponensekre lehet bontani, így az eredeti feladat részfeladatokra osztható.

a b c d

e f g h

abe

cd

fg h

Page 30: Háló- (gráf-) algoritmusok

Algoritmus• ErősenÖsszefüggő1. MélységbenMindentBejár hívása, Kilépés[u] kilépési időpontok kiszámításával2. Transzponált kiszámítása3. MélységbenMindentBejár hívása a transzponáltra, de a főciklusban a csúcsokat Kilépés[u] szerint csökkenően járjuk végig4. Az így kapott mélységi erdő fái adják az erősen összefüggő komponenseket

Page 31: Háló- (gráf-) algoritmusok

Segédtételek• Lemma: Ha u és v ugyanazon erősen összefüggő komponens

része, akkor a közöttük vezető utak nem vezetnek ki a komponensből.

• Biz: tfh. w egy komponensen kívüli csúcs, az uv út része (uwv). w csak akkor lehet a komponensen kívül, ha u nem elérhető w-ből, ill. w nem elérhető v-ből. Viszont wvu és vuw mert egy komponensben vannak, és uw. Mivel az erősen összefüggő komponens maximális méretű, ezért w benne van.

u

v

w

Page 32: Háló- (gráf-) algoritmusok

Segédtételek• Tétel: Egy gráf mélységi erdejében egy v csúcs leszármazottja az u

csúcsnak ha u elérésekor (a Belép(u) időpillanatban) v a gráfban elérhető az u-ból olyan úton, amelynek még egyetlen szakasza sem volt bejárva

• Biz: tfh. v u leszármazottja. Ilyenkor Belép(u)<Belép(v), vagyis v-t az u elérésekor még nem járhattuk be. Indirekt: tfh. v elérhető u-ból a Belép(u) pillanatban még nem bejárt csúcsokon át, v mégsem lesz leszármazottja a mélységi fában. Tfh. v az első ilyen nem leszármazott csúcs. Legyen w a v csúcs közvetlen elődje a gráfban (esetleg w=u). Ekkor Belép(u)<= Belép(w)< Kilép(w)<=Kilép(u). Viszont Belép(u)<Belép(v), és Kilép(v)<=Kilép(w). Vagyis u be-kilépési intervalluma teljesen tartalmazza v-ét. Ezért (korábbi tétel) v u leszármazottja kell, hogy legyen.

u w vMég be nem járt

csúcsok

Page 33: Háló- (gráf-) algoritmusok

Segédtételek• Tétel: Mélységi keresés esetén egy erősen összefüggő komponens csúcsai

ugyanabba a mélységi fába kerülnek• Biz: Legyen r az EÖK első olyan csúcsa, amelyet a mélységi fa elért. Ilyenkor

- az EÖK összes csúcsába vezet az r-ből út- egyetlen ilyen út sem hagyja el az EÖK-t(a komponensből kilépve nem kanyarodik vissza)- az EÖK összes csúcsa r leszármazottja lesz a mélységi fában

r

Page 34: Háló- (gráf-) algoritmusok

• Be fogjuk látni, hogy minden EÖK-ben van egy csúcs, amelyet először érünk el, és utoljára hagyunk elősapa…

• Def: egy EÖK-beli csúcs ősapjának azt a φ(u) csúcsot nevezzük, amely u-ból elérhető, és utoljára hagyjuk el a mélységi keresésben. Vagyis u φ(u) és Kilép(φ(u)) maximális.

• φ(u)=u előfordulhat, mert uu. Ezért Kilép(u)<=Kilép(φ(u))

• Belátjuk, hogy φ(φ(u))=φ(u), vagyis az ősapa (egy EÖK-ben) egyértelmű. Bármely u,vV csúcsra uv Kilép(φ(v))<=Kilép(φ(u)), hiszen {w:uw}{w:vw}, és φ a legkésőbbi kilépési időpontú csomópontot adja. Mivel uφ(u), ezért Kilép(φ(φ(u)))<=Kilép(φ(u)). Viszont Kilép(φ(u))<=Kilép(φ(φ(u))) Kilép(φ(φ(u)))=Kilép(φ(u))

Segédtételek - Ősapa

Page 35: Háló- (gráf-) algoritmusok

• Az ősapa az EÖK reprezentáns csúcsa, ezt érjük el először, és ezt hagyjuk el először. A transzponált keresése közben ez lesz a mélységi fa gyökere

• Tétel: G=(V,E) irányított gráfban bármely uV csúcs φ(u) ősapja megelőzője lesz u-nak G bármelyik mélységi keresése során

• Biz: Ha épp az ősapáról van szó (φ(u)=u), akkor a tétel nyilvánvalóan igaz. Ha (φ(u)<>u), akkor vizsgáljuk meg a csúcsokat a Belép(u) időpontban. Ha φ(u) már bejárt és el is hagyott, akkor Kilép(φ(u))<Kilép(u), ami ellentmond. Ha φ(u) megelőzője u-nak a mélységi fában, akkor a tétel igaz.Azt kell még belátnunk, hogy φ(u) nem lehet még nem bejárt:- Ha az u φ(u) út minden csúcspontja még nem bejárt lenne, akkor φ(u) az u leszármazottja kell hogy legyen. Ekkor viszont Kilép(φ(u))<Kilép(u), ami ellentmond a korábbi egyenlőtlenségnek.- Ha van már bejárt közbülső csúcs, akkor legyen t az u φ(u) út utolsó ilyen csúcsa. Ekkor t-nek a φ(u) megelőzőjének kell lennie a mélységi fában, mert a t-t követő összes csúcs még nem bejárt. Ha tehát φ(u) t leszármazottja, akkor Kilép(t)>Kilép(φ(u)), ami ellentmond az ősapa definíciónak.

Segédtételek - Ősapa

Page 36: Háló- (gráf-) algoritmusok

• Tétel: A G=(V,E) irányított gráfban az u,vV csúcsok ugyanahhoz az EÖK-höz tartoznakha G mélységi keresésekor ugyanaz az ősapjuk.

• Biz: Ha u és v ugyanahhoz az EÖK-höz tartoznak, akkor minden u-ból elérhető csúcs elérhető v-ből is, tehát φ(u)= φ(v).Tfh. φ(u)=φ(v) ekkor u és φ(u) ugyanabba az EÖK-be tartozik, de ugyanez teljesül v-re és φ(v)-re is. Vagyis u és v is ugyanahhoz az EÖK-höz tartozik.

Segédtételek - Ősapa

Page 37: Háló- (gráf-) algoritmusok

Következmények• Egy EÖK egy olyan csúcshalmaz, amelyeknek

ugyanaz az ősapjuk.• Az ősapa a mélységi keresés során az elsőnek elért

és az utolsónak elhagyott csúcs.• A transzponált keresése során a legelső r csúcs

(fordított elhagyási sorrend!) biztosan ősapja valamelyik EÖK-nak. Melyik ez az EÖK? Amelyeknek r ősapja, vagyis ahonnan r elérhető, vagyis amelyek r-ből elérhetők a transzponáltban. vagyis leválasztottuk az első EÖK-t.Ezután vesszük a következő legkésőbb elhagyott (és nem bejárt) r’ csúcsot, és újra végrehajtjuk az algoritmust.