Gráfok bejárása. Szlávi Péter, Zsakó László: Gráfok II :17

Hasonló dokumentumok
Adatszerkezetek II. 2. előadás

Adatszerkezetek II. 3. előadás

Adatszerkezetek II. 1. előadás

Gráfok 1. Tárolási módok, bejárások. Szoftvertervezés és -fejlesztés II. előadás. Szénási Sándor

Gráfok 2. Legrövidebb utak, feszítőfák. Szoftvertervezés és -fejlesztés II. előadás. Szénási Sándor

Algoritmuselmélet. Mélységi keresés és alkalmazásai. Katona Gyula Y.

Gráfelméleti alapfogalmak

Diszkrét matematika 2.C szakirány

Diszkrét matematika 2.C szakirány

Diszkrét matematika 2. estis képzés

Diszkrét matematika 1. estis képzés

Melykeres(G) for(u in V) {szin(u):=feher Apa(u):=0} for(u in V) {if szin(u)=feher then MBejar(u)}

Diszkrét matematika 2. estis képzés

Gráfalgoritmusok ismétlés ősz

Gráfok, definíciók. Gráfok ábrázolása. Az adott probléma megoldásához ténylegesen mely műveletek szükségesek. Ábrázolások. Példa:

Diszkrét matematika 2.C szakirány

A gráffogalom fejlődése

Melykeres(G) for(u in V) {szin(u):=feher Apa(u):=0} for(u in V) {if szin(u)=feher then MBejar(u)}

EGYSZERŰ, NEM IRÁNYÍTOTT (IRÁNYÍTATLAN) GRÁF

Gráfok. Programozás II. előadás. Szénási Sándor.

A számítástudomány alapjai

Algoritmuselmélet. Gráfok megadása, szélességi bejárás, összefüggőség, párosítás. Katona Gyula Y.

Időjárási csúcsok. Bemenet. Kimenet. Példa. Korlátok. Nemes Tihamér Nemzetközi Informatikai Tanulmányi Verseny, 2-3. korcsoport

Melykeres(G) for(u in V) {szin(u):=feher Apa(u):=0} for(u in V) {if szin(u)=feher then MBejar(u)}

Mohó stratégia. Feladat: Megoldás:

Példa Hajtsuk végre az 1 pontból a Dijkstra algoritmust az alábbi gráfra. (A mátrixban a c i j érték az (i, j) él hossza, ha nincs él.

Gráfalgoritmusok és hatékony adatszerkezetek szemléltetése

Diszkrét matematika 2.

2. Visszalépéses keresés

Neumann János Tehetséggondozó Program Gráfalgoritmusok II.

30. ERŐSEN ÜSSZEFÜGGŐ KOMPONENSEK

Algoritmizálás. Horváth Gyula Szegedi Tudományegyetem Természettudományi és Informatikai Kar

III. Gráfok. 1. Irányítatlan gráfok:

Diszkrét matematika 2 (C) vizsgaanyag, 2012 tavasz

SzA II. gyakorlat, szeptember 18.

Algoritmusok és adatszerkezetek 2.

Gráfelméleti feladatok. c f

5/1. tétel: Optimalis feszítőfák, Prim és Kruskal algorithmusa. Legrövidebb utak graphokban, negatív súlyú élek, Dijkstra és Bellman Ford algorithmus.

Algoritmusok és adatszerkezetek I. 1. előadás

Adatszerkezetek 2. Dr. Iványi Péter

Ugrólisták. RSL Insert Example. insert(22) with 3 flips. Runtime?

bármely másikra el lehessen jutni. A vállalat tudja, hogy tetszőlegesen adott

Euler tétel következménye 1:ha G összefüggő síkgráf és legalább 3 pontja van, akkor: e 3

Algoritmizálás, adatmodellezés 1. előadás

1: Bevezetés: Internet, rétegmodell Alapok: aszimptótika, gráfok. HálózatokII, 2007

Algoritmuselmélet. Katona Gyula Y. Számítástudományi és Információelméleti Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem. 13.

Informatikai tehetséggondozás:

Algoritmusok és adatszerkezetek I. 2. előadás

Diszkrét matematika 2. estis képzés

Diszkrét matematika 2.

Feladatok, amelyek gráfokkal oldhatók meg 1) A königsbergi hidak problémája (Euler-féle probléma) a

