III přednáška Toky v sítích

Podobné dokumenty
5 Orientované grafy, Toky v sítích

Rovinné grafy Kostra grafu Minimální kostra Toky v sítích Problém maximálního toku v síti. Stromy a kostry. Michal Bulant

Diskrétní matematika. DiM /01, zimní semestr 2018/2019

07 Základní pojmy teorie grafů

= je prostý orientovaný graf., formálně c ( u, v) 0. dva speciální uzly: zdrojový uzel s a cílový uzel t. Dále budeme bez

Matematika III 10. přednáška Stromy a kostry

TOKY V SÍTÍCH II. Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky, FIT České vysoké učení technické v Praze

1. Toky, řezy a Fordův-Fulkersonův algoritmus

4 Pojem grafu, ve zkratce

Drsná matematika III 9. přednáška Rovinné grafy: Stromy, konvexní mnohoúhelníky v prostoru a Platónská tělesa

4EK311 Operační výzkum. 5. Teorie grafů

Jarníkův algoritmus. Obsah. Popis

Operační výzkum. Síťová analýza. Metoda CPM.

fakulty MENDELU v Brně (LDF) s ohledem na disciplíny společného základu (reg. č. CZ.1.07/2.2.00/28.

H {{u, v} : u,v U u v }

Diskrétní matematika. DiM /01, zimní semestr 2018/2019

Binární vyhledávací stromy pokročilé partie

8 Přednáška z

Učební texty k státní bakalářské zkoušce Matematika Základy lineárního programování. študenti MFF 15. augusta 2008

LDF MENDELU. Simona Fišnarová (MENDELU) Základy lineárního programování VMAT, IMT 1 / 25

Algoritmizace prostorových úloh

Stromové rozklady. Definice 1. Stromový rozklad grafu G je dvojice (T, β) taková, že T je strom,

TEORIE GRAFŮ TEORIE GRAFŮ 1

zejména Dijkstrův algoritmus pro hledání minimální cesty a hladový algoritmus pro hledání minimální kostry.

Kostry. 9. týden. Grafy. Marie Demlová (úpravy Matěj Dostál) 16. dubna 2019

1. Převeďte dané číslo do dvojkové, osmičkové a šestnáctkové soustavy: a) b)

STROMOVE ALGORITMY Prohledavani do sirky (level-order) Po vodorovnejch carach fronta

4 Stromy a les. Definice a základní vlastnosti stromů. Kostry grafů a jejich počet.

GRAFY A GRAFOVÉ ALGORITMY

Drsná matematika III 10. demonstrovaná cvičení Kostry grafů

INVESTICE DO ROZVOJE VZDĚLÁVÁNÍ. Modernizace studijního programu Matematika na PřF Univerzity Palackého v Olomouci CZ.1.07/2.2.00/28.

TGH10 - Maximální toky

5 Minimální kostry, Hladový algoritmus

10 Přednáška ze

Drsná matematika III 9. přednáška Rovinné grafy: Stromy, konvexní mnohoúhelníky v prostoru a Platónská tělesa

Použití dalších heuristik

Teorie grafů. Kostra grafu. Obsah. Radim Farana Podklady pro výuku pro akademický rok 2013/2014

Obsah prezentace. Základní pojmy v teorii o grafech Úlohy a prohledávání grafů Hledání nejkratších cest

Základy informatiky. Teorie grafů. Zpracoval: Pavel Děrgel Úprava: Daniela Szturcová

Definice 1 eulerovský Definice 2 poloeulerovský

Grafové algoritmy. Programovací techniky

PLANARITA A TOKY V SÍTÍCH

Vzdálenost uzlů v neorientovaném grafu

Hamiltonovské kružnice, stromy, rovinné grafy

Základy informatiky. 07 Teorie grafů. Kačmařík/Szturcová/Děrgel/Rapant

Jan Březina. 7. března 2017

Výroková a predikátová logika - II

Diskrétní matematika. DiM /01, zimní semestr 2018/2019

Základní pojmy teorie množin Vektorové prostory

