20.07.2013 Views

Grafy.nb

Grafy.nb

Grafy.nb

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

<strong>Grafy</strong>.<strong>nb</strong> 1<br />

1. Základní pojmy<br />

1. Definice grafu<br />

<strong>Grafy</strong><br />

1.1. Orientovaný graf. Orientovaný graf je trojice G = HV, E, L tvořená konečnou množinou V, konečnou<br />

množinou E disjunktní s V a zobrazením : E Ø V 2 . Prvky množiny V nazýváme vrcholy, prvky množiny E<br />

nazýváme orientovanými hranami a zobrazení , které každé hraně e œ E přiřazuje uspořádanou dvojici vrcholů<br />

HeL = Hx, yL, nazýváme vztahem incidence. Vrchol x nazýváme počátečním vrcholem hrany e a značíme jej PVHeL<br />

a vrchol y nazýváme koncovým vrcholem hrany e a značíme jej KVHeL. O vrcholech x, y pak říkáme, že jsou<br />

incidentní s hranou e, a o hraně e říkáme, že je incidentní s vrcholy x, y nebo že spojuje vrcholy x, y. Oba vrcholy<br />

x, y také nazýváme krajními vrcholy hrany e. Jestliže koncový vrchol hrany je identický s jejím počátečním vrcholem,<br />

nazýváme hranu (orientovanou) smyčkou. Vrchol, který není incidentní s žádnou hranou, nazýváme izolovaným<br />

vrcholem.<br />

V některých případech je orientace hran nepodstatná, tj. nepotřebujeme rozlišovat mezi počátečními a koncovými<br />

vrcholy hran. Proto zavádíme pojem neorientovaného grafu, který vznikne tím, že zapomeneme na pořadí vrcholů v<br />

uspořádaných dvojicích.<br />

1.2. Neorientovaný graf. Neorientovaný graf je trojice G = HV, E, L tvořená konečnou množinou V, jejíž<br />

prvky nazýváme vrcholy, konečnou množinou E disjunktní s V, jejíž prvky nazýváme neorientovanými hranami, a<br />

zobrazením , nazývaným vztah incidence, které každé hraně e œ E přiřazuje jedno- nebo dvouprvkovou množinu<br />

vrcholů. Tyto vrcholy nazýváme krajní vrcholy hrany. Říkáme také, že jsou incidentní s hranou e a hrana e je<br />

incidentní s těmito vrcholy nebo že spojuje tyto vrcholy. Hranu incidentní pouze s jedním vrcholem nazýváme<br />

(neorientovanou) smyčkou a vrchol, který není incidentní s žádnou hranou, nazýváme izolovaným vrcholem.<br />

1.3. Ohodnocený graf. V mnoha aplikacích pojmy orientovaného a neorientovaného grafu nepostačují pro<br />

adekvátní popis studovaného problému. Proto se často k hranám nebo vrcholům připojují číselné nebo i jiné údaje,<br />

které vyjadřují např. doby trvání nebo náklady činnosti, délky dopravních cest, propustnosti potrubí,<br />

pravděpodobnosti událostí apod. Graf, jehož hrany nebo vrcholy jsou opatřeny číselnými nebo jinými hodnotami, se<br />

nazývá ohodnocený graf nebo také síť.<br />

1.4. Geometrický model grafu. Oba druhy grafů lze s výhodou znázorňovat graficky. Vrcholy obvykle<br />

kreslíme jako body nebo kroužky a hrany jako úsečky nebo oblouky spojující příslušné dvojice vrcholů. Je-li hrana<br />

orientovaná, značíme orientaci šipkou směřující od počátečního ke koncovému vrcholu. Je třeba mít na paměti, že týž<br />

graf lze nakreslit mnoha k nepoznání různými způsoby.<br />

Formálně definujeme diagram neboli geometrický model neboli nakreslení grafu jako dvojici zobrazení Hj, yL, kde<br />

j je prosté zobrazení množiny vrcholů do roviny a y každé (orientované) hraně spojující vrcholy x, y přiřazuje<br />

(orientovaný) oblouk s krajními body jHxL, jHyL.<br />

Rovinný geometrický model je model, v němž libovolné dva oblouky přiřazené různým hranám mají společné<br />

nejvýše své krajní body, a rovinný neboli planární graf je graf s rovinným geometrickým modelem. Zdaleka ne<br />

každý graf je planární. Neplanární jsou např. grafy s geometrickými modely<br />

Obr.1.1.


<strong>Grafy</strong>.<strong>nb</strong> 2<br />

Prvním z těchto grafů je úplný graf K5 a druhým je úplný bipartitní graf K3,3.<br />

1.5. Poznámka k terminologii. Ani definice orientovaného a neorientovaného grafu, ani terminologie teorie<br />

grafů nejsou zdaleka jednotné, a to jak v naší, tak i ve světové literatuře. Základní pojmy mají sice společné jádro,<br />

mohou se však lišit v důležitých detailech. Proto je vždy nutné prostudovat úvodní partie každé knihy o grafech a<br />

seznámit se s používanými pojmy.<br />

2. Symetrizace, orientace a obrácení grafu<br />

2.1. Symetrizace orientovaného grafu. Symetrizací orientovaného grafu se nazývá neorientovaný graf, který<br />

dostaneme tak, že „zapomeneme“ na orientaci hran. Symetrizací orientovaného grafu HV, E, L je tedy neorientovaný<br />

graf HV, E, £ L, kde £ HeL = 8x


<strong>Grafy</strong>.<strong>nb</strong> 3<br />

3. Významné množiny hran a vrcholů<br />

Budeme používat následující označení:<br />

VHGL ... množina vrcholů grafu G, EHGL ... množina hran grafu G,<br />

» M » ... počet prvků konečné množiny M.<br />

3.1. Množiny vrcholů v orientovaných grafech. Nechť G = HV, E, L je orientovaný graf, x, y jeho libovolné<br />

vrcholy a A Œ V libovolná množina jeho vrcholů. Zavedeme následující pojmy a označení:<br />

V G + HxL = 8z œ V : Hx, zL œ HEL< = množina následníků vrcholu x, tj. množina všech vrcholů, do nichž vede<br />

hrana z vrcholu x.<br />

V G - HxL = 8z œ V : Hz, xL œ HEL< = množina předchůdců vrcholu x, tj. množina všech vrcholů, z nichž vede<br />

hrana do vrcholu x.<br />

VGHxL = V G - HxL ‹ VG + HxL = množina sousedů vrcholu x, tj. množina všech vrcholů spojených hranou<br />

s vrcholem x.<br />

VGHAL = ‹ 8VGHxL : x œ A


<strong>Grafy</strong>.<strong>nb</strong> 4<br />

3.6. Věta. V každém grafu G se součet stupňů všech vrcholů rovná dvojnásobku počtu hran.<br />

3.7. Multigraf a prostý graf. <strong>Grafy</strong>, orientované i neorientované, se dále dělí na multigrafy a prosté grafy.<br />

Multigraf je graf, v němž alespoň jedna hrana má násobnost větší než 1. Orientovaný multigraf je tedy orientovaný<br />

graf, v němž m + Hx, yL > 1 pro alespoň jednu dvojici vrcholů x, y, a neorientovaný multigraf je graf, v němž<br />

mHx, yL > 1 pro alespoň jednu dvojici vrcholů x, y.<br />

Prostý graf je graf, v němž všechny hrany mají násobnost nejvýše 1. Orientovaný graf je tedy prostý, jestliže v němž<br />

pro každou dvojici vrcholů x, y platí nerovnost m + Hx, yL § 1, a neorientovaný graf je prostý, jestliže v němž pro<br />

každou dvojici vrcholů x, y platí nerovnost mHx, yL § 1.<br />

Poznamenejme, že v literatuře je často slovem graf označován pouze prostý graf a že symetrizací prostého orientovaného<br />

grafu může vzniknout neorientovaný multigraf.<br />

4. Isomorfismus grafů, podgrafy a faktory grafů<br />

4.1. Izomorfismus grafů. Nechť G = HV, E, L a G' = HV ', E', 'L jsou grafy stejného typu, tj. oba orientované<br />

nebo oba neorientované. Izomorfismem grafu G na graf G' se nazývá uspořádaná dvojice H f , gL bijektivních zobrazení<br />

f : V Ø V ', g : E Ø E' zachovávajících vztahy incidence , ', tj. takových, že pro každou hranu e œ E platí<br />

implikace<br />

HeL = Hx, yL ï ' HgHeLL = H f HxL, f HyLL v případě orientovaných grafů,<br />

HeL = 8x, y< ï ' HgHeLL = 8 f HxL, f HyL< v případě neorientovaných grafů.<br />

Říkáme, že grafy G a G' jsou izomorfní, označení G @ G', existuje-li alespoň jeden izomorfismus G na G'. Zřejmě<br />

G @ G, G @ G' fl G' @ G a G @ G' fl G' @ G'' fl G @ G'',<br />

což znamená, že vztah izomorfismu grafů je reflexivní, symetrická a tranzitivní relace, tj. ekvivalence.<br />

4.2. Poznámka. Ve většině případů je obtížné rozhodnout, zda dva dané grafy jsou nebo nejsou izomorfní. Při<br />

řešení tohoto problému lze často využít tato jednoduchá pozorování:<br />

HaL Izomorfní grafy mají stejný počet vrcholů a stejný počet hran.<br />

HbL Vrchol stupně k resp. vstupního stupně k resp. výstupního stupně k může být izomorfismem zobrazen pouze na vrchol<br />

stupně k resp. vstupního stupně k resp. výstupního stupně k.<br />

HcL Dvojice sousedních vrcholů může být izomorfismem zobrazena pouze na dvojici sousedních vrcholů.<br />

HdL Jestliže se některá vlastnost grafu izomorfismem zachovává, pak dva grafy nemohou být izomorfní, pokud má tuto<br />

vlastnost pouze jeden z nich.<br />

4.3. Příklad. Tři neorientované grafy s diagramy<br />

6<br />

1 2<br />

5<br />

4<br />

3<br />

1 2<br />

5 6<br />

4<br />

Obr.1.4.<br />

jsou izomorfní, i když to na první pohled není zřejmé. Není však těžké ověřit, že jeden z možných izomorfismů<br />

prvního grafu na druhý je jednoznačně určen např. zobrazením vrcholů<br />

3<br />

3<br />

6<br />

1<br />

4<br />

5<br />

2


<strong>Grafy</strong>.<strong>nb</strong> 5<br />

1 # 1, 2 # 6, 3 # 5, 4 # 3, 5 # 5, 6 # 2<br />

a jeden z možných izomorfismů druhého grafu na třetí je jednoznačně určen např. zobrazením vrcholů<br />

Naproti tomu žádné dva z orientovaných grafů s diagramy<br />

6<br />

1 2<br />

5<br />

1 # 1, 2 # 4, 3 # 5, 4 # 2, 5 # 3, 6 # 6.<br />

4<br />

3<br />

1 2<br />

5 6<br />

4<br />

Obr.1.5.<br />

nejsou izomorfní, neboť první z nich obsahuje dva vrcholy s nulovým vstupním stupněm, druhý obsahuje pouze jeden<br />

a třetí neobsahuje žádný takový vrchol.<br />

4.4. Prosté orientované grafy a relace. Každý prostý orientovaný graf G = HV, E, L je izomorfní s grafem<br />

G' = HV, HEL, iL, jehož hranami jsou přímo uspořádané dvojice vrcholů a jehož vztahem incidence je identické<br />

zobrazení. Jinými slovy, hrany každého prostého orientovaného grafu lza pokládat za uspořádané dvojice vrcholů a<br />

každý prostý orientovaný graf lze, až na izomorfizmus, považovat za dvojici HV, RL, kde R Œ V 2 je binární relace na<br />

množině V.<br />

4.5. Podgrafy. Nechť G = HV, E, L a G' = HV ', E', 'L jsou grafy stejného typu, tj. oba orientované nebo oba<br />

neorientované.<br />

Řekneme, že graf G' je podgrafem grafu G, označení G Œ G',jestliže V ' Œ V, E' Œ E a vztah incidence ' je zúžením<br />

vztahu incidence . Jinými slovy, graf G' je podgrafem grafu G, vznikne-li z něj vynecháním některých vrcholů a<br />

hran. Podstatné přitom je, že s každým vynechaným vrcholem musí být vynechány také všechny hrany s ním incidentní.<br />

Řekneme, že graf G' je úplným podgrafem grafu G, je-li jeho podgrafem a obsahuje všechny jeho hrany, jejichž oba<br />

krajní vrcholy patří do V '. Jinými slovy, úplný podgraf vznikne vynecháním některých vrcholů a právě všech hran,<br />

které jsou s nimi incidentní. Úplný podgraf určený množinou vrcholů A Œ V je úplný podgraf s množinou vrcholů A.<br />

Řekneme, že graf G' je faktorem grafu G, je-li jeho podgrafem a V ' = V. Faktor grafu tedy vznikne vynecháním<br />

některých hran.<br />

Poznamenejme, že každý graf je pografem i faktorem sebe sama.<br />

4.6. Příklad. Uvažujme graf, jehož vrcholy jsou všechny křižovatky v ČR a hrany jsou silnice mezi nimi.<br />

Omezíme-li se na všechny křižovatky a silnice některého kraje, získáme úplný podgraf. Ponecháme-li všechny<br />

křižovatky a omezíme-li se na silnice 1. třídy, získáme faktor s mnoha izolovanými vrcholy.<br />

5. Sledy a odvozené pojmy<br />

5.1. Sledy. Posloupnost vrcholů a hran Hv0, e1, v1, e2, v2, ... , ek, vkL orientovaného grafu se nazývá orientovaným<br />

sledem, jestliže pro každou hranu ei z této posloupnosti PVHeiL = vi-1 a KVHeiL = vi.<br />

Posloupnost vrcholů a hran Hv0, e1, v1, e2, v2, ... , ek, vkL grafu, orientovaného nebo neorientovaného, se nazývá<br />

neorientovaným sledem, jestliže každá hrana ei z této posloupnosti spojuje vrcholy vi-1,vi, tj. je s těmito vrcholy<br />

incidentní.<br />

Vrchol v0 nazýváme v obou případech počátečním a vrchol vk koncovým vrcholem sledu. O sledu pak říkáme, že<br />

3<br />

3<br />

6<br />

1<br />

4<br />

5<br />

2


<strong>Grafy</strong>.<strong>nb</strong> 6<br />

vede z vrcholu v0 do vrcholu vk nebo že spojuje vrcholy v0, vk.<br />

V orientovaném i neorientovaném sledu na sebe vrcholy a hrany „navazují“, u orientovaného sledu však navíc<br />

požadujeme, aby všechny hrany byly orientovány směrem od počátečního ke koncovému vrcholu.<br />

Sled, který obsahuje jediný vrchol a žádnou hranu, se nazývá triviální. Triviální sled můřeme považovat za orientovaný<br />

i neorientovaný.<br />

Každý sled kromě triviálního je zřejmě jednoznačně určen posloupností hran.<br />

5.2. Tahy a cesty. Orientovaný (neorientovaný) sled, v němž se žádná hrana neopakuje, se nazývá orientovaným<br />

(neorientovaným) tahem. Orientovaný (neorientovaný) sled, v němž se žádný vrchol neopakuje, se nazývá<br />

orientovanou (neorientovanou) cestou. Protože ve sledu, v němž se neopakuje žádný vrchol, se zřejmě nemůže<br />

opakovat ani žádná hrana, každá cesta je tahem, ale tah nemusí být cestou.<br />

5.3. Uzavřené sledy, tahy a cesty. Sled, orientovaný nebo neorientovaný, který má alespoň jednu hranu a<br />

jehož počáteční a koncový vrchol splývají, se nazývá uzavřeným sledem. Analogicky se definuje uzavřený tah a<br />

uzavřená cesta. Pro uzavřenou neorientovanou cestu se používá název kružnice a pro uzavřenou orientovanou cestu<br />

se používá název cyklus.<br />

5.4. Dostupnost. Řekneme, že vrchol y orientovaného grafu G je orientovaně dostupný z vrcholu x, jestliže v<br />

grafu G existuje orientovaný sled vedoucí z vrcholu x do vrcholu y. Řekneme, že vrchol y grafu G, orientovaného<br />

nebo neorientovaného, je neorientovaně dostupný z vrcholu x, jestliže v grafu G existuje neorientovaný sled<br />

vedoucí z vrcholu x do vrcholu y. Snadno se ověří, že vrchol y je orientovaně resp. neorientovaně dostupný z vrcholu<br />

x právě tehdy, když v grafu existuje orientovaná resp. neorientovaná cesta vedoucí z x do y.<br />

5.5. Sledy v ohodnocených grafech. V grafech s ohodnocenými hranami má často dobrý smysl součet<br />

ohodnocení hran ve sledu. Tak je tomu např. tehdy, když ohodnocení vyjadřuje vzdálenost nebo nebo náklady na<br />

dopravu. Přitom ohodnocení každé hrany počítáme tolikrát, kolikrát se hrana vyskytuje ve sledu. Pro tento součet<br />

ohodnocení hran ve sledu se vžil termín délka sledu a v tomto smyslu se mluví o nejkratším nebo nejdelším sledu.<br />

Ve stejném smyslu se používají termíny délka tahu, cesty, cyklu resp. kružnice a termíny nejkratší resp. nejdelší<br />

tah, cesta, cyklus resp. kružnice.<br />

Termín délka sledu, tahu, cesty, cyklu resp. kružnice se často používá i pro označení počtu jejich hran. Z kontextu je<br />

však zpravidla zřejmé, zda tento termín označuje součet ohodnocení hran nebo o jejich počet. Kromě toho délka<br />

sledu, tahu, cesty, cyklu resp. kružnice ve smyslu počtu jejich hran je zřejmě rovna jejich délce ve smyslu součtu<br />

ohodnocení, je-li každá hrana ohodnocena jedničkou.<br />

6. Speciální grafy<br />

6.1. Diskrétní graf. Diskrétní graf je graf, který nemá žádnou hranu. Podle potřeby jej můžeme považovat za<br />

orientovaný nebo neorientovaný.<br />

6.2. Úplný orientovaný graf. Úplný orientovaný graf je prostý graf HV, RL, kde R je množina všech<br />

uspořádaných dvojic různých vrcholů z množiny V. Dva úplné orientované grafy jsou zřejmě izomorfní právě když<br />

mají stejný počet vrcholů.<br />

6.3 Úplný neorientovaný graf. Úplný neorientovaný graf je prostý neorientovaný graf bez smyček, jehož<br />

každé dva různé vrcholy jsou spojeny hranou. Třída izomorfismu takového grafu je zřejmě plně určena počtem jeho<br />

vrcholů. Je-li počet jeho vrcholů roven n, značíme jej Kn.<br />

K5<br />

K3,4<br />

Obr.1.6. Úplný graf K5 a úplný bipartitní graf K3,4.


<strong>Grafy</strong>.<strong>nb</strong> 7<br />

6.4. Bipartitní graf. Bipartitní graf G je graf, jehož množina vrcholů je sjednocením dvou disjunktních množin<br />

S, T, pro něž EHGL = WGHSL = WGHTL. Množiny S, T se nazývají strany bipartitního grafu. V orientovaném případě se<br />

zpravidla požaduje splnění silnější podmínky EHGL = W G + HSL = WG - HTL, tj. aby všechny hrany byly orientovány<br />

souhlasně. Množiny S, T, které však v obecném případě nejsou určeny jednoznačně ani jednou z uvedených podmínek,<br />

se nazývají strany bipartitníbo grafu.<br />

Úplný bipartitní graf je bipartitní graf se stranami S, T, v němž každá dvojice vrcholů x œ S, y œ T je spojena právě<br />

jednou hranou. Úplný bipartitní graf je zřejmě prostý, v orientovaném případě je izomorfní grafu HS ‹ T, S äTL ve<br />

smyslu odstavce 4.4 a v neorientovaném případě je izomorfní grafu HS ‹ T, S ÑTL, kde S ÑT je označena množina<br />

všech dvouprvkových množin, jejichž jeden prvek patří do S a druhý patří do T. Na rozdíl od obecného bipartitníbo<br />

grafu jsou strany úplného bipartitního orientovaného grafu určeny jednoznačně a strany úplného bipartitního neorientovaného<br />

grafu určeny jednoznačně až na pořadí. Úplný bipartitní neorientovaný graf, jehož strany S, T mají m = » S » a<br />

n = » T » prvků, značíme Km,n.<br />

6.5. Regulární grafy. Graf se nazývá regulární nebo pravidelný, jestliže všechny jeho vrcholy mají stejný<br />

stupeň. Je-li stupeň všech vrcholů grafu roven k, říkáme, že graf je k-regulární nebo k-pravidelný. Např. všechny<br />

neorientované a orientované grafy v příkladu 4.3 jsou 3-regulární.<br />

7. Maticový popis grafu<br />

7.1. Matice sousednosti. Matice sousednosti grafu G je určena pořadím v0, v1, ... , vn neboli očíslováním jeho<br />

vrcholů. Je-li graf G orientovaný, jeho matice sousednosti M G + je čtvercová matice řádu n s prvky mi j definovanými<br />

předpisem<br />

mi j = m G + Hvi, v jL.<br />

Je-li graf G neorientovaný, jeho matice sousednosti MG je čtvercová matice řádu n s prvky mi j definovanými<br />

předpisem<br />

mi j = mGHvi, v jL.<br />

Protože počet neorientovaných hran spojujících vrcholy vi, v j nezávisí na jejich pořadí, matice sousednosti neorientovaného<br />

grafu je vždy symetrická.<br />

v1<br />

v3<br />

e4<br />

e5<br />

e2<br />

e1<br />

e6<br />

e3<br />

v2<br />

v4<br />

v1<br />

v3<br />

e4<br />

e5<br />

e2<br />

e1<br />

e6<br />

G H<br />

Obr.1.7.<br />

7.2. Příklad. Orientovaný graf G z obr. 1.7 a jeho symetrizace H mají tyto matice sousednosti:<br />

i 0 2 0 0 y<br />

0 0 0 1<br />

+<br />

MG =<br />

,<br />

1 1 0 1<br />

i 0 2 1 0 y<br />

2 0 1 1<br />

MH =<br />

.<br />

1 1 0 1<br />

j z<br />