Diszkrét matematika 2. estis képzés

Algoritmuselmélet 7. előadás

Számítógép hálózatok, osztott rendszerek 2009

Sapientia - Erdélyi Magyar TudományEgyetem (EMTE) Csíkszereda IRT- 4. kurzus. 3. Előadás: A mohó algoritmus

Algoritmizálás, adatmodellezés tanítása 6. előadás

Adatszerkezetek II. 6. előadás

Adatszerkezetek Adatszerkezet fogalma. Az értékhalmaz struktúrája

22. GRÁFOK ÁBRÁZOLÁSA

A programozás alapjai előadás. [<struktúra változó azonosítók>] ; Dinamikus adatszerkezetek:

Javító és majdnem javító utak

Gráfelmélet jegyzet 2. előadás

Diszkrét matematika 2.C szakirány

A 2008/2009 tanévi Országos Középiskolai Tanulmányi Verseny első forduló feladatainak megoldása. INFORMATIKÁBÓL II. (programozás) kategóriában

Algoritmuselmélet. Bonyolultságelmélet. Katona Gyula Y.

Adatszerkezetek I. 7. előadás. (Horváth Gyula anyagai felhasználásával)

38. A gráfalgoritmusok alkalmazása

Fák Témakörök. Fa definíciója. Rekurzív típusok, fa adatszerkezet Bináris keresőfa, bejárások Bináris keresőfa, módosítás B-fa

Diszkrét matematika 1. estis képzés

1. Gráfmodellek. 1.1 Königsbergi hidak (Euler, 1736)

Adatszerkezetek I. 1. előadás

Algoritmizálás, adatmodellezés tanítása 8. előadás

23. SZÉLESSÉGI BEJÁRÁS

Az informatika kulcsfogalmai

Diszkrét matematika 2.C szakirány