STROMY. v 7 v 8. v 5. v 2. v 3. Základní pojmy. Řešené příklady 1. příklad. Stromy

VLASTNOSTI GRAFŮ. Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky, FIT České vysoké učení technické v Praze. BI-GRA, LS 2010/2011, Lekce 5

Grafy. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 13.

12. Lineární programování

Ukážeme si lineární algoritmus, který pro pevné k rozhodne, zda vstupní. stromový rozklad. Poznamenejme, že je-li k součástí vstupu, pak rozhodnout

Matematika III přednáška Aplikace vytvořujících funkcí - další úlohy

Grafové algoritmy. Programovací techniky

Základní pojmy teorie grafů [Graph theory]

TGH05 - aplikace DFS, průchod do šířky

Zadání a řešení testu z matematiky a zpráva o výsledcích přijímacího řízení do magisterského navazujícího studia od podzimu 2014

Úvod do informatiky. Miroslav Kolařík

Diskrétní matematika. DiM /01, zimní semestr 2015/2016

Dijkstrův algoritmus

Úvod do teorie grafů

Zadání a řešení testu z matematiky a zpráva o výsledcích přijímacího řízení do magisterského navazujícího studia od podzimu 2015

Modely teorie grafů, min.kostra, max.tok, CPM, MPM, PERT

Matematika I 2a Konečná pravděpodobnost

Algoritmus pro hledání nejkratší cesty orientovaným grafem

Teorie informace a kódování (KMI/TIK) Reed-Mullerovy kódy

Konstrukce relace. Postupně konstruujeme na množině všech stavů Q relace i,

Jan Březina. Technical University of Liberec. 21. dubna 2015

9 Kolmost vektorových podprostorů

Přijímací zkouška - matematika

Teorie grafů BR Solutions - Orličky Píta (Orličky 2010) Teorie grafů / 66

Jan Březina. Technical University of Liberec. 30. dubna 2013

Hlavolamy a teorie grafů

Grafy. RNDr. Petra Surynková, Ph.D. Univerzita Karlova v Praze Matematicko-fyzikální fakulta.

PQ-stromy a rozpoznávání intervalových grafů v lineárním čase

Výroková a predikátová logika - II

ADT STROM Lukáš Foldýna

Báze a dimenze vektorových prostorů

Vrcholová barevnost grafu

PŘEDNÁŠKA 2 POSLOUPNOSTI

Výroková a predikátová logika - IV

Úlohy krajského kola kategorie C

TGH02 - teorie grafů, základní pojmy

Důkaz Heineho Borelovy věty. Bez újmy na obecnosti vezmeme celý prostor A = M (proč? úloha 1). Implikace. Nechť je (M, d) kompaktní a nechť.

Převoditelnost problémů nezávislé množiny na problém hamiltonovského cyklu () IS HC 1/10

Prohledávání do šířky = algoritmus vlny

5. Lokální, vázané a globální extrémy

Lineární algebra : Lineární prostor

Diskrétní matematika. DiM /01, zimní semestr 2016/2017

FIT ČVUT MI-LOM Lineární optimalizace a metody. Dualita. Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti

Minimální kostry. Teorie. Štěpán Šimsa

NEJKRATŠÍ CESTY I. Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky, FIT České vysoké učení technické v Praze

Diskrétní matematika. DiM /01, zimní semestr 2018/2019

které je z různých pohledů charakterizují. Několik z nich dokážeme v této kapitole.

10 Podgrafy, isomorfismus grafů

7. přednáška Systémová analýza a modelování. Přiřazovací problém

Riemannův určitý integrál

TGH05 - aplikace DFS, průchod do šířky

Transkript:

S Dalsi aplikace OOOOOOOO Matematika III - 11. přednáška Toky v sítích Michal Bulant Masarykova univerzita Fakulta informatiky 27. 11. 2007

O Toky v sítích Q Problém maximálního toku v síti Q Další aplikace Bipartitní párování Stromové datové struktury a prefixové kódy

