Adatszerkezetek II. 2. előadás

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

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

Gráfelméleti alapfogalmak

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

Diszkrét matematika 2.C szakirány

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

Diszkrét matematika 2.C szakirány

Diszkrét matematika 2. 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)}

A gráffogalom fejlődése

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

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

Diszkrét matematika 2.C szakirány

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:

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

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

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

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.

Diszkrét matematika 2.

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

2. Visszalépéses keresés

Adatszerkezetek 2. Dr. Iványi Péter

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

Algoritmusok és adatszerkezetek 2.

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

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

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.

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

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

Adatszerkezetek II. 6. előadás

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

22. GRÁFOK ÁBRÁZOLÁSA

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.

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

SzA II. gyakorlat, szeptember 18.

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

Informatikai tehetséggondozás:

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

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

38. A gráfalgoritmusok alkalmazása

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

Adatszerkezetek I. 1. előadás

Algoritmuselmélet 7. előadás

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

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

Adatszerkezetek 7a. Dr. IványiPéter

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

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

Adatszerkezetek 1. előadás

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.

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

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

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

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

Adatszerkezetek II. 10. előadás

Diszkrét matematika 2.C szakirány

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

Az informatika kulcsfogalmai

Struktúra nélküli adatszerkezetek

Adatszerkezetek. Nevezetes algoritmusok (Keresések, rendezések)

Algoritmuselmélet 2. előadá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.

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

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

Mesterséges Intelligencia MI

Algoritmusok és adatszerkezetek gyakorlat 06 Adatszerkezetek

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

Tuesday, March 6, 12. Hasító táblázatok

Adatszerkezetek Tömb, sor, verem. Dr. Iványi Péter

Algoritmizálás, adatmodellezés 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:

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

Átírás:

Adatszerkezetek II. 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/30

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/30

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. 4/30

Gráfok bejárása Két alapvető stratégia: 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/30

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/30

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 Bejárás csúcsmátrix esetén. Futási idő: O(Pontszám 2 ) 7/30

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/30

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=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 Honnan(i):=p Bejárás csúcsmátrix esetén, elérési információval. 9/30

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=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 Táv(i):=Táv(p)+1 Bejárás csúcsmátrix esetén, távolság információval. 10/30

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=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 t:=t+1; Elér(i):=t Bejárás csúcsmátrix esetén, elérési sorrend információval. 11/30

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 u őse v-nek. Kereszt-él: szürkéből szürkébe vagy feketébe vezető egyéb élek. Irányítatlan gráfban csak fa-él és kereszt-él van. Irányított gráfban lehet visszamutató él. 12/30

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). 13/30

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. 14/30

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 ) 15/30

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) 16/30

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 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úcsmátrix esetén, elérési információval. 17/30

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 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úcsmátrix esetén, távolság információval. 18/30

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=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; 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úcsmátrix esetén, elérési és elhagyási idő információval. 19/30

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). 20/30

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 a fában v egy őse az u-nak. Előremutató él(u,v): szürkéből feketébe vezet v utóda u-nak. Kereszt-él: szürkéből feketébe vezető egyéb élek v nem utóda u-nak. Irányítatlan gráfban csak fa-él és visszamutató él van. 21/30

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. 22/30

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ő? 23/30

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. 24/30

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. 25/30

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 26/30

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? 27/30

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. 28/30

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. 29/30

Adatszerkezetek II. 2. előadás vége