Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

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.

Hasonló előadás


Az előadások a következő témára: "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."— Előadás másolata:

1 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) –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 (honnan  hová  hová  honnan) Súlyozott hálók: w:E  R súlyfüggvény

2 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: innen  oda  onnan  ide (irányítatlan) –Tranzitivitás: innen  oda, onnan  amoda  innen  amoda –Reflexivitás: innen  ide 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ó: innen  ide eljutni sem közvetlenül, sem közvetve nem lehetséges

3 Út a hálóban a-tól z-ig: a  b,b  c,…,y  z é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

4 Példa *. * *. * * 4. * * * , 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

5 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 innen  oda, onnan  amoda út esetében az innen  amoda él felvétele

6 Bejárási/keresési algoritmusok szé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

7 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

8 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

9 Példa az algoritmus működésére rstu vwxy rstu vwxy rstu vwxy rstu vwxy rstu vwxy rstu vwxy

10 Az algoritmus pszeudokódja SzéltébenBejár(s) for minden u  V-{s} csúcsra do bejárt[u]=False, táv[u]=végtelen, előd[u]=NIL bejárt[s]=True, táv[s]=0 előd[s]=NIL, réteg={s} while réteg<>NIL u=réteg.feje for minden v  utó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

11 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)

12 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)

13 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 u  v él, akkor δ(s,v)<=δ(s,u)+1 Biz: Ha u elérhető, akkor legrosszabb esetben az u  v 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 v  V 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] =δ(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)

14 Lemma: Tfh. „réteg” a (v 1,v 2,…,v r ) csúcsokat tartalmazza. Ekkor táv[v r ]<=táv[v 1 ]+1 és táv[v i ]<=táv[v i+1 ] bármely 1<=i<=r-1 értékre Biz: Sor műveletek szerinti teljes indukcióval 1. Kiindulás: a „réteg” sor csak az s csúcsot tartalmazza, az állítás triviálisan teljesül 2. 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, v r+1 csúcs az éppen vizsgált v 1 utódja. Ezért (algoritmus): táv[v r+1 ]=táv[v 1 ]+1 Viszont: táv[v r ]<=táv[v 1 ]+1 (indukciós előfeltevés miatt), vagyis táv[v r ]<=táv[v r+1 ]. Széltében keresés - Legrövidebb utak

15 Tétel: táv[v]= δ(s,v) minden s-ből elérhető v  V csúcsra. Biz: A távolság szerinti indukcióval, csak az elérhető csúcsokra. Jelölje V k az s-től k távolságra levő csúcsokat. V k ={v  V: δ(s,v)=k} Alapeset: V 0 ={s}, táv[s]=0= δ(s,v), ez a legrövidebb út Indukciós lépés: Tfh., hogy adott a V k 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. ( v  V i valamely i<=k-ra). Ezt ilyenkor nem vesszük hozzá a V k+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

16 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

17 Példa az algoritmus működésére rst vwx rst vwx rst vwx rst vwxrstvwx rst vwx Az első kiindulási pontból elérhető elemeket elértük Az első kiindulási pont Új kiindulási pont rst vwx

18 Az algoritmus pszeudokódja MélységbenMindentBejár for minden u  V 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 v  utó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

19 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|))

20 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.

21 Példa y z st xwvu st vu x y z w (s (z (y (x x) y) (w w) z) s) (t (v v) (u u) t) z ts yw x uv visszamutató él előre mutató él kereszt él

22 É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

23 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árt  fa él - ha az utód rajta van a gyökérből idevezető úton  visszamutató é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 figyelembe  fa él - ha a v élt más úton már elértük, akkor visszamutató él

24 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és  lehetsé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…

25 Példa:öltözködési terv alsónadrág nadrág öv ing nyakkendő zokni zakó cipő alsónadrágnadrágövingnyakkendőzoknizakó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

26 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ágnadrágövingnyakkendőzoknizakócipőkaróra Ennél a gyökérpontnál indul Egyedülálló csomópont (2. fa gyökere) Harmadik fa gyökere

27 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 u  v  u kört képez  ellentmondá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

28 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]

29 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,v  V esetén u  v és v  u is fennáll. Jelentősége: nagyméretű hálókat komponensekre lehet bontani, így az eredeti feladat részfeladatokra osztható. abcd efgh abe cd fg h

30 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ával 2. Transzponált kiszámítása 3. 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égig 4. Az így kapott mélységi erdő fái adják az erősen összefüggő komponenseket

31 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 u  v út része (u  w  v). 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 w  v  u és v  u  w mert egy komponensben vannak, és u  w. Mivel az erősen összefüggő komponens maximális méretű, ezért w benne van. u v w

32 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)

33 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

34 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 u  u. 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,v  V csúcsra u  v  Kilép(φ (v))<=Kilép( φ (u)), hiszen {w:u  w}  {w:v  w}, é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

35 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 u  V 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 az ősapa definíciónak. Segédtételek - Ősapa

36 Tétel: A G=(V,E) irányított gráfban az u,v  V csúcsok ugyanahhoz az EÖK-höz tartoznak  ha 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

37 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.


Letölteni ppt "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."

Hasonló előadás


Google Hirdetések