s Doporučené zdroje Martin Panák, Jan Slovák, Drsná matematika, e-text. 9 Předmětové záložky v IS MU

Martin Panák, Jan Slovák, Drsná matematika, e-text. 9 Předmětové záložky v IS MU Jiří Matoušek, Jaroslav Nešetřil, Kapitoly z diskrétní matematiky, Univerzita Karlova v Praze, Karolinum, Praha, 2000, 377 s. 9 Petr Hliněný, Teorie grafů, studijní materiály, http://www.fi.muni.cz/~-qhlineny/vyuka/gt/

Martin Panák, Jan Slovák, Drsná matematika, e-text. 9 Předmětové záložky v IS MU Jiří Matoušek, Jaroslav Nešetřil, Kapitoly z diskrétní matematiky, Univerzita Karlova v Praze, Karolinum, Praha, 2000, 377 s. 9 Petr Hliněný, Teorie grafů, studijní materiály, http://www.fi.muni.cz/~-qhlineny/vyuka/gt/ Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest a Clifford Stein, Introduction to Algorithms, MIT Press, 2001.

g - = Plán přednášky Toky v sítích Problém maximálního toku v síti uaisi aplikace Bipartitní párování Stromové datové struktury a prefixové kódy

s Dalsi aplikace OOOOOOOO Další významná skupina aplikací jazyka teorie grafů se týká přesunu nějakého měřitelného materiálu v pevně zadané síti. Vrcholy v orientovaném grafu představují body, mezi kterými lze podél hran přenášet předem známá množství, která jsou zadána formou ohodnocení hran. Některé vybrané vrcholy představují zdroj sítě, jiné výstup ze sítě. Podle analogie potrubní sítě pro přenos kapaliny říkáme výstupním vrcholům stok sítě). Síť je tedy pro nás orientovaný graf s ohodnocenými hranami a vybranými vrcholy, kterým říkáme zdroje a stoky.

s Je zřejmé, že se můžeme bez újmy na obecnosti omezit na orientované grafy s jedním zdrojem a jedním stokem. V obecném případě totiž vždy můžeme přidat jeden stok a jeden zdroj navíc a spojit je vhodně orientovanými hranami s všemi zadanými zdroji a stoky tak, že ohodnocení přidaných hran bude zároveň zadávat maximální kapacity jednotlivých zdrojů a stoků. Situace je naznačena na obrázku, kde černými vrcholy nalevo jsou zobrazeny všechny zadané zdroje, zatímco černé vrcholy napravo jsou všechny zadané stoky. Nalevo je jeden přidaný (virtuální) zdroj jako bílý vrchol a napravo jeden stok. Označení hran není v obrázku uvedeno.

Dalsi aplikace OOOOOOOO Definice Síť je orientovaný graf G = (V, E) s vybraným jedním vrcholem z nazvaným zdroj a jiným vybraným vrcholem s nazvaným stok, spolu s nezáporným ohodnocením hran w : E > RQ", nazývaným kapacita hran.

Dalsi aplikace OOOOOOOO Definice Síť je orientovaný graf G = (V, E) s vybraným jedním vrcholem z nazvaným zdroj a jiným vybraným vrcholem s nazvaným stok, spolu s nezáporným ohodnocením hran w : E > RQ", nazývaným kapacita hran. Tokem v síti S = (V, E,z,s, w) rozumíme ohodnocení hran f : E > R takové, že součet hodnot u vstupních hran u každého vrcholu v kromě zdroje a stoku je stejný jako součet u výstupních hran z téhož vrcholu, tj. v ŕ z, s eel N (v) eeout(v) a tok splňuje kapacitní omezení f(e) < w{e).