Példa Hajtsuk végre az 1 pontból a Dijkstra algoritmust az alábbi gráfra. (A mátrixban a c i j érték az (i, j) él hossza, ha nincs él.

Algoritmuselmélet 2. előadás

Minimális feszítőfák Legyen G = (V,E,c), c : E R + egy súlyozott irányítatlan gráf. Terjesszük ki a súlyfüggvényt a T E élhalmazokra:

Diszkrét matematika 2.C szakirány

ELTE IK Esti képzés tavaszi félév. Tartalom

Kétszemélyes játékok Gregorics Tibor Mesterséges intelligencia

Adatszerkezetek 7a. Dr. IványiPéter

DISZKRÉT MATEMATIKA 2 KIDOLGOZOTT TÉTELSOR 1. RÉSZ

Algoritmizálás, adatmodellezés 10. előadás

A DFS algoritmus. Összeállította: Szeszlér Dávid, c BME Számítástudományi és Információelméleti Tanszék, 2015, 2016.

Közösségek keresése nagy gráfokban

5. SOR. Üres: S Sorba: S E S Sorból: S S E Első: S E

Alapfogalmak II. Def.: Egy gráf összefüggő, ha bármely pontjából bármely pontjába eljuthatunk egy úton.

Mesterséges Intelligencia MI

17. előadás: Vektorok a térben

Algoritmizálás, adatmodellezés 1. előadás

Adatszerkezetek 1. előadás

Minimális feszítőfák Legyen G = (V,E,c), c : E R + egy súlyozott irányítatlan gráf. Terjesszük ki a súlyfüggvényt a T E élhalmazokra:

Megoldások 7. gyakorlat Síkgráfok, dualitás, gyenge izomorfia, Whitney-tételei

V. Kétszemélyes játékok

Algoritmusok és adatszerkezetek I. 2. előadás

Gráfelmélet. I. Előadás jegyzet (2010.szeptember 9.) 1.A gráf fogalma

Diszkrét matematika 2. estis képzés

Számítógép és programozás 2

Diszkrét matematika 2.

Átírás:

Gráfok 2. előadás

Gráfok bejárása A gráf bejárása = minden elem feldolgozása Probléma: Lineáris elrendezésű sokaság (sorozat) bejárása könnyű, egyetlen ciklussal elvégezhető. Hálós struktúra bejárása nem kézenfekvő, többféle stratégiával végezhető. 2/32

Gráfbejárás: Gráfok bejárása kiindulunk egy tetszőleges pontból, éleken haladva eljutunk az összes ponthoz. Demonstrálás színekkel: Fehér pontok: ahova még nem jutottunk el. Szürkék: ahova már eljutottunk, de még dolog van vele. Feketék: ahova már eljutottunk, s minden belőlük kivezető élt is megvizsgáltunk. 3/32

Gráfok bejárása Demonstrálás színekkel: A gráfbejárás kiinduló állapotában egyetlen pont szürke, az összes többi pedig fehér. A végállapotban minden pont fekete (ha elérhető a kezdőpontból). A színekkel tehát a pontok halmazát három részhalmazra bontottuk. A gráfbejárás pontokat sorol át egyik részhalmazból egy másik részhalmazba (fehérből szürkébe, szürkéből feketébe). 4/32

Két alapvető stratégia: Gráfok bejárása Szélességi bejárás: a szürke színűek közül abból lépjünk tovább, amelyikbe legrégebben léptünk. Mélységi bejárás: abból a pontból lépünk mindig tovább, amelyik legkésőbb került a szürke színűek közé. Mindkét bejárásban a szürkék keletkezési sorrendjét kell követnünk valamilyen módon. Lehetnek (lesznek) további stratégiák is. 5/32

Szélességi bejárás: Szélességi bejárás Adatszerkezet, amiből a legrégebben bekerült lép ki először sor. Tároljuk a szürke pontokat egy sorban! Van még feldolgozatlan pont = van még szürke pont = nem üres a sor! A bejárás egy feszítőfát hoz létre (szélességi feszítőfa). Van kör = van nem piros színű él, azaz szürke pontba vezető. 6/32

Szélességi bejárás Szélességi bejárás(p): Szín(p):=szürke; Sorba(p) Ciklus amíg nem üressor? Sorból(p); Szín(p):=fekete Ciklus i=1-től Pontszám-ig Ha Vanél?(p,i) és Szín(i)=fehér akkor Sorba(i); Szín(i):=szürke {Szín(p):=fekete itt is lehetne} Bejárás csúcsmátrix esetén. Futási idő: O(Pontszám 2 ) 7/32

Szélességi bejárás Szélességi bejárás(p): Szín(p):=szürke; Sorba(p) Ciklus amíg nem üressor? Sorból(p); Szín(p):=fekete Ciklus i=1-től Szomszédpontokszáma(p)-ig j:=szomszéd(p,i) Ha Szín(j)=fehér akkor Sorba(j); Szín(j):=szürke Bejárás csúcslista esetén. Futási idő: O(Élszám) 8/32

Szélességi bejárás Szélességi bejárás(p): Szín(p):=szürke; Sorba(p) Ciklus amíg nem üressor? Sorból(p); Szín(p):=fekete Ciklus i Ki(p) Ha Szín(i)=fehér akkor Sorba(i); Szín(i):=szürke Bejárás csúcslista esetén. Futási idő: O(Élszám) 9/32

Szélességi bejárás Szélességi bejárás(p): Szín(p):=szürke; Sorba(p); Honnan(p):=p Ciklus amíg nem üressor? Sorból(p); Szín(p):=fekete Ciklus i Ki(p) Ha Szín(i)=fehér akkor Sorba(i); Szín(i):=szürke Honnan(i):=p Bejárás csúcslista esetén, elérési információval. 10/32

Szélességi bejárás Szélességi bejárás(p): Szín(p):=szürke; Sorba(p); Táv(p):=0 Ciklus amíg nem üressor? Sorból(p); Szín(p):=fekete Ciklus i Ki(p) Ha Szín(i)=fehér akkor Sorba(i); Szín(i):=szürke Táv(i):=Táv(p)+1 Bejárás csúcslista esetén, távolság információval. 11/32

Szélességi bejárás Szélességi bejárás(p): Szín(p):=szürke; Sorba(p); t:=0; Elér(p):=t Ciklus amíg nem üressor? Sorból(p); Szín(p):=fekete Ciklus i Ki(p) Ha Szín(i)=fehér akkor Sorba(i); Szín(i):=szürke t:=t+1; Elér(i):=t Bejárás csúcslista esetén, elérési sorrend információval. 12/32

Szélességi bejárás Élek osztályozása: Fa-él: szürkéből fehérbe vezet. Visszamutató él(u,v): szürkéből feketébe vezet és u őse v-nek. Kereszt-él: szürkéből szürkébe vagy nem őse feketébe vezető élek. Irányítatlan gráfban csak fa-él és kereszt-él van. Irányított gráfban lehet visszamutató él. 13/32

Szélességi bejárás Irányítatlan gráfban: (u, v) fa-élre: Táv(v)=Táv(u)+1. (u, v) kereszt-élre: Táv(v)=Táv(u) vagy Táv(v)=Táv(u)+1. Irányított gráfban: (u, v) fa-élre: Táv(v)=Táv(u)+1. (u, v) kereszt-élre: Táv(v) Táv(u)+1. (u, v) visszamutató élre: 0 Táv(v) Táv(u). 14/32

Mélységi bejárás: Mélységi bejárás Adatszerkezet, amiből a legutoljára bekerült lép ki először verem. Tároljuk a szürke pontokat egy veremben! Van még feldolgozatlan pont = van még szürke pont = nem üres a verem! A bejárás egy feszítőfát hoz létre (mélységi feszítőfa). A verem megtakarítható rekurzióval. 15/32

Mélységi bejárás Mélységi bejárás(p): Szín(p):=szürke Ciklus i=1-től Pontszám-ig Ha Vanél?(p,i) és Szín(i)=fehér akkor Mélységi bejárás(i) Szín(p):=fekete Mélységi bejárás indítása(p): Szín:=(fehér,,fehér); Mélységi bejárás(p) Bejárás csúcsmátrix esetén. Futási idő: O(Pontszám 2 ) 16/32

Mélységi bejárás Mélységi bejárás(p): Szín(p):=szürke Ciklus i=1-től Szomszédpontokszáma(p)-ig Ha Szín(Szomszéd(p,i))=fehér akkor Mélységi bejárás(szomszéd(p,i)) Szín(p):=fekete Mélységi bejárás indítása(p): Szín:=(fehér,,fehér); Mélységi bejárás(p) Bejárás csúcslista esetén. Futási idő: O(Élszám) 17/32

Mélységi bejárás Mélységi bejárás(p): Szín(p):=szürke Ciklus i Ki(p) Ha Szín(i)=fehér akkor Mélységi bejárás(i) Szín(p):=fekete Mélységi bejárás indítása(p): Szín:=(fehér,,fehér); Mélységi bejárás(p) Bejárás csúcslista esetén. Futási idő: O(Élszám) 18/32

Mélységi bejárás Mélységi bejárás(p): Szín(p):=szürke; Ciklus i Ki(p) Ha Szín(i)=fehér akkor Honnan(i):=p Mélységi bejárás(i) Szín(p):=fekete Mélységi bejárás indítása(p): Szín:=(fehér,,fehér); Honnan(p):=p Mélységi bejárás(p) Bejárás csúcslista esetén, elérési információval. 19/32

Mélységi bejárás Mélységi bejárás(p): Szín(p):=szürke; Ciklus i Ki(p) Ha Szín(i)=fehér akkor Táv(i):=Táv(p)+1 Mélységi bejárás(i) Szín(p):=fekete Mélységi bejárás indítása(p): Szín:=(fehér,,fehér); Táv(p):=0 Mélységi bejárás(p) Bejárás csúcslista esetén, távolság információval. 20/32

Mélységi bejárás Mélységi bejárás(p): Szín(p):=szürke; idő:=idő+1; Elér(p):=idő Ciklus i Ki(p) Ha Szín(i)=fehér akkor Mélységi bejárás(i) Szín(p):=fekete; idő:=idő+1; Elhagy(p):=idő Mélységi bejárás indítása(p): Szín:=(fehér,,fehér); idő:=0 Mélységi bejárás(p) Bejárás csúcslista esetén, elérési és elhagyási idő információval. 21/32

Mélységi bejárás Pontok osztályozása: u őse v-nek a mélységi feszítőfában Elér(u)<Elér(v)<Elhagy(v)<Elhagy(u). u és v különböző ágon van a mélységi feszítőfában Elér(u)>Elhagy(v) vagy Elér(v)>Elhagy(u). 22/32

Mélységi bejárás Élek osztályozása: Fa-él: szürkéből fehérbe vezet. Visszamutató él(u,v): szürkéből szürkébe vezet és a fában v őse az u-nak. Előremutató él(u,v): szürkéből feketébe vezet és v utóda u-nak. Kereszt-él: szürkéből feketébe vezető élek és v nem utóda u-nak. Irányítatlan gráfban csak fa-él és visszamutató él van. 23/32

Mélységi bejárás Mélységi bejárás(p): Verembe(p,0); Szín(p):=szürke; i:=1 Ciklus amíg nem ÜresVerem? Ciklus amíg i Pontszám és (nem Vanél?(p,i) vagy Szín(i) fehér) i:=i+1 Ha i Pontszám akkor Verembe(p,i+1); p:=i Szín(i):=szürke; i:=1 különben Szín(p):=fekete; Veremből(p,i) Bejárás csúcsmátrix esetén, ciklussal. 24/32

Bejárások alkalmazásai Összefüggő-e egy irányítatlan gráf? Alapötlet: bejárás, s ha minden pontba eljutottunk a bejárás során, akkor összefüggő. Összefüggő?: Szín(1..Pontszám):=fehér Bejárás(1); i:=1 Ciklus amíg i Pontszám és Szín(i)=fekete i:=i+1 Összefüggő?:=(i>Pontszám) Függvény vége. Kérdés: irányított gráf összefüggő vagy erősen összefüggő? 25/32

Bejárások alkalmazásai Egy irányított gráf programgráf-e? Programgráf: egyetlen kezdőpontjából el lehet jutni minden pontjába, illetve minden pontjából el lehet jutni az egyetlen végpontba. Egyetlen kezdőpont: pontosan egy pont befoka 0. Egyetlen végpont: pontosan egy pont kifoka 0. Alapötlet: Bejárás a kezdőpontból, s ha minden pontba eljutottunk a bejárás során, akkor az első tulajdonság teljesül. Minden él irányát fordítsuk meg, majd bejárás a végpontból. Ha minden pontba eljutottunk, akkor a második tulajdonság is teljesül. 26/32

Bejárások alkalmazásai Irányítatlan gráf összefüggő komponensei száma Alapötlet: bejárás újraindul minden fehéren maradt pontból. Komponensek száma: Szín(1..Pontszám):=fehér; Db:=0 Ciklus i=1-től Pontszám-ig Ha Szín(i)=fehér akkor Db:=Db+1; Bejárás(i) Komponensek száma:=db Függvény vége. 27/32

Bejárások alkalmazásai Irányítatlan gráf összefüggő komponensei Alapötlet: bejárás újraindul minden fehéren maradt pontból, feketévé válásnál komponens sorszámot tárol. Bejárás(p,Db): Szín(p):=fekete; Komponens(p):=Db 28/32

Bejárások alkalmazásai Van-e út 2 pont között Alapötlet: Az egyik pontból indul a bejárás, ha a másik fekete lesz, akkor van út. Van út?(p,q): Szín(1..Pontszám):=fehér Bejárás(p) Van út?:=(szín(q) fehér) Függvény vége. Ötlet: Ha a másik pont szürkévé vált, akkor már tudjuk, hogy van út, befejezhetjük a bejárást: Ciklus amíg nem Üres? és Szín(q)=fehér Kérdés miben más: Van-e kör egy p ponton keresztül? 29/32

Bejárások alkalmazásai Út megadása 2 pont között Alapötlet: Az egyikből indul a bejárás, ha a másik fekete lesz, akkor van út. Ekkor induljunk visszafelé a célpontból! Út(p,q): Szín(1..Pontszám):=fehér; Bejárás(p) Ha Szín(q)=fekete akkor Útkiírás(q,p) Függvény vége. Útkiírás(q,p): Ha q p akkor Útkiírás(Honnan(q),p) Ki: q Megjegyzés: Minden elért (azaz fekete) pontból bejárhatjuk azt az utat, amin eljutottunk oda. 30/32

Bejárások alkalmazásai Legrövidebb út megadása 2 pont között A szélességi bejárás által megtalált út a legrövidebb út a bejárás a távolságok szerint hullámfront-szerűen halad. A mélységi bejárás által megtalált út nem feltétlenül (sőt általában nem) a legrövidebb út. Súlyozott gráfnál (ha a legrövidebb út nem a legkisebb lépésszámú, hanem a legkisebb összhosszúságú) a szélességi bejárás sem ad feltétlenül legrövidebb utat. 31/32

Gráfok 2. előadás vége