Grfalgoritmusok Tassy Gergely Veres Pter Gimnzium Budapest 2015
Gráfalgoritmusok Tassy Gergely Veres Péter Gimnázium, Budapest 2015. június 30.
Miről lesz szó? n Euler-(kör)séta keresése n Minimális költségű feszítőfa keresése Szélességi bejárás n Mélységi bejárás n A bejárások alkalmazásai n n Feladatok
Euler-körséta keresése A G irányítatlan összefüggő gráfban n van zárt Euler-(kör)séta ↔ minden fokszám páros n van nyílt Euler-séta ↔ pontosan 2 páratlan fokszám Kérdések: n hogyan dönthető el az összefüggőség? (bejárások) n irányított eset (minden kifok=befok, ill. 1 -1 kivétel) n ha létezik Euler-körséta, hogyan találhatjuk meg? mohó algoritmus: menjünk előre új éleken, amíg csak lehet ¨ ha kész: vagy jó, vagy a maradékban is minden fokszám páros ¨ így rekurzívan felépíthető a séta ¨
Euler-körséta keresése mohó algoritmus: menjünk előre új éleken, amíg csak lehet ¨ ha kész: vagy jó, vagy a maradékban is minden fokszám páros ¨ így rekurzívan felépíthető a séta ¨
Fák tulajdonságai n Fák mini-max tulajdonsága: ¨ minimális összefüggő (élt elhagyva szétesik) ¨ maximális körmentes (élt behúzva kör áll elő) n Egy n csúcsú összefüggő gráfnak legalább n-1 éle van (bizonyítás állapotfüggvénnyel) ¨ minden élt elhagyunk, néhányat E-be visszateszünk ¨ számláló: hány komponensű E (kezdetben n) ¨ új él: ha körmentes, E-be (számláló 1 -gyel csökken), különben eldobjuk ¨ ha a végén k a számláló (= k komponensű E), akkor n -k él van E-ben (E feszítő erdő), k=1 -re az állítás
Minimális költségű feszítőfák n n Feszítőfa: egy összefüggő gráf éleinek olyan részhalmaza, amelyek fát alkotnak, és a gráf minden pontját érintik Élsúlyozott gráfban: keresünk egy olyan feszítőfát, amelyben az élsúlyok („költségek”) összege a legkisebb Alkalmazás: hálózatépítés (telefon, internet, autópálya stb. ) Mohó algoritmus: csak az aktuális lépésre figyel; a lokális optimumok globális optimumot adnak
Minimális költségű feszítőfák n Kruskal-algoritmus („optimista” módszer): ¨ növekvő sorrendben nézzük az éleket ¨ behúzunk egy élt, ha nem keletkezik kör ¨ az így kapott feszítőfa minimális költségű lesz 2 1 2 2 2 4 1 1 3 1 5 3 3
Minimális költségű feszítőfák n A „pesszimista” módszer: ¨ csökkenő sorrendben nézzük az éleket ¨ törlünk egy élt, ha szerepel körben (azaz a megmaradó gráf összefüggő) ¨ az így kapott feszítőfa minimális költségű lesz 2 1 2 2 2 4 1 1 3 1 5 3 3
Ahol nem jó a mohó algoritmus n n n Bármely két csúcs között 2 út legyen n csúcs esetén min. n él kell (kör) Minimális költségű Hamilton-kör keresése ¨ mohó algoritmus: élek növekvő sorrendben ¨ egy csúcsból 2 -nél több él nem indulhat ki ¨ csak akkor záródhat a kör, ha minden csúcs rajta van a mohó algoritmus köre a legrövidebb kör
Gráfok bejárása Bejárás = a gráf csúcsainak [éleinek] felsorolása valamilyen sorrendben n Segédeszköz későbbi algoritmusokhoz n ¨ feszítőfa előállítása ¨ összefüggőség ellenőrzése, útkeresés n Két nevezetes bejárás: ¨ szélességi (breadth-first-search, BFS) ¨ mélységi (depth-first-search, DFS) n Irányítatlan és irányított gráfra is működik
Gráfok bejárása Kell egy kiválasztott kezdőcsúcs (u), ahonnan indulunk n A bejárás követése: csúcsok színezésével n ¨ fehér: még nem jártunk itt ¨ szürke: már jártunk, de még nem végeztünk ¨ fekete: már jártunk, és végeztünk a csúccsal Kezdetben u szürke, a többi csúcs fehér n A bejárás végén minden csúcs fekete n
Gráfok bejárása Mélységi bejárás: Szélességi bejárás: 1 u 4 2 8 3 9 5 12 6 u 11 7 10 1 3 11 10 4 2 9 12 6 5 7 8 Feltehetjük, hogy a gráf összefüggő (ha nem az, akkor komponensenként egy-egy kezdőpontból külön-külön végezzük el a bejárást)
Gráfok bejárása Mélységi feszítőfa: Szélességi feszítőfa: u u Mindkét bejárással feszítőfát kapunk (ha minden csúcsot összekötünk azzal a csúccsal, ahonnan először elértük)
Gráfok bejárása Mélységi feszítőfa: Szélességi feszítőfa: u u „védekező” útvonal „támadó” útvonal „osztódó” lámpagyújtogató „feledékeny” lámpagyújtogató
Szélességi bejárás Kezdés: u az aktuális pont (szürke); majd ciklus: n az aktuális pont összes még fehér szomszédját szürkére színezzük n az aktuális pontot feketére színezzük n a legkorábbi szürkére színezett pont lesz az aktuális (ha nincs több szürke pont: vége) u 1 4 2 8 3 9 5 12 11 7 6 10
Mélységi bejárás Kezdés: u az aktuális pont (szürke); majd ciklus: n ha van az aktuális pontnak fehér szomszédja, akkor az első ilyenre lépünk, és az lesz az aktuális (szürke) n ha az aktuális pontnak egyik szomszédja se fehér, akkor feketére színezzük, és visszalépünk az őséhez n ha u fekete lett: vége 1 u 3 11 10 4 2 9 12 6 5 7 8
A szélességi bejárás alkalmazásai n Van-e út u-ból v-be (bejárjuk u-ból, elértük-e közben v-t) n Összefüggő-e a gráf (bejárjuk egy tetszőleges pontból; a kapott „feszítőfa” tartalmaz-e minden pontot) n Van-e kör a gráfban (keletkezik-e a bejárás során olyan él, amely nincs a feszítőfában) Legrövidebb utak – súlyozatlan eset n Legrövidebb (minimális élszámú) kör keresése [adott u csúcson át] n
Szélességi bejárás – legrövidebb út (súlyozatlan eset) n Minimális élszámú út u-ból v-be (u-ból az összes elérhető csúcsba) u 0 1 1 1 3 n 2 2 Emeletekre bontás 3 3 2 2 3
A mélységi bejárás alkalmazásai n Van-e út u-ból v-be (bejárjuk u-ból, elértük-e közben v-t) n Összefüggő-e a gráf (bejárjuk egy tetszőleges pontból; a kapott „feszítőfa” tartalmaz-e minden pontot) n Van-e kör a gráfban (keletkezik-e a bejárás során olyan él, amely nincs a feszítőfában) A bejárás mélységi és befejezési számai n Élek osztályozása n Topologikus sorrend, leghosszabb út n
A mélységi bejárás számai n n Mélységi (elérési) szám: milyen sorrendben értük el a csúcsokat (a szürkére színezés sorrendje) Befejezési (elhagyási) szám: milyen sorrendben fejeztük be a csúcsokat (a feketére színezés sorrendje) 1 12 u 11 3 10 2 3 10 49 12 6 2 11 58 6 7 94 75 81
Élek osztályozása a mélységi bejárás során (irányítatlan eset) n faél: a bejárás során még el nem ért csúcsba mutat (szürkéből fehérbe / kisebből nagyobb mélységi számúba) n visszaél: a bejárás során már elért csúcsba mutat (szürkéből szürkébe / nagyobból kisebb mélységi számúba) 1 12 u 11 3 mélységi számok befejezési számok 10 2 3 10 49 12 6 2 11 58 6 7 94 75 81
Élek osztályozása a mélységi bejárás során (irányított eset) A mélységi feszítőfára vonatkozóan egy a→b irányított él n faél, ha eleme a feszítőfának n visszaél, ha a leszármazottja b-nek (illetve a hurokél) n előreél, ha b leszármazottja a-nak, és nem faél n keresztél, ha a és b nem 1 12 3 10 49 u leszármazottjai egymásnak 11 3 2 11 58 94 75 12 6 6 7 mélységi számok befejezési számok 10 2 81
Irányított körmentes gráfok n n n n Directed Acyclic Graph (DAG): olyan irányított gráf, amelyben nincs irányított kör DAG egyik mélységi bejárásában sem lehet visszaél Ha van olyan mélységi bejárás, amelyben nincs visszaél, akkor a gráf DAG Tehát a DAG tulajdonság eldöntéséhez elegendő egy mélységi bejárásban megvizsgálni, hogy van-e visszaél Topologikus sorrend: egy irányított gráf csúcsainak olyan felsorolása, amelyben minden él előre mutat Ha G nem DAG, akkor nincs topologikus sorrendje (van benne irányított kör) Igaz-e a megfordítás? Igen.
Irányított körmentes gráfok n Ha G egy DAG, akkor van topologikus sorrendje. vegyük G egy tetszőleges mélységi bejárását ¨ a csúcsok befejezési szám szerinti csökkenő sorrendje jó lesz (ha lenne fordított a→b él, az csak visszaél lehetne) ¨ ha nem jutottunk el mindenhová, akkor folytatjuk ¨ A F B E C D (egy lehetséges) topologikus sorrend: B, A, C, F, D, E
Leghosszabb út keresése n n Általában nehéz, de DAG-ban könnyű PERT-módszer: részfeladatok ütemezése (Program Evaluation and Review Technique) az a→b irányított él súlya azt mondja meg, hogy (legalább) mennyi időnek kell eltelnie a elkezdése után b elkezdéséig ¨ nem lehet irányított kör (körbevárás), így feltehető, hogy DAG ¨ mennyi az összes tevékenység elvégzéséhez szükséges minimális idő? („leghosszabb út hossza”) ¨ mik a kritikus tevékenységek, amik nem csúszhatnak? (mert csúszásuk a teljes befejezési idő csúszását is jelentené) ¨
Leghosszabb út keresése n n c(uv) = az uv él súlya; t(u) = u kezdési ideje Topologikus sorrendben: kezdési idők mohó kiszámítása t(v) = max { t(u) + c(uv) | uv él } 5 2 A 3 B 5 C 6 2 1 F B 2 A 3 C 2 F 3 D 4 E 6 3 D 1 6 E 4 0 2 6 5 8 11 15 max {0+5; 2+3} max {2+6; 5+2} max {5+1; 8+3} max {8+6; 11+4}
Leghosszabb út keresése n n 2 uv kritikus él, ha t(v) = t(u) + c(uv) kritikus út: kritikus élekből áll - ementén nem csúszhatnak a részfeladatok („kritikus tevékenységek”) A 3 B 5 C 6 2 1 F 6 3 D 5 E 4 1 B 2 A 3 C 2 F 3 D 4 E 6 0 2 5 6 8 11 15 kritikus (leghosszabb) út: B-A-F-D-E kritikus tevékenységek: B, A, F, D, E (C csúszhat max. 1 egységet)
Források n n n Lovász-Pelikán-Vesztergombi: Diszkrét matematika Rónyai-Ivanyos-Szabó: Algoritmusok Friedl-Recski-Simonyi: Gráfelméleti feladatok Lovász: Kombinatorikai problémák és feladatok Elekes: Kombinatorika https: //www. cs. usfca. edu/~galles/visualization
- Slides: 28