Dalsi aplikace OOOOOOOO Definice Síť je orientovaný graf G = (V, E) s vybraným jedním vrcholem z nazvaným zdroj a jiným vybraným vrcholem s nazvaným stok, spolu s nezáporným ohodnocením hran w : E > RQ~, nazývaným kapacita hran. Tokem v síti S = (V, E,z,s, w) rozumíme ohodnocení hran f : E > R takové, že součet hodnot u vstupních hran u každého vrcholu v kromě zdroje a stoku je stejný jako součet u výstupních hran z téhož vrcholu, tj. v ŕ z, s eel N (v) eeout(v) a tok splňuje kapacitní omezení f(e) < w{e). Velikost toku f je dána celkovou balancí hodnot u zdroje E f^- E f^eeout(z) eeln(z)

g - = Dalsi aplikace OOOOOOOO Z definice je zřejmé, že velikost toku můžeme stejně dobře vypočíst jako hodnotu \ f \= E w- E w- eeln(s) eeout(s)

g - = Dalsi aplikace OOOOOOOO Z definice je zřejmé, že velikost toku můžeme stejně dobře vypočíst jako hodnotu E w- E '(«oeeln(s) eeout(s) Na obrázku máme nakreslenu jednoduchou síť se zvýrazněným bílým zdrojem a černým stokem. Součtem maximálních kapacit hran vstupujících do stoku vidíme, že maximální možný tok v této síti je 5.

g - = Plán přednášky Q Problém maximálního toku v síti Bipartitní párování Stromové datové struktury a prefixové kódy

Naší úlohou bude pro zadanou síť na grafu G určit maximální možný tok. Jde vlastně o speciální případ úlohy lineárního (celočíselného) programování, kde neznámými jsou toky na hranách a omezení plynou z podmínek na tok. Ukáže se, že pro řešení této úlohy existují jednoduché a přitom rychlé algoritmy.

s Naší úlohou bude pro zadanou síť na grafu G určit maximální možný tok. Jde vlastně o speciální případ úlohy lineárního (celočíselného) programování, kde neznámými jsou toky na hranách a omezení plynou z podmínek na tok. Ukáže se, že pro řešení této úlohy existují jednoduché a přitom rychlé algoritmy. Definice Řezem v síti S = (V,E,z,s, w) rozumíme takovou množinu hran C C E, že po jejím odebrání nebude v grafu G = (V E\C) žádná (orientovaná) cesta z z do s. Číslo nazýváme velikost řezu C. Kl w(e) = E eec

s Dalsi aplikace OOOOOOOO Evidentně platí, že nikdy nemůžeme najít větší tok, než je hodnota kteréhokoliv z řezů. Na dalším obrázku máme zobrazen tok sítí s hodnotou 5 a čárkovanými lomenými čarami jsou naznačeny řezy o hodnotách 12, 8 a 5. Poznámka Tok a kapacitu hran v síti obvykle zapisujeme v obrázku ve tvaru f/c, kde f je hodnota toku na dané hraně a c její kapacita.

s Dalsi aplikace OOOOOOOO Sestavíme algoritmus, který pomocí postupných konstrukcí vhodných cest najde řez s minimální možnou hodnotou a zároveň najde tok, který tuto hodnotu realizuje. Tím dokážeme následující větu: Maximální velikost toku v dané síti S minimální velikosti řezu v této síti. (V, E, z, s, w) je rovna

s Dalsi aplikace OOOOOOOO Myšlenka algoritmu - prohledáváme cesty mezi uzly grafu a snažíme se je nasytit" co největším tokem. Zavedeme si za tímto účelem terminologii.

s Dalsi aplikace OOOOOOOO Myšlenka algoritmu - prohledáváme cesty mezi uzly grafu a snažíme se je nasytit" co největším tokem. Zavedeme si za tímto účelem terminologii. O neorientované cestě v síti S = (V, E,z, s, w) z vrcholu v do vrcholu w řekneme, že je nenasycená, jestliže pro všechny hrany této cesty orientované ve směru z v do w platí f(e) < w(e) a f(e) > 0 pro hrany orientované opačně. Za rezervu kapacity hrany e pak označujeme číslo w(e) f{e) pro případ hrany orientované ve směru z v áo w a číslo f{é) při orientaci opačné. Pro zvolenou cestu bereme za rezervu kapacity minimální rezervu kapacity z jejích hran.

