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. 2019.02.22. 8:51:23 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. 2019.02.22. 8:51:23 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 2019.02.22. 8:51:23 ADAT-09
A szélességi keresés O(V+E) SZÉLESSÉGI_KERESŐ(G,s) FOR V[G]\[s] csúcsra DO szin[u] FEHÉR d[u] [u] NIL Szin[s] SZÜRKE d[s] 0 [s] NIL Q {s} WHILE Q DO u fej[Q] FOR v Adj[u]-ra DO IF szin[v]=FEHÉR THEN szin[v] SZÜRKE d[v] d[u]+1 [v] u SORBA(Q,v) SORBÓL(Q) szin[u] FEKETE O(V+E) 2019.02.22. 8:51:23 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. 2019.02.22. 8:51:23 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) 2019.02.22. 8:51:23 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 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} 2019.02.22. 8:51:23 ADAT-09
A mélységi keresés (V+E) MK_BEJÁR(u) Szin[u] SZÜRKE MÉLYSÉGI_KERESŐ(G) FOR u V[G] csúcsra DO szin[u] FEHÉR [u] NIL idő 0 IF szin[u]=FEHÉR THEN MK_BEJÁR(u) (V+E) MK_BEJÁR(u) Szin[u] SZÜRKE d[u] idő idő+1 FOR vAdj[u] csúcsra DO IF szin[v]=FEHÉR THEN [v] u MK_BEJÁR(v) Szin[u] FEKETE f[u] idő idő+1 2019.02.22. 8:51:23 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. 2019.02.22. 8:51:23 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. 2019.02.22. 8:51:23 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 TOPOLOGIKUS_RENDEZÉS(G) MÉLYSÉGI_KERESŐ(G) hívása, minden csúcsra meghatározzuk az f[u] elhagyási időt Az egyes csúcsok elhagyásakor szúrjuk be azokat egy láncolt lista elejére RETURN( a csúcsok listája) (V+E) Tétel: A TOPOLOGIKUS_RENDEZÉS(G) egy írányított, körmentes gráf topologikus rendezését állítja elő. 2019.02.22. 8:51:23 ADAT-09