Budapesti Fazekas és ELTE Operációkutatási Tanszék 201. július 1.
Legrövidebb utak súlyozatlan esetben v 4 v 3 Feladat Hány élből áll a legrövidebb út ezen a gráfon az s és t csúcsok között? v v 6 v 7 s v 1 t v 2
Megoldás szélességi keresés Súlyozatlan eset 1 3 s 2 4(t) 2 3 2 v 2 v 1 v 4 v v 6 0(s) 1 v 3 t v 7
Legrövidebb utak szerkezete Súlyozatlan eset 1 3 s 2 4(t) 2 3 2 v 2 v 1 v 4 v v 6 0(s) 1 v 3 t v 7
Legrövidebb utak szerkezete Súlyozatlan eset, módosított gráf s 1 3 x v 1 v 4 2 4(t) 2 v 2 v v 6 2 3 v 3 v 7 0(s) 1 t
v 4 v 3 4 6 3 v t 2 2 4 v 6 3 v 7 7 s 6 v 1 v 2 Feladat (feladatsor/1b) Park, ösvények, sétaidő. Legrövidebb s-ból t-be menő séta? Feladat Adott egy G = (V, E) gráf és az élein egy l : E R + hosszúságfüggvény. Adott s, t V csúcsokra keressük a minimális összhosszúságú st utat.
Egy ötlet 2 4 3
Egy ötlet 2 4 3 Nagy (bonyolult) élhosszak esetén nagyon megnő a lépésszám.
Miért nem jó a szélességi bejárás? Legrövidebb utak súlyozott gráfokban v 4 v 3 4 8 3 v t 2 2 4 v 6 3 v 7 7 s 6 v 1 v 2 A szélességi keresés a legkevesebb élből álló utakat találja meg, de itt a minimális összhosszúságú út élből áll.
(196) x y z Lezárt (átvizsgált) Nem lezárt (elért) Nem lezárt (nem elért) Edsger W. Dijkstra (1930-2002) Elért csúcsokon d(v) érték. Ez alapján választjuk a következőt. Néha update-elni kell a d(v) értéket.
1. fázis v 4 v 3 4 v 2 6 3 t 2 v 6 3 v 7 7 4 v 2 v d(v) sz. lez.? s 0 - L v 1 6 s N v 4 s N s 6 v 1
2. fázis v 4 v 3 4 v 2 6 3 t 2 v 6 3 v 7 7 4 v 2 v d(v) sz. lez.? s 0 - L v 4 s L v 1 6 s N v 9 v 4 N s 6 v 1
3. fázis v 4 v 3 4 v 2 v 6 3 6 3 t 2 7 v 7 4 v 2 v d(v) sz. lez.? s 0 - L v 1 6 s L v 4 s L v 2 11 v 1 N v 9 v 4 N v 6 13 v 1 N s 6 v 1
4. fázis most jön az érdekes lépés! v 4 4 v 2 v 6 v 7 v 3 s 6 v 1 3 6 7 t 2 3 4 v2 v d(v) sz. lez.? s 0 - L v 1 6 s L v 4 s L v 9 v 4 L v 2 11 * v 1 N v 3 1 v N v 6 11 v N *Holtverseny esetén választhatunk pl. lexikografikus sorrend szerint.
Végállapot Végül a 8. fázisban t-t is lezárjuk, és leolvassuk a végeredményt. v 4 v 3 4 v 2 6 3 t 2 v 6 3 v 7 7 s 6 v 1 4 v 2 v d(v) sz. lez.? s 0 - L v 1 6 s L v 2 11 v 1 L v 3 1 v 4 L v 4 s L v 9 v 4 L v 6 11 v L v 7 14 v 6 L t 16 v 7 L
Az algoritmus helyességének igazolása Az algoritmus helyessége a következő állításon múlik: Állítás Az algoritmus futásának tetszőleges köztes állapotában igaz: Minden L állapotú u csúcsra d(u) a legrövidebb su út hossza. A már elért N állapotú v csúcsokra d(v) értéke a legrövidebb olyan út hossza, ami csupa L állapotú csúcsokon át halad s-ből v-be. Teljes indukcióval könnyen igazolható.
A legrövidebb út kiolvasása v 4 v 3 4 6 3 v t 2 2 4 v 6 3 v 7 7 s 6 v 1 v 2 v d(v) sz l? s 0 - L v 1 6 s L v 2 11 v 1 L v 3 1 v L v 4 s L v 9 v 4 L v 6 11 v L v 7 14 v 6 L t 16 v 7 L
A legrövidebb út kiolvasása v 4 v 3 4 6 3 v t 2 2 4 v 6 3 v 7 7 s 6 v 1 v 2 v d(v) sz l? s 0 - L v 1 6 s L v 2 11 v 1 L v 3 1 v L v 4 s L v 9 v 4 L v 6 11 v L v 7 14 v 6 L t 16 v 7 L
Fizikai modell Feladat Egy asztalon fekvő néhány gyöngyöt változatos hosszúságú madzagokkal kötünk össze, így egy gráfszerű hálózatot kapunk. Fogjuk meg az egyik gyöngyöt és kezdjük függőlegesen felemelni az asztalról. Milyen sorrendben fog a többi gyöngy elemelkedni az asztalról?
Adjacencia-mátrix és irányított gráfok A B C D E F G H I Artúrbánya - 37-28 - 70-22 - Bélavár 21-32 84 19 31-20 6 Cecíliavásárhely 42 66 - - - 82 32-21 Dénesville - 28 32 - - 21 32 89 61 Elemérhalom 12-97 26 - - 72 34 83 Ferencváros 4-29 94 3 - - - 64 Gizellarév - 63 31 92-1 - 7 19 Hugófalva 31 21 42 - - 23 61-69 Ilonahegy 77-21 64-83 26 - -
Gráf megadása éllistával 0 1 7 1 2 2 2 1 3 1 3 7 3 4 4 0 2 4 2 3 1 4 4 4 3 8 2 4 8 0 7 3 2 1 2 3 4 8 4 4 7 3 8
A Dijkstra-algoritmus lépésszáma Nehéz értelmes matematikai állításokat megfogalmazni. Problémák: Mi is egy lépés? Hogyan mérjük az input méretét? Az O(...) jelölés fogalmilag nehéz; anélkül viszont minden rémesen bonyolult. Mégis fontos róla beszélni.
A Dijkstra-algoritmus lépésszáma Feladat (Feladatsor/12.) INPUT: Gráf éllistával (n = 1000, m = 000); l : E Q + ; s, t V. OUTPUT: legrövidebb st-út hossza. Számolósegéd (1 dollárért): összead vagy összehasonlít a) Elvállalnád-e a munkát, ha 2 millió dollárt ajánlanak érte? b) És 100 ezer dollárért?
A Dijkstra-algoritmus lépésszáma Egy n csúcsú és m élű gráfon naivan n 2 + 2m becslés adható: n-szer kell minimumot választani Minden él esetén 1 db összeadás és 1 db összehasonlítás
A Dijkstra-algoritmus lépésszáma Egy n csúcsú és m élű gráfon naivan n 2 + 2m becslés adható: n-szer kell minimumot választani Minden él esetén 1 db összeadás és 1 db összehasonlítás Ha a gráf ritka, akkor az n 2 tag dominál, ezt kellene csökkenteni. (A másikat úgyis reménytelen.)
Az n 2 javítása Hogyan ússzuk meg a sokszori minimumkeresést? Tartsuk eleve növekvő sorba rendezetten a csúcsokat. Beszúrás: log 2 n összehasonlítással megy. Csökkentés: törlés + beszúrás. (?) Felső becslés a dollárok számára: Az n = 1000, m = 000 esetben ez: 2 m + m log 2 n 2 000 + 000 10 < 10 Számítástechnikailag ezt nehéz kezelni! Erre lehet egy megoldás a bináris fa.
A bináris fa 3 4 7 9 10 8 12 6 10 13 10
A bináris fa 3 4 7 9 10 8 12 6 10 13 10 6
A bináris fa 3 4 7 9 10 8 12 6 10 13 10 6
A bináris fa új elem hozzáadása 3 4 7 9 6 8 12 6 10 13 10 10
A bináris fa új elem hozzáadása 3 4 7 9 6 8 12 6 10 13 10 10
A bináris fa új elem hozzáadása 3 4 6 9 7 8 12 6 10 13 10 10
A bináris fa új elem hozzáadása 3 4 6 9 7 8 12 6 10 13 10 10
A bináris fa új elem hozzáadása 3 4 6 9 7 8 12 6 10 13 10 10
Műveletek a bináris fán 3 4 6 9 7 8 12 6 10 13 10 10 Feladat Hogyan kell a bináris fát módosítani a következő esetekben? Egy elemet törlök. Egy elemet csökkentek. Egy elemet növelek.
A lépésszámról algoritmuselméleti nyelven n csúcsú és m élű gráfra: O(n 2 ) naiv O(m log 2 n) bináris fa O(m + n log 2 n) ún. Fibonacci-kupacokkal Bizonyos fontos speciális esetekben még ennél is jobb eredmények kaphatók. Igazából mindegyikhez oda kell érteni egy K szorzót, amennyiben legfeljebb K bitesek az élsúlyaink. Definíció Egy f : N R függvény esetén azt mondjuk, hogy egy algoritmus lépésszáma O(f (n)), ha van olyan c pozitív egész szám, amelyre bármilyen n pozitív egész esetén egy n bites inputra legfeljebb c f (n) lépésben lefut az algoritmus.
Alkalmazhatóság Optimális a következő értelemben: Nem ismert olyan algoritmus a legrövidebb út feladatra, ami minden inputra biztosan működik és jobb futásidőt garantál. Használják-e ipari útvonalkeresőkben?
A*-algoritmus Hogyan lehetne a rossz irányokat kizárni? Bevezetünk egy h : V R + függvényt, h(v) egy heurisztikus becslés v és t távolságára. (Pl. légvonalbeli távolság) Egy már elért csúcsra jelölje g(v) az eddig megtalált legrövidebb sv út hosszát, és tekintsük a következőt: f (v) = g(v) + h(v) A soron következő csúcs mindig a min. f (v) értékű nem lezárt csúcs. Egy csúcs esetleg többször is sorra kerülhet!
A*-algoritmus Feladat Bizonyítsd be, hogy ha a h : V R + optimista, azaz h(v) alulról becsüli a legrövidebb vt út hosszát minden v V esetén, akkor az A*-algoritmus egy optimális utat talál meg. Feladat Bizonyítsd be, hogy ha a h : V R + monoton, azaz minden uv élre: h(u) l(u, v) + h(v) akkor az A*-algoritmus csak egyszer viszgál át minden csúcsot. Hogyan találunk jó heurisztikát?
A Dijkstra-algoritmus egy érdekes variánsa Az l : E R függvény nem csak költség (hosszúság, idő) jellegű lehet, hanem kapacitás is (ilyenkor inkább c : E R). Feladat Adott egy úthálózat térképe (egyszerű gráffal modellezve). Mindegyik útszakaszról (élről) tudjuk, hogy legfeljebb mekkora tömegű teherautók közlekedhetnek rajta. Adjunk algoritmust, amely meghatározza, hogy legfeljebb milyen nehéz teherautóval lehet eljutni A-ból B-be.
A Dijkstra-algoritmus egy érdekes variánsa Az l : E R függvény nem csak költség (hosszúság, idő) jellegű lehet, hanem kapacitás is (ilyenkor inkább c : E R). Feladat Adott egy úthálózat térképe (egyszerű gráffal modellezve). Mindegyik útszakaszról (élről) tudjuk, hogy legfeljebb mekkora tömegű teherautók közlekedhetnek rajta. Adjunk algoritmust, amely meghatározza, hogy legfeljebb milyen nehéz teherautóval lehet eljutni A-ból B-be. Ilyenkor is működik a Dijkstra, csak helyett d(u) + l(u, v) < d(v) esetén d(u) + l(u, v) d(v) min{d(u), c(u, v)} > d(v) esetén min{d(u), c(u, v)} d(v)
Több optimális út Feladat (Feladatsor/8.) Egy gráffal megadott hálózatban minden útszakasznak (élnek) van hossza és útdíja is. Minimális útdíj-költséggel, ezen belül pedig a lehető legrövidebb úton szeretnénk eljutni S-ből T -be. Hogyan lehet megtalálni az optimális utat?
Több optimális út Feladat (Feladatsor/8.) Egy gráffal megadott hálózatban minden útszakasznak (élnek) van hossza és útdíja is. Minimális útdíj-költséggel, ezen belül pedig a lehető legrövidebb úton szeretnénk eljutni S-ből T -be. Hogyan lehet megtalálni az optimális utat? Első megoldási út: Trükkös súlyfüggvény: (c, l) vektorok. Összeadás és összehasonlítás is működik.
Több optimális út Feladat (Feladatsor/8.) Egy gráffal megadott hálózatban minden útszakasznak (élnek) van hossza és útdíja is. Minimális útdíj-költséggel, ezen belül pedig a lehető legrövidebb úton szeretnénk eljutni S-ből T -be. Hogyan lehet megtalálni az optimális utat? Első megoldási út: Trükkös súlyfüggvény: (c, l) vektorok. Összeadás és összehasonlítás is működik. Második megoldási út: Jellemezzük a legrövidebb utakat.
Segítő feladat: legkevesebb élű, azon belül legolcsóbb utak. 1 3 s 4 2 6 4(t) 3 v 1 v 4 2 3 2 3 3 7 4 2 v 2 v 3 v v 6 v 7 0(s) 6 1 t
Pontos élek Definíció Egy uv él pontos, ha d(v) d(u) = l(u, v). 1 4 9 6 17 3 2 3 11 3 14 7 4 11 0 6 6
Pontos élek Definíció Egy uv él pontos, ha d(v) d(u) = l(u, v). 1 4 9 6 17 3 2 3 11 3 14 7 43 11 0 6 6
Negatív élköltségek Feladat Működik-e a Dijkstra algoritmus, ha vannak negatív élköltségek is?
Negatív élköltségek Feladat Működik-e a Dijkstra algoritmus, ha vannak negatív élköltségek is? Nem, sőt más hatékony algoritmus sem ismert. A probléma NP-nehéz. Feladat (Feladatsor/1.) Van hatékony algoritmus a negatív élköltségek esetére. van hatékony algoritmus Hamilton-kör létezésének eldöntésére. Fontos speciális esetekben azért megoldható.
Konzervatív súlyozások Definíció Egy G = (V, E) irányított gráfon a c : E R költségfüggvény konzervatív, ha nincsen benne negatív összegű, egyirányú kör. Példa: energiavisszatápláló villanymozdonyok. Ebben az esetben meg tudjuk találni a min. összköltségű st-utat (de a Dijkstra nem jó, helyette Bellmann Ford-algoritmus).
Konzervatív súlyozások Definíció Egy G = (V, E) irányított gráfon a c : E R költségfüggvény konzervatív, ha nincsen benne negatív összegű, egyirányú kör. Példa: energiavisszatápláló villanymozdonyok. Ebben az esetben meg tudjuk találni a min. összköltségű st-utat (de a Dijkstra nem jó, helyette Bellmann Ford-algoritmus). Magyarázat: Legrövidebb sétát tudunk keresni, ez nem feltétlen út.
Hivatkozások Frank A.: Operációkutatás, Egyetemi jegyzet (2013), elérhető Frank András honlapján ELTE Egerváry Jenő Kutatócsoport: Operációkutatás példatár, http: //etananyag.ttk.elte.hu/files/downloads/_opkut_peldatar.pdf https://en.wikipedia.org/wiki/dijkstra s_algorithm Nemes Tihamér Országos Informatikai Tanulmányi Verseny archívuma (Programozás kategória) http://nemes.inf.elte.hu/nemes_archivum.html
Köszönöm a figyelmet!