s Ford-Fulkersonův algoritmus (1956) Vstupem je síť S = (V, E, z, s, w) a výstupem maximální možný tok f : E -» R. Inicializace: zadáme f (e) = 0 pro všechny hrany e G E a najdeme množinu vrcholů U C V, do kterých existuje nenasycená cesta ze zdroje z.

Ford-Fulkersonův algoritmus (1956) Vstupem je síť S = (V, E, z, s, w) a výstupem maximální možný tok f : E -» R. Inicializace: zadáme f (e) = 0 pro všechny hrany e G E a najdeme množinu vrcholů U C V, do kterých existuje nenasycená cesta ze zdroje z. Hlavní cyklus: Dokud s G U opakujeme

Ford-Fulkersonův algoritmus (1956) Vstupem je síť S tok f : E -» R. (V, E, z, s, M/) a výstupem maximální možný Inicializace: zadáme f(e) = 0 pro všechny hrany e G E a najdeme množinu vrcholů U C V, do kterých existuje nenasycená cesta ze zdroje z. Hlavní cyklus: Dokud s G U opakujeme zvolíme nenasycenou cestu P ze zdroje z do s a zvětšíme tok f u všech hran této cesty o její minimální rezervu

Ford-Fulkersonův algoritmus (1956) Vstupem je síť S = (V, E, z, s, w) a výstupem maximální možný tok f : E -» R. Inicializace: zadáme f (e) = 0 pro všechny hrany e G E a najdeme množinu vrcholů U C V, do kterých existuje nenasycená cesta ze zdroje z. Hlavní cyklus: Dokud s G U opakujeme zvolíme nenasycenou cestu P ze zdroje z do s a zvětšíme tok f u všech hran této cesty o její minimální rezervu aktualizujeme U.

Ford-Fulkersonův algoritmus (1956) Vstupem je síť S = (V, E, z, s, w) a výstupem maximální možný tok f : E -» R. Inicializace: zadáme f (e) = 0 pro všechny hrany e G E a najdeme množinu vrcholů U C V, do kterých existuje nenasycená cesta ze zdroje z. Hlavní cyklus: Dokud s G U opakujeme zvolíme nenasycenou cestu P ze zdroje z do s a zvětšíme tok f u všech hran této cesty o její minimální rezervu aktualizujeme U. na výstup dáme maximálni tok f a minimální řez C tvořený všemi hranami vycházejícími z U a končícími v doplnku V\U.

Jak jsme viděli, velikost každého toku je nejvýše rovna hodnotě kteréhokoliv řezu. Stačí nám tedy ukázat, že v okamžiku zastavení algoritmu jsme vygenerovali řez i tok se stejnou hodnotou. Algoritmus se zastaví, jakmile neexistuje nenasycená cesta ze zdroje z do stoku s. To znamená, že U neobsahuje s a pro všechny hrany ez Udo zbytku je f(e) = w(e), jinak bychom museli koncový vrchol e přidat k U.

Jak jsme viděli, velikost každého toku je nejvýše rovna hodnotě kteréhokoliv řezu. Stačí nám tedy ukázat, že v okamžiku zastavení algoritmu jsme vygenerovali řez i tok se stejnou hodnotou. Algoritmus se zastaví, jakmile neexistuje nenasycená cesta ze zdroje z do stoku s. To znamená, že U neobsahuje s a pro všechny hrany ez Udo zbytku je f(e) = w(e), jinak bychom museli koncový vrchol e přidat k U. Zároveň ze stejného důvodu všechny hrany e, které začínají v komplementu V \ U a končí v U musí mít tok f(e) = 0.

g - = Dalsi aplikace OOOOOOOO Pro velikost toku celé sítě jistě platí \f\= E f^hrany z U do V \ U f^- E hrany z V \ U do U Tento výraz je ovšem v okamžiku zastavení roven E hrany z Ľ do V \ U což jsme chtěli dokázat. f ( e ) = E "(e) = C, hrany z U do V \ Ľ

