z előadához lőadá: Kedd :-: óra,. terem Hálózattervezé lapjai 7 : lapok, minimáli fezítőfák, legrövidebb utak Honlap: http://people.inf.elte.hu/lukovzki/oure/7nwt Irodalom: ktuáli publikációk J. heriyan, R. Ravi: pproximation lgorithm for Network Problem, Lecture Note. T. H. ormen,.. Leieron, R. L. Rivet: Introduction to lgorithm. MIT Pre, 99. Hálózatok truktúrájának özehaonlítáa Hierarchiku telefon-hálózat z Internet Tartalom lapok: algoritmu elemzé, gráfok, minimáli fezítőfák Multicating Steiner fák cce hálózat tervezé könnyű, közelítően legrövidebb utak fája Általáno hálózattervezéi probléma panner gráfok Hálózatok hibatoleranciája többzörö özefüggé, minimáli vágá WM optikai hálózatok útvonalzinezé é routing Megfigyeléi problémák művézeti galária probléma
zimptótika zimptótika Legyen f,g : N R két függvény. f majdnem mindig nem nagyobb g-nél, f mm g, ha n N n n, n N : f(n) g(n). f(n) = O(g(n)), ha c R : f mm c g. f(n) = Ω(g(n)), ha c R : c g mm f. f(n) = Θ(g(n)), ha f = O(g) é f = Ω(g). f(n) = o(g(n)), ha lim n f(n) / g(n) =. f(n) = ω(g(n)), ha lim n g(n) / f(n) =. (c kontan, n-től független) gy algoritmu komplexitáa: Legyen P : probléma, I : input, : algoritmu, ami megoldja P-t T (I) : az algoritmu futái ideje I inputtal S (I) : az algoritmu tárigénye I inputtal T (n) := up {T (I) : I n} S (n) := up {S (I) : I n} zimptótika Gráfok P probláma komplexitáa: T(P) = O(f(n)), ha algoritmu, hogy megoldja P-t é T (n)= O(f(n)) T(P) = Ω(f(n)), ha algoritmu ami megoldja P-t : T (n) = Ω(f(n)) T(P) = Θ(f(n)), ha T(P) = O(f(n)) é T(P)= Ω(f(n)) T(P) = o(f(n)), ha algoritmu, hogy megoldja P-t é T (n) = o(f(n)) T(P) = ω(f(n)), ha algoritmu, ami megoldja P-t : T (n) = ω(f(n)) Kommunikáció hálózatok reprezentációja: Gráfok Gráf G=(V,) V: omópontok (cúcok) halmaza : Élek halmaza mikor több gráffal dolgozunk, akkor egy G gráf comópontjainak halmazát V(G) vel, éleinek halmazát (G) vel jelöljük. omópont Router, Switch, Hot Él fizikai özekötteté (Link) 7 8
Irányítatlan gráfok z élekhez nic irány hozzárendelve z éleket a comópontok kételemű rézhalmazai reprezentálják: e={u,v} zt mondjuk, hogy az él e={u,v} a u é v comóponthoz inciden. Ha a comópont u é v egy éllel öze van kötve, akkor azt mondjuk, hogy u é v adjacen. Irányított gráfok (igráfok) Minden élnek van egy kezdöpontja é egy végpontja z éleket comópontok rendezett párjával reprezentáljuk e=(u,v). gy v comópont ki-foka: { e : e=(v,w) } gy v comópont be-foka: { e : e=(u,v) } gy peciáli eet: zimmetrikuan irányított gráfok: (u,v) (v,u). 9 Gráfok reprezentációja továbbiakben mindig n= V a comópontok záma é m= az élek záma a gráfban. G gráf zokáo reprezentációja: comópontok litája z élek litája Minden comóponthoz egy lita a hozzá inciden élekről (irányított gráfoknál egy külön lita a bemenő e a kimenő élekről) Tárigény: O(n+m) lternativ: djazecia mátrix nxn mátrix a ij =, ha comópont i é j öze vannak kötve egy éllel, egyebként. Tárigény: O(n ) Súlyozott gráfok comópontokhoz ill. élekhez gyakran úlyok vannak rendelve. Pl. minden élhez rendelhetünk egy kapacitát c : R + függvény által, ami a link ávzéleégét adja meg.
Út, kör gy út u-tól v-hez egy G=(V,) gráfban (u,v V) egymát követő élek egy olyan orozata (x,x ),(x,x ),,(x k-,x k ), ahol u = x, v = x k. gy egyzerű út u-tól v-hez egy olyan út u-tól v-hez, ahol minden comópont cak egyzer fordul elő. gy P út hoza egy úlyozatlan gráfban az élek záma P-ben. gy P út hoza egy úlyozott gráfban az élek úlyainak özege P- ben. gy kör (ciklu) egy G=(V,) gráfban egymát követő élek egy olyan orozata (x,x ),(x,x ),,(x k-,x k ), ahol x = x k. gy egyzerű kör egy olyan kör, amelyben minden comópont cak egyzer fordul elő. Özefüggőég, erő özefüggőég gy irányítatlan gráf G özefüggő, ha G-ben minden comópontból minden má comóponthoz létezik egy út. gy irányított gráf G erően özefüggő, ha G-ben minden comópontból minden má comóponthoz létezik egy irányított út. özefüggő nem erően özefüggő Telje gráf, rézgráf, indukált rézgráf ák, ezítőfák gy gráf telje, ha a gráf minden lehetége élet valóban tartalmaz. gy G =(V, ) gráf rézgráfja G=(V,) gráfnak, ha V V é. G indukált rézgráfja G-nek, ha minden olyan élet tartalmaz -ből, amely V két comópontját köti öze. rézgráf indukált rézgráf gy irányítatlan gráf egy fa, ha özefügő é nem tartalmaz kört. gy irányítatlan G=(V,) gráf fezítőfája egy olyan fa, melynek comóponthalmaza V é rézgráfja G-nek. comópontokat, melyek foka, leveleknek nevezzük. Ha egy fa egy comópontja ki van jelölve mint gyökér, akkor a fát gyökere fának nevezzük. gy gyökere fában minden v comópontnak a gyökér kivételével pontoan egy p(v) zülő comópontja van, amely v-hez adjacen é a v-től a gyökérhez vezető egyértelmű úton van. Minden má v-hez adjacen comópontot v gyermekének nevezünk. Ha egy irányítatlan gráf nem özefüggő, akkor a maximáli özefüggő rézgráfjait a gráf özefüggő komponeneinek nevezzük. gy fezítőfa
Minimáli ezítőfa gy minimáli fezítőfa kizámítáa Probléma: Építünk fel egy olyan kommunikáció hálózatot, amely az adott kommunikáció comópontok halmazát özefüggően özeköti. hhez a comópont párok között vezetéket fektethetünk le, amelyek költége a két végponttól függ. cél, a comópontokat minimáli költégű vezetékkel özefüggően özekötni. Legyen G(V,) egy irányítatlan gráf úlyozott élekkel, ahol az élek úlyát egy c : R + függvény adja meg. gy minimáli fezítőfa (MST) G-ben egy olyan fezítőfa T=(V, ), amelyre c(t) := e c(e) minimáli. Tétel : Legyen egy olyan élhalmaz, hogy G-nek létezik egy T minimáli fezítőfája, amely minden -beli élet tartalmaz. Legyen T egy rézfája T-nek, amely által adott. Legyen e egy él, melynek úlya minimáli azon élek között, melyek egyik végpontja T -ben, a máik G\T -ben van. kkor létezik egy minimáli fezítőfa, ami U {e} minden élét tartalmazza. T e G\T 7 8 gy minimáli fezítőfa kizámítáa gy minimáli fezítőfa kizámítáa iz.: Legyen T egy minimáli fezítőfája G-nek, ami tartalmazza -t. Ha T az e élet i tartalmazza, kéz vagyunk. Tegyük fel, hogy e T. kkor T U{e} tartalmaz egy kört, ami T -beli é G\T -beli comópontokat i tartalmaz. Így -nek tartalmaznia kell az e élen kívül legalább mégegy e élnet T é G\T között. Mivel e úlya minimáli minden ilyen él között, c(e) c(e ). Legyen T = T U {e} \ {e }. kkor T egy fezítőfa, melyre c(t ) c(t), é T tartalmazza U{e} t. Tétel implikálja, hogy egy minimáli fezítőfát ki tudunk zámítani úgy, hogy egy üre élhalmazzal indulunk é minden lépében hozzádunk -hez egy olyan e élet, amely az öze él közül, ami az aktuáli rézfákból kivezet, minimáli úlyú. T e G\T e 9
Krukal algorithmua Krukal algoritmuának helyeége Input: gy özefüggő irányítatlan G=(V,) gráf c : R + élúlyokkal Output: G egy minimáli fezítőfája T=(V, ) :=Ø; for all e={u,v} úly zetint növekvő orrendben do if u é v különböző özefüggő komponenében van G =(V, )-nek then := U{e}; fi; od; return T=(V, ); 7 e Indukció: =Ø : az üre élhalmazt minden minimáli fezítőfa tartalmazza. Legyen az aktuáli élhalmaz. Indukció feltétel: -t tartalmazza egy minimáli fezítőfa T. Legyen e={u,v} az az él, ami éppen feldolgozára kerül. Ha u é v comópont T ugyanazon T rézfájában van, akkor T U{e} tartalmaz egy kört, úgy hogy e egy maximáli úlyú él -ben, mivel az élek úly zerint növekvő orrendben kerülnek feldolgozára. Következéképpen e nem kerül bele -be. Ha u é v comópont T különböző özefüggő komponenében van, akkor {u,v} egy minimáli úlyú él, ami az u-t tartalmazó rézfából kivezet, mivel az élek úly zerint növekvő orrendben kerülnek feldolgozára. kkor Tétel zerint létezik egy minimáli fezítőfa, ami az U{e} élhalmazt tartalmazza. Így e belekerül -be. Krukal algoritmuának elemzée z élek orbarendezée: O(m log m) = O(m log n) idő, O(m) tár Teztelni, hogy az éppen feldolgozára kerülő él végpontjai ugyanabban az özefüggő komponenben vannak-e, é ha nem, akkor a két özefüggő komponen egyeítée: amortizáltan O(α(m,n)) idő. Union-ind adattruktúra egítégével (R. Tarjan, 979) α(m,n) az ckermann függvény egy funkcionáli inverze: α(m,n) = min{ z : (z, m/n ) > log n }, ahol (i,)=, (i,)= ha i, (,j)=j ha j, (i,j)= (i-, (i,j-)) ha i, j. Prim algoritmua Kiválaztunk egy tetzőlege comópontot, mint kezdőpont. Mindig azt a T rézfát tekintjük, amely -t tartalmazza. z öze T -ből kivezető él közül kiválaztunk egy minimáli úlyút é hozzáadjuk -hez. záltal T minden lépében egy éllel é egy comóponttal lez nagyobb. Minden időpontban cak egy T rézfa van, ami több mint egy comópontot tartalmaz. Tétel feltételei teljeülnek, így n- lépé után T egy minimáli fezítőfává nő. T e G\T Özeen: O(m log n) idő, O(n+m) tár
Prim algoritmua Hogyan lehet minden lépében a hozzáadandó e élet hatékonyan meghatározni? e úlya minimáli kell hogy legyen mindazon élek között, amelyek egy T -beli comópontot egy G\T -beli comóponttal kötnek öze. hhez egy u.n. Priority-Queue adattruktúrát haználunk. gy Priority-Queue Q a következő operációkat bocájtja rendelkezére: Q.Inert(e,p): e elem hozzáadáa p prioritáal Q-hoz, Q.ecreaePriority(e,p): cökkenti a prioritáát a Q -ban már tartalmazott e elemnek p-re,, Q.eleteMin(): vizaadja Q legalaconyabb prioritáú elemét é törli azt Q-ból. lternatívák Q implementáláára: inári kupac (binary heap): mindhárom operació O(log n) idő alatt. ibonacci Heap: Inert é ecreaepriority O() időben é eletemin O(log n) időben amortizáltan. Prim algoritmua Invariánok: Q taralmazza az öze v G\T comópontot, ami T -ből egy éllel elérhető. Legyen e v egy minimáli úlyú él azon élek közül, melyek egy T -beli comópontot kötnek öze v-vel. kkor v prioritáa Q-ban: c(e v ). Minden v comóponthoz, ami Q-ban van, nyilvántartjuk egy from[v] változóban a minimáli úlyú e v -t élet T und v között. Inicializálá: tartcomópont minden v zomzédját beletezük Q-ba c({,v}) prioritáal é e={,v} élet tároljuk from[v]-ban. Prim algoritmua Prim algoritmua következő élet, amit -hez hozzáadunk, a Q.eletMin() operacióval határozhatjuk meg: ezzel megkapjuk azt a v G\T comópontot, amely T -ből egy minimáli úlyú éllel érhető el. zután az e v =from[v] élet hozzáadjuk -hez. zután a következő adtokat kell aktualizálni, hogy az invariánok érvényeek maradjanak (v motmár T -ben van): v azon w zomzédjait, amik még nincenek benne Q-ban, hozzá kell adni Q-hoz c({v,w}) prioritáal é from[w]-ben tárolni kell {v,w}-t. v azon w zomzédjainál, amik már Q-ban vannak, é nagyobb a prioritáuk, mint c({v,w}), cökkenteni kell a prioritát c({v,w})-re é from[w]-ben tárolni kell {v,w}-t. T e v Input: egy özefüggő irányítatlan G=(V,) gráf c : R + élúlyokkal Output: G egy minimáli fezítőfája T=(V, ). := tetzőlege tartcomópont V-ből;. ready[]:=true;. ready[v]:=fale, v V \ {};. priority_queue Q;. for all e={,v} do. from[v] := e; 7. Q.Inert(v,c(e)); 8. od; 9. :=Ø;. while < V - do. v := Q.eleteMin();. := U {from[v]};. ready[v]:=true;. for all e={v,w} do. if w Q and c(e)<c(from[v]) then. from[v]:=e; 7. Q.ecreaePriority(w,c(e)); 8. ele if w Q and not ready[w] then 9. from[w]:=e;. Q.Inert(w,c(e));. fi;. od;. od;. return T=(V, ); 7 8
Prim algoritmua utái idő (ibonacci Heap-pel): # Q.Inert(): n (comópontonként ) - O(n) idő # Q.eleteMin(): n (comópontonként ) - O(n log n) idő # Q.ecreaePriority(): m (élenként ) - O(m) idő # tezt a. é a 8. orban: m (élenként ) - O(m) idő Inicializálá: O(n) idő Özeen: O(n log n + m) idő Megjegyzéek z azimptótikuan leggyorabb algoritmu a minimáli fezítőfa kizámítáára O(nα(m,n) + m) időt é O(n+m) tárat igényel [. hazelle 998]. minimáli fezítőfa kizámítáának időigényére imert aló korlát Ω(n+m). Nyitott Probléma: Meg lehet-e javítani az aló vagy a felő korlátot? Tárzükéglet: O(n+m) 9 Legrövidebb utak fája ingle ource hortet path dott: gy irányított gráf G = (V,), c : R nem negatív élúlyokkal Kezdő comópont V Legyen P útvonal úlya c(p) := e P c(e) az élek úlyainak özege P-ben u é v távolága G-ben, u,v V, egy legrövidebb út úlya G-ben u é v között : d(u,v) := min{ c(p) : P egy út u-tól v-hez G-ben}. Kereük: egy legrövidebb utat kezdő comóponttól minden má v V \ {} comóponthoz G-ben eltezük, hogy minden v V \ {} elérhető -ből. Nem elérhető comóponthoz nem létezhet legrövidebb út em Megoldá: gy fa, melynek gyökere é minden v V \ {} comóponthoz tartalmaz egy legrövidebb utat -től v-hez G-ben ijktra algoritmua Ötlet: legrövidebb utakat hozuk zerint növekvő orrendben zámítjuk ki. Minden v V comóponthoz kizámítjuk a következő értékeket: d[v]: egy legrövidebb út hoza -től v-hez, pred[v]: a v-t megelőző comópont egy legrövidebb úton -től v-hez. z algoritmu végrehajtáa után az élhalmaz { (pred[v],v) : v V \ {} } megadja egy legrövidebb utak fáját gyökérrel G-ben. gy v comópontot kéz -nek jelölünk: ready[v] = true, ha már meghatároztunk egy legrövidebb utat -től v-hez (röv. legrövidebb -v utat). nem kéz comópontok halmazát, amelyeket egy current ditance d[v] kéz comópontból egy éllel elérünk, horizont-nak nevezzük. ready ource node horizon
ijktra algoritmua Invariánok: Minden horizont beli comópontot egy Q priority-queue-ban tárolunk, úgy hogy minden v Q comópontra a következő érvénye: d[v] egy legrövidebb -v út hoza mindazon utak között, melyek v-n kívül cak kéz comópontokat tartalmaznak, pred[v] a v-t megelőző comópont egy ilyen úton, v prioritáa Q-ban d[v] Inicializálá d[]:=, ready[]:=true, minden v zomzédjára: d[v]:=c(,v), pred[v]:=, ready[v]:=fale, Q.Inert(v,d[v] ). Minden v V \ {} comópontra: d[v]:=, ready[v]:=fale. ijktra algoritmua z invariánok megőrzée egy iteráció után Minden lépében egy új comópont lez kéz, egy comópont v minimáli prioritáal. d[v] már tartalmazza a helye értéket. Mivel v minimáli prioritáú comópont, minden olyan -v út úlya, amely nem kéz comópontot i tartalmaz, legalább olyan nagy, mint annak az útnak a hoza, amit már megtaláltunk a cak kéz comópontokat tartalmazó utak között. Legyen dj[v] := { u : (v,u) }, v V, a v-hez adjacen comópontok halmaza minden u dj[v], ha u Q, meg kell vizgálni, hogy -től u-hoz direkt v-ből egy rövidebb út vezet-e, mint azok az utak, amik cak v-től különböző kéz comópontot tartalmaznak. Ha igen, akkor aktualizáljuk pred[u] := v é d[u] := d[v] + c(v,u), cökkentük u prioritáát Q-ban. minden u dj[v], ha u Q é u nem kéz : pred[u] := v, d[u] := d[v] + c(v,u), u-t be kell zúrni Q-ba d[u] prioritáal. ijktra algoritmua ijktra algoritmua ijktra(g,,c) Output: egy legrövidebb utak fája T=(V, ) G-ben gyökérrel := Ø; ready[] := true; ready[v] := fale; v V \ {}; d[] := ; d[v] :=; v V \ {}; priority_queue Q; 7 forall v dj[] do 8 pred[v] := ; 9 d[v] := c(,v); Q.Inert(v,d[v]); od while Q Ø do v := Q.eleteMin(); := U {(pred[v],v)}; ready[v] := true; forall u dj[v] do 7 if u Q and d[v] + c(v,u) < d[u]) then 8 pred[u] := v; 9 d[u] := d[v] + c(v,u); Q.ecreaePriority(u,d[u]); ele if u Q and not ready[u] then pred[u] := v; d[u] := d[v] + c(v,u); Q.Inert(u,d[u]); fi od 7 od utái idő (ibonacci Heap-pel): # Q.Inert(): n (comópontonként ) -- O(n) idő # Q.eleteMin(): n (comópontonként ) -- O(n log n) idő # Q.ecreaePriority(): m (élenként ) -- O(m) idő # tezt a 7. é. orban: m (élenként ) -- O(m) idő Inicializálá: O(n) idő Özeen: O(n log n + m) idő Tárigény: O(n+m)
Lukovzki Tamá 7 Hálózattervezé, 7 ijktra: Példa zimmetrikuan irányított élek Lukovzki Tamá 8 Hálózattervezé, 7 OSP (Open Shortet Path irt) Routing Minden router tárol egy legrövidebb utak fát, a legrövidebb utakat aját magától minden cél-címhez. Startup: mikor egy router-t bekapcolunk, küld egy hello -comagot minden zomzédjának, Miután a hello -comagokat vizakapja Meghatároz egy routing kapcolatot mindazon router-ekkel a routing adatbankok zikronizáláával, amely routerek ezt a zinkronizálát megengedik. Update: Minden router rendzere időközönként küld egy update-üzenetet, amely a aját u.n. link-tate -jét (a routing-adatbankját minden má routerhez) írja le. Így minden router megkapja a lokáli hálózati topológia leíráát. Minden router kizámít egy legrövidebb utak fáját. z a fa minden kommunikáció célhoz megadja a következő routert, amin kereztül kell küldeni az üzenetet.