210 likes | 479 Views
Úlohy teorie grafů. RNDr. Jiří Dvořák, CSc. dvorak @uai.fme.vutbr.cz. Orientovaný graf. G = ( V , E ) V … množina uzlů (vrcholů) E … množina hran, E V 2 = V V. Neorientovaný a smíšený graf. G = ( V , E ) Neorientovaný graf :
E N D
Úlohy teorie grafů RNDr. Jiří Dvořák, CSc. dvorak@uai.fme.vutbr.cz Teorie systémů a operační analýza
Orientovaný graf G = (V, E) V … množina uzlů (vrcholů) E … množina hran, EV 2 = V V TSOA: Úlohy teorie grafů
Neorientovaný a smíšený graf G = (V, E) Neorientovaný graf: … množina všech dvouprvkových podmnožin množiny V Smíšený graf: Převod na orientovaný graf: Každou neorientovanou hranu nahradíme dvojicí opačně orientovaných hran. TSOA: Úlohy teorie grafů
Sled a cesta Orientovaný sled je posloupnost uzlů propojených hranami se stejnou orientací. Tedy posloupnost {i1 , i2 , … , ik }, kde ij V, tvoří orientovaný sled, jestliže (ij, ij+1) E pro všechna j = 1, …, k – 1. Sled je posloupnost uzlů propojená hranami bez ohledu na jejich orientaci. Tah je sled, ve kterém se neopakuje žádná hrana. Cesta je sled, ve kterém se neopakuje žádný uzel. Orientovaný tah (orientovaná cesta) je tah (cesta), kde všechny hrany mají shodnou orientaci. Graf se nazývá souvislý, jestliže mezi každými jeho dvěma uzly existuje sled. Orientovaný graf se nazývá silně souvislý, jestliže z každého uzlu existují orientované sledy do všech ostatních uzlů. TSOA: Úlohy teorie grafů
Kružnice a strom Kružnice je souvislý neorientovaný graf, jehož každý uzel inciduje právě se dvěma hranami. Strom je souvislý neorientovaný graf, který neobsahuje žádnou kružnici. TSOA: Úlohy teorie grafů
Cyklus a acyklický graf Cyklus je souvislý orientovaný graf, jehož každý uzel má právě jednu vstupní a jednu výstupní hranu. Acyklický graf je souvislý orientovaný graf, který neobsahuje žádný cyklus. 2 5 Graf je acyklický právě tehdy, když lze jeho uzly očíslovat tak, že pro každou hranu (i, j) platí, že i < j (topologické očíslování). 1 7 4 3 6 TSOA: Úlohy teorie grafů
Algoritmus topologického očíslování 1. Položme G1 = G a k = 1. 2. V grafu Gk najdeme uzel, který nemá žádné vstupní hrany a přidělíme mu číslo k. Pokud takový uzel neexistuje, znamená to, že graf G není acyklický a postup končí. 3. Z grafu Gk vytvoříme graf Gk+1 tak, že z něj vypustíme uzel s číslem k a všechny hrany, které z tohoto uzlu vystupují. 4. Je-li graf Gk+1 neprázdný, položíme k = k+1 a vrátíme se k bodu 2. V opačném případě postup končí (všechny uzly se podařilo topologicky očíslovat a graf G je tedy acyklický). TSOA: Úlohy teorie grafů
Ohodnocený graf Uzlové ohodnocení: a : V R Příklady interpretace: doba, zisk, náklady, kapacita, spolehlivost, … Hranové ohodnocení: c : E R Příklady interpretace: délka, doba, zisk, náklady, kapacita, spolehlivost, … TSOA: Úlohy teorie grafů
Tok v síti od zdroje ke spotřebiči Mějme orientovaný graf G = (V, E), uzly z, s V, zs a nezáporné hranové ohodnocení c, přičemž z je zdroj, s je spotřebič a c(i, j) = cij je kapacita hrany (i, j). Tok od zdroje ke spotřebiči je libovolné hranové ohodnocení x splňující podmínky: 0 x(i, j) c(i, j) pro vš. (i, j) E, Velikost toku = TSOA: Úlohy teorie grafů
Úloha nalezení maximálního toku od zdroje ke spotřebiči Maximalizovat za podmínek Speciální metoda řešení: Ford - Fulkersonův algoritmus TSOA: Úlohy teorie grafů
Řez v síti Mějme orientovaný graf G = (V, E), uzly z, s V, zs, přičemž z je zdroj a s je spotřebič. Nechť Vs a Vz jsou množiny uzlů takové, že z Vz ,s Vs , Vz Vs = , Vz Vs = V. Řezem v síti nazveme množinu hran Kapacita řezu je rovna součtu kapacit jeho hran: Ford - Fulkersonova věta: Maximální tok od zdroje ke spotřebiči se rovná kapacitě minimálního řezu, tj. TSOA: Úlohy teorie grafů
Ford - Fulkersonův algoritmus Algoritmus vychází z nějakého přípustného toku x. I. Hledání cesty ze zdroje do spotřebiče. Hledáme neorientovanou cestu ze zdroje do spotřebiče, na níž by bylo možno zvětšit tok, a přitom provádíme označování uzlů. Je-li možno tok na hraně (i, j) resp. na hraně (j, i) zvětšit resp. zmenšit o hodnotu j , označíme uzel j dvojicí (+i, j) resp. (–i, j) . Jestliže se podaří výše uvedenou cestu najít, pokračujeme etapou II. V opačném případě je aktuální tok maximální a postup končí. II. Zvětšení toku. Na cestě nalezené v předchozí etapě provedeme zvětšení toku a vracíme se na etapu I. TSOA: Úlohy teorie grafů
I. Hledání cesty Na počátku jsou všechny uzly neoznačeny. 1. Uzel z označíme dvojicí (+z, ) a považujeme jej za otevřený. 2. Vybereme libovolný otevřený označený uzel i, uzavřeme jej a provedeme následující operace: • Každý neoznačený uzel j, který je bezprostředním následníkem uzlu i a pro nějž je xij < cij , otevřeme a označíme jej dvojicí (+i, j), kde j = min {i , cij – xij}. • Každý neoznačený uzel j, který je bezprostředním předchůdcem uzlu i a pro nějž je xji > 0, otevřeme a označíme jej dvojicí (–i, j), kde j = min {i , xji}. 3. Opakujeme krok 2 až do označení uzlu s (pak přecházíme na krok 4) nebo do vyčerpání všech označených otevřených uzlů (pak je tok x maximální, přičemž množiny označených a neoznačených uzlů určují odpovídající minimální řez). TSOA: Úlohy teorie grafů
II. Zvětšení toku 4. Položíme j = s, = s . 5. Je-li uzel j označen dvojicí (+i, j), pak zvětšíme tok hranou (i, j) o hodnotu . Je-li uzel j označen dvojicí (–i, j), pak zmenšíme tok hranou (j, i) o hodnotu . 6. Je-li i z, položíme j = i a vracíme se na krok 5. V opačném případě je zvětšení toku ukončeno. Zrušíme označení všech uzlů a vracíme se na krok 1. TSOA: Úlohy teorie grafů
Délka cesty a vzdálenost v orientovaném hranově ohodnoceném grafu Délka cesty je dána součtem délek hran, tvořících cestu. (Orientovaná) vzdálenost z uzlu i do uzlu j: d(i, j) = délka nejkratší (orientované) cesty z uzlu i do uzlu j. Jestliže neexistuje (orientovaná) cesta z uzlu i do uzlu j, klademe d(i, j) = . Pozn.: V dalším textu budeme pod pojmy vzdálenost a cesta chápat orientovanou vzdálenost a orientovanou cestu. TSOA: Úlohy teorie grafů
Úloha nalezení nejkratší cesty Minimalizovat za podmínek kde cij je délka hrany (i, j). Optimální řešení (pokud existuje) obsahuje hodnoty xij = 1, jestliže hrana (i, j) leží na nejkratší cestě, a xij = 0 v opačném případě. TSOA: Úlohy teorie grafů
Vlastnosti vzdálenosti v grafu Jestliže graf neobsahuje cykly záporné délky, pak: • Pro všechny trojice uzlů i, j, k platí trojúhelníková nerovnost d(i, j) d(i, k) + d(k, j) • Pro každou dvojici různých vrcholů i, j platí Bellmanovy rovnice TSOA: Úlohy teorie grafů
Speciální algoritmy pro hledání nejkratších cest Předpokládejme, že graf neobsahuje cykly záporné délky. Pak je možno použít speciální algoritmy pro hledání nejkratších cest, které jsou založeny na předcházejících vlastnostech vzdálenosti v grafu (tj. na trojúhelníkové nerovnosti resp. na Bellmanových rovnicích). Dále uvedeme algoritmy, které jsou schopny najít nejkratší cesty (pokud existují) z nějakého uzlu s do všech ostatních uzlů grafu. Předpokládejme, že uzly grafu jsou očíslovány přirozenými čísly. Označme symbolem ps(i) bezprostředního předchůdce uzlu i na nejkratší cestě z uzlu s do uzlu i. Údaje ps(i) určují nejkratší cesty z uzlu s do libovolného uzlu grafu. Je-li ps(i) = –1, znamená to, že cesta z uzlu s do uzlu i neexistuje. Pro uzel s klademe ps(s) = 0. TSOA: Úlohy teorie grafů
Algoritmus pro libovolné ohodnocení hran 1. Polož d(s, s) = 0, ps(s) = 0 a pro každý uzel i s polož d(s, i) = ,ps(i) = –1. 2. Procházej hrany grafu v libovolném pořadí. Jestliže pro hranu (i, j) E je d(s, j) > d(s, i) + c(i, j), pak polož d(s, j) =d(s, i) + c(i, j), ps(j) = i. 3. Jestliže pro všechny hrany (i, j) Ejiž platí, že d(s, j) d(s, i) + c(i, j), pak postup končí. TSOA: Úlohy teorie grafů
Algoritmus pro nezáporné ohodnocení hran Označme symbolem D množinu uzlů, o nichž víme, že hodnota d(s, k) je již definitivní. 1. Polož d(s, s) = 0, ps(s) = 0 a pro každý uzel i s polož d(s, i) = ,ps(i) = –1. Dále polož D = {s}, k= s. 2. Prozkoumej všechny hrany (k, j) E, pro něž j D. Jestliže d(s, j) > d(s, k) + c(k, j), pak polož d(s, j) =d(s, k) + c(k, j), ps(j) = k. 3. Je-li D = V, pak konec (byly nalezeny cesty do všech vrcholů). V opačném případě najdi uzel k Dtakový, že d(s, k) = min {d(s, j) | j D}. 4. Je-li d(s, k) = , pak konec (žádný další vrchol již není dostupný z vrcholu s). V opačném případě zařaď vrchol k do množiny D a pokračuj krokem 2. TSOA: Úlohy teorie grafů
Algoritmus pro acyklický graf Předpokládáme, že uzly jsou očíslovány topologicky čísly od 1 do n. 1. Polož d(s, s) = 0, ps(s) = 0 a pro každý uzel i s polož d(s, i) = ,ps(i) = –1. 2. Pro j = s+1, … , n proveď : 2.1 Jestliže uzel j má nějaké bezprostřední předchůdce, pak polož 2.2 Jestliže d(s, j) < , pak položps(j) = i*, kde i* je takové, že d(s, j) =d(s, i*) + c(i*, j). TSOA: Úlohy teorie grafů