s Dalsi aplikace OOOOOOOO Pro velikost toku celé sítě jistě platí \f\= E f^hrany z U do V \ U f^- E hrany z V \ U do U Tento výraz je ovšem v okamžiku zastavení roven E hrany z Ľ do V \ U f ( e ) = E "(e) = C, hrany z U do V \ Ľ což jsme chtěli dokázat. Zbývá ovšem ukázat, že algoritmus skutečně zastaví.

s Zastavení Ford-Fulkersonova algoritmu Tvrzení Pro celočíselné kapacity hran sítě uvedený algoritmus vždy skončí. V obecném případě nejen, že algoritmus skončit nemusí, příslušné toky dokonce ani nemusí k maximálnímu toku konvergovat.

S Zastavení Ford-Fulkersonova algoritmu Tvrzení Pro celočíselné kapacity hran sítě uvedený algoritmus vždy skončí. V obecném případě nejen, že algoritmus skončit nemusí, příslušné toky dokonce ani nemusí k maximálnímu toku konvergovat. Důkaz. Důkaz ukončení v celočíselném případě vyplývá z toho, že vždy sytíme cestu o celočíselné hodnotě. D

s Zastavení Ford-Fulkersonova algoritmu Tvrzení Pro celočíselné kapacity hran sítě uvedený algoritmus vždy skončí. V obecném případě nejen, že algoritmus skončit nemusí, příslušné toky dokonce ani nemusí k maximálnímu toku konvergovat. Důkaz. Důkaz ukončení v celočíselném případě vyplývá z toho, že vždy sytíme cestu o celočíselné hodnotě. D I Poznámka Ford-Fulkersonův algoritmus má složitost v nejhorším případě 0{E \f\), kde \f\ je hodnota maximálního toku.

s Edmonds-Karpův algoritmus Vylepšením základního Ford-Fulkersonova algoritmu je Edmonds-Karpův algoritmus, ve kterém zvětšujeme tok podél nejkratší nenasycené cesty - tj. síť prohledáváme do šířky. U tohoto algoritmu již je zaručeno zastavení, navíc je jeho časová složitost ohraničena 0{VE 2 ), nezávisle na hodnotě maximálního toku.

s Dalsi aplikace OOOOOOOO Chod algoritmu je ilustrován na obrázku. Vlevo jsou vybarveny dvě nejkratší nenasycené cesty ze zdroje do stoku (horní má dvě hrany, spodní tři). Jsou vyznačeny červeně. Napravo je pak nasycena další cesta v pořadí a je vyznačena modře. Je nyní zjevné, že nemůže existovat další nenasycená cesta ze zdroje do stoku. Proto algoritmus v tomto okamžiku skončí.

V praktických aplikacích mohou být na sítě kladeny další požadavky: maximální kapacita vrcholů - snadno se převede na základní případ zdvojením vrcholů, které spojíme hranou o dané kapacitě; minimální kapacita hran - např. aby nedocházelo k zanášení potrubí. V tomto případě lze modifikovat inicializaci, je ale třeba otestovat existenci přípustného toku (podobně jako v úloze lineárního progamování).

s Plán přednášky Problém maximálního toku v síti Další aplikace Bipartitní párování Stromové datové struktury a prefixové kódy

s Věta (Mengerova) Pro každé dva vrcholy v a w v grafu G = (V, E) je počet hranově různých cest z v do w roven minimálnímu počtu hran, které je třeba odstranit, aby se v a w ocitly v různých komponentách vzniklého grafu. Důkaz. Plyne snadno z věty o maximálním toku a minimálním řezu v síti, kde jsou kapacity všech hran (v obou směrech) rovny 1. D I

Hezkým využitím toků v sítí je řešení úlohy bipartitního párování. Úkolem je najít v bipartitním grafu maximální podmnožinu hran takovou, aby žádné dvě hrany nesdílely vrchol.

