A számítástudomány alapjai
Katona Gyula Y.
Számítástudományi és Információelméleti Tanszék Budapesti M ˝uszaki és Gazdaságtudományi Egyetem
Legszélesebb utak
Katona Gyula Y. (BME SZIT) A számítástudomány alapjai Legszélesebb utak 1 / 11
Legszélesebb utak
Definíció
Jelöljük gráf e élének szélességét w(e)-vel. Legyen a gráf egy P útjának szélessége az úton található legkisebb szélesség ˝u él szélessége, azaz w(P) = mine∈P{w(e)}.
Feladat
Keressük meg egy gráf s pontjából a többi pontjába a legszélesebb utakat.
Keressük meg egy gráf bármely két pontja között a legszélesebb utakat.
Például egy számítógép hálózatban keressük a legnagyobb sávszélesség ˝u összeköttetést.
Legszélesebb utak keresése irányítatlan gráfban
Módosítsuk a Kruskal algoritmust: Minden lépésben a legszélesebb olyan élet választjuk, ami még nem alkot kört a már korábban
kiválasztottakkal.
Tétel
Egy összefügg ˝o gráfban az így kapott feszít ˝ofa a gráf bármely két pontja között egy legszélesebb utat határoz meg.
Bizonyítás.
Jelöljük F -el az algoritmus által adott fát.Indirekt tegyük fel, hogy
valamely s,t pontokra van olyan P-vel jelölt s−t út, amelyik szélesebb az F -beli s − t útnál.Legyen e az F -beli s− t út egy minimális
szélesség ˝u éle.Mivel P szélesebb w(e)-nél, ezért P minden éle is szélesebb w(e)-nél.
Katona Gyula Y. (BME SZIT) A számítástudomány alapjai Legszélesebb utak 3 / 11
Legszélesebb utak keresése irányítatlan gráfban
Bizonyítás.
Ha F-b ˝ol elhagyjuk e-t, két komponensre esik, s az egyik, t a másik komponensbe esik. A P útnak van olyan e0 éle, ami F − e két
komponense között megy. Ekkor w(e0) > w(e).
Amikor az algoritmus az e élet bevette a fa élei közé, akkor e0-t kellett volna választania, hiszen az sem alkothatott kört az F korábban
kiválasztott éleivel, de nagyobb a szélessége.
Megjegyzés
Az így konstruált fa egyébként egy maximális össz-szélesség ˝u (=max.
súlyú) feszít ˝ofa is egyben.
Legszélesebb utak keresése irányított gráfban
Módosítsuk a Dijkstra algoritmust:
Minden pontra nyilvántartjuk az addig megtalált legszélesebb út szélességét: w(v)
Kezdetben: w(s) = ∞ és minden v 6= s-re w(v) = 0.
Javítás az e = (a,b) élen: Ha min(w(a),w(e)) > w(b), akkor legyen w(b) = min(w(a),w(e)).
u0 kiválasztása: Válasszuk a T-b ˝ol azt az u0 pontot, amire w(u0) maximális.
Katona Gyula Y. (BME SZIT) A számítástudomány alapjai Legszélesebb utak 5 / 11
Legszélesebb utak keresése irányított gráfban
Állítás
Az így kiválasztott u0-ra w(u0) a legszélesebb út szélessége lesz.
Bizonyítás.
A bizonyítás ugyanúgy m ˝uködik, mint a Dijkstra algoritmus
bizonyítása. Ehhez elég, hogy az út szélesség definíciója rendelkezik a következ ˝o 2 tulajdonsággal:
Egy út egyik részútja sem lehet kevésbé széles az egész út szélességénél.
Ha az út egy részét (pl. az elejét) keskenyebbre cseréljük, akkor az egész út szélessége nem növekedhet.
Legszélesebb legrövidebb utak
Feladat
Keressük a legrövidebb utat, de ha több legrövidebb is van, akkor azok közül a legszélesebbet.
Módosítsuk a Dijkstra algoritmust:
Minden pontra nyilvántartunk egy rendezett párt: (d(v),w(v)), ahol d(v) az eddig megtalált legrövidebb út hossza, w(v) pedig az ilyen rövidek közül az eddig megtalált legszélesebb út szélessége.
Kezdetben: (d(s),w(s)) = (0,∞) és minden v 6= s-re (d(v),w(v)) = (∞,0).
Katona Gyula Y. (BME SZIT) A számítástudomány alapjai Legszélesebb utak 7 / 11
Legszélesebb legrövidebb utak
Javítás az e = (a,b) élen: Ha d(a) +d(e) < d(b), akkor d(b) = d(a) +d(e),w(b) = min(w(a),w(e)).
Ha d(a) +d(e) = d(b), akkor d(b) nem változik, de ha w(b) < min(w(a),w(e)), akkor w(b) = min(w(a),w(e)).
Más esetben nincs változás.
u0 kiválasztása: Válasszuk a T-b ˝ol azt az u0 pontot, amire (d(u0),w(u0)) lexikografikus értelemben minimális, azaz
els ˝osorban a d értékek nagysága dönt (a kisebbet választjuk), ha azok egyenl ˝oek, akkor a w érték dönt (a nagyobbat választjuk).
Legrövidebb legszélesebb utak
Feladat
Keressük a legszélesebb utat két adott pont között, de ha több legszélesebb is van, akkor azok közül a legrövidebbet.
Sajnos itt nem m ˝uködik a Dijkstra algoritmus módosítása.
Ugyanis egy részút lehet lehet szélesebb, mint az egész út, viszont ezen részúton az egész út szélességének megfelel ˝oek közül kellene a legrövidebbet nyilvántartani, nem a részút szélességének megfelel ˝oek közül.
Katona Gyula Y. (BME SZIT) A számítástudomány alapjai Legszélesebb utak 9 / 11
Legrövidebb legszélesebb utak
Algoritmus
Valamely adott w élszélesség esetén a w-nél keskenyebb éleket elhagyva, BFS-el eldönthetjük, hogy a maradék gráfban van-e út a két pont között.
Bináris kereséssel meghatározzuk, hogy mi az a legnagyobb
szélesség, amikor még van ilyen út, ez megadja a legszélesebb út szélességét.
Ebben a gráfban (a keskenyebb élek elhagyása után), Dijkstra algoritmusával megkeressük a legrövidebb ilyen szélesség ˝u utat.
Ez az algoritmus lassabb, mint a Dijkstra algoritmusa és csak két adott pont között keresi meg az utat.
Legrövidebb legszélesebb utak
Egy gyakran el ˝oforduló speciális eset, amikor az élek hossza
egységesen 1, azaz a legszélesebb utak közül a legkevesebb élb ˝ol állót keressük.
Ilyenkor használhatjuk a Dikstra-ához hasonlóan módosított Ford algoritmust az élszélességekkel. Ez a k-adik körben meghatározza a legfeljebb k élb ˝ol álló utak közül a legszélesebbet, amib ˝ol már
könnyen megkapható az eredmény.
Katona Gyula Y. (BME SZIT) A számítástudomány alapjai Legszélesebb utak 11 / 11