Gráfalgoritmusok Tassy Gergely Veres Péter Gimnázium, Budapest június 30.
Euler-(kör)séta keresése Minimális költségű feszítőfa keresése Szélességi bejárás Mélységi bejárás A bejárások alkalmazásai Feladatok Miről lesz szó?
Euler-körséta keresése A G irányítatlan összefüggő gráfban van zárt Euler-(kör)séta ↔ minden fokszám páros van nyílt Euler-séta ↔ pontosan 2 páratlan fokszám Kérdések: hogyan dönthető el az összefüggőség? (bejárások) irányított eset (minden kifok=befok, ill. 1-1 kivétel) 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 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ő) 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 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 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
Minimális költségű feszítőfák 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
Ahol nem jó a mohó algoritmus 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 legrövidebb kör a mohó algoritmus köre
Gráfok bejárása Bejárás = a gráf csúcsainak [éleinek] felsorolása valamilyen sorrendben Segédeszköz későbbi algoritmusokhoz feszítőfa előállítása összefüggőség ellenőrzése, útkeresés Két nevezetes bejárás: szélességi (breadth-first-search, BFS) mélységi (depth-first-search, DFS) 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 A bejárás követése: csúcsok színezésével 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 A bejárás végén minden csúcs fekete
Gráfok bejárása Szélességi bejárás: Mélységi bejárás: uu 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 Szélességi feszítőfa: Mélységi feszítőfa: uu 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 Szélességi feszítőfa: Mélységi feszítőfa: uu „osztódó” lámpagyújtogató „feledékeny” lámpagyújtogató „védekező” útvonal „támadó” útvonal
Szélességi bejárás Kezdés: u az aktuális pont (szürke); majd ciklus: az aktuális pont összes még fehér szomszédját szürkére színezzük az aktuális pontot feketére színezzük a legkorábbi szürkére színezett pont lesz az aktuális (ha nincs több szürke pont: vége) u
Mélységi bejárás Kezdés: u az aktuális pont (szürke); majd ciklus: 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) ha az aktuális pontnak egyik szomszédja se fehér, akkor feketére színezzük, és visszalépünk az őséhez ha u fekete lett: vége u
A szélességi bejárás alkalmazásai Van-e út u-ból v-be (bejárjuk u-ból, elértük-e közben v-t) Összefüggő-e a gráf (bejárjuk egy tetszőleges pontból; a kapott „feszítőfa” tartalmaz-e minden pontot) 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 Legrövidebb (minimális élszámú) kör keresése [adott u csúcson át]
Szélességi bejárás – legrövidebb út (súlyozatlan eset) Minimális élszámú út u-ból v-be (u-ból az összes elérhető csúcsba) u 0 Emeletekre bontás
A mélységi bejárás alkalmazásai Van-e út u-ból v-be (bejárjuk u-ból, elértük-e közben v-t) Összefüggő-e a gráf (bejárjuk egy tetszőleges pontból; a kapott „feszítőfa” tartalmaz-e minden pontot) 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 Élek osztályozása Topologikus sorrend, leghosszabb út
A mélységi bejárás számai 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) u
Élek osztályozása a mélységi bejárás során (irányítatlan eset) u 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) 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) mélységi számok befejezési számok
É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 faél, ha eleme a feszítőfának visszaél, ha a leszármazottja b-nek (illetve a hurokél) előreél, ha b leszármazottja a-nak, és nem faél keresztél, ha a és b nem leszármazottjai egymásnak mélységi számok befejezési számok u
Irányított körmentes gráfok 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 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 B CD E F (egy lehetséges) topologikus sorrend: B, A, C, F, D, E
Leghosszabb út keresése Á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 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 } A B CD E F BACF D E max {0+5; 2+3} max {2+6; 5+2} max {5+1; 8+3} max {8+6; 11+4}
Leghosszabb út keresése 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 B CD E F BACF D E 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 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