Hezkým využitím toků v sítí je řešení úlohy bipartitního párování. Úkolem je najít v bipartitním grafu maximální podmnožinu hran takovou, aby žádné dvě hrany nesdílely vrchol. Jde o abstraktní variantu docela obvyklé úlohy - třeba spárování kluků a holek k tanci v tanečních, kdybychom měli předem známé možnosti, ze kterých vybíráme (např. aby dvojici netvořil pár příliš výškově nesourodý).

Hezkým využitím toků v sítí je řešení úlohy bipartitního párování. Úkolem je najít v bipartitním grafu maximální podmnožinu hran takovou, aby žádné dvě hrany nesdílely vrchol. Jde o abstraktní variantu docela obvyklé úlohy - třeba spárování kluků a holek k tanci v tanečních, kdybychom měli předem známé možnosti, ze kterých vybíráme (např. aby dvojici netvořil pár příliš výškově nesourodý). Tento problém docela snadno převedeme na hledání maximálního toku. Přidáme si uměle navíc ke grafu zdroj, který propojíme hranami jdoucími do všech vrcholů v jedné skupině v bipartitním grafu, zatímco ze všech vrcholů ve druhé skupině vedeme hranu do přidaného stoku. Všechny hrany opatříme maximální kapacitou 1 a hledáme maximální tok. Za páry pak bereme hrany s nenulovým (tj. zřejmě jednotkovým) tokem.

Označujme kvůli jednoduchosti popisu vrcholy jedné skupiny v bipartitním grafu jako červené, vrcholy druhé skupiny jako modré. Budeme předpokládat, že vrcholy jsou obarveny tak, že počet červených vrcholů nepřevyšuje počet modrých.

s Maďarský algoritmus (König, Egerváry, Kuhn) Dalsi aplikace oo»ooooo Označujme kvůli jednoduchosti popisu vrcholy jedné skupiny v bipartitním grafu jako červené, vrcholy druhé skupiny jako modré. Budeme předpokládat, že vrcholy jsou obarveny tak, že počet červených vrcholů nepřevyšuje počet modrých. Definice Nechť je dán bipartitní graf G = (V, E) a párování MCE. M-alternující cestou v G nazveme takovou cestu v G, jejíž hrany tvoří střídavě hrany z M a z E \ M.

s Maďarský algoritmus (König, Egerváry, Kuhn) Dalsi aplikace oo»ooooo Označujme kvůli jednoduchosti popisu vrcholy jedné skupiny v bipartitním grafu jako červené, vrcholy druhé skupiny jako modré. Budeme předpokládat, že vrcholy jsou obarveny tak, že počet červených vrcholů nepřevyšuje počet modrých. Definice Nechť je dán bipartitní graf G = (V, E) a párování MCE. M-alternující cestou v G nazveme takovou cestu v G, jejíž hrany tvoří střídavě h rany z M a z E\ M. M-rozšiřující cestou v G nazveme M-alternující cestu, která spojuje dosud nepřiřazený červený vrchol u s dosud nepřiřazeným modrým vrcholem v.

s Algoritmus pro nalezení maximálního párování O Nalezneme libovolné párování M. Označíme všechny červené vrcholy jako přípustné. Q Vyberme některý dosud nepřiřazený přípustný červený vrchol v (pokud neexistuje, jsme hotovi) a nalezněme pro něj (např. prostřednictvím prohledávání do hloubky) M-alternující strom s kořenem ve v (pokud neexistuje, označme v jako nepřípustný a proces opakujme s jiným vrcholem). Pokud strom obsahuje nějakou M-rozšiřující cestu, odstraníme M-hrany v této cestě z M a ostatní hrany této cesty do M přidáme. Označme všechny červené vrcholy jako přípustné a proces opakujme.

Datové struktury Obvykle (Kořenové pěstěné) binární stromy nesoucí informaci v uzlech. AVL stromy (vyvážené), podobně red-black stromy g - =

Datové struktury Obvykle (Kořenové pěstěné) binární stromy nesoucí informaci v uzlech. AVL stromy (vyvážené), podobně red-black stromy B-stromy (2-3 stromy, B* stromy) g - =