k 0 0 0 0 {<br />

j z<br />

k 0 1 1 0 {<br />

7.3. Matice sousednosti bipartitního grafu. Nechť G je bipartitní graf se stranami S, T. Položme n = » S »,<br />

m = » T » a zvolme pořadí vrcholů v1, ... , vn, vn+1, ... , vn+m tak, že prvních n vrcholů leží v S. Matice sousednosti<br />

grafu G má pak zřejmě tvar<br />

e3<br />

v2<br />

v4


<strong>Grafy</strong>.<strong>nb</strong> 8<br />

+ iO<br />

A y<br />

MG = jj z resp. MG =<br />

kO<br />

O {<br />

i O A<br />

j<br />

k A T y<br />

z,<br />

O {<br />

kde A je matice typu Hn, mL a A T je matice k ní transponovaná. Matice A se nazývá matice sousednosti bipartitního<br />

grafu. Tato matice určuje orientovaný resp. neorientovaný bipartitní graf jednoznačně až na izomorfismus. Obrácené<br />

tvrzení však neplatí přinejmenším proto, že strany bipartitního grafu nejsou v obecném případě určeny jednoznačně.<br />

v1<br />

v2<br />

v3<br />

Obr.1.8.<br />

7.4. Příklad. Orientovaný bipartitní graf na obr. 1.8 se stranami S = 8v1, v2, v3


<strong>Grafy</strong>.<strong>nb</strong> 9<br />

8. Způsoby zadávání grafů<br />

8.1. Zadání geometrickým modelem. Graf s nepříliš velkým počtem vrcholů a hran lze asi nejpřehledněji<br />

zadat jeho diagramem. Tento způsob zadání grafu však často svádí k jednostrannému pohledu a není vhodný pro<br />

vstup do počítače.<br />

8.2. Zadání seznamem vrcholů a seznamem hran. Množiny vrcholů a hran jsou zadány výčtem prvků, u<br />

každé hrany je uvedena uspořádaná dvojice krajních vrcholů, přičemž v případě orientovaného grafu vrchol uvedený<br />

na prvním resp. druhém místě je počátečním resp. koncovým vrcholem hrany. Tento způsob je poměrně úsporný,<br />

zejména u grafů s malým počtem hran. Není-li však seznam hran vhodně uspořádán, obtížně se v něm hledá.<br />

8.3. Zadání seznamem vrcholů a jejich okolí. Množina vrcholů je opět zadána výčtem prvků, u každého<br />

vrcholu je pak uveden seznam hran s ním incidentních nebo, v případě orientovaného grafu, seznam hran z něj<br />

vycházejících popř. i seznam hran z něj vystupujících. Tento způsob je výhodný zejména v případě prostých orientovaných<br />

grafů, u nichž zřejmě stačí uvést u každého vrcholu seznam koncových vrcholů hran z něj vycházejících. Je<br />

také vhodný pro uložení grafu do počítače. Další výhodou je snadné a rychlé prohledávání takto zadaných grafů.<br />

8.4. Zadání maticí sousednosti. Maticí sousednosti je graf určen jednoznačně až na izomorfismus. Je to popis<br />

matematicky elegantní, ale u grafů s málo hranami dosti neúsporný. Matice pak obsahuje velmi mnoho nul a<br />

vyhledávání nenulových prvků v řádcích a sloupcích zabírá zbytečně mnoho času.<br />

8.5. Zadání maticí incidence. Matematicky elegantní, ale velmi neúsporný způsob - pouze dva nenulové prvky<br />

v každém sloupci, určující graf bez smyček jednoznačně až na izomorfismus.<br />

8.6. Zadávání ohodnocených grafů. Je-li graf zadán seznamem vrcholů a seznamem hran nebo seznamem<br />

vrcholů a jejich okolí, lze popis každé hrany resp. vrcholu bez obtíží rozšířit o příslušné ohodnocení.<br />

U prostých grafů s ohodnocenými hranami lze použít také maticový popis analogický matici sousednosti: Existuje-li<br />

hrana mezi vrcholy vi, v j, napíšeme na příslušné místo matice její ohodnocení. V opačném případě zapíšeme na toto<br />

místo hodnotu, která nemůže být ohodnocením žádné hrany, např. symbol . Často přitom spoléháme na vlastnosti<br />

algoritmu, ktrý takovou matici bude zpracovávat.<br />

2. Pojmy založené na neorientovaných cestách<br />

1. Souvislost, stromy a kostry<br />

1.1. Souvislost. Říkáme, že graf je souvislý jestliže každé jeho dva vrcholy jsou spojeny neorientovanou cestou.<br />

1.2. Komponenty souvislosti. Podgraf H grafu G se nazývá komponentou souvislosti grafu G, též souvislou<br />

komponentou nebo jen komponentou, jestliže pro každý souvislý podgraf H ' grafu G inkluzeH Œ H ' implikuje<br />

rovnost H = H '.<br />

1.3. Příklad. Orientovaný graf na obr. 2.1 i jeho symetrizace mají stejné komponenty souvislosti s množinami<br />

vrcholů 81, 2, 3


<strong>Grafy</strong>.<strong>nb</strong> 10<br />

1.4. Věta. Relace ~ na množině vrcholů grafu G definovaná předpisem<br />

x ~ y ó vrcholy x, y jsou v grafu G spojeny neorientovanoucestou<br />

je ekvivalencí a každá třída ekvivalence je množinou vrcholů některé komponenty souvislosti grafu G.<br />

1.5. Důsledek. (a) Každý vrchol je obsažen v právě jedné komponentě souvislosti.<br />

(b) Komponenta souvislosti obsahující daný vrchol x je úplným podgrafem určeným množinou vrcholů, do nichž z<br />

vrcholu x vede neorientovaná cesta.<br />

1.6. Les, strom a kostra grafu. Les je graf neobsahující kružnici. Strom je graf, který neobsahuje kružnici a je<br />

souvislý. Kostrou grafu nebo také napnutým stromem grafu se nazývá každý jeho faktor, který je stromem.<br />

1.7. Věta. Každý souvislý graf G má kostru.<br />

Důkaz. Nechť H je souvislý faktor grafu G s minimálním počtem hran, takže každý jeho vlastní faktor je nesouvislý.<br />

H zřejmě neobsahuje smyčky a nemůže obsahovat ani kružnice, neboť jeho vlastní faktor, který vznikne vynecháním<br />

některé hrany kružnice, je také souvislý. Faktor H grafu G je tedy stromem, což znamená, že je to kostra grafu G.<br />

1.8. Hledání kostry a cest do vrcholů. Ohodnotíme-li všechny hrany nulou, potom každá kostra grafu je<br />

minimální ve smyslu odstavce 1.12. Kostru souvislého grafu resp. kostru jeho souvislé komponenty obsahující vrchol<br />

r můžeme tedy najít kterýmkoliv algoritmem pro hledání minimální kostry. Z algoritmů popsaných v odstavcích 1.13,<br />

1.16 a 1.18 se v tomto případě jako nejjednodušší jeví algoritmus Vojtěcha Jarníka, který lze v poněkud upravené<br />

podobě formulovat takto<br />

Pomocná proměnná : souvislý podgraf L grafu G neobsahující kružnici, tedy strom.<br />

1. @Inicializace D Označkujeme vrchol r a označíme L diskrétní graf s množinou vrcholů 8r


<strong>Grafy</strong>.<strong>nb</strong> 11<br />

1.11. Věta o stromech. Nechť G je graf s n ¥ 1 vrcholy. Potom následující tvrzení o G jsou ekvivalentní:<br />

Důkaz.<br />

HaL G je strom.<br />

HbL G neobsahuje kružnici a má přesně n - 1 hran.<br />

HcL G neobsahuje kružnici a má alespoň n - 1 hran.<br />

HdL G je souvislý a má přesně n - 1 hran.<br />

HeL G je souvislý a má nejvýše n - 1 hran.<br />

HfL G se souvislý, ale po odebrání kterékoliv hrany již souvislý není.<br />

HgL G neobsahuje kružnici, ale po přidání libovolné hrany obsahuje právě jednu kružnici, pokud ztotožníme<br />

kružnice lišící se pouze cyklickou permutací vrcholů a hran.<br />

HhL G neobsahuje smyčky a každá dvojice vrcholů je spojena právě jednou neorientovanou cestou, pokud<br />

ztotožníme cesty lišící se pouze obrácením pořadí vrcholů a hran.<br />

Implikace (a) fl (b) je důsledem definice stromu a věty 1.10 a implikace (b) fl (c) a (d) fl (e) jsou triviální.<br />

Neobsahuje-li G kružnici, pak každá jeho komponenta grafu je strom. Je-li těchto komponent k a jsou-li n1, n2, ... , nk<br />

počty jejich vrcholů, potom G má podle věty 1.10 n1 + n2 + ... + nk - k = n - k hran. Předpoklad n - k ¥ n - 1 tedy<br />

implikuje rovnost k = 1, což dokazuje implikaci (c) fl (d).<br />

Implikaci (e) fl (f) dokážeme sporem. Jestliže existují souvislé grafy s n vrcholy a nejvýše n - 1 hranami, které<br />

obsahují alespoň jednu hranu, jejímž odstraněním nevznikne nesouvislý graf, pak jistě existuje graf G s touto vlastností<br />

a minimálním počtem hran. Tento graf nemůže obsahovat kružnici, neboť odstraněním kterékoliv její hrany<br />

bychom dostali souvislý graf s n vrcholy a menším počtem hran. Graf G je tedy stromem. To je však, jak snadno<br />

plyne z věty 1.9, ve sporu s předpokladem, že G obsahuje hranu, jejímž odstraněním nevznikne nesouvislý graf.<br />

Graf s vlastností (f) nemůže obsahovat kružnici, neboť odstraněním kterékoliv její hrany by vznikl souvislý graf. Tím<br />

je dokázána implikace (f) fl (a) a tudíž i ekvivalence všech tvrzení (a) až (f).<br />

Existují-li v grafu G dvě různé cesty spojující dva různé vrcholy, pak v něm existuje uzavřený sled obsahující alespoň<br />

dvě různé hrany. Z každého takového sledu lze ale vynecháním některých hran získat kružnici. To však není možné,<br />

je-li G strom. Obráceně lze z každé kružnice v G získat dvě různé cesty spojující dva různé vrcholy. Tím je zřejmě<br />

dokázána ekvivalence (a) ñ (h).<br />

Nechť G' je graf získaný ze stromu G přidáním jedné hrany e spojující vrcholy x ∫ y grafu G. Přidáme-li k cestě<br />

vedoucí v G z vrcholu x do vrcholu y hranu e a vrchol x, dostaneme zřejmě kružnici. Na druhé straně kružnice v G'<br />

musí nutně obsahovat hranu e, neboť v G kružnice neexistují. Vynecháním této hrany ze dvou různých kružnic v G'<br />

bychom dostali dvě různé cesty spojující v G vrcholy x, y. To však vzhledem k ekvivalenci (a) ñ (h) není možné. V<br />

G' tedy existuje právě jedna kružnice obsahující přidanou hranu e, ztotožníme-li kružnice lišící se pouze cyklickou<br />

permutací vrcholů a hran. Tím je dokázána implikace (a) fl (g).<br />

Zbývá dokázat implikaci (g) fl (a). K tomu stačí dokázat, že G je souvislý. To je však snadné. V opačném případě by<br />

totiž kružnici obsahoval ani graf G' získaný z G přidáním jedné hrany spojující vrcholy z jeho dvou různých<br />

komponent.<br />

1.12. Minimální kostra. Nechť G je souvislý graf, jehož hrany jsou ohodnoceny reálnými čísly, jimž budeme<br />

říkat ceny. Cenou podgrafu grafu G pak nazveme jeho součet cen všech jeho hran. Řekneme, že kostra T grafu G je<br />

nejlevnější nebo také minimální, jestliže ze všech jeho koster grafu nejmenší cenu.<br />

1.13. Hledání minimální kostry I. Nechť G je souvislý graf a c : EHGL Ø je ohodnocení jeho hran cenami.<br />

Naším úkolem je najít nejlevnější kostru grafu G. Postup:<br />

Pomocná proměnná : faktor L grafu G neobsahující kružnici, tj. les.<br />

1. @Inicializace pomocné proměnnéD L = diskrétní graf s množinou vrcholů VHGL.<br />

2. @Test ukončeníD Je-li L strom, výpočet končí, L je hledaná minimální kostra.<br />

3. @Volba hrany pro připojení k lesu LD Zvolímelibovolně hranu e splňující tuto podmínku :<br />

Hrana e spojuje dvě různé komponenty lesa L a alespoň pro jednu z těchto komponent, označme ji C,<br />

HPL<br />

platí, že cena hrany e je nejmenší ze všech cen hran z množiny WGHCL.


<strong>Grafy</strong>.<strong>nb</strong> 12<br />

4. @Spojení komponentD Hranu e připojíme k lesu L, čímž dostaneme nový les s menším počtem komponent,<br />

a pokračujeme krokem 2.<br />

Při každém provedení kroku 4 se počet komponent lesa L zmenší o jedničku. Výpočet proto skončí po n - 1 opakováních<br />

tohoto kroku, kde n je počet vrcholů grafu G.<br />

1.14. Poznámka. Před zahájením popsaného algoritmu můžeme zřejmě graf G nahradit jeho faktorem, který<br />

neobsahuje smyčky a z každé množiny mGHx, yL obsahuje pouze hranu s nejnižší cenou. Chceme-li najít kostru<br />

neobsahující některé hrany, stačí tyto hrany ocenit hodnotou .<br />

1.15. Příklad. Aplikujme popsaný algoritmus na ohodnocený graf G zadaný následující tabulkou, jejíž každý<br />

sloupec obsahuje jeden vrchol a hrany s ním incidentní spolu s jejich cenami:<br />

v1 v2 v3 v4 v5 v6 v7 v8<br />

e1 # 4 e1 # 4 e4 # 2 e2 # 3 e6 # 5 e3 # 5 e12 # 4 e8 # -2<br />

e2 # 3 e4 # 2 e7 # 6 e5 # 1 e7 # 6 e11 # 3 e13 # 7 e14 # -7<br />

e3 # 5 e5 # 1 e8 # -2 e9 # 2 e9 # 2 e15 # 6 e15 # 6 e16 # -5<br />

e6 # 5 e10 # 1 e10 # 1 e16 # -5<br />

e11 # 3 e13 # 7<br />

e12 # 4 e14 # -7<br />

Pro usnadnění výběru hrany e v kroku 3 nechť V značí v každém kroku množinu krajních vrcholů hran grafu L<br />

vyjádřenou jako sjednocení jejích neprázdných průniků s komponentami grafu L. Výpočet pak může probíhat např.<br />

takto:<br />

1. Ověříme, že graf je souvislý:<br />

v1 ~ e1 v2 ~ e4 v3 ~ e7 v5 ~ e9 v4 ~ e11 v6 ~ e15 v7 ~ e16 v8.<br />

2. Položíme VH LL = 8v1, v2, v3, v4, v5, v6, v7, v8


<strong>Grafy</strong>.<strong>nb</strong> 13<br />

1.16. Hledání minimální kostry II. Následující velmi jednoduchý postup, vedoucí k minimální kostře souvislého<br />

grafu G s ohodnocením c : EHGL Ø jeho hran, popsal již v roce 1926 Otakar Borůvka. Hrany grafu G<br />

uspořádáme podle jejich cen do neklesajícího pořadí. Pak je v tomto pořadí probíráme a do postupně vytvářeného<br />

grafu L přidáváme pouze ty z nich, jejichž přidání nevytvoří v grafu L kružnici. Přesněji lze tento Borůvkův algoritmus,<br />

známější jako Kruskalův algoritmus a označovaný také jako hladový algoritmus, popsat takto:<br />

Pomocné proměnné : faktor L grafu G neobsahující kružnici, tj. les, a index k.<br />

1. @Uspořádání hran podle cenD Nechť e1, e2, ... , en jsou všechny hrany grafu seřazené do posloupnosti<br />

tak, že jejich ceny tvoří neklesající posloupnost.<br />

2. @Inicializace pomocných proměnnýchD L = diskrétní graf s množinou vrcholů VHGL, k = 0.<br />

3. @Test ukončeníD Je-li L strom, výpočet končí, L je hledaná minimální kostra.<br />

4. @Volba hrany pro připojení k lesu LD Položíme k := k + 1. Jestliže krajní body hrany ek leží v různých<br />

komponentách grafu L, položíme e = ek, v opačném případě krok zopakujeme.<br />

5. @Spojení komponentD Hranu e připojíme k lesu L, čímž dostaneme nový les s menším počtem komponent,<br />

a pokračujeme krokem 3.<br />

1.17. Příklad. Aplikujme hladový algoritmus na ohodnocený graf G z příkladu 1.15. Ceny tvoří neklesající<br />

posloupnost např. pro toto uspořádání hran:<br />

e14, e16, e8, e5, e10, e4, e9, e2, e11, e1, e12, e3, e6, e7, e15, e13.<br />

Graf L a množina V vrcholů přidaných hran se tedy budou vyvíjet takto:<br />

1. VH LL = 8v1, v2, v3, v4, v5, v6, v7, v8


<strong>Grafy</strong>.<strong>nb</strong> 14<br />

okolí vrcholu některého vrcholu zřejmě vznikne nesouvislý graf.<br />

Hrana grafu se nazývá most, jestliže jejím odstraněním vznikne graf s větším počtem komponent souvislosti. Graf s<br />

alespoň dvěma vrcholy je tedy hranově 2-souvislý, neobsahuje-li žádný most.<br />

2.2. Vrcholový stupeň souvislosti grafu. Vrcholový stupeň souvislosti grafu, který není úplný a neobsahuje<br />

úplný graf jako svůj faktor, je minimální počet vrcholů, jejichž odstraněním vznikne nesouvislý graf. Je-li graf G<br />

úplný nebo obsahuje úplný graf jako svůj faktor, pak jeho vrcholový stupeň souvislosti je definován jako » VHGL » -1.<br />

Graf je vrcholově k-souvislý, je-li jeho vrcholový stupeň souvislosti alespoň k.<br />

Vrchol grafu se nazývá artikulace, jestliže jeho odstraněním vznikne graf s větším počtem komponent. Graf s<br />

alespoň třemi vrcholy je tedy vrcholově 2-souvislý, neobsahuje-li žádnou artikulaci.<br />

2.3. Věta (L. R. Ford Jr., D. R . Fulkerson, 1966). Graf je hranově k-souvislý právě tehdy, když pro dva<br />

jeho vrcholy x ∫ y v něm existuje k hranově disjunktních cest z x do y, tj. takových, že žádné dvě nemají společnou<br />

hranu.<br />

2.4. Mengerova věta. Graf je vrcholově k-souvislý právě tehdy, když pro každé dva jeho vrcholy x ∫ y v něm<br />

existuje k vrcholově disjunktních cest z x do y, tj. cest nemajících kromě x a y žádný společný vrchol.<br />

2.5. Důsledek. Vrcholový stupeň souvislosti je nejvýše roven hranovému stupni souvislosti.<br />

3. Pojmy založené na orientovaných cestách<br />

1. Silná souvislost<br />

1.1. Silně souvislé grafy a silné komponenty. Říkáme, že orientovaný graf G je silně souvislý, jestliže pro<br />

každou dvojici jeho vrcholů x, y existuje v G orientovaná cesta vedoucí z x do y. Silně souvislá komponenta neboli<br />

silná komponenta grafu G je maximální silně souvislý podgraf H grafu G, tj. silně souvislý podgraf, pro který<br />

inkluze H Œ H ', kde H ' je silně souvislý podgraf grafu G, implikuje rovnost H = H '.<br />

Silně souvislá komponenta grafu G je zřejmě jeho úplným podgrafem a každý vrchol grafu G patří do právě jedné<br />

jeho silné komponenty.<br />

1.2. Příklad. Orientovaný graf G na obrázku 3.1 vlevo je souvislý, ale není silně souvislý. Má 4 silně souvislé<br />

komponenty vyznačené na obrázku čárkovaně. V komponentě H1každá hrana leží na nějakém cyklu, ale cyklus, který<br />

by obsahoval všechny hrany, v ní neexistuje. Čtyři hrany 3 Ø 6, 4 Ø 7, 6 Ø 9 a 8 Ø 7 nepatří do žádné silné komponenty.<br />

Tyto hrany indukují tři hrany kondenzace grafu G, viz definici v odstavci 1.5, jejíž diagram je nakresle na<br />

obrázku napravo od grafu G.<br />

1<br />

2<br />

5<br />

3<br />

4<br />

6<br />

7<br />

H4<br />

H1 H2 H3<br />

9<br />

8<br />

Obr.3.1.<br />

1.3. Věta. Hrana e orientovaného grafu je obsažena v nějakém jeho cyklu, právě když její krajní vrcholy leží v<br />

téže jeho silné komponentě.<br />

H1<br />

H2<br />

H4<br />

H3


<strong>Grafy</strong>.<strong>nb</strong> 15<br />

Důkaz. Nechť e vede z vrcholu x do vrcholu y. Je-li x = y, pak Hx, e, yL je cyklus obsahující e. Jsou-li vrcholy x, y<br />

různé a leží v téže silné komponentě, pak existuje orientovaná cesta z vrcholu y do vrcholu x. Tato cesta tvoří spolu s<br />

cestou Hx, e, yL hledaný cyklus obsahující e. Obrácená implikace je přímým důsledkem definice silné komponenty.<br />

1.4. Důsledek. Graf je silně souvislý právě tehdy, když je souvislý a každá jeho hrana leží v nějakém cyklu.<br />

1.5. Kondenzace grafu. Kondenzace orientovaného grafu G je prostý orientovaný graf bez smyček, jehož<br />

vrcholy jsou všechny silné komponenty grafu G a v němž z vrcholu H vede orientovaná hrana do vrcholu H ', právě<br />

když v grafu G vede orientovaná hrana z některého vrcholu komponenty H do některého vrcholu komponenty H '.<br />

1.6. Věta. Kondenzace orientovaného grafu G neobsahuje žádný cyklus.<br />

Důkaz. Kondenzace neobsahuje, podle definice, smyčky. Kdyby v ní existoval cyklus procházející alespoň dvěma<br />

vrcholy, pak by v grafu G existovala posloupnost hran e1, e2, ... , ek+1, v níž ek+1 = e1 a koncový vrchol každé hrany<br />

a počáteční vrchol hrany za ní následující leží ve stejné silné komponentě, takže pro každé i = 1, 2, ... , k existuje v G<br />

orientovaná cesta z koncového vrcholu hrany ei do počátečního vrcholu hrany ei+1. Spojením těchto cest v jednu<br />

bychom dostali cyklus obsahující vrcholy alespoň dvou silných komponent grafu G, což není možné.<br />

1.7. Matice dostupnosti. Podle 1.5.4 je vrchol y orientovaného grafu G orientovaně dostupný z vrcholu x,<br />

existuje-li v G orientovaná cesta z x do y. Jsou-li vrcholy grafu G uspořádány do posloupnosti v1, v2, ... , vn, položíme<br />

di j = l o m<br />

1, jestliže vrchol v j je orientovaně dostupný z vrcholu vi,<br />

o<br />

n 0, v ostatních případech<br />

a čtercovou matici řádu n tvořenou prvky di j označíme DG a nazveme ji matice dostupnosti grafu G. Kromě toho<br />

nechť<br />

D G + HxL je množina všech vrcholů grafu G orientovaně dostupných z vrcholu x,<br />

D G - HxL je množina všech vrcholů grafu G, z nichž je orientovaně dostupný vrchol x.<br />

Bude-li z kontextu jasné, o jaký graf G se jedná, budeme používat stručnějčí označení D, D + HxL resp. D - HxL-<br />

1.8. Hledání množin D + HxL a D - HxL. Množinu vrcholů orientovaně dostupných z vrcholu r a orientované cesty<br />

do nich najdeme např. pomocí následující „orientované“ verze algoritmu popsaného v závěru odstavce 2.1.8.<br />

Množinu D - HrL najdeme aplikací tohoto algoritmu na obrácený graf.<br />

Algoritmus<br />

1. @Inicializace D Označkujeme vrchol r, ostatní vrcholy značku nemají.<br />

2. @Test ukončeníD Je-li množina neoznačkovaných vrcholů prázdná, výpočet končí.<br />

3. @Volba hranyD Zvolíme libovolně hranu e, jejíž počáteční vrchol je označkován a koncový vrchol v<br />

označkován není.<br />

4. @ZnačkováníD Označkujeme vrchol v a pokračujeme krokem 2.<br />

Při každém provedení kroku 4 se počet neoznačkovaných vrcholů zmenší o jedničku. Výpočet proto skončí<br />

nejpozději po n - 1 opakováních tohoto kroku, kde n je počet vrcholů grafu G. Po zastavení algoritmu budou<br />

označkovány právě všechny vrcholy orientovaně dostupné z vrcholu r.<br />

Malou změnou kroku 4 najdeme množinu vrcholů orientovaně dostupných z vrcholu r, ale také orientované cesty do<br />

nich. Stačí v kroku 4 vrcholu v přiřadit navíc hodnotu ODKUDHvL := e. Tato hodnota bude po zastavení výpočtu<br />

poslední hranou v některé orientované cestě vedoucí z vrcholu r do vrcholu v. S pomocí hodnot ODKUD tuto cestu<br />

snadno najdeme zpětným postupem od vrcholu v k vrcholu r.<br />

1.9. Věta. Množinou vrcholů silně souvislé komponenty obsahující vrchol x je množina D G - HxL › DG + HxL.<br />

1.10. Hledání silně souvislých komponent. Předchozí věta dává spolu s algoritmem 1.8 přímý návod pro<br />

sestrojení silně souvislé komponenty obsahující daný vrchol r. Všechny silně souvislé komponenty snadno nalezneme<br />

opakováním tohoto postupu: Zvolíme vrchol, který neleží v žádné dosud sestrojené silné komponentě a sestrojíme<br />

silnou komponentu, která jej obsahuje. Výpočet končí, jakmile je každý vrchol obsažen v některé komponentě.


<strong>Grafy</strong>.<strong>nb</strong> 16<br />

1<br />

3<br />

2<br />

Obr.3.2. Diagram kondenzace grafu G z příkladu 1.11<br />

1.11. Příklad. Najdeme silně souvislé komponenty a kondenzaci orientovaného grafu G s vrcholy 1, 2, ... , 10<br />

zadaného tabulkou počátečních a koncových vrcholů hran:<br />

PV KV<br />

1 7<br />

2 1<br />

2 2<br />

2 4<br />

PV KV<br />

3 1<br />

3 5<br />

3 8<br />

4 1<br />

PV KV<br />

4 2<br />

4 4<br />

5 2<br />

5 3<br />

PV KV<br />

5 9<br />

6 2<br />

6 9<br />

7 1<br />

PV KV<br />

8 6<br />

8 10<br />

9 1<br />

9 7<br />

4<br />

5<br />

PV KV<br />

9 4<br />

9 6<br />

9 8<br />

10 7<br />

Stačí najít množiny vrcholů silných komponent, protože každá silná komponenta je úplným podgrafem. Začneme<br />

hledáním množiny vrcholů silné komponenty CHvL vrcholu v s co největším počtem následníků a předchůdců. Silnou<br />

komponentu získáme jako průnik D + HvL › D - HvL, kde D + HvL je množina vrcholů orientovaně dostupných z vrcholu v a<br />

D - HvL je množina vrcholů, z nichž je orientovaně dostupný vrchol v. Množinu D + HvL získáme jako sjednocení množin<br />

A0, A1, A2, ..., kde A0 = 8v< a každá množina Ai+1 je sjednocením množiny Ai a množin následníků vrcholů patřících<br />

do Ai. Po konečném počtu kroků nastane rovnost Ai = Ai-1a množina Ai bude hledanou množinou D + HvL. Analogicky,<br />

záměnou následníků za předchůdce, najdeme najdeme postupně množiny B0, B1, B2, ... a množinu D - HvL.<br />

Zvolíme-li v = 9, dostaneme<br />

A1 = 81, 4, 6, 7, 8, 9


<strong>Grafy</strong>.<strong>nb</strong> 17<br />

Protože zbývající vrchol 10 nepatří ani do jedné z nalezených komponent, je zřejmě CH10L = 810


<strong>Grafy</strong>.<strong>nb</strong> 18<br />

cyklu leží v jedné a téže silné komponentě.<br />

(d) fl (a) Viz algoritmus 2.6, který nalezne topologické uspořádání vrcholů i hran pro každý acyklický graf.<br />

2.6. Algoritmus pro topologické uspořádání. Princip je velmi jednoduchý. Podle věty 2.2 každý acyklický<br />

graf G obsahuje alespoň jeden vrchol, do kterého nevede žádná hrana. Jeden takový vrchol vybereme a označíme jako<br />

v1. Pak tento vrchol a všechny hrany z E + Hv1L z grafu odstraníme. Získaný graf je opět acyklický, takže v něm existuje<br />

vrchol se vstupním stupněm 0. Jeden takový vrchol vybereme za vrchol v2 a odstraníme jej z grafu spolu se všemi<br />

hranami, které z něj vystupují. Takto postupujeme, dokud všechny vrcholy grafu G nejsou seřazeny v posloupnost<br />

v1, v2, ... , vn. Protože do každého vrcholu vi vedou hrany pouze vrcholů, které byly vybrány a odstraněny dříve než<br />

on, získané uspořádání je zřejmě topologické.<br />

Současně s konstruováním posloupnosti vrcholů Sv můžeme konstruovat posloupnost hran Sh, a to tak, že nejprve<br />

napíšeme v libovolném pořadí všechny hrany z E + Hv1L, potom za ně v libovolném pořadí postupně připíšeme všechny<br />

hrany z E + HviL pro i = 2, 3, ... , n - 1. Protože z konstrukce posloupnosti Sh je zřejmé, že hrana hrana e' může vést do<br />

počátečního vrcholu hrany e jenom v případě, že se v této posloupnosti nachází před hranou e, posloupnost Sh je<br />

topologickým uspořádáním hran.<br />

Snadno se nahlédne, že místo odstranění pouze jednoho vrcholu s nulovým vstupním stupněm a všech hran, které z<br />

něho vycházejí, můžeme v každém kroku odstranit všechny vrcholy s nulovým vstupním stupněm a všechny hrany,<br />

které z nich vycházejí, a zařadit tyto vrcholy resp. hrany v libovolném pořadí na konec posloupnosti Sv resp. Sh.<br />

Odstraňování vrcholů a hran můžeme zaměnit jejich značkováním. Každý vrchol vi pak vybíráme z množiny dosud<br />

nevybraných a tudíž neoznačených vrcholů. Označíme-li CHxL počet hran vedoucích před výběrem vrcholu vi do<br />

vrcholu x z dosud neoznačených vrcholů, pak kandidátem na vi mohou být pouze ty vrcholy x, pro něž CHxL = 0.<br />

Můžeme tedy pro každý vrchol x uchovávat v paměti hodnotu CHxL, místo značkování hran vedoucích do x z<br />

vybraného vrcholu vi tuto hodnotu snižovat a ty vrcholy, u nichž bylo dosaženo nuly, uchovávat ve zvláštním<br />

seznamu M jako kandidáty na zařazení do posloupnosti.<br />

Následují algoritmus založený na proměnných CHxL a M sestrojí pro acyklický graf současně topologické uspořádání<br />

vrcholů i hran:<br />

1. @Výpočet vstupních stupňůD Pro každý vrchol x œ VHGL položíme CHxL := 0 a pro všechny hrany e œ EHGL<br />

postupně provedeme CHKVHeLL := CHPVHeLL + 1.<br />

2. @Inicializace množiny MD Do množiny M vložíme všechny vrcholy x, pro něž CHxL = 0.<br />

3. @Test ukončeníD Je-li M = «, výpočet končí.<br />

4. @Výběr vrcholuD Je-li M ∫ «, odstraníme z M některý vrchol, označíme jej x a zařadíme jej na konec<br />

vytvářené posloupnosti vrcholů Sv.<br />

5. @Zpracování hran vycházejících z vrcholu xD Pro každou hranu e œ E + HxL provedeme kroky 5 a - 5 b a po zpracování<br />

všech hran pokračujeme krokem 3.<br />

5 a. Zařadíme hranu e na konec vytvářené posloupnosti hran Sh a položíme CHKVHeLL := CHKVHeLL - 1.<br />

5 b. Jestliže nyní CHKVHeLL = 0, zařadíme KVHeL do množiny M .<br />

2.7. Věta. Jsou-li po zastavení algoritmu 2.6 zařazeny do posloupnosti vrcholů všechny vrcholy grafu G, pak obě<br />

vytvořené posloupnosti, posloupnost vrcholů a posloupnost hran, jsou topologickým uspořádáním. V opačném<br />

případě graf není acyklický.<br />

Důkaz. Před každým provedením kroku 5 je x poslední člen vytvářené posloupnosti Sv vrcholů, v důsledku rovnosti<br />

CHxL = 0 do něj vedou hrany pouze z vrcholů, které byly do Sv zařazeny dříve, CHzL je pro každý vrchol z počet hran<br />

vedoucích do něj z vrcholů různých od x a dosud nezařazených do Sv a M je množina vrcholů z, pro které platí<br />

rovnost CHzL = 0 ale které dosud nepatří do Sv. Do každého vrcholu zařazeného do posloupnosti Sv tedy mohou vést<br />

hrany pouze z těch vrcholů, které do ní byly zařazeny dříve. To však znamená, že posloupnost Sv je v každém<br />

okamžiku výpočtu topologickým uspořádáním vrcholů úplného podgrafu určeného množinou jejích členů.<br />

V kroku 5 jsou do posloupnosti hran Sh zařazeny pouze všechny hrany vycházející z vrcholu x, vybraného v kroku 4 a<br />

zařazeného na poslední místo posloupnosti vrcholů Sv. Jestliže tedy po provedení kroku 5 pro některé dvě hrany e1,<br />

e2 posloupnosti Sh platí rovnost KVHe1L = PVHe2L, pak počáteční vrcholy obou hran již patří do posloupnosti Sv a<br />

hrana e1 předchází v posloupnosti Sh hranu e2. To však znamená, že posloupnost Sh je v každém okamžiku výpočtu<br />

topologickým uspořádáním vrcholů úplného podgrafu určeného množinou krajních vrcholů jejích členů.<br />

Jestliže dojde k ukončení výpočtu, přestože posloupnost Sv ještě neobsahuje všechny vrcholy, pak v podgrafu


<strong>Grafy</strong>.<strong>nb</strong> 19<br />

určeném všemi do Sv nepatřícími vrcholy má každý vrchol kladný stupeň a tudíž tento podgraf obsahuje podle věty<br />

2.2 cyklus. To však znamená, že ani graf G není acyklický.<br />

2.8. Příklad. Najdeme topologické uspořádání vrcholů a hran grafu zadaného tabulkou algoritmem 2.6<br />

PV Hrana KV<br />

2 e1 4<br />

3 e2 4<br />

5 e3 2<br />

6 e4 3<br />

6 e5 5<br />

7 e6 4<br />

a nakresleného na obrázku 3.3 na straně 20.<br />

PV Hrana KV<br />

7 e7 5<br />

7 e8 10<br />

8 e9 7<br />

8 e10 9<br />

9 e11 2<br />

9 e12 3<br />

PV Hrana KV<br />

9 e13 6<br />

9 e14 11<br />

10 e15 1<br />

10 e16 4<br />

10 e17 5<br />

10 e18 6<br />

PV Hrana KV<br />

12 e19 4<br />

12 e20 5<br />

12 e21 6<br />

12 e22 7<br />

12 e23 8<br />

12 e24 10<br />

I. Nejprve použijeme jednoduchý postup popsaný na začátku odstavce 2.6, který je založen na postupném<br />

odstraňování vrcholů s nulovým vstupním stupněm a hran, které z nich vycházejí.<br />

v1 = 12, odstraníme v1 a hrany 12 - 4 až 12 - 10. Zůstane podgraf popsaný tabulkou<br />

PV Hrana KV<br />

2 e1 4<br />

3 e2 4<br />

5 e3 2<br />

6 e4 3<br />

6 e5 5<br />

7 e6 4<br />

PV Hrana KV<br />

7 e7 5<br />

7 e8 10<br />

8 e9 7<br />

8 e10 9<br />

9 e11 2<br />

9 e12 3<br />

v2 = 8, odstraníme v2 a hrany 8 - 7 a 8 - 9. Zůstane podgraf popsaný tabulkou<br />

PV Hrana KV<br />

2 e1 4<br />

3 e2 4<br />

5 e3 2<br />

6 e4 3<br />

PV Hrana KV<br />

6 e5 5<br />

7 e6 4<br />

7 e7 5<br />

7 e8 10<br />

PV Hrana KV<br />

9 e11 2<br />

9 e12 3<br />

9 e13 6<br />

9 e14 11<br />

PV Hrana KV<br />

9 e13 6<br />

9 e14 11<br />

10 e15 1<br />

10 e16 4<br />

10 e17 5<br />

10 e18 6<br />

PV Hrana KV<br />

10 e15 1<br />

10 e16 4<br />

10 e17 5<br />

10 e18 6<br />

v3 = 7, v4 = 9, odstraníme v3, v4 a hrany 7 - 4, 7 - 5, 7 - 10, 9 - 2, 9 - 3, 9 - 6, 9 - 11. Zůstane podgraf popsaný<br />

tabulkou<br />

PV Hrana KV<br />

2 e1 4<br />

3 e2 4<br />

5 e3 2<br />

PV Hrana KV<br />

6 e4 3<br />

6 e5 5<br />

10 e15 1<br />

PV Hrana KV<br />

10 e16 4<br />

10 e17 5<br />

10 e18 6<br />

v5 = 10, v6 = 11, odstraníme v5, v6 a hrany 10 - 1, 10 - 4, 10 - 5, 10 - 6. Zůstane podgraf popsaný tabulkou<br />

PV Hrana KV<br />

2 e1 4<br />

3 e2 4<br />

5 e3 2<br />

PV Hrana KV<br />

6 e4 3<br />

6 e5 5<br />

v7 = 1, v8 = 6, odstraníme v7, v8 a hrany 6 - 3, 6 - 5. Zůstane podgraf popsaný tabulkou<br />

PV Hrana KV<br />

2 e1 4<br />

PV Hrana KV<br />

3 e2 4<br />

PV Hrana KV<br />

5 e3 2


<strong>Grafy</strong>.<strong>nb</strong> 20<br />

v9 = 3, v10 = 5, odstraníme v9, v10 a hrany 3 - 4, 5 - 2. Zůstane podgraf s jedinou hranou 2 - 4. Položíme proto<br />

v11 = 2, v12 = 4. Výsledkem je toto toplogické uspořádání vrcholů:<br />

12, 8, 7, 9, 10, 11, 1, 6, 3, 5, 2, 4.<br />

Snadno se nahlédne, že transpozicemi 7 ¨ 9, 10 ¨ 11, 1 ¨ 6, 3 ¨ 5 lze z tohoto uspořádání získat dalších 15<br />

topologických uspořádání.<br />

6<br />

5<br />

7<br />

4<br />

8<br />

3<br />

9<br />

2<br />

10<br />

Obr.3.3. Diagram grafu z příkladu 2.8<br />

II. Nyní použijeme algoritmus z odstavce 2.6 používající proměnné CHxL a M.<br />

1. Nejprve najdeme vstupní stupeň každého vrcholu x např. tak, že zjistíme, v kolika řádcích tabulky se vrchol v<br />

vyskytuje ve sloupci koncových vrcholů :<br />

Vrchol x 1 2 3 4 5 6 7 8 9 10 11 12<br />

CHxL 1 2 2 5 4 3 2 1 1 2 1 0 .<br />

Do množiny M vložíme vrcholy s nulovým vstupním stupněm. Dostaneme M = 812


<strong>Grafy</strong>.<strong>nb</strong> 21<br />

Sh = He19, e20, e21, e22, e23, e24, e9, e10L,<br />

Vrchol x 1 2 3 4 5 6 7 9 10 11<br />

CHxL 1 2 2 4 3 2 0 0 1 1 ,<br />

M = 87, 9


<strong>Grafy</strong>.<strong>nb</strong> 22<br />

Sh = He19, e20, e21, e22, e23, e24, e9, e10, e6, e7, e8, e11, e12, e13, e14, e15, e16, e17, e18, e4, e5L,<br />

Vrchol x 2 3 4 5<br />

CHxL 1 0 2 0 ,<br />

M = 83, 5


<strong>Grafy</strong>.<strong>nb</strong> 23<br />

x 1 2 3 4 5 6 7 8 9 10 11 12 Sv Sh<br />

1 2 2 5 4 3 2 1 1 2 1 0<br />

12 4 3 2 1 0 1 * 12 e19, e20, e21, e22, e23, e24<br />

8 0 * 0 8 e9, e10<br />

7 3 2 * 0 7 e6, e7, e8<br />

9 1 1 1 * 0 9 e11, e12, e13, e14<br />

10 0 2 1 0 * 10 e15, e16, e17, e18<br />

6 * 0 0 * * 11, 1, 6 e4, e5<br />

3 * 1 3 e2<br />

5 0 * 5 e3<br />

2 * 0 2 e1<br />

4 * 4<br />

v jejímž prvním řádku jsou všechny vrcholy grafu a ve druhém jsou jejich vstupní stupně, tj. počáteční hodnoty<br />

proměnných CHvL. Každý další řádek odpovídá odebrání jednoho vrcholu x z množiny M. Tento vrchol je uveden na<br />

začátku řádku a také ve sloupci Sv. Ve sloupci Sh jsou uvedeny všechny hrany vycházející z vrcholu x a ve sloupcích<br />

koncových vrcholů těchto hran jsou nové hodnoty proměnných CHvL.<br />

3. Kořen a kořenový strom<br />

3.1. Kořen grafu. Vrchol x orientovaného grafu G se nazývá kořen grafu G, jestliže D + HxL = VHGL, tj. jestliže z<br />

vrcholu x je orientovaně dostupný každý vrchol grafu G.<br />

a<br />

b<br />

d e f<br />

Obr.3.4. Graf se třemi kořeny<br />

3.2. Věta. Graf má kořen právě tehdy, když pro každé jeho dva vrcholy x, y existuje vrchol z, z něhož jsou oba<br />

vrcholy x, y orientovaně dostupné.<br />

Důkaz. Podmínka je zřejmě nutná. Dokážeme, že je také postačující. Nechť x1, x2, ... , xn jsou všechny vrcholy grafu.<br />

Podle předpokladu existují vrcholy z2, ... , zn s touto vlastností: z vrcholu z2 jsou dostupné vrcholy x1, x2 a pro každé<br />

i = 3, 4, ... , n jsou z vrcholu zi orientovaně dostupné vrcholy xi, zi. Z každého vrcholu zi jsou proto orientovaně<br />

dostupné vrcholy x1, x2, ... , xi. Speciálně jsou tedy z vrcholu zn orientovaně dosažitelné všechny vrcholy grafu, což<br />

znamená, že zn je jeho kořem.<br />

3.3. Kořenový strom. Kořenovým stromem, nebo též větvením, se nazývá orientovaný graf, který je stromem a<br />

má kořen. Vede-li v kořenovém stromu hrana z vrcholu x do vrcholu y, potom vrchol x nazýváme otcem vrcholu y a<br />

vrchol y nazýváme synem vrcholu x. Každý vrchol kořenového stromu s výjimkou kořene má právě jednoho otce,<br />

ale nemusí mít žádného syna. Vrchol, který nemá žádného syna, nazýváme listem. Kořenový strom, jehož každý<br />

vrchol má nejvýše dva syny, se nazývá binární.<br />

c<br />

,


<strong>Grafy</strong>.<strong>nb</strong> 24<br />

Obr.3.5. Kořenové stromy<br />

Je-li x vrchol kořenového stromu G, pak počet hran v jediné cestě vedoucí z kořene do vrcholu x se nazývá hloubka<br />

vrcholu x a počet hran v nejdelší cestě vedoucí z vrcholu x do některého listu se nazývá výška vrcholu x<br />

H1 H2 H3<br />

Obr.3.6. Binární kořenový strom a podstromy jeho vrcholů x, y.<br />

Úplný podgraf grafu G určený množinou všech vrcholů dostupných z některého syna vrcholu x se nazývá podstrom<br />

vrcholu x. Každý vrchol x má tedy d + HxL podstromů a každý z nich je opět kořenovým stromem, jehož kořenem je<br />

některý ze synů vrcholu x.<br />

Kořenový strom se zpravidla kreslí tak, že kořen je nahoře a všechny hrany vedou shora dolů tak, aby se nekřížily. V<br />

případě binárního kořenového stromu pak můžeme mluvit o levém a pravém synovi a levém a pravém podstromu.<br />

Tak např. podgraf H1 kořenového stromu na obr. 3.6 je levým podstromem vrcholu x, podgraf H2 je levým podstromem<br />

a podgraf H3 je pravým podstromem vrcholu y.<br />

3.4. Věta o kořenových stromech. Nechť G je orientovaný graf s n ¥ 1 vrcholy. Potom následující tvrzení<br />

jsou ekvivalentní:<br />

HaL G je kořenový strom.<br />

HbL G má kořen, z něhož do každého vrcholu vede právě jedna orientovaná cesta.<br />

HcL G má kořen, ale po odstranění libovolné hrany již kořen nemá.<br />

HdL G má kořen x, pro který d - HxL = 0, zatímco pro každý vrchol y ∫ x je d - HyL = 1.<br />

x<br />

y


<strong>Grafy</strong>.<strong>nb</strong> 25<br />

HeL G neobsahuje cyklus a obsahuje vrchol x, pro který d - HxL = 0, zatímco pro každý vrchol y ∫ x platí<br />

rovnost d - HyL = 1.<br />

HfL G má kořen a neobsahuje kružnici.<br />

HgL G má kořen a obsahuje přesně n - 1 hran.<br />

Důkaz. se do značné míry opírá o analogickou větu 2.1.11, která charakterizuje stromy.<br />

(a) fl (b) Protože G je strom, do žádné dva vrcholy x ∫ y nemohou vést z vrcholy x do vrcholu y dvě různé cesty a<br />

tedy ani dvě různé orientované cesty.<br />

(b) fl (c) Je-li Hx, e1, v1, e2, ... , ek, yL jediná orientovaná cesta z vrcholu x do počátečního vrcholu hrany e, potom<br />

Hx, e1, v1, e2, ... , ek, y, e, zL je jediná cesta z vrcholu x do jejího koncového vrcholu z. Odstraníme-li tedy tuto hranu,<br />

vrchol z již nebude z vrcholu x orientovaně dostupný.<br />

(c) fl (d) Odstranění hrany vedoucí do kořene x nemá vliv na orientované cesty vedoucí do vrcholů y ∫ x, proto po<br />

odstranění takové hrany vrchol x nepřestane být kořenem. Je tedy nutně d - HxL = 0.<br />

Protože každý vrchol je z kořene x orientovaně dostupný, zbývá dokázat, že do žádného vrcholu y ∫ x nemohou vést<br />

dvě různé orientované hrany. Ukážeme, že předpoklad existence takového vrcholu y a hran e1, e2 vede ke sporu. To<br />

je však snadné. Kdyby takové hrany e1 ∫ e2 pro některý vrchol y ∫ x existovaly, potom připojením těchto hran k<br />

orientovaným cestám vedoucím z kořene x do jejich počátečních vrcholů bychom dostali dvě různé orientované cesty<br />

vedoucí z kořene do y. Protože každý vrchol dostupný z kořene x cestou obsahující hranu e1 je zřejmě dostupný také<br />

druhou cestou obsahující e2, po odstranění hrany e2 by vrchol x nepřestal být kořenem.<br />

(d) fl (e) Kořen x, do kterého nevede žádná hrana, nemůže ležet na žádném cyklu. Z existence cyklu v grafu G by<br />

tedy vyplývala existence netriviální orientované cesty C vycházející z kořene x a mající s tímto cyklem společný<br />

právě jeden vrchol. Tento vrchol by však byl koncovým vrcholem jedné hrany tohoto cyklu a poslední hrany cesty C,<br />

což není možné vzhledem k předpokladu, že d - HyL = 1pro každý vrchol y ∫ x.<br />

(e) fl (f) Protože každá cesta v grafu G obsahuje nejvýše n - 1 hran, do každého vrcholu y ∫ x vede cesta maximální<br />

délky. Označme tuto cestu Cy. Do jejího počátečního vrcholu nemůže vést žádná hrana, neboť jinak by délka této<br />

cesty nebyla maximální. Jediným vrcholem, do kterého nevede žádná hrana, je však vrchol x. Každá cesta Cy tedy<br />

začíná ve vrcholu x. Graf G je proto souvislý a vrchol x je jeho kořenem.<br />

Zbývá dokázat, že G neobsahuje kružnici. To je však snadné. Kdyby totiž v grafu G existovala kružnice, pak by v<br />

něm existovala také kružnice Hv0, e1, v1, e2, v2, ... , ek, v0L, v níž v0 je počátečním vrcholem orientované hrany e1. Pro<br />

takovou kružnici však z předpokladu d - HviL = 1 pro i = 1, 2, ... , k snadno plyne, že každá orientovaná hrana ei vede z<br />

vrcholu vi-1do vrcholu vi s výjimkou poslední hrany ek, která vede z vrcholu vk-1 do vrcholu v0. Každá taková<br />

kružnice je tedy ve skutečnosti cyklem. To je však spor s předpokladem, že G cykly neobsahuje.<br />

Poslední dvě implikace (f) fl (g), (g) fl (a), které je třeba dokázat, jsou důsledkem věty 2.1.11 charakterizující<br />

stromy.<br />

3.5. Věta. V každém orientovaném grafu G s kořenem r existuje faktor, který je kořenovým stromem s kořenem r.<br />

Důkaz. Větu dokážeme indukcí podle počtu n vrcholů grafu. Pro n § 2 je tvrzení věty triviální. Předpokládejme tedy<br />

n > 2. Protože orientovaných cest v G začínajících ve vrcholu r je konečně mnoho, existuje mezi nimi cesta maximální<br />

délky. Podgraf, který vznikne vynecháním její poslední hrany e a jejího koncového vrcholu v, má n - 1vrcholů<br />

a kořen r. Podle indukčního předpokladu má tedy faktor, který je kořenovým stromem s kořenem r. Připojíme-li k<br />

tomuto faktoru vrchol v a hranu e, získáme, jak se snadno nahlédne, faktor grafu G, který je kořenovým stromem s<br />

kořenem r.<br />

3.6. Hledání faktoru, který je kořenovým stromem. Nechť G je orientovaný graf s kořenem r. Faktor grafu<br />

G, který je kořenovým stromem s kořenem r, najdeme např. následujícím algoritmem, který už byl v podstatě popsán<br />

v odstavci 1.8.<br />

1. @Inicializace D Označkujeme vrchol r.<br />

2. @Test ukončeníD Je-li množina neoznačkovanýchvrcholů prázdná, výpočet končí.<br />

3. @Volba hranyD Zvolíme libovolně hranu e, jejíž počáteční vrchol je označkován ale koncový vrchol v<br />

označkován není.<br />

4. @Značkování a definování hodnoty ODKUDD Označkujeme vrchol v, položíme ODKUDHvL := e<br />

a pokračujeme krokem 2.


<strong>Grafy</strong>.<strong>nb</strong> 26<br />

Při každém provedení kroku 4 se počet neoznačkovaných vrcholů zmenší o jedničku. Výpočet proto skončí<br />

nejpozději po n - 1 opakováních tohoto kroku, kde n je počet vrcholů grafu G. Hledaný kořenový strom je po<br />

ukončení algoritmu tvořen hranami ODKUDHvL a jejich vrcholy.<br />

Je-li r libovolný vrchol grafu, výše uvedený algoritmus zjistí, zda je kořenem grafu či nikoliv. Pokud jsou po<br />

zastavení algoritmu označkovány všechny vrcholy, pak r je kořen grafu; v opačném případě r kořenem grafu není. To<br />

ovšem ještě neznamená, že graf kořen nemá.<br />

3.7. Příklad. Máme za úkol zjistit, zda orientovaný graf G zadaný tabulkou<br />

PV KV<br />

2 4<br />

3 4<br />

3 8<br />

5 2<br />

PV KV<br />

6 3<br />

6 5<br />

6 7<br />

7 10<br />

PV KV<br />

8 7<br />

8 9<br />

9 2<br />

9 3<br />

má faktor, který je kořenovým stromem s kořenem r = 12.<br />

PV KV<br />

9 6<br />

9 10<br />

9 11<br />

10 1<br />

PV KV<br />

10 4<br />

10 5<br />

10 6<br />

11 3<br />

Použijeme algoritmus z odstavce 3.6. Postup zapíšeme přehledně do následující tabulky:<br />

Označkovaný<br />

vrchol<br />

1. 12<br />

ODKUD<br />

2. 2 12 Ø 2<br />

3. 4 12 Ø 4<br />

4 5 12 Ø 5<br />

Označkovaný<br />

vrchol<br />

ODKUD<br />

5. 6 12 Ø 6<br />

6. 3 6 Ø 3<br />

7. 7 6 Ø 7<br />

8. 8 3 Ø 8<br />

Protože jsou označkovány všechny vrcholy, vrchol v = 12 je kořen a podgraf s množinou hran<br />

PV KV<br />

12 2<br />

12 4<br />

12 5<br />

12 6<br />

Označkovaný<br />

vrchol<br />

ODKUD<br />

9. 9 8 Ø 9<br />

10. 10 9 Ø 10<br />

11. 11 10 Ø 11<br />

12. 1 10 Ø 1<br />

83 Ø 8, 6 Ø 3, 6 Ø 7, 8 Ø 9, 9 Ø 10, 10 Ø 1, 10 Ø 11, 12 Ø 2, 12 Ø 4, 12 Ø 5, 12 Ø 6 <<br />

je kořenovým stromem s kořenem r a faktorem grafu G.<br />

4. Nejkratší cesty<br />

1. Formulace úloh a vlastnosti vzdálenosti<br />

1.1. Úlohy o nejkratších cestách. Je dán orientovaný graf G, jehož každá hrana e œ EHGL je ohodnocena<br />

reálným číslem aHeL nazývaným délka hrany. Délka cesty je součet délek jednotlivých hran tvořících cestu. Jsou-li x,<br />

y dva vrcholy grafu, pak vzdáleností uHx, yL z vrcholu x do vrcholu y se nazývá délka nejkratší cesty z x do y. Pokud<br />

žádná orientovaná cesta z x do y nevede, klademe uHx, yL = .<br />

Úkolem je najít nejkratší orientovanou cestu nebo pouze vzdálenost<br />

(a) z daného vrcholu x do daného vrcholu,<br />

(b) z daného vrcholu x do každého vrcholu grafu různého od x,<br />

(c) z každého vrcholu grafu různého od daného vrcholu x do x,<br />

(d) z každého vrcholu x do každého vrcholu y ∫ x.<br />

Úloha (a) se zpravidla řeší pomocí algoritmů určených pro úlohy (b), (c) nebo (d) a úlohu (c) lze snadno převést na<br />

úlohu (b) obrácením orientace hran. Budeme se proto zabývat pouze řešením úloh (b) a (d).<br />

Ve všech úlohách připouštíme i záporné délky hran. Protože však obtížnost úlohy podstatně závisí na tom, zda v grafu<br />

existuje cyklus ze zápornou délkou, budeme se převážně zabývat případem, kdy graf takový cyklus neobsahuje a<br />

řešení je proto relativně snadné.<br />

Hledáme-li nejkratší cesty v multigrafech, můžeme předem z každé množiny rovnoběžných hran vynechat všechny<br />

hrany kromě jedné nejkratší, aniž by to ovlivnilo nejkratší cesty a vzdálenosti. Vynechat můžeme také smyčky,


<strong>Grafy</strong>.<strong>nb</strong> 27<br />

protože nemohou být obsaženy v žádné cestě. Získáme tak graf, jehož hrany můžeme ztotožnit s některými<br />

uspořádanými dvojicemi vrcholů a v němž délkou hrany Hi, jL je v případě i ∫ j délka nejkratší hrany vedoucí v<br />

původním grafu z vrcholu i do vrcholu j.<br />

Pro každou dvojici vrcholů i ∫ j proto označíme aHi, jL minimum délek hran vedoucích z vrcholu i do vrcholu j,<br />

pokud alespoň jedna taková hrana existuje, a položíme aHi, jL = v opačném případě. Kromě toho pro každý vrchol i<br />

položíme aHi, iL = 0.<br />

Jsou-li vrcholy očíslovány, můžeme hodnoty aHi, jL uspořádat do čtvercové matice. Tuto matici označíme A a nazveme<br />

ji maticí délek hran. Analogickou matici vzdáleností uHi, jL označíme U a nazveme ji maticí vzdáleností.<br />

1.2. Příbuzné úlohy. Hledání nejdelších cest lze převést na hledání nejkratších cest obrácením znamének všech<br />

délek hran. U acyklických grafů se však častěji používá speciální algoritmus, který je modifikací algoritmu 3.2.6 pro<br />

topologické uspořádání.<br />

Hledání nejkratších neorientovaných cest lze převést na hledání nejkratších orientovaných cest v symetrizaci grafu<br />

tím, že každou hranu nahradíme dvojicí opačně orientovaných hran stejné délky. Pokud délky hran původního<br />

neorientovaného grafu jsou nezáporné, lze použít metody vyložené v této kapitole. V opačném případě však<br />

odvozený graf obsahuje cyklus záporné délky a úloha je podstatně obtížnější.<br />

1.3. Věta. (a) Jestliže v grafu neexistuje cyklus nulové nebo záporné délky, potom každý nejkratší sled z vrcholu<br />

x do vrcholu y je i nejkratší cestou z x do y.<br />

(b) Jestliže v grafu neexistuje cyklus záporné délky, pak každý nejkratší sled z vrcholu x do vrcholu y obsahuje<br />

nejkratší cestu z x do y, přičemž délka této cesty je rovna délce sledu.<br />

Důkaz. (a) Kdyby nejkratší sled nebyl cestou, obsahoval by cyklus kladné délky. Vynecháním tohoto cyklu by vznikl<br />

sled menší délky, což by byl spor.<br />

(b) Není-li sled sám již cestou, obsahuje cyklus. Délka tohoto cyklu nemůže být podle předpokladu záporná, ale<br />

nemůže být ani kladná, neboť pak by vynecháním tohoto cyklu vznikl sled menší délky. Je tedy nulová. Opakovaným<br />

vynecháváním cyklů nulové délky nakonec získáme cestu stejné délky jako nejkratší sled, tedy nejkratší cestu.<br />

1.4. Věta (Trojúhelníková nerovnost). Jestliže v grafu neexistuje cyklus záporné délky, potom pro všechny<br />

trojice vrcholů i, j, k platí nerovnost<br />

uHi, jL § uHi, kL + uHk, jL.<br />

Důkaz. Spojením nejkratší cesty z vrcholu i do vrcholu k a nejkratší cesty z vrcholu k do vrcholu j získáme sled z<br />

vrcholu i do vrcholu j. Nyní si stačí uvědomit, že nejkratší cesta a nejkratší sled z vrcholu i do vrcholu j mají podle<br />

věty 1.3 stejnou délku.<br />

1.5. Důsledek. Jestliže v grafu neexistuje cyklus záporné délky, potom pro všechny trojice vrcholů i, j, k platí<br />

nerovnosti<br />

uHi, jL § aHi, jL, uHi, jL § uHi, kL + aHk, jL, uHi, jL § aHi, kL + uHk, jL.<br />

1.6. Věta. Nechť graf neobsahuje cyklus záporné délky. Jestliže nejkratší cesta z vrcholu i do vrcholu j prochází<br />

vrcholem k, pak její počáteční úsek mezi vrcholy i a k je nejkratší cestou z vrcholu i do vrcholu k, její koncový úsek<br />

mezi vrcholy k a j je nejkratší cestou z vrcholu k do vrcholu j a platí rovnost<br />

uHi, jL = uHi, kL + uHk, jL.<br />

Důkaz. Označíme-li p resp. q délku počátečního resp. koncového úseku nejkratší cesty z vrcholu i do vrcholu j,<br />

potom zřejmě uHi, jL = p + q. Kdyby tedy platila alespoň jedna z nerovností p > uHi, kL, q > uHk, jL, potom by platila<br />

také nerovnost uHi, jL > uHi, kL + uHk, jL. To však podle trojúhelníkové nerovnosti není možné.<br />

1.7. Důsledek. Nechť graf neobsahuje cyklus záporné délky. Jestliže k je počáteční vrchol poslední hrany v<br />

nejkratší cestě z vrcholu i do vrcholu j ∫ i, potom<br />

uHi, jL = uHi, kL + aHk, jL.<br />

1.8. Důsledek (Bellmanovy rovnice). Jestliže graf neobsahuje cyklus záporné délky, potom pro každou dvojici<br />

různých vrcholů i, j<br />

uHi, jL = min 8uHi, kL + aHk, jL » k ∫ j


<strong>Grafy</strong>.<strong>nb</strong> 28<br />

1.9. Cykly se zápornou délkou. Výše uvedené věty o vzdálenostech neplatí, obsahuje-li graf cyklus záporné<br />

délky. Algoritmy uvedené v této kapitole totiž tyto věty podstaným způsobem využívají a proto je na grafy obsahující<br />

cyklus záporné délky nelze použít. Ke zjištění, zda graf obsahuje cyklus záporné délky, však lze zpravidla použít<br />

přímo tyto algoritmy.<br />

i<br />

5<br />

5<br />

j<br />

-2 -2<br />

Obr.4.1. Příklad grafu, v němž neplatí trojúhelníková nerovnost<br />

V grafu, v němž existuje cyklus záporné délky, lze najít nejkratší cesty resp. vzdálenosti z daného vrcholu do všech<br />

ostatních v podstatě jenom tak, že najdeme všechny cesty začínající v tomto vrcholu, vypočteme jejich délky a pak z<br />

nich vybereme nejkratší. Zdá se, že žádný jiný podstatně rychlejší způsob není znám.<br />

2. Nejkratší cesty z daného vrcholu<br />

2.1. Základní schéma výpočtu vzdáleností. Pro každý vrchol označme UHxL délku dosud nejkratší nalezené<br />

cesty z vrcholu r do vrcholu x. Jestliže žádná cesta z vrcholu r do x dosud nalezena nebyla, položme UHxL = .<br />

Kdyby hodnoty UHxL byly skutečnými vzdálenostmi vrcholů grafu od vrcholu r, měla by pro každou hranu grafu<br />

vedoucí z vrcholu x do vrcholu y platit trojúhelníková nerovnost<br />

UHyL § UHxL + aHx, yL.<br />

Jestliže tato nerovnost neplatí, znamená to, že UHyL není délkou nejkratší cesty z r do y, neboť přes vrchol x vede do<br />

y cesta kratší. Proto v takovém případě hodnotu UHyL zaměníme nižší hodnotou UHxL + aHx, yL. Podle lemmatu 2.2 je<br />

nová hodnota UHyL opět délkou některé cesty z r do x. Testy trojúhelníkové nerovnosti (D) a případné úpravy hodnot<br />

U budeme provádět tak dlouho, dokud nedosáhneme platnosti této nerovnosti pro všechny hrany grafu. Stejná hrana<br />

může být ke snížení hodnoty U použita i několikrát - hodně přitom záleží na pořadí, ve kterém hrany vybíráme k testu<br />

nerovnosti (D). Pokud graf neobsahuje cyklus záporné délky, tento proces skončí podle věty 2.3 po konečně mnoha<br />

krocích.<br />

Na začátku výpočtu volíme UHxL := pro x ∫ r a UHrL := 0, protože ještě neznáme žádnou cestu z vrcholu r kromě<br />

triviální, jejíž délka je rovna nule.<br />

2.2. Lemma. Jestliže graf neobsahuje cyklus záporné délky, pak v každém okamžiku výpočtu vzdáleností podle<br />

schématu 2.1 pro každý vrchol v je buď UHvL = nebo UHvL je délkou dosud nejkratší nalezené cesty cesty z vrcholu r<br />

do vrcholu v.<br />

Důkaz. Tvrzení lemmatu zřejmě platí na začátku výpočtu. Stačí proto dokázat, že platí také po změně hodnoty UHvL v<br />

okamžiku t, jestliže platilo před ní. Nechť cx je nejkratší cesta z vrcholu r do vrcholu x nalezená před tímto<br />

okamžikem a aHcxL je její délka, takže v okamžiku t pro každý vrchol platí rovnost UHxL = aHcxL.<br />

Ke změně hodnoty UHvL může v okamžiku t dojít pouze v případě, že pro některý vrchol u a některou hranu e pvedoucí<br />

z vrcholu u do vrcholu v platí nerovnost UHvL > UHuL + aHu, vL, tj. nerovnost aHcvL > aHcuL + aHu, vL, přičemž<br />

můžeme zřejmě předpokládat rovnost aHu, vL = dHeL. Po provedení změny bude UHvL = UHuL + aHx, vL, zatímco pro<br />

žádný vrchol x ∫ v se hodnota UHxL nezmění. Připojením hrany e k cestě cu získáme sled s z r do v, jehož délkou je<br />

nová hodnota UHvL. Dokážeme-li, že sled s je ve skutečnosti cestou, bude důkaz hotov.<br />

K tomu stačí dokázat, že cesta cu neprochází vrcholem v. Předpokládejme, že tomu tak není, a označme cu,1 resp. cu,2<br />

k<br />

H D L


<strong>Grafy</strong>.<strong>nb</strong> 29<br />

úseky cesty cu mezi vrcholy r a v resp. mezi v a u. Protože počáteční úsek cesty cu je jednou z cest nalezených před<br />

okamžikem T, pro jeho délku p platí nerovnost aHcu,1L ¥ aHcvL a tedy také nerovnosti<br />

aHcvL > aHcuL + aHeL = aHcu,1L + aHcu,2L + aHeL ¥ aHcvL + aHcu,2L + aHeL,<br />

0 > aHcu,2L + aHeL.<br />

Poslední nerovnost však znamená, že cesta cu,2 tvoří spolu s hranou e cyklus záporné délky, což je ve sporu s<br />

předpokladem, že graf cykly se zápornou délkou neobsahuje.<br />

2.3. Věta. Jestliže graf neobsahuje cyklus záporné délky, pak výpočet podle schématu 2.1 skončí po konečně<br />

mnoha změnách hodnoty U a po ukončení bude pro každý vrchol x platit rovnost UHxL = uHr, xL.<br />

Důkaz. Všech cest začínajících ve vrcholu r je konečně mnoho, proto může během výpočtu dojít jenom ke konečně<br />

mnoha změnám hodnoty U.<br />

Zbývající tvrzení věty dokážeme sporem. Předpokládejme tedy, že po skončení výpočtu do některého vrcholu v vede<br />

nejkratší cesta o délce uHr, vL UHvL, a označme e první hranu v této cestě, pro jejíž koncový vrchol y platí nerovnost<br />

uHr, yL UHyL. Pro počáteční vrchol x této hrany již platí rovnost uHr, xL = UHxL a tedy podle důsledku 1.7 také<br />

rovnost UHxL + aHx, yL = uHr, yL. To však znamená, že výpočet nebyl ukončen, což je spor.<br />

2.4. Konstrukce nejkratších cest. Ke konstrukci nejkratších cest lze použít základní schéma 2.1 nebo<br />

některou z jeho efektivnějších variant 2.6 a 2.7. Stačí, když si při každém snížení hodnoty UHvL pro některý vrchol<br />

označíme ODKUDHvL hranu, která toto snížení způsobila. Na začátku výpočtu tedy hodnota ODKUD není definována<br />

pro žádný vrchol. Z důkazu lemmatu 2.2 vyplývá, že hodnota ODKUDHvL, která se v průběhu výpočtu může<br />

několikrát změnit, je v každém okamžiku výpočtu t poslední hranou v okamžiku t nejkratší známé cesty z vrcholu r<br />

do vrcholu v. Po skončení výpočtu pak lze hodnoty ODKUDHvL využít ke zpětné rekonstrukci nejkratších cest.<br />

2.5. Věta o kořenovém stromu nejkratších cest. Předpokládejme, že hodnoty ODKUDHvL byly získány<br />

podle 2.4. Potom platí následující tvrzení:<br />

HaL Je-li hodnota ODKUDHvL definována, pak ODKUDHvL je poslední hranou v některé nejkratší cestě z<br />

vrcholu r do vrcholu v.<br />

HbL Množina vrcholů D = 8v » hodnota ODKUDHvL je definována< je tvořena všemi vrcholy dostupnými z<br />

vrcholu r a různými od r.<br />

HcL Pro každou hranu ODKUDHyL s počátečním vrcholem x platí rovnost UHyL = UHxL + aHx, yL.<br />

HdL Množina hran H = 8ODKUDHvL » v œ D< tvoří spolu s množinou vrcholů D ‹ 8r< kořenový strom T<br />

s kořenem r.<br />

HeL Každá cesta v kořenovém stromě T vedoucí z kořene r do libovolného vrcholu x œ D je zároveň nejkratší<br />

cestou z r do x v původním grafu.<br />

Důkaz. Omezíme se na důkaz tvrzení (d), protože všechna ostatní jsou snadným důsledkem definice hodnot ODKUD,<br />

lemmatu 2.2 a věty 2.3. Protože v každém vrcholu v œ D končí právě jedna hrana z množiny H, totiž hrana<br />

ODKUDHvL, a ve vrcholu r nekončí žádná, stačí podle tvrzení (e) věty 3.3.4 dokázat, že T neobsahuje cyklus. Důkaz<br />

provedeme sporem. Předpokládejme tedy, že T obsahuje cyklus C = Hv0, e1, v1, ... , ek, vkL, kde ovšem v0 = vk.<br />

Hodnoty UHviL a ODKUDHviL se v průběhu výpočtu mohou i několikrát změnit, přičemž každá změna hodnoty<br />

ODKUDHviL je způsobena některou hranou e vedoucí z vrcholu vi-1 do vrcholu vi, pro kterou platí nerovnost<br />

UHviL > UHvi-1L + aHeL, a je spojena se snížením hodnoty UHviL na úroveň UHvi-1L + aHeL. Po skončení výpočtu je tedy<br />

každá hrana ei poslední hodnotou ODKUDHviL a od okamžiku výpočtu ti, v němž se jí stala, se hodnota UHviL již<br />

nemění. V důsledku rovnosti UHviL = UHvi-1L + aHeiL se tedy od tohoto okamžiku nemění ani hodnota UHvi-1L. Platí<br />

tedy nerovnosti t0 t1 t2 ... tk. To však není možné, neboť tk = t0.<br />

2.6. Algoritmus výpočtu vzdáleností I. Základní postup pro výpočet vzdáleností 2.1 a postup pro hledání<br />

nejkratších cest jsou pro praktické využití formulovány příliš volně. Efektivnější je např. tento přesněji definovaný<br />

postup:<br />

1. @InicializaceD UHrL := 0, UHvL := pro v ∫ r.<br />

2. @Zpracování celé množiny hranD Pro všechny hrany provedeme v libovolném pořadí krok 3. Po zpracování<br />

všech hran pokračujeme krokem 4.


<strong>Grafy</strong>.<strong>nb</strong> 30<br />

3. @Zpracování hrany eD Ověříme, zda platí trojúhelníková nerovnost UHKVHeLL § UHPVHeLL + aHeL. Pokud<br />

neplatí, položíme UHKVHeLL := UHPVHeLL + aHeL, ODKUDHKVHeLL := e<br />

4. @Test ukončeníD Jestliže během provádění kroku 2 nedošlo u žádného vrcholu v ke změně hodnoty UHvL,<br />

výpočet končí. V opačném případě pokračujeme krokem 2.<br />

Správnost tohoto algoritmu je okamžitým důsledkem věty 2.3.<br />

2.7. Algoritmus výpočtu vzdáleností II. Algoritmus 2.6 lze dále zlepšit tím, že zabráníme zbytečnému<br />

zpracování hran e, o nichž víme, že pro ně trojúhelníková nerovnost HDL platí. Jestliže totiž tato nerovnost pro<br />

některou hranu e již platí, může k jejímu porušení dojít pouze při snížení hodnoty UHPKHeLL, a naopak, pokud došlo<br />

ke snížení hodnoty UHxL, je nutné znovu otestovat nerovnost HDL pro všechny hrany, které z vrcholu x vycházejí.<br />

Zbytečnému zpracování hran tedy můžeme zabránit tak, že budeme během výpočtu udržovat množinu M vrcholů x, u<br />

nichž došlo ke snížení hodnoty UHxL, takže je nutné znovu otestovat nerovnost (D) pro všechny hrany z nich<br />

vycházející.<br />

Algoritmus<br />

Pomocná proměnná: Množina M vrcholů taková, že pro každou hranu e platí implikace<br />

PVHeL – M ïUHKVHeLL § UHPVHeLL + aHeL.<br />

1. @InicializaceD UHrL := 0, UHvL := pro v ∫ r, M = 8r


<strong>Grafy</strong>.<strong>nb</strong> 31<br />

x = 5 : M = 83, 4


<strong>Grafy</strong>.<strong>nb</strong> 32<br />

3. @Test ukončeníD Je-li M = «, výpočet končí.<br />

4. @Výběr vrcholuD Je-li M ∫ «, odstraníme z M některý vrchol, označíme jej x a zařadíme jej na konec<br />

vytvářené posloupnosti vrcholů Sv.<br />

5. @Zpracování hran vycházejících z vrcholu xD Pro každou hranu e œ E + HxL provedeme tyto operace :<br />

5 a. Zařadíme hranu e na konec vytvářené posloupnosti hran Sh a položíme CHKVHeLL := CHKVHeLL - 1.<br />

5 b. Jestliže nyní CHKVHeLL = 0, zařadíme KVHeL do množiny M .<br />

5 c. Jestliže UHKVHeLL > UHPVHeLL + aHeL, položíme UHKVHeLL := UHPVHeLL + aHeL, ODKUDHKVHeLL := e.<br />

Po zpracování všech hran pokračujeme krokem 3.<br />

Jestliže posloupnost Sv neobsahuje po ukončení výpočtu podle tohoto algoritmu všechny vrcholy, graf není acyklický<br />

a nalezené cesty nemusí být nejkratší. Ve výpočtu však lze pokračovat aplikací algoritmu 2.7 na již nalezené hodnoty<br />

UHxL a množinu M počátečních vrcholů hran ODKUDHvL.<br />

Pokud však posloupnost Sv obsahuje pozastavení tohoto algoritmu všechny vrcholy dostupné z vrcholu r, nalezené<br />

cesty jsou nejkratší.<br />

Správnost algoritmu je důsledkem věty 3.2.7 a věty 3.1.<br />

3.4. Nejdelší cesty v acyklických grafech. Pro hledání nejdelších cest lze použít kterýkoliv algoritmus pro<br />

hledání nejkratších cest - stačí u délek všech hran změnit znaménko. Nebezpečí vzniku cyklů o záporné délce v<br />

acyklických grafech nehrozí. Častěji se však používá tato modifikace algoritmu 3.3:<br />

Pomocné proměnné: množina M Œ VHGL, celočíselná funkce CHxL a reálná funkce UHxL pro každý vrchol x.<br />

1. @Výpočet vstupních stupňůD Pro každý vrchol x œ VHGL položíme CHxL := 0 a pro všechny hrany e œ EHGL<br />

postupně provedeme CHKVHeLL := CHPVHeLL + 1.<br />

2. @Inicializace množiny M a funkcí UHxLD Do množiny M vložíme všechny vrcholy x, pro něž CHxL = 0,<br />

a položíme UHrL := 0, UHxL := - pro x ∫ r.<br />

3. @Test ukončeníD Je-li M = «, výpočet končí.<br />

4. @Výběr vrcholuD Je-li M ∫ «, odstraníme z M některý vrchol, označíme jej x a zařadíme jej na konec<br />

vytvářené posloupnosti vrcholů Sv.<br />

5. @Zpracování hran vycházejících z vrcholu xD Pro každou hranu e œ E + HxL provedeme tyto operace :<br />

5 a. Zařadíme hranu e na konec vytvářené posloupnosti hran Sh a položíme CHKVHeLL := CHKVHeLL - 1.<br />

5 b. Jestliže nyní CHKVHeLL = 0, zařadíme KVHeL do množiny M .<br />

5 c. Jestliže UHKVHeLL UHPVHeLL + aHeL, položíme UHKVHeLL := UHPVHeLL + aHeL, ODKUDHKVHeLL := e.<br />

Po zpracování všech hran pokračujeme krokem 3.<br />

4. Algoritmus pro grafy s nezápornými délkami hran<br />

Také v tomto případě lze najít nejkratší cesty podstatně rychleji, použijeme-li modifikaci algoritmu 2.7, která je<br />

známa jako Dikstrův algoritmus.<br />

4.1. Věta (Dijkstrův algoritmus). Jsou-li délky všech hran grafu nezáporné a vybíráme-li v kroku 2 algoritmu<br />

2.7 vždy vrchol s nejnižší hodnotou UHvL, pak pro každý vrchol v platí, že v okamžiku jeho vyjmutí z množiny M je<br />

hodnota UHvL již definitivní, tj. UHvL = uHr, vL.<br />

Důkaz. Označme D množinu všech vrcholů, které byly z množiny vyňaty před vyjmutím vrcholu v. Stačí zřejmě<br />

dokázat, že tvrzení věty platí pro vrchol v, platí-li pro každý vrchol z množiny D. Nechť y je první vrchol některé<br />

nejkratší cesty C z vrcholu r do v, který nepatří do množiny D, x je vrchol, který mu v této cestě předchází, a e je<br />

nejkratší hrana vedoucí z vrcholu x do vrcholu y. Vrchol x byl tedy již vybrán, takže UHxL = uHr, xL. Protože po<br />

vybrání vrcholu x byly zpracovány všechny hrany z E + HxL, vrchol y patří do množiny M a vzhledem k důsledku 1.7<br />

platí rovnost UHyL = uHr, yL. Podle věty 1.6 tedy UHyL + uHy, vL = uHr, vL a proto v důsledku nezápornosti délek všech<br />

hran UHyL § uHr, vL § UHvL. Vrchol y však ještě nebyl z množiny M vyňat, a proto platí nerovnost UHyL ¥ UHvL. Platí<br />

tedy rovnost UHvL = UHyL = uHr, vL, což bylo třeba dokázat.


<strong>Grafy</strong>.<strong>nb</strong> 33<br />

5. Výpočet matice vzdáleností<br />

Jsou-li vrcholy grafu očíslovány, pak vzdálenosti uHi, jL vrcholů s indexy i, j tvoří tzv. matici vzdáleností U. Tuto<br />

matici lze samozřejmě vypočítat tak, že opakovaným použitím kteréhokoliv algoritmu pro výpočet nejkratších cest<br />

najdeme postupně nejkratší cestu a tím i vzdálenost z každého vrcholu do každého vrcholu. Místo tohoto<br />

těžkopádného a časově náročného postupu však lze použít jednoduchý, rychlý a elegantní postup, který je znám jako<br />

Floydův algoritmus.<br />

5.1. Floydův algoritmus. Algoritmus vychází z matice délek hran A a konstruuje posloupnost matic<br />

U0 = A, U1, U2, ... , Un = U,<br />

kde n je počet vrcholů grafu. Každá matice Uk z této posloupnosti je tvořena prvky ukHi, jL definovanými jako délka<br />

nejkratší cesty vedoucí z vrcholu i do vrcholu j a procházející pouze přes (některé) vrcholy z množiny 81, 2, ... , k


<strong>Grafy</strong>.<strong>nb</strong> 34<br />

6.2. Věta. Graf s n vrcholy obsahuje cyklus se zápornou délkou dostupný z vrcholu r, právě když algoritmus 2.6<br />

neskončí práci ani po n opakováních kroku 2<br />

6.3. Věta. Graf s n vrcholy obsahuje cyklus se zápornou délkou dostupný z vrcholu r, právě když algoritmus 2.7<br />

zařadí do množiny M a opět z ní vyjme tentýž vrchol vice než n-krát.<br />

5. Toky v sítích<br />

1. Základní pojmy a úlohy<br />

1.1. Tok v orientovaném grafu. Nechť G je orientovaný graf, nechť f : EHGL Ø je ohodnocení jeho hran<br />

reálnými čísly a nechť pro každý jeho vrchol v a každou množinu vrcholů A<br />

f + HvL = ‚<br />

eœE + HvL<br />

f HeL, f + HAL = ‚ f<br />

vœA<br />

+ HvL , f - HvL = ‚<br />

eœE- f HeL, f<br />

HvL<br />

- HAL = ‚ f<br />

vœA<br />

- HvL.<br />

Říkáme, že f splňuje ve vrcholu v œ VHGL Kirchhoffův zákon, jestliže f + HvL = f - HvL. Tokem v orientovaném<br />

grafu G nebo též tokem v síti G pak rozumíme ohodnocení f : EHGL Ø splňující jednu z následujících dvou<br />

podmínek:<br />

HIL f vyhovuje Kirchhoffovu zákonu v každém vrcholu v œ VHGL.<br />

HIIL f vyhovuje Kirchhoffovu zákonu v každém vrcholu v œ VHGL - S - Z, kde Z Õ VHGL je tzv. množina zdrojů a<br />

S Õ VHGL je s ní disjunktní tzv. množina spotřebičů.<br />

V případě (I) nazýváme f cirkulací, v případě (II) nazýváme f tokem od zdrojů Z ke spotřebičům S. Rozdíl<br />

f ≤ HzL = f + HzL - f - HzL, kde z je libovolný zdroj, se nazývá výsledný (nebo také čistý) tok ze zdroje z, a rozdíl<br />

f ¡ HsL = f - HsL - f + HsL, kde s je libovolný spotřebič, se nazývá výsledný (nebo také čistý) tok do spotřebiče s. Rozdíl<br />

je tzv. celkový tok ze zdrojů Z a rozdíl<br />

f ≤ HZL = f + HZL - f - HZL = ‚<br />

eœW + HZL<br />

f HeL - ‚<br />

eœW -HZL f HeL<br />

f ¡ HSL = f - HSL - f + HSL = ‚<br />

eœW - f HeL - ‚<br />

HSL eœW + f HeL<br />

HSL<br />

je tzv. celkový tok do spotřebičů S. Vrcholy neboli uzly sítě, v nichž f splňuje Kirchhoffův zákon, jsou tzv. tranzitní<br />

uzly.<br />

1.2. Věta a definice. Celkový tok f ≤ HZL ze zdrojů Z je roven celkovému toku f ¡ HSL do spotřebičů S. Označíme<br />

jej valH f L a nazveme velikost toku f .<br />

Důkaz. Větu dokážeme snadno úplnou indukcí podle počtu n tranzitních uzlů. Pro n = 0 je zřejmě W + HZL = W - HSL,<br />

W - HZL = W + HSL, a tedy f ≤ HZL = f ¡ HSL. Stačí tedy dokázat, že z platnosti věty pro sítě s n tranzitními uzly vyplývá její<br />

platnost pro sítě s n + 1 tranzitními uzly. Zvolme jeden tranzitní uzel t a přidejme jej k množině spotřebičů S. Protože<br />

f je zřejmě tokem od množiny zdrojů Z k množině spotřebičů S ' = S ‹ 8t< a počet tranzitních uzlů je roven n, podle<br />

indukčního předpokladu<br />

f ≤ HZL = f ¡ HS 'L = f ¡ HSL + f ¡ HtL = f ¡ HSL,<br />

neboť t je tranzitní uzel sítě G se zdroji Z a spotřebiči S, takže f ¡ HtL = 0. Tím je důkaz hotov.<br />

1.3. Přípustný tok. Ve většině úloh bývá velikost toku f HeL v hraně e omezena na interval XlHeL, cHeL\. Číslo cHeL<br />

se nazývá kapacita hrany e nebo horní omezení toku v hraně e, číslo lHeL se nazývá dolní omezení toku v hraně e.<br />

Tok f , který splňuje nerovnost lHeL § f HeL § cHeL pro každou hranu e sítě, se nazývá přípustný tok. Jsou-li všechna<br />

dolní omezení toku nulová, přípustný tok zřejmě existuje - např. nulový. V opačném případě se může stát, že


<strong>Grafy</strong>.<strong>nb</strong> 35<br />

přípustný tok vůbec neexistuje.<br />

Síť se zdroji a spotřebiči, v níž jsou všechna dolní omezení toku nulová, se nazývá transportní síť.<br />

1.4. Maximální tok a minimální řez. Přípustný tok f v síti G se zdroji Z, spotřebiči S a omezeními toku v<br />

hranách je maximální, jestliže pro každý jiný přípustný tok g v této síti platí nerovnost<br />

Úkolem je najít maximální přípustný tok.<br />

valH f L ¥ valHgL.<br />

Připomeňme, že řezem určeným množinou A vrcholů se nazývá množina hran WHAL = W + HAL ‹ W - HAL, tj. množina<br />

hran, z jejichž vrcholů leží v množině A právě jeden. Jsou-li lHeL, cHeL, e œ EHGL, omezení toku v hranách, pak číslo<br />

kHAL = ‚<br />

eœW + HAL<br />

cHeL - ‚<br />

eœW -HAL lHeL<br />

nazýváme kapacitou řezu určeného množinou A. Řez WHAL určený množinou A odděluje zdroje a spotřebiče,<br />

jestliže Z Œ A a S › A = «. Řez s touto vlastností se také nazývá blokující řez. Blokující řez WHAL je minimální,<br />

jestliže pro každý jiný blokující řez WHBL platí nerovnost<br />

kHAL ¥ kHBL.<br />

Úkolem je najít minimální řez, tj. řez s minimální kapacitou oddělující zdroje od spotřebičů.<br />

Ukazuje se, že obě úlohy - úloha o maximálním toku a úloha najít minimální řez - spolu úzce souvisejí. Souvislost<br />

naznačuje následující věta, která představuje snadnou část tzv. Fordovy-Fulkersonovy věty o maximálním toku a<br />

minimálním řezu.<br />

1.5. Věta. Pro každý přípustný tok f v síti G se zdroji Z, spotřebiči S a omezeními toku v hranách a pro každý<br />

blokující řez WHAL platí nerovnost kHAL ¥ valH f L.<br />

Důkaz. Protože v každém uzlu v œ A - Z je pro f splněn Kirchhoffův zákon,<br />

= f + HAL - f - HAL = ‚<br />

valH f L = f ≤ HZL = f + HZL - f - HZL =<br />

eœW + HAL<br />

f HeL - ‚<br />

eœW - f HeL § ‚<br />

HAL eœW + cHeL - ‚<br />

HAL eœW - lHeL = kHAL.<br />

HAL<br />

1.6. Nejlevnější tok. Kromě dolního omezení toku lHeL a kapacity cHeL může být každá hrana ohodnocena také<br />

reálným a nikoliv nutně kladným číslem aHeL, tzv. jednotkovou cenou toku v hraně e. Teče-li hranou e tok f HeL, pak<br />

součin aHeL f HeL nazýváme cenou toku v hraně e a součet<br />

nazýváme cenou toku v síti.<br />

‚ aHeL f HeL<br />

eœEHGL<br />

Úkolem je najít nejlevnější cirkulaci. Tato úloha je značně obecná a zahrnuje automaticky hledání jakékoliv přípustné<br />

cirkulace. Lze na ni převést také úlohu o maximálním toku od zdrojů ke spotřebičům: nahradíme-li síť G s omezeními<br />

l, c sítí G* lišící se od sítě z odstavce 1.7 pouze tzv. návratovou hranou e* vedoucí od spotřebiče s* ke zdroji z* a<br />

definujeme-li omezení na tok v této hraně formulemi l*He*L = l * - Hs*L, c*He*L = c * - Hs*L a ceny toku v hranách formulemi<br />

aHeL = 0 pro e ∫ e*, aHe*L = -1, potom přípustná cirkulace v G* je zřejmě nejlevnější právě když jí určený tok od<br />

zdrojů ke spotřebičům v síti G je maximální.<br />

1.7. Redukce k síti s jedním zdrojem a jedním spotřebičem. Nechť G je orientovaný graf a S, Z jsou<br />

disjunktní neprázdné množiny jeho vrcholů. Přidejme ke grafu G dva nové vrcholy z*, s*, pro každý vrchol z œ Z<br />

přidejme orientovanou hranu ezvedoucí z vrcholu z* do vrcholu z a pro každý vrchol s œ S přidejme orientovanou<br />

hranu es vedoucí z vrcholu s do vrcholu s*. Nechť G* je výsledný graf.<br />

Je-li f tok v síti G se zdroji Z a spotřebiči S, pak ohodnocení f* hran grafu G* definované předpisem


<strong>Grafy</strong>.<strong>nb</strong> 36<br />

lo<br />

f HeL pro e œ EHGL,<br />

f*HeL = m f<br />

o<br />

n<br />

≤HzL pro e = ez, z œ Z,<br />

f ¡ HsL pro e = es, s œ S,<br />

je zřejmě tokem v síti G* s jedním zdrojem z* a jedním spotřebičem s*.<br />

Je-li tok v každé hraně e œ EHGL omezen na interval XlHeL, cHeL\ a rozšíříme-li funkce l, c na funkce l*, c* : EHG*L Ø <br />

předpisem<br />

l*HezL = l + HzL - c - HzL, c*HezL = c + HzL - l - HzL pro z œ Z,<br />

l*HesL = l - HsL - c + HsL, c*HesL = c - HsL - l + HsL pro s œ S,<br />

snadno ověříme, že f je přípustný tok v síti G s omezeními l, c, právě když f* je přípustný tok v síti G* s omezeními<br />

l*, c*, že f * ≤ Hz*L = f ≤ HZL, f * ¡ Hs*L = f ¡ HSL a že f je maximální, právě když f* je maximální.<br />

Snadno se také ověří, že řez WGHAL odděluje zdroje Z a spotřebiče S v síti G, právě když řez WG* HA*L, kde A* značí<br />

množinu A ‹ 8z*


<strong>Grafy</strong>.<strong>nb</strong> 37<br />

Jsou-li přípustné i záporné toky, nahradíme nejprve síť podle 1.8 sítí s nezápornými dolními omezeními toku v<br />

hranách a teprve potom zdvojíme vrcholy s omezenou propustností výše popsaným způsobem.<br />

2. Maximální tok a minimální řez<br />

Nechť G je síť s dolními omezeními toku l a kapacitami hran c. Platí-li pro některou hranu e nerovnost lHeL > 0 nebo<br />

cHeL 0, přípustný tok v této síti nemusí existovat. Pokud však nějaký přípustný tok existuje, existuje i maximální tok<br />

a za jistých dostatečně obecných předpokladů o výchozím přípustném toku a omezeních l, c jej lze nalézt algoritmicky<br />

v konečném počtu kroků - viz větu 2.8.<br />

2.1. Věta o maximálním toku. Jestliže v síti G s dolními omezeními toku l, kapacitami hran c, zdroji Z a<br />

spotřebiči S existuje přípustný tok, potom v ní existuje maximální přípustný tok.<br />

Důkaz. Nechť e1, e2, ... , en je prostá posloupnost všech hran sítě G, F je množina všech přípustných toků v síti G,<br />

F : F Ø je zobrazení, které každému přípustnému toku f přiřazuje bod FH f L = Hx1, x2, ... , xnL, kde xi = f HeiL pro<br />

i = 1, 2, ... , n, a w : n Ø je funkce definovaná formulí<br />

wHx1, x2, ... , xnL = ‚<br />

eiœW + HZL<br />

xi - ‚<br />

eiœW -HZL xi.<br />

Zobrazení F je zřejmě prosté, funkce w je lineární a tedy spojitá a wHFH f LL = valH f L. Množina FHFL je omezená, neboť<br />

je podmnožinou n-rozměrného intervalu XlHe1L, cHe1L\ µ ÿ ÿ ÿ µ XlHenL, cHenL\ a snadno se dokáže, že je uzavřená, a tedy<br />

kompaktní. Podle Weierstrassovy věty o extrémech spojitých funkcí na kompaktních množinách tedy existuje bod<br />

x = FH f L, v němž funkce w nabývá svého maxima na množině FHFL. Pro každý přípustný tok g tedy platí nerovnost<br />

valHgL = wHFHgLL § wHFH f LL = valH f L, což znamená, že tok f je maximální.<br />

je zřejmě lineární a tedy spojitá, a proto podle Weierstrassovy věty o extrémech spojitých funkcí na kompaktních<br />

množinách množina FHFL obsahuje bod<br />

2.2. Zlepšující cesty. Hranu v neorientované cestě nebo kružnici v orientovaném grafu nazveme hranou<br />

vpřed, je.li orientována ve směru průchodu cestou, a hranou vzad v opačném případě, tj. je-li orientována proti<br />

směru průchodu cestou. Např. na obr. 5.2 je hrana e3 je hranou vpřed v neorientované cestě v1 e1 v2 e3 v3 e5 v4, ale<br />

hranou vzad v neorientované kružnici v2 e4 v5 e6 v3 e3.<br />

v1<br />

e1<br />

e2<br />

v2<br />

e4<br />

v5<br />

e3<br />

e6<br />

e7<br />

v3<br />

Obr.5.2. Ilustrace k hranám vpřed a vzad<br />

Předpokládejme nyní, že f je přípustný tok v síti G s dolními omezeními toku l, kapacitami hran c, zdrojem z a<br />

spotřebičem s. Řekneme, že neorientovaná cesta ze zdroje do spotřebiče je zlepšující cesta vzhledem k toku f nebo<br />

zlepšující cesta pro tok f nebo f -zlepšující cesta, jestliže každá její hrana e splňuje následující podmínku:<br />

Je-li e hranou vpřed, pak f HeL cHeL, je-li e hranou vzad, pak lHeL f HeL.<br />

Rozdíl cHeL - f HeL u hrany vpřed a rozdíl f HeL - lHeL u hrany vzad nazveme zbytkovou kapacitou hrany. Minimum<br />

zbytkových kapacit všech hran označíme d a nazveme zbytkovou kapacitou nebo prostě kapacitou zlepšující cesty<br />

a hrany, na kterých je tohoto minima dosaženo, nazveme kritickými hranami zlepšující cesty. Z definice zlepšující<br />

cesty vyplývá, že každá zlepšující cesta má alespoň jednu kritickou hranu.<br />

e5<br />

v4


<strong>Grafy</strong>.<strong>nb</strong> 38<br />

Zcela analogicky definujeme zlepšující kružnici vzhledem k toku f , její (zbytkovou) kapacitu a kritické hrany.<br />

Je zřejmé, že zvýšením toku f o hodnotu d v každé hraně vpřed a jeho snížením o hodnotu d v každé hraně vzad<br />

zlepšující cesty získáme nový přípustný tok ze zdroje z do spotřebiče s, jehož celková velikost je však o d větší, než<br />

celková velikost původního toku f .<br />

Tento zvětšený tok můžeme popsaným postupem dále zvýšit, pokud ovšem najdeme novou zlepšující cestu. Starou<br />

cestu již nelze použít, neboť alespoň v každé její kritické hraně vpřed resp. vzad byl tok zvětšen resp. zmenšen o<br />

maximální možnou hodnotu d, takže vzhledem k novému toku již tato cesta není zlepšující.<br />

Je tedy nutné umět hledat zlepšující cesty.<br />

2.3. Hledání zlepšující cesty značkováním. Nechť f je přípustný tok v síti G s dolními omezeními toku l,<br />

kapacitami hran c, zdrojem z a spotřebičem s. Úkolem je najít zlepšující cestu vzhledem k f .<br />

1. @InicializaceD Označkujeme vrchol z, ostatní vrcholy jsou bez značky.<br />

2. @Test nalezení cestyD Je-li označkován vrchol s, značkovací procedura končí.<br />

3. @Pokus o značkování vpředD Existuje-li hrana e, jejíž vrchol PVHeL je označkován, zatímco vrchol v = KVHeL<br />

označkován není, a platí-li nerovnost f HeL cHeL, označkujeme vrchol v, položíme ODKUDHvL = +e a<br />

pokračujeme krokem 2. Neexistuje-li taková hrana, pokračujeme krokem 4.<br />

4. @Pokus o značkování vzadD Existuje-li hrana e, jejíž vrchol KVHeL je označkován, zatímco vrchol v = PVHeL<br />

označkován není, a platí-li nerovnost f HeL cHeL, označkujeme vrchol v, položíme ODKUDHvL = -e a<br />

pokračujeme krokem 2. Neexistuje-li taková hrana, značkovací procedura končí, neboť nelze označkovat<br />

žádný další vrchol.<br />

Dojde-li k označkování vrcholu s, pak existuje zlepšující cesta vzhledem k f a lze ji sestrojit zpětným postupem<br />

pomocí hodnot ODKUD. Znaménka těchto hodnot pouze usnadňují rozlišení hran vpřed a vzad.<br />

2.4. Hledání nejkratší zlepšující cesty. Nechť f je přípustný tok v síti G s dolními omezeními toku l, kapacitami<br />

hran c, zdrojem z a spotřebičem s. Při hledání zlepšující cesty právě popsanou značkovací procedurou hraje<br />

podstatnou roli pořadí, v jakém pořadí testujeme hrany v krocích 3 a 4. Volíme-li toto pořadí víceméně náhodně,<br />

nalezení zlepšující cesty může trvat zbytečně dlouho, její délka může být příliš velká a kapacita příliš malá. Nejkratší<br />

zlepšující cestu, tj. zlepšující cestu s nejmenším možným počtem hran, lze najít následující variantou značkovací<br />

procedury 2.3, v níž jsou označkovány právě ty vrcholy v, pro něž dHvL > 0.<br />

1. @InicializaceD M := 8z 0 nebo M = «, hledání končí. V opačném případě pokračujeme krokem 3.<br />

3. @Výběr vrcholuD Z množiny M odebereme některý vrchol, označíme jej x a pokračujeme krokem 4.<br />

4. @Zpracování hran vpředD Pro každou hranu e œ E + HxL provedeme kroky 4 a - 4 c a po zpracování všech hran<br />

pokračujeme krokem 5.<br />

4 a. Položíme y := KVHeL.<br />

4 b. Jestliže dHyL = 0 a platí nerovnost f HeL cHeL, vložíme y do M a položíme dHyL = min 8dHxL, cHeL - f HeL lHeL, vložíme y do M a položíme dHyL = min 8dHxL, f HeL - lHeL


<strong>Grafy</strong>.<strong>nb</strong> 39<br />

tok v síti G s dolními omezeními toku l, kapacitami hran c, zdrojem z a spotřebičem s a nechť pro každý vrchol v ∫ z,<br />

do kterého je již nalezena neorientovaná cesta, je dHvL minimum zbytkových kapacit jejích hran, a dHvL = 0 pro<br />

vrcholy, do nichž žádná taková cesta zatím nalezena nebyla.<br />

Pomocné proměnné: množina M a funkce d : VHGL Ø .<br />

1. @InicializaceD M := 8z


<strong>Grafy</strong>.<strong>nb</strong> 40<br />

valH f L valH f1L valH f2L valH f3L ....<br />

Podle věty 1.5 však velikost každého přípustného toku je nejvýše rovna kapacitě libovolného blokujícího řezu, a<br />

proto je tato posloupnost nutně konečná a její poslední člen je maximální přípustný tok.<br />

2.9. Fordova-Fulkersonova věta o maximálním toku a minimálním řezu. Velikost maximálního toku<br />

od zdrojů ke spotřebičům je rovna kapacitě minimálního řezu oddělujícího zdroje a spotřebiče.<br />

Důkaz. Je-li f maximální tok v síti s jedním zdrojem a spotřebičem, pak značkovací procedura 2.3 nemůže<br />

označkovat spotřebič. To však podle věty 2.7 znamená, že velikost toku f je rovna kapacitě minimálního blokujícího<br />

řezu.<br />

2.10. Příklad. Najdeme maximální přípustný tok a minimální blokující řez v síti G s vrcholy 1, 2, . . . , 9, zdrojem<br />

z = 1 a spotřebičem s = 9, zadané spolu s nenulovýn přípustným tokem f tabulkou<br />

PV 1 1 1 2 2 3 3 4 4 5 5 5 5 6 7 7 8<br />

KV 2 3 6 3 4 4 5 5 8 1 6 7 8 9 4 9 9<br />

l 0 0 0 0 0 0 0 3 0 0 0 0 0 0 2 0 0<br />

c 6 6 4 2 3 4 4 5 3 3 6 5 5 5 6 3 9<br />

f 0 0 0 0 0 0 0 4 0 0 0 4 0 0 4 0 0<br />

I. V prvním kroku Fordova-Fulkersonova algoritmu je třeba najít zlepšující cestu. Všimneme-li si, že do spotřebiče<br />

vedou pouze hrany 6 Ø 9, 7 Ø 9 a 8 Ø 9, snadno najdeme nejkratší zlepšující cestu s vrcholy 1, 6, 9 a zbytkovou<br />

kapacitou 4. Příslušný zlepšený tok f1 s hodnotou valH f1L = 4 je dán tabulkou<br />

PV 1 1 1 2 2 3 3 4 4 5 5 5 5 6 7 7 8<br />

KV 2 3 6 3 4 4 5 5 8 1 6 7 8 9 4 9 9<br />

f1 0 0 4 0 0 0 0 4 0 0 0 4 0 4 4 0 0<br />

v níž je červeně vyznačena kritická hrana použité zlepšující cesty a růžově je vyznačena hrana se zlepšeným tokem.<br />

II. Zlepšující cestu pro f1 budeme hledat algoritmem 2.4 pro nalezení nejkratší zlepšující cesty. Nechť tedy M = 81


<strong>Grafy</strong>.<strong>nb</strong> 41<br />

x M y dHyL ODKUDHyL M<br />

1 « 2 6 1 Ø 2 82<<br />

3 2 1 Ø 3 82, 3<<br />

2 83< 4 3 2 Ø 4 83, 4<<br />

4 83< 5 1 4 Ø 5 83, 5<<br />

8 3 4 Ø 8 83, 5, 8<<br />

.<br />

7 2 4 7 83, 5, 7, 8<<br />

8 83, 5, 7< 9 3 8 Ø 9 83, 5, 7, 9<<br />

3 85, 7, 9<<br />

7 85, 9<<br />

5 89< 6 1 5 Ø 6 86, 9<<br />

6 89<<br />

Cesta 1 Ø 2 Ø 4 Ø 8 Ø 9 je tedy zlepšující cestou cestou s maximální kapacitou 3 a příslušný zlepšený tok f3 s<br />

hodnotou valH f3L = 11 je dán tabulkou<br />

PV 1 1 1 2 2 3 3 4 4 5 5 5 5 6 7 7 8<br />

KV 2 3 6 3 4 4 5 5 8 1 6 7 8 9 4 9 9<br />

f3 3 4 4 0 3 0 4 4 3 0 1 4 4 4 4 0 7<br />

IV. Zlepšující cestu pro f3 budeme hledat stejným postupem, jakým jsme našli nejkratší zlepšující cestu pro f2.<br />

Postupně dostaneme:<br />

x M y dHyL ODKUDHyL M<br />

1 « 2 3 1 Ø 2 82<<br />

2 83<<br />

3 2 1 Ø 3 82, 3<<br />

3 « 4 2 3 Ø 4 84<<br />

4 « 5 1 4 Ø 5 85<<br />

7 2 4 7 85, 7<<br />

7 85< 9 2 7 Ø 9 85, 9<<br />

5 4 7 5 85, 9<<br />

5 89< 6 1 5 Ø 6 86, 9<<br />

6 88, 9<<br />

8 89<<br />

8 1 5 Ø 8 86, 8, 9<<br />

Cesta 1 Ø 3 Ø 4 7 Ø 9 je tedy zlepšující cestou cestou s maximální kapacitou 2 a příslušný zlepšený tok f4 s<br />

hodnotou valH f4L = 13 je dán tabulkou<br />

PV 1 1 1 2 2 3 3 4 4 5 5 5 5 6 7 7 8<br />

KV 2 3 6 3 4 4 5 5 8 1 6 7 8 9 4 9 9<br />

f3 3 6 4 0 3 2 4 4 3 0 1 4 4 4 2 2 7<br />

V. Zlepšující cestu pro f4 budeme hledat stejným postupem, jakým jsme našli nejkratší zlepšující cestu pro f2.<br />

Postupně dostaneme:<br />

x M y dHyL ODKUDHyL M<br />

1 « 2 3 1 Ø 2 82<<br />

2 « 3 2 2 Ø 3 83<<br />

3 « 4 2 3 Ø 4 84<<br />

.<br />

.<br />

.<br />

.


<strong>Grafy</strong>.<strong>nb</strong> 42<br />

x M y dHyL ODKUDHyL M<br />

4 « 5 1 4 Ø 5 85<<br />

5 « 6 1 5 Ø 6 86<<br />

7 1 5 Ø 7 86, 7<<br />

8 1 5 Ø 8 86, 7, 8<<br />

6 87, 8< 9 1 6 Ø 9 87, 8, 9<<br />

Cesta 1 Ø 2 Ø 3 Ø 4 Ø 5 Ø 6 Ø 9 je tedy nejkratší zlepšující cestou s kapacitou 1 a příslušný zlepšený tok f5 s<br />

hodnotou valH f5L = 14 je dán tabulkou<br />

PV 1 1 1 2 2 3 3 4 4 5 5 5 5 6 7 7 8<br />

KV 2 3 6 3 4 4 5 5 8 1 6 7 8 9 4 9 9<br />

f5 4 6 4 1 3 3 4 5 3 0 2 4 4 5 2 2 7<br />

VI. Zlepšující cestu pro f5 budeme opět hledat postupem, jakým jsme našli nejkratší zlepšující cestu pro f2. Postupně<br />

dostaneme:<br />

x M y dHyL ODKUDHyL M<br />

1 « 2 2 1 Ø 2 82<<br />

2 « 3 1 2 Ø 3 83< .<br />

3 « 4 1 3 Ø 4 84<<br />

4 «<br />

Protože spotřebič není označkován, zlepšovací cesta neexistuje. Podle věty 2.7 je tedy tok f5 je maximální a blokující<br />

řez určený množinou A = 81, 2, 3, 4< je minimální. Obě tvrzení ověříme. Protože<br />

W + HAL = 81 Ø 6, 3 Ø 5, 4 Ø 5, 4 Ø 8


<strong>Grafy</strong>.<strong>nb</strong> 43<br />

3.1. Věta. Přípustná cirkulace v síti G bez zdrojů a spotřebičů s dolními omezeními toku l a kapacitami hran c<br />

existuje právě tehdy když každý řez WHAL má nezápornou kapacitu, tj. když pro každou neprázdnou množinu A<br />

vrcholů sítě platí nerovnost<br />

‚<br />

eœW + HAL<br />

cHeL - ‚<br />

eœW -HAL lHeL ¥ 0.<br />

Důkaz. Existuje-li přípustná cirkulace f , pak pro každý řez platí nerovnosti<br />

‚<br />

eœW + HAL<br />

Obrácená implikace je důsledkem věty 3.4.<br />

cHeL - ‚<br />

eœW - lHeL ¥ ‚<br />

HAL eœW + f HeL - ‚<br />

HAL eœW - f HeL = 0.<br />

HAL<br />

3.2. Hledání přípustné cirkulace I. Podle věty 3.1 brání existenci přípustné cirkulace přítomnost řezu se<br />

zápornou kapacitou. Níže uvedený algoritmus buď najde takový řez nebo přípustnou cirkulaci. Nechť tedy G je síť<br />

bez zdrojů a spotřebičů s omezeními toku l, c a nechť f je libovolná cirkulace, např. nulová:<br />

1. Najdeme hranu h s nepřípustným tokem. Jestliže taková hrana neexistuje, výpočet končí, cirkulace je přípustná.<br />

2. Platí-li nerovnost f HhL lHhL, položíme z := KVHhL, s := PVHhL, v opačném případě, tj. v případě, že platí<br />

nerovnost f HhL > cHhL, položíme z := PVHhL, s := KVHhL.<br />

3. Pokusíme se najít zlepšující cestu z vrcholu z do vrcholu s v podgrafu neobsahujícím hranu h. Není-li možno<br />

označkovat vrchol s, výpočet končí, přípustná cirkulace neexistuje.<br />

4. Omezující cestu doplníme o hranu h, čímž vznikne zlepšující kružnice. V případě f HhL lHhL budeme hranu h<br />

pokládat za hranu vpřed, v případě f HhL > cHhL ji budeme pokládat za hranu vzad.<br />

5. Vypočteme defekt d nalezené zlepšující kružnice.<br />

6. Pro každou hranu e zlepšující kružnice položíme f HeL := f HeL + d, je-li hranou vpřed, a f HeL := f HeL - d, je-li<br />

hranou vzad .<br />

7. Pokračujeme krokem 1.<br />

3.3. Příklad. Hledejme přípustnou cirkulaci v miniaturní síti G zadané tabulkou<br />

PV 1 2 2 3 4 4<br />

KV 2 3 4 1 1 3<br />

l 0 0 0 2 2 0<br />

c 6 2 2 4 4 6<br />

Pro nulovou cirkulaci f je hranou s nepřípustným tokem např. hrana h = 3 Ø 1.<br />

1. Protože f HhL lHeL, položíme z := KVHhL = 1, s := PVHhL = 3 a pokusíme se najít zlepšující cestu z vrcholu z = 1<br />

do vrcholu s = 3. V daném případě snadno najdeme nejkratší zlepšující cestu 1 Ø 2 Ø 3 s defektem 2. Přidáme k ní<br />

hranu h a dostaneme zlepšující kružnici s defektem 2. Změníme podél ní f a dostaneme toto zlepšení cirkulace f :<br />

PV 1 2 2 3 4 4<br />

KV 2 3 4 1 1 3<br />

f 2 2 0 2 0 0<br />

Pro zlepšenou cirkulaci f je jedinou hranou s nepřípustným tokem hrana h = 4 Ø 1.<br />

2. Protože f HhL lHeL, položíme z := KVHhL = 1, s := PVHhL = 4 a pokusíme se najít zlepšující cestu z vrcholu z = 1<br />

do vrcholu s = 4. V daném případě snadno najdeme nejkratší zlepšující cestu 1 Ø 2 Ø 4 s defektem 2. Přidáme k ní<br />

hranu h a dostaneme zlepšující kružnici s defektem 2. Změníme podél ní f a dostaneme již hledanou přípustnou<br />

cirkulaci:<br />

PV 1 2 2 3 4 4<br />

KV 2 3 4 1 1 3<br />

f 4 2 2 2 2 0<br />

.<br />

.<br />

.


<strong>Grafy</strong>.<strong>nb</strong> 44<br />

Diagram sítě G spolu s hodnotami nalezené přípustné cirkulace v jednotlivých hranách je na obr. 5.4<br />

1<br />

4<br />

2<br />

2<br />

2<br />

3<br />

2<br />

Obr.5.4. Ilustrace k hledání přípustné cirkulace podle 3.2<br />

3.4. Věta. Jestliže v síti bez zdrojů a spotřebičů s omezeními toku l, c existuje přípustná cirkulace, algoritmus 3.2<br />

ji nalezne. V opačném případě se algoritmus zastaví v kroku 3 a množina A všech označkovaných vrcholů určuje řez<br />

se zápornou kapacitou, tj.<br />

‚<br />

eœW + HAL<br />

Důkaz. Definujme defekt každé hrany e předpisem<br />

cHeL - ‚<br />

eœW -HAL lHeL 0.<br />

lo<br />

f HeL - cHeL, jestliže f HeL > cHeL,<br />

def f HeL = m 0, jestliže lHeL § f HeL § cHeL,<br />

o<br />

n lHeL - f HeL, jestliže f HeL lHeL.<br />

Cirkulace f je zřejmě přípustná, když defekt každé hrany je nezáporný. Při změnách cirkulace v kroku 6 algoritmu<br />

3.2 defekt hrany h klesne, defekt hran nalezené zlepšující cesty z vrcholu z do vrcholu s nevzroste a defekt ostatních<br />

hran se nezmění. Proto se algoritmus po konečně mnoha krocích zastaví.<br />

Zastaví-li se v kroku l, cirkulace f je přípustná. Předpokládejme tedy, že k zastavení došlo v kroku 3. Z vlastností<br />

značkovací procedury vyplývá, že platí implikace<br />

Protože f je cirkulace, i když nepřípustná, platí<br />

e œ W + HAL fl f HeL ¥ cHeL, e œ W - HAL fl f HeL § lHeL.<br />

‚<br />

eœW + HAL<br />

cHeL § ‚<br />

eœW + HAL<br />

f HeL = ‚<br />

eœW - f HeL § ‚<br />

HAL eœW - lHeL .<br />

HAL<br />

Alespoň jedna z těchto nerovností je však ostrá, neboť hrana h také patří do řezu WHAL a platí pro ni buď nerovnost<br />

cHhL f HeL nebo nerovnost f HhL lHeL. To však ihned implikuje, že kapacita řezu WHAL je záporná, takže podle věty<br />

3.1 žádná přípustná cirkulace neexistuje.<br />

3.5. Hledání přípustné cirkulace II. Úlohu nalézt přípustnou cirkulaci v síti G bez zdrojů a spotřebičů s<br />

dolními omezeními toku l a kapacitami hran c lze převést na úlohu maximalizace přípustného toku v jisté síti G ` se<br />

zdrojem z ` , spotřebičem s ` , kapacitami hran c ` a nulovým dolním omezením toku, kterou vytvoříme ze sítě G takto:<br />

1. Pro každou hranu e œ EHGL položíme c ` HeL = cHeL - lHeL.<br />

2. Pro každý vrchol v œ VHGL položíme<br />

LHvL = l ≤ HvL = ‚<br />

eœE + HvL<br />

0<br />

lHeL - ‚<br />

eœE-HvL lHeL.<br />

3. K síti G přidáme dva nové vrcholy, umělý zdroj z ` a umělý spotřebič s ` .<br />

4. Pro každý vrchol v œ VHGL, pro který LHvL > 0, přidáme hranu ev s kapacitou c ` HevL = LHvL vedoucí z vrcholu v do<br />

spotřebiče s `<br />

2<br />

4


<strong>Grafy</strong>.<strong>nb</strong> 45<br />

5. Pro každý vrchol v œ VHGL, pro který LHvL 0, přidáme hranu ev s kapacitou c ` HevL = -LHvL vedoucí ze zdroje s `<br />

do vrcholu v.<br />

Platí totiž následující věta.<br />

3.6. Věta. Nechť f ` je maximální tok v síti G ` se zdrojem z ` , spotřebičem s ` , kapacitami hran c ` a nulovým dolním<br />

omezením toku v hranách vytvořené ze sítě G bez zdrojů a spotřebičů s omezeními toku l, c tak jako v 3.5. Potom<br />

platí:<br />

HaL Jestliže f ` nasycuje všechny hrany vycházející ze zdroje z ` , potom předpis e œ EHGL fl f HeL = f ` HeL + lHeL definuje<br />

přípustnou cirkulaci v síti G.<br />

HbL Jestliže f ` nenasycuje některou hranu vycházející ze zdroje z ` , potom přípustná cirkulace v síti G neexistuje a řez<br />

WGHA - 8z ` 0<br />

` HevL - f ` HevLM = ‚ LHvL - ‚ f<br />

LHvL>0 LHvL>0<br />

` HevL = - ‚ LHvL - ‚ f<br />

LHvL0 LHvL0<br />

` HevL =<br />

= ‚ Ic<br />

LHvL0<br />

` HevL - f ` HevLM.<br />

To však vzhledem k přípustnosti toku f ` znamená, že f ` nasycuje všechny hrany vycházející ze zdroje z ` , právě když<br />

nasycuje všechny hrany vstupující do spotřebiče s ` .<br />

II. Položíme-li E + = E G + , E - = EG - , potom pro = ≤1a každý vrchol v œ VHGL s vlastností LHvL > 0 zřejmě platí<br />

f ≤ HvL = ‚<br />

= ‚<br />

eœE + HvL<br />

eœE + HvL<br />

f HeL - ‚<br />

eœE- f HeL = ‚<br />

HvL eœE + f<br />

HvL<br />

` HeL + ‚<br />

eœE + lHeL - ‚<br />

HvL eœE- f<br />

HvL<br />

` HeL - ‚<br />

eœE- lHeL =<br />

HvL<br />

f ` HeL + LHvL - ‚<br />

eœE- f<br />

HvL<br />

` HeL = ‚<br />

eœE + f<br />

HvL<br />

` HeL - ‚<br />

eœE- f<br />

HvL<br />

` HeL + f ` HevL + c ` HevL - f ` HevL =<br />

= ‚ 9 f ` HeL … e œ E G ` + HvL= - ‚ 9 f ` HeL … e œ E G ` - HvL= + Ic ` HevL - f ` HevLM =<br />

= Ic ` HevL - f ` HevLM.<br />

To však spolu s první částí důkazu znamená, že f je cirkulace, právě když tok f ` nasycuje všechny hrany vycházející<br />

ze zdroje z ` .<br />

III. Položme W = W G HA - 8z ` 0, a f ` HeL = 0 pro každou hranu e œ W - .<br />

Odtud a z platnosti Kirchhoffova zákona v každém vrcholu v œ A vyplývá, že<br />

Na druhé straně<br />

= ‚<br />

eœW +<br />

‚ f<br />

vœA, LHvL0<br />

` HevL = ‚<br />

eœW +<br />

f ` HeL + ‚ f<br />

vœA, LHvL>0<br />

` HevL = ‚<br />

eœW +<br />

c ` HeL + ‚ c<br />

vœA, LHvL>0<br />

` HevL.<br />

‚<br />

eœW +<br />

c ` HeL + ‚ c<br />

vœA, LHvL>0<br />

` HevL = ‚<br />

eœW +<br />

cHeL - ‚<br />

eœW +<br />

lHeL + ‚ c<br />

vœA, LHvL>0<br />

` HevL =<br />

= ‚<br />

eœW +<br />

cHeL - ‚<br />

eœW -<br />

cHeL - ‚<br />

eœW -<br />

lHeL + ‚<br />

eœW -<br />

lHeL - ‚<br />

eœW +<br />

lHeL + ‚ c<br />

vœA, LHvL>0<br />

` HevL =<br />

lHeL - ‚ LHvL + ‚ c<br />

vœA vœA, LHvL>0<br />

` HevL = ‚<br />

eœW +<br />

cHeL - ‚<br />

eœW -<br />

lHeL + ‚ c<br />

vœA, LHvL0<br />

` HevL,


<strong>Grafy</strong>.<strong>nb</strong> 46<br />

a tedy<br />

‚ f<br />

vœA, LHvL0<br />

` HevL = ‚<br />

eœW +<br />

cHeL - ‚<br />

eœW -<br />

lHeL + ‚ c<br />

vœA, LHvL0<br />

` HevL,<br />

‚<br />

eœW +<br />

cHeL - ‚<br />

eœW -<br />

lHeL = ‚ I f<br />

vœA, LHvL0<br />

` HevL - c ` HevLM.<br />

Poslední součet je vždy nekladný a záporný je právě tehdy, když tok f ` nenasycuje některou hranu vycházející ze<br />

zdroje z ` .<br />

3.7. Příklad. Vyšetříme pomocí algoritmu 3.5 a věty 3.6 existenci přípustné cirkulace v síti G zadané tabulkou<br />

PV 1 2 2 3 3 4 4 5 5<br />

KV 3 1 4 2 5 1 3 2 4<br />

l 1 1 0 1 0 2 0 1 1<br />

c 3 4 3 3 4 6 3 4 4<br />

I. Nejprve sestrojíme síť G ` . Protože kapacity hran c ` a ohodnocení vrcholů L jsou dány tabulkami<br />

síť G ` je určena tabulkou<br />

2−2<br />

PV 1 2 2 3 3 4 4 5 5<br />

KV 3 1 4 2 5 1 3 2 4<br />

c `<br />

2 3 3 2 4 4 3 3 3<br />

,<br />

.<br />

v 1 2 3 4 5<br />

L -2 -1 0 1 2 ,<br />

PV 1 2 2 3 3 4 4 4 5 5 5 6 6<br />

KV 3 1 4 2 5 1 3 7 2 4 7 1 2<br />

c `<br />

.<br />

2 3 3 2 4 4 2 1 3 3 2 2 1<br />

0−4<br />

1−3<br />

1 2<br />

0−3<br />

3<br />

2−2<br />

0−3<br />

0−2<br />

7<br />

1−1<br />

2−4<br />

6<br />

4<br />

Obr.5.5. Síť G ` spolu s maximálním tokem f ze zdroje z = 6 do spotřebiče s = 7 a kapacitami hran c ` .<br />

II. Najdeme maximální tok ze zdroje z = 6 do spotřebiče s = 7. Vyjdeme z nulového toku a budeme jej zlepšovat<br />

změnami podél nejkratších zlepšujících cest, tj. zlepšujících cest s nejmenším počtem hran. Tyto cesty budeme hledat<br />

pomocí algoritmu 2.4, přičemž z množiny M vždy odebereme vrchol s největší hodnotou d. Pokud bude zřejmé, že z<br />

vrcholu x již nelze nikam pokračovat, příslušný řádek v tabulce vynecháme.<br />

Výsledkem prvního hledání, zaznamenaného v tabulce<br />

2−2<br />

x M y dHyL ODKUDHyL M<br />

6 « 1 2 6 Ø 1 81<<br />

0−3<br />

1−1<br />

2 1 6 Ø 2 81, 2<<br />

,<br />

0−3<br />

5


<strong>Grafy</strong>.<strong>nb</strong> 47<br />

x M y dHyL ODKUDHyL M<br />

1 82< 3 2 1 Ø 3 82, 3<<br />

3 82< 5 2 3 Ø 5 82, 5<<br />

5 82< 4 2 5 Ø 4 82, 4<<br />

7 2 5 Ø 7 82, 4, 7<<br />

`<br />

je zlepšující cesta 6 Ø 1 Ø 3 Ø 5 Ø 7 s kapacitou 2 a přípustný tok f1 daný tabulkou<br />

PV 1 2 2 3 3 4 4 4 5 5 5 6 6<br />

KV 3 1 4 2 5 1 3 7 2 4 7 1 2 ,<br />

`<br />

2 0 0 0 2 0 0 0 0 0 2 2 0<br />

f1<br />

v níž jsou červeně vyznačeny kritické hrany použité zlepšující cesty a růžově jsou vyznačeny hrany, u kterých došlo<br />

ke zlepšení toku.<br />

Stejným postupem, zaznamenaným v tabulce<br />

x M y dHyL ODKUDHyL M<br />

6 « 2 1 6 Ø 2 82<<br />

2 « 4 1 2 Ø 4 84<<br />

4 « 3 1 4 Ø 3 83<<br />

7 1 4 Ø 7 83, 7<<br />

`<br />

získáme zlepšující cestu 6 Ø 2 Ø 4 Ø 7 s kapacitou 1 a přípustný tok f2 daný tabulkou<br />

PV 1 2 2 3 3 4 4 4 5 5 5 6 6<br />

KV 3 1 4 2 5 1 3 7 2 4 7 1 2 .<br />

`<br />

2 0 1 0 2 0 0 1 0 0 2 2 1<br />

f2<br />

`<br />

Tok f2 již nasycuje obě hrany vycházející ze zdroje z = 6 a je proto maximální.<br />

1 1<br />

2<br />

3<br />

3<br />

2<br />

4<br />

1<br />

0 1<br />

1<br />

2<br />

Obr.5.6. Síť G spolu s přípustnou cirkulací f<br />

III. Protože maximální tok nasycuje všechny hrany vycházející ze zdroje, tok f v síti G definovaný tabulkou<br />

je přípustnou cirkulací.<br />

PV 1 2 2 3 3 4 4 5 5<br />

KV 3 1 4 2 5 1 3 2 4<br />

`<br />

f = f2 + l 3 1 1 1 2 2 0 1 1<br />

1<br />

,<br />

,<br />

5


<strong>Grafy</strong>.<strong>nb</strong> 48<br />

4. Obecné vlastnosti toků<br />

4.1. Součet a rozdíl toků. Jsou-li f1, f2 dva toky v téže síti G, pak ohodnocení jejích hran definovaná<br />

předpisem f3HeL = f1HeL + f2HeL, f4HeL = f1HeL - f2HeL jsou také toky, neboť splňují Kirchhoffův zákon. Tok f3<br />

nazýváme součtem toků f1, f2 a značíme jej f1 + f2 a tok f4 nazýváme rozdílem toků f1, f2 a značíme jej f1 - f2. Ani<br />

součet ani rozdíl přípustných toků však nemusí být přípustný.<br />

4.2. Přírůstková síť. Nechť f je libovolný, ne nutně přípustný tok v síti G je s omezeními l, c a definujme síť<br />

G* s nulovým dolním omezením a kapacitou hran c* takto:<br />

• G* má stejnou množinu vrcholů jako G.<br />

• Každé hraně e sítě G, pro kterou platí nerovnost f HeL cHeL, odpovídá hrana e+ s kapacitou c*HeL = cHeL - f HeL<br />

orientovaná stejně jako hrana e, tj. PVHe+L = PVHeL a KVHe+L = KVHeL.<br />

• Každé hraně e sítě G, pro kterou platí nerovnost lHeL f HeL, odpovídá hrana e- s kapacitou c*HeL = f HeL - lHeL<br />

orientovaná opačně než hrana e, tj. PVHe-L = KVHeL a KVHe-L = PVHeL.<br />

Síť G* je tzv. přírůstková síť vzhledem k toku f . Její hrany e+ budeme nazývat hranami vpřed a hrany e- budeme<br />

nazývat hranami vzad.<br />

Jsou-li např. síť G, omezení l, c a tok f zadány tabulkou<br />

PV 1 2 2 3 4 4 5 5 6<br />

KV 2 3 5 6 1 2 3 4 5<br />

l 2 2 0 1 0 1 0 4 3<br />

c 4 4 2 6 2 4 2 4 5<br />

f 2 1 3 3 2 2 2 4 3<br />

potom přírůstková síť G* a kapacita hran c* je zadána tabulkou<br />

PV 1 1 2 2 3 3 4 5 6 6<br />

KV 2 4 3 4 5 6 2 2 5 3 ,<br />

c 2 2 3 1 2 3 2 3 5 2<br />

v níž jsou červeně vyznačeny hrany vzad. Diagramy obou sítí jsou na obrázku 5.7.<br />

1 2 3<br />

4 5 6<br />

Obr.5.7.<br />

1 2 3<br />

4 5 6<br />

Snadno se nahlédne, že existuje vzájemně jednoznačná korespondence mezi zlepšujícími cestami resp. kružnicemi<br />

vzhledem k f a orientovanými cestami resp. cykly v G*. Algoritmy 2.3 až 2.5 vlastně hledají orientované cesty z<br />

vrcholu z do vrcholu s v přírůstkové síti, aniž by ji explicite používaly.<br />

4.3. Věta. Jsou-li f1, f2 přípustné toky v síti G a nechť f* je ohodnocení hran přírůstkové sítě G* vzhledem k f1<br />

definované předpisem<br />

Potom f* je také přípustný tok.<br />

f2HeL - f1HeL ¥ 0 fl f*He+L = f2HeL - f1HeL, f*He-L = 0,<br />

f2HeL - f1HeL 0 fl f*He-L = f1HeL - f2HeL, f*He+L = 0.


<strong>Grafy</strong>.<strong>nb</strong> 49<br />

Důkaz. Podle definice kapacit hran v síti G* je c*He+L = cHeL - f1HeL, c*He-L = f1HeL - lHeL a tedy<br />

f2HeL - f1HeL ¥ 0 fl 0 § f*He+L = f2HeL - f1HeL = f2HeL - cHeL + c*He+L § c*He+L,<br />

f2HeL - f1HeL 0 fl 0 f*He-L = f1HeL - f2HeL = lHeL - f2HeL + c*He-L § c*He-L.<br />

Zbývá ověřit platnost Kirchhoffova zákona ve vrcholech, v nichž jej splňují toky f1, f2. To je ale snadné, i když<br />

trochu zdlouhavé. Je-li totiž v takový vrchol a položíme-li<br />

potom<br />

což bylo třeba dokázat.<br />

f21HeL = f2HeL - f1HeL,<br />

≤ ≤ ≤ ≤<br />

E21HvL = 8e œ EGHvL » f21HeL ¥ 0


<strong>Grafy</strong>.<strong>nb</strong> 50<br />

vpřed e+ bude stejná jako jednotková cena hrany e a jednotková cena každé hrany vzad e- se bude od jednotkové<br />

ceny hrany e lišit pouze znaménkem. Cena zlepšující kružnice vzhledem k f pak bude přímo rovná součtu jednotkových<br />

cencen hran příslušného cyklu v síti G*.<br />

5.2. Věta. (Charakterizace nejlevnější cirkulace). Přípustná cirkulace f je nejlevnější cirkulací v síti G,<br />

právě když v síti G neexistuje vzhledem k f zlepšující kružnice se zápornou cenou.<br />

Důkaz. Jestliže v G existuje zlepšující kružnice s kapacitou d a zápornou cenou, můžeme na jejích hranách vpřed<br />

resp. vzad cirkulaci o d zvětšit resp. snížit, čímž celkovou cenu cirkulace f snížíme o absolutní hodnotu ceny<br />

kružnice. Cirkulace f tedy není nejlevnější.<br />

Předpokládejme nyní, že v G žádná zlepšující vzhledem k f kružnice se zápornou cenou neexistuje, a označme f*<br />

nejlevnější cirkulaci v G - taková cirkulace určitě existuje. Podle věty 4.6 lze cirkulaci f* získat z cirkulace f pomocí<br />

změn podél konečně mnoha zlepšujících kružnic. Tyto kružnice však mají podle předpokladu nezápornou cenu, a<br />

proto změnou cirkulace f podle kterékoliv z nich získáme cirkulaci se stejnou nebo větší cenou. To však znamená, že<br />

cirkulace f je také nejlevnější.<br />

5.3. Hledání nejlevnější cirkulace. Z věty 5.2 vyplývá, že nejlevnější cirkulaci lze najít tímto postupem:<br />

1. Najdeme přípustnou cirkulaci f - viz 3.2 a 3.6<br />

Jestliže přípustná cirkulace neexistuje, výpočet končí.<br />

2. Sestrojíme přírůstkovou síť vzhledem k cirkulaci f - viz 4.2.<br />

3. V přírůstkové síti , v níž jednotkové ceny toku v hranách pokládáme za délky hran, najdeme cyklus se zápornou<br />

délkou - viz věty 4.6.1 až 4.6.3.<br />

Jestliže takový cyklus neexistuje, výpočet končí, cirkulace f je podle věty 5.2 nejlevnější přípustnou cirkulací.<br />

4. Sestrojíme zlepšující kružnici odpovídající nalezenému cyklu, vypočteme její kapacitu, změníme podél ní<br />

cirkulaci f a pokračujeme krokem 2.<br />

Přírůstkovou síť není třeba ve skutečnosti sestrojovat, neboť algoritmus pro hledání cyklu záporné délky lze upravit<br />

tak, aby pracoval přímo v síti G s cirkulací f a našel přímo zlepšující kružnici se zápornou cenou.<br />

6. Párování<br />

1. Základní pojmy a úlohy.<br />

1.1. Definice. Nechť G je neorientovaný graf. Párování v grafu G je taková množina P jeho hran, že žádné dvě<br />

hrany patřící do P nemají společný vrchol. Vrchol v œ P je nasycen v párování P, je-li incidentní s některou hranou<br />

patřící do P. Hrana e páruje vrcholy v, w, jestliže patří do P a v, w jsou její koncové vrcholy. Perfektní párování je<br />

takové párování, v němž je nasycen každý vrchol grafu. Cena párování P v grafu, jehož hrany jsou ohodnoceny<br />

cenami, je součet cen hran patřících do P.<br />

1.2. Úlohy o párování. V souvislosti s párováním se studují tyto základní úlohy:<br />

1. V daném grafu najít maximální párování, tj. párování s největším počtem hran.<br />

2. V daném grafu, jehož hrany jsou ohodnoceny cenami, najít nejlevnější maximální párování.<br />

3. V daném grafu, jehož hrany jsou ohodnoceny cenami, nají nejdražší párování.<br />

Z těchto tří úloh je nejobecnější úloha o nejdražším párování. Úlohu o nejlevnějším maximálním párování lze na ni<br />

převest změnou cen: Je-li cHeL cena hrany e a M je libovolné číslo větší než součet absolutních hodnot cen hran,<br />

potom P je nejlevnější maximální párování vzhledem k cenám cHeL, právě když P je nejdražší párování vzhledem k<br />

cenám M - cHeL.<br />

Speciálním případem úlohy o nejlevnějším párování je tzv. přiřazovací úloha, která spočívá v nalezení nejlevnějšího<br />

perfektního párování v úplném bipartitním grafu, jehož strany mají stejné počty vrcholů.


<strong>Grafy</strong>.<strong>nb</strong> 51<br />

2. Párování v obecných grafech<br />

2.1. Střídavé cesty a kružnice. Nechť G je neorientovaný graf a P je párování v G. Střídavá cesta vzhledem<br />

k párování P je neorientovaná cesta, jejíž hrany střídavě leží a neleží v P a která má tuto vlastnost: je-li některý její<br />

krajní vrchol nasycen v párování P, potom hrana jej nasycující je její částí. Střídavá kružnice vzhledem k párování<br />

P je kružnice se sudou délkou, jejíž hrany střídavě leží a neleží v P.<br />

2.2. Příklad. Nechť G je graf z obrázku 6.8 a P je párování v G tvořené hranami 1 - 6 a 3 - 4, vyznačenými na<br />

tomto obrázku silnými čarami. Červeně vyznačená cesta s vrcholy 2 - 6 - 1 - 4 - 3 - 5 a také některé její části, např.<br />

2 - 6 - 1 - 4 - 3, 6 - 1 - 4 - 3 - 5, 6 - 1 - 4 - 3 jsou střídavými cestami vzhledem k P. Některé jiné její části, např.<br />

2 - 6 - 1 - 4 a 1 - 4 - 3 - 5, však střídavými cestami nejsou.<br />

1<br />

6<br />

2 3<br />

Obr.6.8. Příklad střídavé cesty<br />

2.3. Změny párování podél střídavých cest a kružnic. Pomocí střídavé cesty nebo kružnice vzhledem k<br />

párování P můžeme toto párování snadno modifikovat. Je-li H množina všech hran střídavé cesty resp. kružnice p,<br />

potom nové párování P' je tvořeno hranami e œ H nepatřícími do P a hranami e œ P nepatřícími do H. O párování P'<br />

budeme říkat, že bylo vytvořeno nebo získáno z párování P změnou podle střídající cesty resp. kružnice p.<br />

Snadno se nahlédne, že p i každá s p vrcholově disjunktní střídavá cesta nebo kružnice je střídavou cestou resp.<br />

kružnicí i vzhledem k novému párování P'.<br />

2.4. Příklad. Změníme-li párování P = 81 - 6, 3 - 4< v grafu G z obrázku 6.8 podél červeně vyznačené střídavé<br />

cesty, dostaneme párování P' = 81 - 4, 2 - 6, 3 - 4


<strong>Grafy</strong>.<strong>nb</strong> 52<br />

1. Není nasycen ani v jednom z párování P, P0 nebo je nasycen v obou stejnou hranou, takže je<br />

izolovaným vrcholem grafu G ` .<br />

2. Je nasycen v obou párováních P, P0, ale různými hranami, takže jeho stupeň v G ` je roven 2.<br />

3. Je nasycen právě v jednom z párování P, P0, takže jeho stupeň v G ` je roven 1.<br />

Každá komponenta grafu G ` je proto tvořena buď jeho isolovaným vrcholem nebo kružnicí sudé délky, jejíž hrany leží<br />

střídavě v P a P0, nebo cestou, jejíž hrany leží střídavě v P a P0 a každý koncový vrchol je nasycen v jednom z<br />

párování P, P0. Jinými slovy, každá komponenta grafu G ` , která není isolovaným vrcholem, je tvořena střídavou<br />

kružnicí nebo střídavou cestou vzhledem k P i P0. Změny podél nich zřejmě převedou párování P v párování P0 a<br />

párování P0 v párování P.<br />

2.6. Věta. Párování P v grafu G je maximální, právě když v grafu G vzhledem k párování P neexistuje střídavá<br />

cesta spojující dva nenasycené vrcholy.<br />

Důkaz. Můžeme zřejmě předpokládat, že graf je prostý. Střídavá cesta vzhledem k P, která spojuje dva nenasycené<br />

vrcholy, má lichý počet hran. Je-li tento počet roven 2 k + 1, potom k + 1 z nich nepatří do P. Změnou párování P<br />

podél takové střídavé cesty by tedy vzniklo párování s větším počtem hran. Je-li tedy párování P maximální, taková<br />

střídavá cesta nemůže existovat.<br />

Není-li P maximální, označme P0 libovolné maximální párování. Podle věty 2.5 existuje soustava střídavých cest a<br />

kružnic vzhledem k P taková, že P0 lze získat z P změnami podél nich. Protože změna párování podél střídavé<br />

kružnice nebo střídavé cesty s právě jedním nasyceným koncovým vrcholem vede k párování se stejným počtem hran<br />

a změna párování podél střídavé cesty, jejíž oba koncové vrcholy jsou nasycené, vede k párování s menším počtem<br />

hran, tato soustava nutně obsahuje střídavou cestu s nenasycenými krajními vrcholy.<br />

2.7. Cena střídavé cesty a kružnice. Nechť G je graf, jehož hrany jsou ohodnoceny cenami c : EHGL Ø , a P<br />

je párování v G. Nechť p je střídavá cesta nebo kružnice vzhledem k tomuto párování a nechť H je množina hran této<br />

cesty. Cenou střídavé cesty resp. kružnice p se nazývá číslo<br />

C = ‚ cHeL - ‚ cHeL.<br />

eœH-P eœH›P<br />

Snadno se nahlédne, že změnou párování P podél střídavé cesty resp. kružnice s cenou C získáme párování P', jehož<br />

cena je o C větší než cena párování P.<br />

2.8. Věta. Nechť G je prostý graf, jehož hrany jsou ohodnoceny cenami. Párování P v grafu G je nejdražší, právě<br />

když v G vzhledem k párování P neexistuje střídavá cesta ani střídavá kružnice s kladnou cenou.<br />

Důkaz. Dokáže se podobně jako věta 2.6.<br />

2.9. Algoritmy pro párování v obecných grafech. Hledání maximálního nebo nejdražšího párování lze<br />

založit na větách 2.6 a 2.8. Základní schéma algoritmů je následující:<br />

Zvolíme libovolně výchozí párování P a hledáme, zda vzhledem k němu existuje vhodná střídavá cesta nebo kružnice,<br />

která by dovolila párování zlepšit. Jestliže taková cesta neexistuje, pak podle jedné z citovaných vět je párování P již<br />

optimální. V opačném případě párování změníme, tj. zlepšíme, a znovu hledáme další vhodnou střídavou cestu nebo<br />

kružnici.<br />

Hledání vhodných střídavých cest a kružnic však není tak jednoduché, jak by se na první pohled mohlo zdát. Běžné<br />

metody prohledávání grafů založené na značkování vrcholů, které jsme používali v kapitolách 1 až 5, lze totiž<br />

jednoduše upravit pro hledání střídavých cest a kružnic pouze v bipartitních grafech. Proto se omezíme pouze na tyto<br />

grafy, v nichž jsou teorie i algoritmy pro párování podstatně jednodušší díky těsnému vztahu k tokům v síti.<br />

3. Párování v bipartitních grafech<br />

3.1. Převod bipartitního párování na tok v síti. Nechť G je bipartitní graf se stranami X, Y. Orientujme<br />

všechny hrany grafu souhlasně z X do Y. K takto vzniklému orientovanému grafu G ◊ ÷÷ přidejme umělý zdroj z ` a umělý<br />

spotřebič s ` . Dále pro každý vrchol x œ X přidejme hranu ex ze zdroje z ` do x a pro každý vrchol y œ Y přidejme hranu<br />

ey z y do spotřebiče s ` . Výsledný orientovaný graf označme G ` . Kapacity všech hran vedoucích ze zdroje z ` nebo do<br />

spotřebiče s ` nechť jsou rovny 1, kapacity hran podgrafu G ◊ ÷÷ nechť jsou alespoň jedna a dolní omezení toku jsou ve


<strong>Grafy</strong>.<strong>nb</strong> 53<br />

všech hranách nulová.<br />

Snadno se nahlédne, že existuje vzájemně jednoznačná korespondence mezi párováními v grafu G a přípustnými<br />

celočíselnými toky v síti G ` ze zdroje z ` do spotřebiče s ` : Tok fP určený párováním P nabývá hodnoty 1 na hranách<br />

patřících do P a na všech hranách ev, kde vrchol v je nasycen v párování P, a na všech ostatních hranách je nulový.<br />

Párování odpovídající toku f je tedy tvořeno všemi hranami grafu G, na nichž f nabývá hodnoty 1.<br />

Velikost toku fP je přitom zřejmě rovna počtu hran v párování P, a proto párování P je maximální, právě když tok fP<br />

je maximální. Maximální párování v bipartitním grafu lze tedy hledat algoritmy pro maximální tok. Protože zlepšující<br />

cestě, která slouží ke zvětšení toku v transportní síti G ` , odpovídá v původním grafu střídavá cesta s nenasycenými<br />

krajními vrcholy, algoritmy pro hledání zlepšujících cest a algoritmy pro hledání maximálního toku založené na<br />

zlepšování toku podél zlepšujících cest lze proto snadno „přeložit“ do jazyka teorie párování. Např. zřejmou úpravou<br />

značkovací procedury 5.2.3 pro hledání zlepšující cesty dostaneme následující algoritmus pro hledání střídavých cest<br />

a maximálního párování.<br />

3.2. Hledání střídavé cesty a maximálního párování I. Nechť G je bipartitní graf se stranami X, Y a nechť<br />

P je libovolné párování v G. Cílem je najít střídavou cestu s nenasycenými krajními vrcholy a párování změnou podél<br />

ní zvětšit. Jestliže algoritmus takovou cestu nenajde, je párování maximální.<br />

1. @InicializaceD Označkujeme všechny nenasycené vrcholy z množiny X. Ostatní vrcholy jsou bez značek.<br />

2. @Test nalezení cestyD Je-li označkován některý nenasycený vrchol z množiny Y, značkovací procedura<br />

končí. Je nalezena střídavá cesta s nenasycenými krajními vrcholy a lze zvětšit počet hran v párování.<br />

3. @Pokus o značkování vpředD Existuje-li hrana e– P vedoucí z označkovaného vrcholu xœ X do neoznačkovaného<br />

vrcholu y œY, pak označkujeme vrchol y a pokračujeme krokem 2. Neexistuje-li taková hrana,<br />

pokračujeme krokem 4.<br />

4. @Pokus o značkování vzadD Existuje-li hrana eœP vedoucí z neoznačkovaného vrcholu xœX do označkovaného<br />

vrcholu y œY, pak označkujeme vrchol x a pokračujeme krokem 3. Neexistuje-li taková hrana,<br />

značkovací procedura končí, párování je maximální.<br />

Právě popsaný algoritmus lze ještě zjednodušit.<br />

3.3. Hledání střídavé cesty a maximálního párování II. Nechť G je bipartitní graf se stranami X, Y a nechť<br />

P je libovolné párování v G. Cílem je najít střídavou cestu s nenasycenými krajními vrcholy a párování změnou podél<br />

ní zvětšit. Jestliže algoritmus takovou cestu nenajde, je párování maximální.<br />

1. @InicializaceD Označkujeme všechny nenasycené vrcholy z množiny X. Ostatní vrcholy jsou bez značek.<br />

2. @Pokus o značkování vpředD Existuje-li hrana e– P vedoucí z označkovaného vrcholu xœ X do neoznačkovaného<br />

vrcholu y œY, pak označkujeme vrchol y a pokračujeme krokem 3. Neexistuje-li taková hrana,<br />

značkovací procedura končí, střídavá cesta spojující nenasycené vrcholy neexistuje.<br />

3. @Test nalezení cestyD Je-li právě označkovaný vrchol y nenasycený, značkovací procedura končí, je nalezena<br />

střídavá cesta s nenasycenými krajními vrcholy a lze zvětšit počet hran v párování. Je-li vrchol y<br />

párováním P nasycen, pokračujeme krokem 4.<br />

4. @Značkování vzadD Označkujeme vrchol z množiny X spárovaný s vrcholem y a pokračujeme krokem 2.<br />

3.4. Příklad. V bipartitním grafu G se stranami X = 81, 2, 3, 4, 5, 6


<strong>Grafy</strong>.<strong>nb</strong> 54<br />

x M y P y x - y - P y M<br />

85, 6<<br />

5 86< 9 4 5 - 9 - 4 84, 6<<br />

10 3 5 - 10 - 3 83, 4, 6<<br />

3 84, 6< 11 3 - 11 84, 6<<br />

Cesta 5 - 10 - 3 - 11 je střídavou cestou vzhledem k párování P s nenasycenými krajními vrcholy, dané párování P<br />

tedy není maximální. Změníme P podél této cesty a dostaneme větší párování<br />

Zopakujeme postup pro toto nové párování P a dostaneme:<br />

P = 81 - 7, 2 - 8, 3 - 11, 4 - 9, 5 - 10


<strong>Grafy</strong>.<strong>nb</strong> 55<br />

V opačném případě vrcholem x protéká jednotkový tok a proto musel být tento vrchol označkován z koncového<br />

vrcholu y œ Y jediné hrany, kterým z něj tento jednotkový tok vytéká. To je však možné pouze za předpokladu, že<br />

vrchol y byl označkován dříve než vrchol x. Ostatními hranami z E + HxL žádný tok neteče, takže jejich koncové<br />

vrcholy jsou jistě označkovány z vrcholu x. Tím je dokázáno, že VGHAL Œ Y › Z.<br />

Zbývá dokázat, že platí též obrácená inkluze. To je však zřejmé, neboť vrchol y œ Y může být označkován pouze z<br />

označkovaného vrcholu patřícího do X a tedy do A.<br />

Tím je věta dokázána.<br />

3.6. Hallova věta. Nechť G je bipartitní graf se stranami X a Y. V grafu G existuje párování nasycující množinu<br />

X, právě když pro každou množinu A Œ X platí nerovnost<br />

» A » § » VGHAL » .<br />

Důkaz. Nutnost uvedené podmínky je zřejmá. Její postačitelnost dokážeme sporem. Königovy věty. Neexistuje-li<br />

párování nasycující množinu X a P je libovolné maximální párování, potom podle Königovy věty existuje množina<br />

A ΠX, pro kterou<br />

Odtud však okamžitě vyplývá nerovnost » VGHAL » » A ».<br />

» P » = » X \ A » + » VGHAL » = » X » - » A » + » VGHAL » » X » .<br />

3.7. Věta. Jestliže v bipartitním grafu G se stranami X, Y pro každé dva vrcholy x œ X, y œ Y platí nerovnost<br />

dHxL ¥ dHyL ¥ 1, potom v G existuje párování, které nasycuje všechny vrcholy z množiny X.<br />

Důkaz. Položíme-li<br />

pak pro každou množinu A Œ X zřejmě platí nerovnosti<br />

Proto vzhledem k nerovnosti dX ¥ dY<br />

dX = min 8dHxL » x œ X


<strong>Grafy</strong>.<strong>nb</strong> 56<br />

4. Přiřazovací úloha a maďarský algoritmus.<br />

Přiřazovací úlohou se rozumí úloha nalézt nejlevnější perfektní párování v úplném bipartitním grafu Kn,n, jehož hrany<br />

jsou ohodnoceny cenami. Tzv. maďarský algoritmus pro řešení této úlohy je založen na změnách cen, které nemají<br />

vliv na řešení.<br />

4.1. Matice cen a její transformace. Nechť G je úplný bipartitní graf, jehož obě strany X, Y mají n vrcholů, a<br />

hrany jsou ohodnoceny reálnými čísly. Očíslujme vrcholy obou stran čísly 1, 2, . . . , n, označme xi resp. yi i-tý vrchol<br />

strany X resp. Y a ztotožněme hrany grafu G s uspořádanými dvojicemi Hx, yL œ X µ Y. Ceny hran pak můžeme<br />

uspořádat do matice C, jejíž prvek cHi, jL na pozici Hi, jL je cenou hrany Hxi, y jL.<br />

Vezměme nyní libovolné ohodnocení p : VHGL Ø vrcholů grafu G reálnými čísly a definujme matici transformovaných<br />

cen Cp předpisem<br />

Protože pro libovolné perfektní párování P v grafu G<br />

cpHi, jL = cHi, jL - pHxiL - pHy jL.<br />

‚ cpHi, jL = ‚<br />

Hxi,y jLœP<br />

Hxi,y jLœP<br />

n<br />

cHi, jL - ‚<br />

i=1<br />

n<br />

pHxiL - ‚ pHy jL,<br />

j=1<br />

transformace cen nemá vliv na řešení přiřazovací úlohy, tj. perfektní párování P je nejlevnější při cenách c, právě<br />

když je nejlevnější při cenách cp.<br />

Řekneme, že ohodnocení vrcholů p je přípustné, jsou-li všechny transformované ceny nezáporné. Grafem rovnosti<br />

Gp, kde p je přípustné ohodnocení vrcholů, pak nazveme faktor grafu G, jehož hranami jsou právě ty hrany grafu G,<br />

které mají nulovou transformovanou cenu.<br />

4.2. Věta. Jestliže graf rovnosti Gp určený přípustným ohodnocením vrcholů p obsahuje perfektní párování P,<br />

pak P je ze všech perfektních párování v G při cenách c nejlevnější.<br />

Důkaz. Všechny transformované ceny cpHi, jL jsou nezáporné a párování P má vzhledem k nim nulovou cenu. Žádné<br />

párování tedy nemůže být levnější než párování P jak vzhledem k transformovaným, tak vzhledem původním cenám.<br />

4.3. Maďarský algoritmus pro řešení přiřazovací úlohy. Nechť G je úplný bipartitní graf se stranami<br />

X = 8x1, x2, . . . .xn


<strong>Grafy</strong>.<strong>nb</strong> 57<br />

C =<br />

i 4 3 3 -4 0 0 y<br />

8 2 9 2 3 15<br />

7 -1 -5 -2 12 -2<br />

0 12 -1 9 2 8<br />

2 3 11 8 13 15<br />

j<br />

k 9 -4 3 13 4<br />

z<br />

5 {<br />

1. Snadno zjistíme, že počáteční ohodnocení vrcholů je dáno tabulkou<br />

Transformované ceny jsou tedy dány maticí<br />

i 1 2 3 4 5 6 j 1 2 3 4 5 6<br />

pHxiL -4 2 -5 -1 2 -4 pHy jL 0 0 0 0 1 3 .<br />

Cp =<br />

a graf rovnosti Gp má pouze 9 hran xi - y j daných tabulkou<br />

2. Z tabulky hran grafu Gp nebo z jeho diagramu<br />

i 8 7 7 0 3 1 y<br />

6 0 7 0 0 10<br />

12 4 0 3 16 0<br />

1 13 0 10 2 6<br />

0 1 9 6 10 10<br />

j<br />

k 13 0 7 17 7 6<br />

z<br />

{<br />

xi 1 2 2 2 3 3 4 5 6<br />

y j 4 2 4 5 3 6 3 1 2 .<br />

x1 x2 x3 x4 x5 x6<br />

y1 y2 y3 y4 y5 y6<br />

je zřejmé, že P = 8x1 - y4, x2 - y5, x3 - y6, x4 - y3, x5 - y1, x6 - y2< je perfektní párování v grafu Gp, a tedy<br />

nejlevnější párování v grafu G. Cena tohoto párování je<br />

cH1, 4L + cH2, 5L + cH3, 6L + cH4, 3L + cH5, 1L + cH6, 2L = -4 + 3 - 2 - 1 + 2 - 4 = -6.<br />

4.5. Příklad. Najdeme řešení přiřazovací úlohy dané maticí cen<br />

C =<br />

i 13 12 2 6 13 1 y<br />

13 5 5 7 5 2<br />

j<br />

k<br />

1 2 13 7 -1 10<br />

9 2 7 -2 12 8<br />

2 6 1 -1 4 -1<br />

3 2 1 2 12 3<br />

tj. najdeme nejlevnější párování v úplném bipartitním grafu G se stranami X = 8x1, x2, . . . .x6


<strong>Grafy</strong>.<strong>nb</strong> 58<br />

1. Snadno zjistíme, že počáteční ohodnocení vrcholů je dáno tabulkou<br />

Transformované ceny jsou tedy dány maticí<br />

i 1 2 3 4 5 6 j 1 2 3 4 5 6<br />

pHxiL 1 2 -1 -2 -1 1 pHy jL 2 1 0 0 0 0 .<br />

Cp =<br />

a graf rovnosti Gp má 10 hran xi - y j daných tabulkou<br />

2. Z tabulky hran grafu Gp nebo z jeho diagramu<br />

i 10 10 1 5 12 0 y<br />

9 2 3 5 3 0<br />

j<br />

k<br />

0 2 14 8 0 11<br />

9 3 9 0 14 10<br />

1 6 2 0 5 0<br />

0 0 0 1 11 2<br />

z<br />

{<br />

i 1 2 3 3 4 5 5 6 6 6<br />

j 6 6 1 5 4 4 6 1 2 3 .<br />

x1 x2 x3 x4 x5 x6<br />

y1 y2 y3 y4 y5 y6<br />

a s pomocí algoritmu 3.3 snadno zjistíme, že P = 8x1 - y6, x3 - y1, x4 - y4, x6 - y2< je maximální, nikoliv však<br />

perfektní párování v grafu Gp. Musíme tedy najít množinu A Œ X, pro kterou platí nerovnost » A » > » VGHAL », a<br />

ohodnocení vrcholů modifikovat.<br />

3. Požadovanou vlastnost má množina A = 8x1, x2, x4, x5< tvořená vrcholy z X, které označkuje algoritmus 3.3 při<br />

marném hledání střídavé cesty vzhledem k párování P, která by umožnila toto párování zvětšit. Protože<br />

d = min 8cpHi, jL » xi œ A, y j – VGp HAL< = min 8cpHi, jL » i œ 81, 2, 4, 5


<strong>Grafy</strong>.<strong>nb</strong> 59<br />

4. Z tabulky hran grafu Gp nebo z jeho diagramu<br />

i 1 1 2 3 3 4 5 5 5 6 6 6<br />

j 3 6 6 1 5 4 1 4 6 1 2 3 .<br />

x1 x2 x3 x4 x5 x6<br />

y1 y2 y3 y4 y5 y6<br />

snadno najdeme párování P = 8x1 - y3, x2 - y6, x3 - y5, x4 - y4, x5 - y1, x6 - y2< v Gp. Toto párování je perfektní,<br />

neboť obsahuje maximální možný počet hran, a je tedy nejlevnějším perfektním párováním v G. Jeho cena je<br />

cH1, 3L + cH2, 6L + cH3, 5L + cH4, 4L + cH5, 1L + cH6, 2L = 2 + 2 - 1 - 2 + 2 + 2 = 5.<br />

Poznámka. • Graf rovnosti z části 2 je podgrafem grafu rovnosti z části 3. To je však pouze náhoda, nikoliv pravidlo.<br />

• Nalezené perfektní párování můžeme získat aplikací algoritmu 3.3 na párování P z části 2 a graf rovnosti z části 4.<br />

Nejprve postupem zaznamenaným v tabulce<br />

x M y P y x - y - P y M<br />

8x2, x5<<br />

.<br />

x2 8x5< y6 4 x2 - y6 - x1 8x1, x5<<br />

x1 8x5< y3 x1 - y3 8x5<<br />

získáme střídavou cestu x2 - y6 - x1 - y3 vzhledem k P a příslušnou změnou párování P dostaneme nové, větší<br />

párování<br />

P = 8x1 - y3, x2 - y6, x3 - y1, x4 - y4, x6 - y2

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!