130 likes | 241 Views
Gráfalgoritmusok. G=(V,E) gráf ábrázolása a. Szomszédsági lista ( E << V ): minden u V csúcshoz az Adj[u] tartalmazza az összes olyan v csúcsot, melyre létezik az (u,v) E él.
E N D
Gráfalgoritmusok G=(V,E) gráf ábrázolása a. Szomszédsági lista (E << V): minden u V csúcshoz az Adj[u] tartalmazza az összes olyan v csúcsot, melyre létezik az (u,v) E él. Listák hosszának összege: digráfban: E irányítatlan gráfban 2 E b. Csúcsmátrix (szomszédsági, adjacencia mátrix): A=(aij) mérete V V, aij értéke 1, ha (i,j) E és 0 egyébként. Szimmetrikus esetben elég a főátló és a fölötte lévő elemeket tárolni. c. Incidencia mátrix: B=(bij) mérete V E , és (bij) értéke –1, ha a j él i-ből kivezet, 1 ha a j él i-be bevezet és 0 egyébként. ADAT-09
Gráfalgoritmusok Definíció: Hálózat (súlyozott gráf) az a gráf, amelynek minden éléhez egy számot (súlyt) rendelünk hozzá. Súlyfüggvény: w: E R, egy (u,v) él súlya w(u,v) Tárolása: a. az éllel együtt b. NIL, 0, vagy , ha az él nem létezik, egyébként a súly. ADAT-09
A szélességi keresés • Adott a G=(V,E) gráf és benne egy kitüntetett s kezdőcsúcs • A szélességi keresés • G éleit vizsgálja és rátalál minden s-ből elérhető csúcsra • Kiszámítja az elérhető csúcsok legrövidebb (legkevesebb élből álló) távolságát s-től • Létrehoz egy s gyökerű „szélességi fát”, amelyben az s-ből elérhető csúcsok vannak. • A csúcsoknak szint tulajdonít (fehér, szürke, fekete)Kezdetben minden csúcs fehér, kivéve s-et, amely szürke. Szürke lesz egy csúcs, ha elértük és fekete, ha megvizsgáltuk az összes belőle kiinduló élt. • A szélességi fa kezdetben az s csúcsból áll. Ez a gyökér. • Ha egy fehér v csúcshoz értünk az u csúcsból, akkor azt felvesszük a fába (u,v) éllel,és u lesz a v szülője. • Attributumok • Szin[u] - az u csúcs színe • [u] - az u csúcs elődje • d[u] - az u távolsága s-től • Q - a szürke csúcsok sora ADAT-09
A szélességi keresés ADAT-09
A szélességi keresés Definíció:(s,v) jelölje a legrövidebb úthosszat s-ből v-be, ha létezik út s-ből v-be Egyébként (s,v) legyen . Lemma: Legyen G=(V,E) digráf vagy gráf és s V tetszőleges csúcs. Ekkor bármely (u,v) E él esetén (s,v) (s,u)+1. Lemma: Legyen G=(V,E) gráf és tegyük fel, hogy a szélességi keresés algoritmust alkalmaztuk egy s V kezdőcsúccsal. Ekkor a szélességi keresés által kiszámított d értékek minden v V csúcsra kielégítik a d[v] (s,v) egyenlőtlenséget. Lemma: Tegyük fel, hogy a szélességi keresést alkalmaztuk a G=(V,E) gráfra és a futás során a Q sor a v1,…,vr csúcsokat tartalmazza. (v1 az első, vr az utolsó) Ekkor d[vr] d[v1]+1 és d[vi] d[vi+1] bármely i=1,…,r-1 értékre. Tétel: Legyen G=(V,E) gráf és tegyük fel, hogy a szélességi keresés algoritmust alkalmaztuk egy s V kezdőcsúccsal. Ekkor a szélességi keresés minden s-ből elérhető csúcsot elér és befejezéskor d[v]= (s,v), s V. Továbbá bármely s-ből elérhető v s csúcsra az s-ből v-be vezető legrövidebb utak egyikét megkapjuk, ha az s-ből [v]-be vezető legrövidebb utat kiegészítjük a ([v],v) éllel. ADAT-09
A szélességi keresés Definíció: G=(V,E) előd részfa, ha V={v V: [v] NIL} {s} és E={([v],v) E: v V \{s}} Definíció: A G előd részfa szélességi fa, ha V elemei az s-ből elérhető csúcsok és bármely v V csúcsra egyetlen egyszerű út vezet s-ből v-be G-ben Lemma: A szélességi keresés olyan értékeket határoz meg, amelyekre a G=(V,E) előd részfa egy szélességi fa. Eljárás az s-ből v-be vezető legrövidebb út csúcsai kiírására: UTAT_NYOMTAT(G,s,v) IF v = s THEN print (s) ELSE IF [v] = NIL THEN print(„nincs út s és v között”) ELSE UTAT_NYOMTAT(G,s, [v]) print(v) ADAT-09
A mélységi keresés • A mélységi keresés • G éleit vizsgálja, mindig az utoljára elért,új kivezető élekkel rendelkező v csúcsból kivezető, még nem vizsgált éleket deríti föl. Az összes ilyen él megvizsgálása után visszalép és azon csúcs éleit vizsgálja, amelyből v-t elértük. • Az összes csúcsot megvizsgálja • Kiszámítja az elérhető csúcsok legrövidebb (legkevesebb élből álló) távolságát s-től • Létrehoz egy „mélységi erdőt”, amely az előd részgráf fáiból áll. • A csúcsoknak szint tulajdonít (fehér, szürke, fekete)Kezdetben minden csúcs fehér, szürke lesz, mikor elértük, és fekete, mikor elhagytuk. • Minden csúcshoz két időpontot rendel, az elérési d[v] és az elhagyási időpontot f[v]. • Definíció: G=(V,E) előd részgráf, ha E={([v],v) E: v V és [v] NIL} ADAT-09
A mélységi keresés ADAT-09
A mélységi keresés tulajdonságai Tétel: (Zárójelezés tétele) Mélységi keresést alkalmazva egy G=(V,E) (irányított, vagy iráyítatlan) gráfra a következő 3 feltétel közül pontosan 1 teljesül bármely u és v csúcsra - a [ d[u], f[u] ] és a [ d[v], f[v] ] intervallumok diszjunktak - a [ d[v], f[v] ] intervallum tartalmazza a [ d[u], f[u] ] intervallumot , és az u csúcs a v csúcs leszármazottja a mélységi fában - a [ d[u], f[u] ] intervallum tartalmazza a [ d[v], f[v] ] intervallumot , és a v csúcs az u csúcs leszármazottja a mélységi fában Következmény: (Leszármazottak intervallumainak beágyazása) A v csúcs akkor és csak akkor leszármazottja az u csúcsnak az irányított, vagy irányítatlan G gráf mélységi erdejében, ha d[u]<d[v]<f[v]<f[u]. Tétel: (Fehér út tétele) Egy G=(V,E) gráfhoz tartozó mélységi erdőben a v csúcs akkor és csak akkor leszármazottja az u csúcsnak, ha u elérésekor a d[u] időpontban a v csúcs elérhető u-ból olyan úton, amely csak fehér csúcsokat tartalmaz. ADAT-09
Az élek osztályozása • A mélységi keresés révén a mélységi kereséstől függően a bemeneti gráf éleit • osztályozhatjuk. • Éltípusok: egy (u,v) él • Fa él, ha a G mélységi erdő éle. • Visszamutató él, ha v megelőzője u-nak egy mélységi fában. • Előre mutató él, ha v leszármazottja u-nak egy mélységi fában • Kereszt él, ha a fenti három osztályba nem sorolható be • Irányított gráf akkor és csak akkor körmentes, ha a mélységi keresés során nem találtunk • visszamutató éleket. • Tétel: Egy irányítatlan G gráf mélységi keresésekor bármely él vagy fa él, • vagy visszamutató él. ADAT-09
Topologikus rendezés Egy irányított G=(V,E) gráf topologikus rendezése a csúcsainak sorba rendezése úgy, hogy ha G-ben szerepel az (u,v) él, akkor u előzze meg v-t a sorban Tétel: A TOPOLOGIKUS_RENDEZÉS(G) egy írányított, körmentes gráf topologikus rendezését állítja elő. ADAT-09
Erősen összefüggő komponensek Definíció: A G=(V,E) gráf transzponáltja a GT=(V,ET) gráf, ha ET={(u,v):(v,u) E} Lemma: Ha két csúcs ugyanabba az erősen összefüggő komponensbe tartozik, akkor a közöttük vezető utak egyike sem hagyhatja el az erősen összefüggő komponenst ADAT-09
Erősen összefüggő komponensek Tétel: Bármely mélységi keresés esetén egy erősen összefüggő komponensbe tartozó összes csúcs ugyanabba a mélységi fába kerül. Definíció: Egy u csúcs ősapja a w=(u) csúcs, ha w elérhető u-ból és a mélységi keresésben f[w] maximális Tétel: A G=(V,E) irányított gráfban bármely u V csúcs (u) ősapja megelőzője lesz u-nak G bármely mélységi keresésekor. Következmény: A G=(V,E) irányított gráf bármely mélységi keresése során minden u V csúcsra az u és (u) csúcsok ugyanahhoz az erősen összefüggő komponenshez tartoznak. Tétel: A G=(V,E) irányított gráfban az u,v V csúcsok akkor és csak akkor tartoznak ugyanahhoz az erősen összefüggő komponenshez, ha G mélységi keresésekor ugyanaz a csúcs az ősapjuk. ADAT-09