Obvykle (Kořenové pěstěné) binární stromy nesoucí informaci v uzlech. AVL stromy (vyvážené), podobně red-black stromy B-stromy (2-3 stromy, B* stromy) binární halda, Fibonacciho halda

Obvykle (Kořenové pěstěné) binární stromy nesoucí informaci v uzlech. AVL stromy (vyvážené), podobně red-black stromy B-stromy (2-3 stromy, B* stromy) binární halda, Fibonacciho halda a mnoho dalších

Obvykle (Kořenové pěstěné) binární stromy nesoucí informaci v uzlech. AVL stromy (vyvážené), podobně red-black stromy B-stromy (2-3 stromy, B* stromy) binární halda, Fibonacciho halda a mnoho dalších

Obvykle (Kořenové pěstěné) binární stromy nesoucí informaci v uzlech. AVL stromy (vyvážené), podobně red-black stromy B-stromy (2-3 stromy, B* stromy) binární halda, Fibonacciho halda a mnoho dalších V této oblasti odkážeme na předmět Návrh algoritmů a další, my si pouze ukážeme využití binárních stromů v kódování (Huffmanův algoritmus).

Pracujeme s pěstěnými binárními stromy, kde máme navíc každou hranu obarvenou některým symbolem z dané výstupní abecedy A (často A = {0,1}). Kódovými slovy C jsou slova nad abecedou A, na která převádíme symboly vstupní abecedy. Našim úkolem je reprezentovat daný text pomoci vhodných kódových slov nad výstupní abecedou. Je snadno vidět, že je užitečné chtít, aby seznam kódových slov byl bezprefixový (v opačném případě může nastat problém s dekódováním).

Pracujeme s pěstěnými binárními stromy, kde máme navíc každou hranu obarvenou některým symbolem z dané výstupní abecedy A (často A = {0,1}). Kódovými slovy C jsou slova nad abecedou A, na která převádíme symboly vstupní abecedy. Našim úkolem je reprezentovat daný text pomoci vhodných kódových slov nad výstupní abecedou. Je snadno vidět, že je užitečné chtít, aby seznam kódových slov byl bezprefixový (v opačném případě může nastat problém s dekódováním).

s Prefixový kód C splňuje, že žádný prvek C není prefixem jiného slova z C. Ke konstrukci binárních prefixových kódů (tj. nad abecedou A = {0,1}) využijeme binárních stromů. Označíme-li hrany vycházející z každého uzlu 0, resp. 1, a označíme-li navíc listy stromu symboly vstupní abecedy, dostaneme prefixový kód nad A pro tyto symboly zřetězením označení hran na cestě z kořene do příslušného listu. Takto vytvořený kód je zřejmě prefixový.

s Prefixový kód C splňuje, že žádný prvek C není prefixem jiného slova z C. Ke konstrukci binárních prefixových kódů (tj. nad abecedou A = {0,1}) využijeme binárních stromů. Označíme-li hrany vycházející z každého uzlu 0, resp. 1, a označíme-li navíc listy stromu symboly vstupní abecedy, dostaneme prefixový kód nad A pro tyto symboly zřetězením označení hran na cestě z kořene do příslušného listu. Takto vytvořený kód je zřejmě prefixový. Uděláme-li tuto konstrukci navíc tak, abychom odrazili četnost symbolů vstupní abecedy v kódovaném textu, dosáhneme tak dokonce bezztrátové komprese dat.

Nechť M je seznam četností symbolů vstupní abecedy v textu. Algoritmus postupně zkonstruuje optimální binární strom (tzv. minimum-weight binary tree) a přiřazení symbolů listům. Vyber dvě nejmenší četnosti M/I, 1/1/2 z M. Vyrob strom se dvěma listy označenými příslušnými symboly a kořenem označeným w\ + 1/1/2, odeber z M hodnoty 1/1/1,1/1/2 a nahraď je hodnotou 1/1/1 + 1/1/2- Tento krok opakuj; pouze v případě, že vybraná hodnota z M je součtem, pak nevyráběj nový list, ale připoj" příslušný již existující podstrom.