Aplikace pro výuku grafových a síťových algoritmů

Rozměr: px
Začít zobrazení ze stránky:

Download "Aplikace pro výuku grafových a síťových algoritmů"

Transkript

1 Mendelova univerzita v Brně Provozně ekonomická fakulta Aplikace pro výuku grafových a síťových algoritmů Diplomová práce Vedoucí práce: Mgr. Tomáš Foltýnek, Ph.D. Bc. Dita Goczolová Brno 2010

2 Zadání

3 Ráda bych na tomto místě poděkovala vedoucímu mé práce Mgr. Tomáši Foltýnkovi, Ph.D. za cenné rady a čas, který připadl na konzultace práce. Poděkování také patří mým nejbližším, kteří mě podporovali.

4 Prohlašuji, že jsem diplomovou práci na téma Aplikace pro výuku grafových a síťových algoritmů vypracovala samostatně a dle pokynů vedoucího. Literatura a podklady, které jsem použila při tvorbě této práce, jsou uvedeny v kapitole Použitá literatura. V Brně dne......

5 Abstract Goczolová, D. Application for education of graph and network algorithms. Diploma thesis, Brno This thesis includes application in Java programming language, which provides tool for painting a graph according to incidence matrix. Further, it is possible to use this graph for evaluating minimal spanning tree algorithm, shortest path problem, depth-first search, breadth-first search, CPM (critical path method), flow algorithm, and graph coloring. The thesis is consisted of three parts: theoretical, practical, and set of samples. The theory includes definitions and algorithms from field of graph theory. The practical part consists in own application creation and set of samples including input files for working with application in education. Keywords: Bellman-Ford algorithm, breadth-first search, CPM (critical path method), depth-first search, Dijkstra s algorithm, Ford-Fulkerson algorithm, graph coloring, Kruskal s algorithm, push-relabel maximum flow algorithm. Abstrakt Goczolová, D. Aplikace pro výuku grafových a síťových algoritmů. Diplomová práce, Brno Diplomová práce zahrnuje aplikaci v programovacím jazyce Java, která umožňuje vykreslení grafu zadaného maticí incidence. Nad tímto grafem je možno použít hledání minimální kostry, nejkratší cesty, prohledávání do hloubky, prohledávání do šířky, hledání kritické cesty, hledání maximálního toku v síti a barvení grafu. Práce má tři části: teoretickou, praktickou a sadu příkladů. Teorie zahrnuje pojmy a algoritmy z oblasti teorie grafů. Praktická část je samotná realizace aplikace a sada příkladů obsahuje vstupní soubory pro práci s aplikací ve výuce. Klíčová slova: barvení grafu, Bellman-Fordův algoritmus, CPM (kritická cesta), Dijkstrův algoritmus, Ford-Fulkersonův algoritmus, Goldbergův algoritmus, Kruskalův algoritmus, prohledávání do hloubky, prohledávání do šířky.

6 Obsah 1 Úvod a cíl práce Úvod Cíl práce Teoretická východiska Základní pojmy z teorie grafů Graf Uzel a hrana Strom, les, sled, tah, cesta Matice sousednosti Matice incidence Toky a sítě Prohledávání grafu (průchod grafem) Prohledávání do hloubky Prohledávání do šířky Hledání nejkratší cesty Minimální kostra grafu Maximální tok v síti Ford-Fulkersonův algoritmus Goldbergův algoritmus Hledání kritické cesty metodou CPM Časové charakteristiky jednotlivých činností Výpočet NMZ a NMK pro dílčí činnosti Výpočet NPZ a NPK pro dílčí činnosti Určení kritických činností, kritické cesty a časových rezerv Problém čtyř barev a barvení grafu Problém čtyř barev Barvení grafu Chromatické číslo grafu Algoritmy pro barvení grafu Použitý programovací jazyk a vývojové prostředí Programovací jazyk Java Vývojové prostředí NetBeans IDE... 26

7 3 Metodická východiska práce Vlastní práce Výchozí stav práce Realizace průchodu grafem Příklad prohledávání do hloubky Příklad prohledávání do šířky Realizace hledání maximálního toku Zpracování Ford-Fulkersonova algoritmu Příklad Ford-Fulkersonova algoritmu Zpracování Goldbergova algoritmu Příklad Goldbergova algoritmu Realizace hledání kritické cesty metodou CPM Příklad hledání kritické cesty metodou CPM Realizace barvení grafu Zpracování sekvenčního barvení grafu Příklad sekvenčního barvení grafu Zpracování barvení grafu pomocí nezávislých množin Příklad barvení grafu pomocí nezávislých množin Zpracování barvení grafu slepováním uzlů Příklad barvení grafu slepováním uzlů Sada příkladů Diskuse Metodické a praktické přínosy řešení Diskuse nad dalším pokračováním v práci Srovnání s existujícími řešeními Závěr Použitá literatura Přílohy A Uživatelské prostředí B Ukázkový vstupní soubor C Příklad zdrojového kódu D Vzorové příklady z cvičebnice... 57

8 1 Úvod a cíl práce 1.1 Úvod Teorie grafů má rozsáhlé historické kořeny, ale teprve s vývojem informačních technologií se její praktický význam dostává do popředí. Prostřednictvím počítačového zpracování je možné pracovat s daty širokého rozsahu a následně je vyhodnocovat a uchovávat. Pomocí teorie grafů jsou řešeny otázky z mnoha oblastí, např. dopravní problémy, návrhy inženýrských sítí, časové analýzy pro řízení projektů, plánování procesů probíhajících současně, barvení map, skladování nebezpečných látek, nežádoucí interakce léků atd. Tato práce navazuje na bakalářskou práci, která se zabývala hledáním nejkratší cesty a minimální kostry grafu. Rozšíření pokrývá tématiku průchodu grafem, hledání kritické cesty metodou CPM, hledání maximálního toku v síti a barvení grafu. Teoretická část objasňuje základní pojmy a teoreticky popisuje postup řešení u jednotlivých algoritmů. Praktická část se skládá z informací o výstavbě programu a příkladů k příslušným algoritmům. Výstup je aplikace realizovaná v programovacím jazyku Java, prostřednictvím vývojového prostředí NetBeans IDE a sada příkladů ve formě vstupních souborů (k této aplikaci). Vytvořená desktopová aplikace je sestavena tak, aby byla vhodná pro výuku grafových a síťových algoritmů. Multimediální pomůcky jsou běžnou součástí dnešní výuky. Jejich úkolem je usnadnění práce vyučujícího a také studentům. Práce obsahuje sadu příkladů, která po krocích vysvětluje danou problematiku, nabízí její procvičení, či jen kontrolu výsledků. Aplikace pracuje na základě vstupních souborů, tudíž je možné ji neustále rozšiřovat o nové příklady. 1.2 Cíl práce Cílem práce je vytvořit aplikaci pro výuku grafových a síťových algoritmů. Aplikace má být vystavěna na základě bakalářské práce. Jde tedy o její vhodné rozšíření o algoritmy prohledávání do hloubky, prohledávání do šířky, o výpočet kritické cesty, maximálního toku v síti a o barvení grafu. Důležité je i rozšíření práce po teoretické stránce, aby byly pokryty všechny pojmy, které užívání aplikace vyžaduje. Nedílnou součástí práce je sestavení sady příkladů, která umožní vzájemně s aplikací interaktivní 8

9 výuku v rámci vyučovaných předmětů PEF, zahrnující výuku teorie grafů. Tato sada zahrnuje i příklady na algoritmy (hledání nejkratší cesty a hledání minimální kostry), jimiž se zabývala bakalářská práce. 9

10 2 Teoretická východiska Tato kapitola zahrnuje základní pojmy z teorie grafů, se kterými je nutno se seznámit před studiem grafových a síťových algoritmů. Na pojmy navazuje teoretický popis algoritmů, které jsou součástí aplikace. V závěru kapitoly se nachází realizační nástroje aplikace (teorie programovacího jazyka a vývojového prostředí). Jelikož aplikace je rozšířením bakalářské práce Vizualizace grafových algoritmů jsou kapitoly 2.1.5, 2.3 a 2.4 stručnější, poněvadž jsou pouze opakováním. 2.1 Základní pojmy z teorie grafů Graf Za výchozí objekt teorie grafů označujeme právě graf. Ten můžeme popsat pomocí množiny uzlů U, množiny hran H a jejich vzájemným uspořádáním v prostoru. Nejčastěji narazíme na tyto dvě definice. Definice 1: G = (U, H) 1 Graf G je uspořádaná dvojice (U, H), kde U je nějaká neprázdná množina a H je množina dvoubodových podmnožin množiny U. Prvky množiny U se jmenují uzly grafu G a prvky množiny H hrany grafu G (Matoušek a Nešetřil, 2007, s ). 2 Definice 2: G = (U, H, f) Obecný graf je uspořádaná trojice G = (U, H, f), kde U je neprázdná konečná množina uzlů. H je konečná množina hran, f je incidenční zobrazení f: H U 2, které přiřazuje každé hraně h H uspořádanou dvojici uzlů (x, y) U 2 (Andrýsková a Foltýnek, 2009, s. 11). Incidenční zobrazení přiřazuje vazby mezi jednotlivými uzly a hranami. Souvislý graf je grafem, ve kterém mezi každou dvojicí uzlů x, y existuje sled (Šišma, 1997, s. 12). Podle vlastností hran dělíme grafy na několik typů: jednoduché grafy (neobsahují orientované hrany, smyčky, ani násobné hrany), multigrafy (neobsahují orientované hrany, ani smyčky), pseudografy (neobsahují orientované hrany), orientované a neorientované grafy, ohodnocené a neohodnocené grafy (Ples- 1 často se setkáváme s anglickým označením G = (V, E), V vertex, E edge 2 definice pro prostý graf (graf bez násobných hran) 10

11 ník, 1983, s. 18). Graf můžeme označit za úplný v případě, že mezi každými dvěma uzly existuje právě jedna hrana (Andrýsková a Foltýnek, 2009, s. 14) Uzel a hrana Základními prvky grafu jsou uzly a hrany. Uzly číslujeme nebo je označujeme pomocí písmen abecedy. V grafickém znázornění mají podobu kolečka či obdélníčku. Hranu spojující uzly x a y nazveme hranou h. Potom můžeme o uzlech x a y mluvit jako o koncových uzlech hrany h (x je tzv. počáteční uzel, y je tzv. koncový uzel). Uzel x (resp. uzel y) nazveme incidentní uzel s hranou h, uzly x, y jsou ve vztahu mezi sebou sousední uzly. Izolovaný uzel je takový, který není incidentní s žádnou hranou. (Šišma, 1997, s. 11) Hrany popisujeme jako uspořádané nebo neuspořádané k-tice uzlů v grafech. Množina hran je podmnožinou kartézského součinu. Označení čísly nebo písmeny je obdobné jako u uzlů. Graficky má hrana podobu oblouku či úsečky spojující příslušné uzly. Nejčastěji rozlišujeme tyto typy hran: neorientované a orientované hrany, násobné hrany, rovnoběžné hrany, smyčky, ohodnocené hrany, neohodnocené hrany (kol., 2010) Strom, les, sled, tah, cesta Pojem strom označuje graf souvislý a neobsahuje jako podgraf žádnou kružnici. Charakteristikou je počet hran, který je o jedničku menší než počet uzlů. (Šišma, 1997, s ) Strom, ve kterém úmyslně vypustíme některé hrany se nazývá kostra (Holoubek, 2006, s ). Množina nepropojených stromů je les (neorientovaný graf, v kterém jsou dva libovolné uzly spojeny nanejvýše jednou cestou). Posloupnost uzlů a hran grafu G ve tvaru: nazýváme sled mezi uzly u 0 a u n. Sled vzniká libovolným průchodem grafem. Číslo n popisuje délku sledu mezi uzly u 0 a u n. Sled, ve kterém se žádná hrana neopakuje (procházíme ji maximálně jednou), nazýváme tah. Sled, ve kterém se každý uzel vyskytuje nejvýše jednou se nazývá cesta. (Šišma, 1997, s ) 11

12 2.1.4 Matice sousednosti Používání matic v teorii grafů je opodstatněno nutností zadávání úloh z teorie grafu počítači. Nejběžnějším a základním je matice sousednosti. Definice podle Matouška a Nešetřila (2007, s ) má tuto podobu: Nechť G = (U, H) je graf s n uzly. Označme uzly u 1,, u n (v nějakém libovolném pořadí). Matice sousednosti grafu G je čtvercová matice definována přepisem a ij = 1 pro {u i, u j } E, nebo a ij = 0 jinak. Z toho vyplývá, že matice sousednosti A G je čtvercová matice, která je vždy symetrická. Prvky nabývají hodnoty 0 nebo 1. Na hlavní diagonále se vyskytují samé 0. Pro názornost uvádíme následující příklad. Pro graf G na následujícím obrázku (obrázek 1) je matice sousednosti A G : obrázek 1 graf G. 12

13 2.1.5 Matice incidence Jiný způsob zápisu grafu je použití matice incidence B G, která obsahuje n řádků (znázorňující uzly) a m sloupců (znázorňující hrany). V případě orientovaného grafu G zapisujeme jako B = b ij. Tento prvek b ij může nabývat hodnoty 1 (pro počáteční uzel u i hrany h ij ) a hodnoty 1 (pro koncový uzel u j hrany h ij ). Nemá-li příslušný uzel u vztah s hranou h ij, bude hodnota b ij nulová. 3 Incidenční matice má v každém sloupci maximálně dva nenulové prvky. Součet absolutních hodnot prvků v jednotlivých sloupcích je právě 2. (Plesník, 1983, s. 37) Toky a sítě Síť S můžeme definovat jako: S = (G, cap, s, t), kde G je orientovaný graf, cap (kapacita neboli propustnost) je funkce: H(G) N, která každé orientované hraně grafu G přiřadí přirozené číslo. Uzel s nemá žádné vstupní hrany a nazýváme jej zdroj (source), uzel t nemá žádné výstupní hrany a nazýváme jej stok (target). (Gross a Yellen, 2004, s. 137) Funkce t: H(G) N se nazývá tok (s t tok v grafu G), jestliže splňuje podmínky kapacitního omezení a podmínky kontinuity. Kapacitní omezení vyjádříme jako: což znamená, že tok v každé hraně je omezen její kapacitou a nenabude záporné hodnoty. Podmínky kontinuity mají následující podobu:, {s, t} a popisují, že to, co do uzlu přichází, to z něj také odchází (obdoba Kirchhoffova proudového zákona). (Plesník, 1983, s ) Reálné fyzikální toky lze znázornit jako toky v grafech. Můžeme říct, že tok popisuje přepravu z místa vstupu (zdroje), do místa spotřeby (stoku). Nejčastěji znázorňuje toky v produktovodech, v elektrických obvodech, v dopravních a informačních sítích. Konkrétní příklady z praxe uvádí následující tabulka 1. (Fuchs a Kovář, 2000, s. 73), 3 neorientovaná smyčka má hodnotu b ij = 2 a orientovaná smyčka nabývá hodnoty b ij = 2. 13

14 tabulka 1 příklady toků z praxe PŘÍKLAD TOKU ZDROJ STOK vodovod zdroj vody vodovodní baterie ropovod zdroj ropy místo, kam ropa přitéká elektrický proud v obvodu zdroj elektrického proudu spotřebič nákladní silniční doprava místo nakládání materiálu místo vykládání materiálu osobní letecká přeprava místo odletu místo příletu výrobní linka začátek výrobní linky konec výrobní linky agregace internetové sítě server poskytovatele uživatel 2.2 Prohledávání grafu (průchod grafem) Prohledávání grafu označuje systematický postup zpracování všech uzlů v grafu. Nejčastěji slouží pro: - zjišťování, jestli uzel u j je dostupný z uzlu u i - hledání množiny všech uzlů dostupných z uzlu u i - hledání libovolné cesty (v případě, že existuje) z uzlu u i do uzlu u j - hledání cesty z uzly u i do všech uzlů, které jsou z uzlu u i dostupné - provedení zadané operace na všech uzlech, které jsou dostupné z uzlu u i (Šeda, 2003, s. 16) V našem případě budeme pomocí metod prohledávání ověřovat také zda je graf vůbec souvislý. Nejznámějšími algoritmy pro prohledávání jsou prohledávání do hloubky (kapitola 2.2.1) a prohledávání do šířky (kapitola 2.2.2). Obecný algoritmus můžeme popsat následujícími kroky: 4 1. vstup: souvislý graf G 2. inicializace: vlož libovolný uzel do fronty/zásobníku 3. dokud není fronta/zásobník prázdný, opakuj: - vem uzel, který je na řadě - zpracuj jej (vypiš, obarvi, v závislosti na aplikaci) - všechny jeho následníky, které nejsou označkované, označkuj a vlož je do fronty/zásobníku 4 značkování zavedeme proto, abychom s každým uzlem pracovali právě jednou 14

15 4. výstup: posloupnost všech uzlů grafu G (Andrýsková a Foltýnek, 2009, s. 63) Prohledávání do hloubky Prohledávání do hloubky je často označováno zkratkou DFS (z anglického depth-first search). Metoda prohledávání do hloubky má své kořeny v 19. století, kdy se hledala strategie pro průchod bludištěm. Základní vlastnosti DFS pro strom byly definovány pány Hopcroftem a Tarjanem až okolo roku (Gross a Yellen, 2004, s. 956) Tento grafový algoritmus používá datový typ zásobník a lze jej aplikovat pro orientované i neorientované grafy. V prvním kroku vybere uzel u s, (tzn. ten, ve kterém započneme prohledávání do hloubky) a vložíme jej do zásobníku. Zavedeme značkování uzlů, které již v zásobníku jsou, to nám zamezí zacyklení. Z uzlu u s hledáme hranu, která by nás dovedla k neoznačenému následníkovi. Jakmile takového následníka najdeme, přidáme jej do zásobníku. Opět pokračujeme do dalšího neoznačeného následníka. V případě, že již nenajdeme následující neoznačený uzel, ukončíme prohledávání a započneme další prohledávání od uzlu, který se momentálně nachází na vrcholu zásobníku. Opakujeme dokud nemáme zásobník prázdný. Výsledkem je pořadí, v jakém byly uzly do zásobníku vkládány (tzv. preorder) nebo pořadí, v jakém bylo skončeno jejich prohledávání (tzv. postorder). (Andrýsková a Foltýnek, 2009, s. 64) Prohledávání do šířky Prohledávání do šířky často v literatuře najdeme pod zkratkou BFS (z anglického breadth-first search). Při řešení využívá datového typu fronty, a je možné jej využít opět jak pro neorientované, tak pro orientované grafy. Metodou BFS nalezneme nejkratší cestu z daného vrcholu do libovolného vrcholu grafu. (Gross a Yellen, 2004, s. 953) Algoritmus BFS jednotlivě prochází všechny uzly grafu. Nejprve zpracuje uzel u s (t.j. uzel, ve kterém začínáme prohledávání grafu), poté jeho následníky, poté následníky následníků, Při procházení jednotlivými uzly řadíme jejich následníky do fronty a zpracováváme vždy první uzel ve frontě. (Andrýsková a Foltýnek, 2009, s. 65) Jedná se o rozklad množiny uzlů podle vzdálenosti od uzlu u s. Při prohledávání do šířky neprocházíme žádným sledem, jelikož přeskakujeme. (Plesník, 1983, s ) 15

16 2.3 Hledání nejkratší cesty Hledáním nejkratší cesty je tzv. hledání nejkratší kumulativní vzdálenosti. Hledání provádíme nad neohodnoceným nebo ohodnoceným grafem. Pro neohodnocené grafy platí, že nejkratší cesta je shodná s cestou, která má nejmenší počet uzlů. Výpočet takovéto cesty umožňuje i prohledávání do šířky (kapitola 2.2.2) či prohledávání do hloubky (kapitola 2.2.1). Tyto algoritmy jsou úplné, ale ne vždy optimální. Pro ohodnocený graf s nezáporným ohodnocením hran je hojně využíván Dijkstrův algoritmus. Ohodnocený graf i se záporně ohodnocenými hranami (ne však graf obsahující cyklus o záporné délce) řešíme pomocí Bellman-Fordova algoritmu. Oba algoritmy využívají značkování uzlů, které je podrobně popsáno v bakalářské práci Vizualizace grafových algoritmů (Goczolová, 2008, s ). V praxi ohodnocené hrany mohou popisovat vzdálenost či dobu trvání jízdy mezi dvěmi body. 2.4 Minimální kostra grafu Minimální kostru grafu můžeme označit za strom, který má minimální součet hodnot hran v původním grafu. Hledání provádíme za pomocí Kruskalova algoritmu, který vychází z předpokladu, že graf je souvislý, neorientovaný a obsahuje hrany, které jsou pouze nezáporně ohodnoceny. Průběh algoritmu je popsán v bakalářské práci Vizualizace grafových algoritmů. (Goczolová, 2008, s. 16) Praxe se problémem hledání minimální kostry zabývá např. při hledání optimálního způsobu připojení dalšího člena do soustavy (vodovodní, informační, ) s minimalizací nákladů na materiál. (Holoubek, 2006, s. 132) 2.5 Maximální tok v síti Obecně můžeme problém maximálního toku v síti charakterizovat jako situaci, kdy chceme poslat co největší počet (objem) subjektů z jednoho místa v síti do druhého (od zdroje ke stoku) a zároveň dodržet kapacitu jednotlivých hran dané sítě (Gross a Yellen, 2004, s. 1075). Historicky první algoritmus pro hledání maximální toku byl Ford-Fulkersonův algoritmus, který je znám od roku 1957 (viz kapitola 2.5.1). Modifikací tohoto algorit- 16

17 mu vznikl v roce Edmonds-Karpův algoritmus, který hledá vždy nejkratší rezervní cestu nebo rezervní cestu, jejíž kapacita je maximální (síť prohledáváme do šířky). Dalším pokračovatelem označujeme Dinicův algoritmus z roku Tento algoritmus modifikoval námi sledovaný problém na opakované hledání nasyceného toku v síti, která má speciální tvar. Dinicův algoritmus položil základ algoritmu tří Indů, který vznik v dílně Malhotriho, Kumari a Maheshwariho v roce Tito pánové významně přispěli k vylepšení části algoritmu, týkající se hledání nasyceného toku. Dodnes je tento algoritmus řazen mezi nejefektivnější při hledání maximálního toku v hustých sítích. V roce 1988 vychází přelomový Goldbergův algoritmus (viz kapitola 2.5.2). (Palubják, 2001, s. 4) V kapitole a jsou uvedeny dva algoritmy, se kterými se setkáváme nejčastěji Ford-Fulkersonův algoritmus a Goldbergův algoritmus. Další efektivní metodou, kterou lze řešit problém hledání maximálního toku, je lineární programování (Gross a Yellen, 2004, s. 1080) Ford-Fulkersonův algoritmus Ford-Fulkersonův algoritmus se používá pro hledání maximálního toku v případě zadání s celočíselnými kapacitami. Maximální tok se určuje pomocí opakovaných hledání zlepšujících cest z počátečního uzlu ke koncovému uzlu (ze zdroje do stoku). Pořadí těchto cest je náhodné. (Palubják, 2001, s. 4) Zlepšující cesta musí mít na všech hranách, které zahrnuje volnou kapacitu. Každou zlepšující se cestou projde tok o kapacitě, velikosti kapacity nejužší hrany této cesty. Algoritmus provádíme, tak dlouho dokud existuje jakákoliv zlepšující se cesta. Na závěr sečteme toky nesoucí všechny zlepšující se cesty a dojdeme k maximálnímu toku zadané sítě Goldbergův algoritmus Goldbergův algoritmus (rovněž nazýván push-relabel algoritmus) je postaven na myšlence, že tok můžeme podél hrany poslat najednou, tj. využít zcela kapacitu hrany. Algoritmus používá dvě základní operace: push protlačení toku po hraně, relabel zvýšení výšky uzlu. (Černý, 2010, s. 156) Každému uzlu zavedeme charakteristiku v podobě jeho výšky. Ke každé hraně vytvoříme hranu s opačnou orientací a nulovou kapacitou (může nabývat i záporného toku). Platí, že tok z uzlu u do uzlu v, je roven záporné hodnotě toku z uzlu v do uzlu u. 17

18 Protlačení toku po hraně splňuje vždy kapacitní omezení, nemusí však podléhat zákonu zachování toku. Uzel, který dosáhne přebytku je nutné dále zpracovávat. Prvním krokem algoritmu je nastavení výšky uzlů na nulu a nasycení všech hran vycházejících z počátečního uzlu (zdroje). Koncové uzly těchto hran dosáhnou přebytku a zařadíme je do fronty. V druhém kroku výjmeme první uzel ve frontě a existuje-li nižší následník na rezervní hraně, protlačíme tok po této hraně. Neexistuje-li nižší následník zvedneme výšku uzlu. V případě, že má uzel stále přebytek, zařadímem je na konec fronty. Druhý krok opakujeme do té doby než je fronta uzlů s přebytkem prázdná. (Andrýsková a Foltýnek, 2009, s. 94) Tento algoritmus dosahuje dobrých výsledků jak v řídkých tak i v hustých sítích. (Palubják, 2001) 2.6 Hledání kritické cesty metodou CPM Metoda CPM (Critical Path Method) byla navržena již v 50. letech minulého století. Vznikla na základě projektu společností DuPont a Remington Rand, které ji vytvořily jako nástroj sloužící k časové analýze pro řízení projektů správy jejich továren. Dnes je její využití obecnější, můžeme říci, že metodu CPM je možno aplikovat při řízení libovolného projektu se vzájemně provázanými a na sobě závislými činnostmi. (O Brien a Plotnick, 1999, s. 1 5) Princip spočívá v odhalení časových rezerv při provádění činností a následné optimalizaci doby realizace celého projektu. CPM je metodou deterministickou, předpokládá, že doby trvání jednotlivých činností jsou pevně dané a neměnné (nezahrnuje náhodné jevy). (Jablonský, 1998, s. 202) Jejím prostřednictvím lze určit nejkratší dobu trvání projektu, vyhledat kritické činnosti a následně kritickou cestu, stanovit rozmístění a velikost časových rezerv. (Holoubek, 2006, s. 140) Časové charakteristiky jednotlivých činností Na začátku příkladu musíme pro každou činnost odvodit následující čtyři časové charakteristiky. - Nejdříve možný začátek činnosti (NMZ) popisuje, že činnost nemůže být započata dříve, než skončí všechny ostatní činnosti, které ji předcházely. Činnosti, které vycházejí z uzlu u i, mají totožný NMZ (v literatuře tuto charakteristiku nejčastěji nazýváme t ). 18

19 - Nejdříve možný konec činnosti (NMK) dostaneme sečtením NMZ a doby trvání činnosti. Pro činnost, znázorněnou v grafu jako hranu h ij (spojnicí mezi u i a u j ), můžeme určit NMK jako součet t a doby trvání činnosti (y ij ). (Holoubek, 2006, s. 204) - Nejpozději přípustný konec činnosti (NPK) popisuje okamžik, kdy musí být nejpozději činnost skončena, aby nedošlo k prodlevě vztahující se k následujícím činnostem. Činnosti, které končí v uzlu u j, mají totožný NMK (v literatuře tuto charakteristiku nejčastěji nazýváme t ). - Nejpozději přípustný začátek činnosti (NPZ) je definován rozdílem NPK a doby trvání činnosti (y ij ). Pro nám již známou hranu h ij NPZ vyjádříme jako rozdíl t a y ij. (Holoubek, 2006, s. 140) Samotný algoritmus je postaven na výpočtu vyjmenovaných časových charakteristik pro každou dílčí činnost, ze které se daný projekt skládá. (Jablonský, 1998 s ) Tento algoritmus je popsán v následujících krocích Výpočet NMZ a NMK pro dílčí činnosti Při realizaci výpočtu se budeme řídit podle pravidla, které uvádí ve své publikaci Jablonský (1998, s. 203): Nejdříve možný začátek provádění činností, které začínají v uzlu u j, je roven maximu z nejdříve možných konců činností, které do uzlu u j vstupují. Můžeme říct, že hledáme nejdelší cestu od počátečního do koncového uzlu, která je zároveň rovna nejkratší možné době realizace projektu. Při hledání postupujeme následovně: - počátečnímu uzlu u 1 přiřadíme hodnotu nula - na základě výše uvedeného pravidla vypočteme NMZ dílčích činností, které ústí z následujících uzlů až po uzel koncový (u 2, u 3,, u n ) 5 - pro všechny uzly, do kterých vstupuje pouze jedna hrana platí, že NMK předchozí činnosti je roven NMZ následující činnosti (popř. činností) 5 hodnota NMZ u každého uzlu je rovna nejdelší možné cestě k tomuto uzlu 19

20 - hodnota, které nabude NMZ u koncového uzlu u n je výslednou nejkratší dobou realizace Výpočet NPZ a NPK pro dílčí činnosti Při výpočtu NPZ a NPK budeme procházet grafem opačným směrem, tudíž od koncového uzlu k uzlu počátečnímu. I pro tento výpočet existuje pravidlo, které zní: Nejpozději přípustný konec provádění činností, které končí v uzlu u i je roven minimu z nejpozdějších přípustných začátků činností, které z uzlu u i vystupují (Jablonský, 1998, str. 204). Konkrétně jej uplatníme při následujícím řešení: - NPK dílčí činnosti, která má svůj konec v koncovému uzlu u n, přiřadíme hodnotu vypočtené nejkratší doby realizace z předchozí kapitoly - dle pravidla vypočteme postupně všechny NPK dílčích činností, končící v uzlu u n-1, u n-2, - všechny uzly, ze kterých vystupuje jen jedna hrana platí, že NPZ následující činnosti je totožný s NPK předchozí činnosti (popř. činností) - při správném výpočtu bychom se měli u počátečního uzlu u 1 dostat opět k hodnotě nula Určení kritických činností, kritické cesty a časových rezerv Po vypočtení všech časových charakteristik určíme kritické činnosti. A to tak, že najdeme všechny uzly, u kterých najdeme rovny charakteristiky NMK a NPZ. Tyto uzly ohraničují kritické činnosti a jejich spojením vykreslíme kritickou cestu, vedoucí od počátečního uzlu u 1 ke koncovému uzel u n. Kritická cesta jednoznačně vymezuje ty dílčí činnosti, kterým je při praktické realizaci projektu hodno věnovat maximální pozornost. Dojde-li u některé z těchto činností ke skluzu, nebude již možno splnit požadovanou nejkratší dobu realizace. (Holoubek, 2006, s ) Časovou rezervu u dílčích činností r ij určíme dle jednoho z těchto vzorečků:,. Bude-li časová rezerva r ij rovna nule, jedná se o kritickou činnost. V případě, že časová rezerva r ij nabude hodnoty větší než nula, mluvíme pak o nekritické činnosti. Velikost 20

21 této hodnoty nám znázorňuje, o kolik časových jednotek je možno tuto činnost prodloužit či posunout její začátek. 2.7 Problém čtyř barev a barvení grafu Problém čtyř barev Roku 1852 Francis Guthrie vyslovil hypotézu o čtyřech barvách. Teprve v roce 1976 se podařilo Kennethu Appelovi a jeho kolegovi Wolfgangu Hakenovi doložit tuto domněnku důkazem. Na konečné podobě řešení strávili 1200 hodin strojového času. K důkazu došli metodou pokus omyl a neuvěřitelnou intuicí objevili možností rozdělení mapy (dokázali, že více jich už není) a jejich následné obarvení právě čtyřmi barvami. Tento důkaz, byl jeden z prvních, který byl dokázán použitím počítače, aniž by jej bylo možno ověřit u jiných matematiků. Dodnes ovšem neexistuje elegantní podoba tohoto důkazu. (O Connor a Robertson, 1996) Geografické, především politické mapy se často kvůli zvýšení přehlednosti vybarvovaly (obrázek 2). Vyvstala otázka: jaký je minimální počet barev, který vždy stačí na vybarvení mapy v rovině, resp. na kulové ploše? Na těchto mapách, každý stát představuje souvislou oblast, která má být obarvena jednou barvou. Úkolem je vybrat odlišné barvy pro každé dva sousední státy, které mají společnou hraniční čáru, nenulové délky (v případě společných izolovaných bodů, můžeme použít stejnou barvu). (Plesník, 1983, s. 14) Barvení mapy se dá modifikovat na barvení uzlů v grafu. Uvnitř každého státu si zvolíme bod a přiřadíme mu vlastnosti uzlu. Jsou-li dva státy sousední, spojíme tyto uzly hranou (nejsou-li sousední, hrana neexistuje). Grafy odvozené od geografických map nazýváme rovinné grafy. Nyní již můžeme problém čtyř barev zařadit mezi otázky z teorie grafů. (Sedláček, 1977, s. 94) 6 později byl počet snížen na

22 obrázek 2 politická mapa obarvená čtyřmi barvami (Jirovský, 2010) Barvení grafu Barvení grafu je jednou z otázek spadající do teorie grafů. Tato problematika se zabývá přiřazováním barev jednotlivým objektům grafu uzlům, hranám či stěnám. Většina algoritmů se vztahuje na přiřazení barev uzlům (na další objekty se dají jednoduše převést). Definice pro barevnost grafu podle Matouška a Nešetřila (2007, s. 212) zní: Buď G = (V, E) graf, k přirozené číslo. Zobrazení b: V {1, 2,, k} nazveme obarvením grafu G pomocí k barev, pokud pro každou hranu {x, y} E platí b(x) b(y). Barevnost grafu G, označováno χ(g) 7, je minimální počet barev potřebný pro obarvení G. Problém barvení grafů má široké praktické využití, např.: - barvení map - skladování nebezpečných látek - plánování procesů, které nemohou probíhat současně - školní rozvrhy - podávání léků (zamezení nežádoucí interakce) - sudoku (Šeda, 2003, s ) 7 χ(g) nazýváma též chromatické číslo grafu (viz kapitola 2.7.3) 22

23 2.7.3 Chromatické číslo grafu Chromatické číslo (barevnost) označuje symbolem χ(g). Pro různé případy nabývá těchto hodnot: - χ(g) = 1 diskretní graf - χ(g) = 2 bipartitní graf, strom, hyperkrychle - χ(g) 3 graf, obsahující kružnici liché délky - χ(g) 4 rovinný graf - χ(g) U libovolný graf - χ(g) = U úplný graf (Andrýsková a Foltýnek, 2009, str. 105) Algoritmy pro barvení grafu Barvení grafu minimálním počtem barev je NP-úplný problém. Algoritmy, které jsou uvedeny v této kapitole jsou efektivní a poskytují přijatelné řešení, avšak optimálního řešení se od něj může lišit. Na začátku každého algoritmu je potřeba si určit, jakým postupem budeme vybírat uzly pro obarvení, tzn. zvolit si pravidlo pro výběr uzlu. Pro všechna pravidla platí, že nejobtížnější uzly obarvujeme přednostně. Nejznámější jsou tato dvě pravidla: - nerostoucí posloupnost podle velikosti stupňů (nejprve barvíme uzly s nejvyšším stupněm, nejpozději uzly s nejnižším stupněm) (Foltýnek, 2009) - počet barev, které už byly použity k barvení sousedních uzlů (vyhledáme uzel s největším počtem různobarevných sousedů, pokud najdeme více uzlů splňující kritérium, volíme ten, který má největší počet doposud neobarvených sousedů) (Večerka, 2007, s. 35) Nyní uvedeme tři heuristické algoritmy pro barvení grafu minimálním počtem barev a krokově si nastíníme, jak tyto algoritmy probíhají. Při výběru uzlů využijeme pravidlo nerostoucí posloupnosti podle velikosti stupňů. Sekvenční barvení grafu 1. Barvám přichystaným k barvení grafu přidělíme vzestupně pořadová čísla. 2. Najdeme uzel u, který má v grafu nejvyšší stupeň (tzn., že z něj ústí nejvíce hran do sousedních uzlů) a obarvíme jej barvou s pořadovým číslem jedna. 3. Vyhledáme další neobarvený uzel, který má nejvyšší stupeň. Podíváme se, s jak obarvenými sousedy již sousedí a podle toho obarvíme barvou s přísluš- 23

24 ným pořadovým číslem, tak aby jeho soused nebyl uzel stejné barvy. (Vždy se snažíme obarvit uzel barvou s co nejnižším pořadovým číslem.) 4. Krok 3 opakujeme tak dlouho, dokud nejsou obarveny všechny uzly v grafu. Nejvyšší pořadové číslo barvy udává počet barev, které jsme pro obarvení grafu použili. (Foltýnek, 2009) Účinnost tohoto algoritmu je dobrá, většinou je počet použitých barev jen o 5 procent větší než chromatické číslo grafu (Večerka, 2007, s. 36). Barvení grafu pomocí nezávislých množin Tento algoritmus barvení je založen na skutečnosti, že množina uzlů, které jsou obarveny stejnou barvou, tvoří nezávislou podmnožinu množiny uzlů grafu (Večerka, 2007, s. 36). Definice nezávislé množiny uzlů podle Andrýskové a Foltýnka (2009, s. 106) zní: Množina uzlů A se nazývá nezávislá právě tehdy, když neexistuje hrana, která by spojovala dva uzly ležící v množině A. Je-li dáno obarvení grafu, pak množina uzlů obarvených stejnou barvou, je nezávislá. Samotný algoritmus pak probíhá v prvních dvou krocích obdobně jako u sekvenčního barvení grafu a následující krok má tuto podobu: 3. Najdeme největší nezávislou množinu N(u) uzlů obsahující u (tzn. hledáme neobarvené uzly s nejvyššími stupni, mimo sousedy uzlu u). Obarvíme uzly této množiny barvou se stejným pořadovým číslem jako barva uzlu u. 4. Pomocí pravidla nerostoucí posloupnosti velikosti stupňů vybereme další neobarvený uzel a opakujeme krok 3 pro barvu s pořadovým číslem dvě, tři, atd. Tento krok opakujeme tak dlouho, dokud graf obsahuje neobarvené uzly. Barvení grafu slepováním uzlů Algoritmus, který využívá slepování uzlů, pracuje na principu spojování nesousedních uzlů. A to takto: 1. V grafu vybereme dva nesousední uzly u a v s nejvyššími stupni. Vybrané uzly nahradíme jedním uzlem w, kterému doplníme hrany, které jej spojí s původními sousedy uzlu u a uzlu v. Tento krok opakujeme do té doby, dokud lze spojit nějakou dvojici. Výsledkem prvního kroku je úplný graf. (Večerka, 2007, s ) 2. Každý uzel úplného grafu obarvíme jinou barvou a uzly znovu rozdělíme. (Andrýsková a Foltýnek, 2009, s. 106) 24

25 2.8 Použitý programovací jazyk a vývojové prostředí Programovací jazyk Java Java je objektově orientovaný programovací jazyk, který byl představen firmou Sun Microsystems v květnu roku Jedná se o jazyk, jenž hraje významnou roli při programování webových stránek i při běžném programování. (Herout, 2000, s. 20) Programovací jazyk Java lze popsat několika vlastnostmi: objektově orientovaný, jednoduchý, distribuovaný, interpretovaný, robustní, s generační správou paměti, bezpečný, přenositelný, nezávislý na architektuře, výkonný, víceprocesní a dynamický. Objektová orientovanost zahrnuje využití základních vlastností objektů (dědičnost, mnohotvárost, zapouzdřenost) a používání předpřipravených balíků tříd, jako je např. java.applet, java.awt, java.util, java.lang, Jednoduchost popisuje vývoj jazyka na základě syntaxe C a C++, eliminaci počtu konstrukcí a metod vedoucích často k chybám (např. ukazatele, příkaz go to, ) a automatické slučování volného místa v paměti. Distribuovatelnost vyjadřuje podporu aplikací v síti (ovládání vzdálených objektů přes URL, přenosy dat přes UDP, podpora tvorby klientských aplikací a serverů). Interpretovanost se zakládá na překladu strojového kódu do tzv. bytekódu. Program pak může pracovat na libovolném počítači či zařízení bez ohledu na jeho platformu (podmínkou je JVM Java Virtual Machine). Robustnost předpokládá spolehlivost jazyka, která je zajištěna silnou typovou kontrolou (každá proměnná má definován datový typ již při kompilaci). Patří zde i automatické slučování paměti. Generačnost správy paměti značí, že je paměť rozdělena na více částí (v každé z nich běží jiný algoritmus pro garbage collection). Objekty jsou mezi těmito částmi předunovány podle své životní délky. Bezpečnost zajišťuje rozvržení paměti, které je nepodmíněno kompilátoru, využití run-time systému ke kontrole dodržování pravidel bytekódu a zabezpečení lokálních tříd proti přepsání. Přenositelnost a nezávislost na architektuře spočívá v přenositelnosti bytekódu. Vzhled nebo chování aplikace je pak závislé na platformě. Výkonnost se projevuje vyšší rychlostí než většina interpretovaných jazyků s vysokou úrovní. Avšak je stále pomalejší než jazyky kompilované. Víceprocesnost a dynamičnost sebou nese podporu programů s více vlákny (implementace synchronizace procesů, zavádění tříd podle potřeby bezproblémové linkování třídy do běžícího systému). (Jedlička, 2008) Pro tvorbu programu byla použita verze JDK 1.5 (Java Platform, Standard Edition). Zvolený typ programu je Java aplikace samostatně spustitelný program. Java 25

26 aplikace má vždy definovanou metodu main() a vždy obsahuje alespoň jednu třídu. Výstupem z programu je možno dosáhnout standardní console nebo grafického rozhraní. (Švec, 2001) Vývojové prostředí NetBeans IDE NetBeans je Open Source projekt založen firmou Sun Microsystems v červnu roku Od té doby si získalo početnou uživatelskou základnu, mnoho vývojářů a přibližně 100 partnerů rozesetých po celém světě. NetBeans IDE je vývojové prostředí, které slouží jako nástroj umožňující psaní, překládání a distribuci aplikace. I samotné vývojové prostředí je vytvářeno v programovacím jazyce Java. Existují moduly, kterými lze standardní vývojové prostředí rozšířit. NetBeans IDE je bezplatně šířitelný produkt a je možné jej využívat jak pro nekomerční, tak pro komerční účely. (kol., 2010) Nejnovější dostupná verze je NetBeans IDE Program je tvořen za pomocí verze NetBeans IDE 6.7.1, která byla k stáhnutí v době započetí realizace projektu. 26

27 3 Metodická východiska práce Před započetím samotné práce, bylo nutné provést analýzu současného stavu aplikace a návrh jejího zlepšení a vhodného rozšíření. K načerpání potřebných teoretických informací z problematiky grafů byla použita literatura uvedena v kapitole 7. Realizace aplikace je tvořena pro jednotlivé problematiky v samostatných třídách. Pro vykreslování nad grafy jsou využity třídy Platno a OknoMain, které jsou realizovány v modulech Platno.java a OknoMain.java. Pro všechny algoritmy jsou společné třídy Hrana a Vrchol (realizovány v modulech Hrana.java a Vrchol.java). Pro návrh aplikace byl vybrán z možných prostředků metodologie k vývoji softwaru přírůstkový (inkrementální) přístup. Tento přístup je vhodný pro kombinaci sekvenčních a iteračních metodik. Segmentováním na úkoly menšího rozsahu jsou eliminována projektová rizika. Metoda přináší snadnější validaci jednotlivých částí (v našem případě tříd). Chyba v jedné třídě nemá vliv na funkčnost ostatních tříd. Přírůstkový přístup je realizován po sériích menších vodopádů. Každý vodopád znázorňuje třídu aplikace a je ukončen před přechodem k následujícímu přírůstku. Jednotlivé vodopády obsahují tyto fáze: - specifikace požadavků - návrh - implementace - integrace - validace - instance - údržba Aplikace je psána v programovacím jazyku Java (vývojové prostředí NetBeans), viz kapitola 2.8. Na závěr je potřeba provést zhodnocení řešení, obsahující popis přínosu zvolené metodologie a vyhodnocení realizace aplikace. 27

28 4 Vlastní práce Tato kapitola popisuje realizaci nabytých teoretických informací. Navazuje na aplikaci vytvořené v rámci bakalářské práce (její rozsah je uveden v kapitole 4.1). Je sestavena tak, aby byla přehledná jak samotná tvorba aplikace, tak její výsledné výstupy (obrázky 3 23). Program je aplikací, která je sestavena z několika tříd (Bellman, Coloring, Dijkstra, Flow, Hrana, Kruskal, Main, Ohodnoceni, OknoMain, Pcm, Platno, Traversal a Vrchol). Charakteristiky jednotlivých tříd včetně proměnných apod. se nacházejí v dokumentaci. Dokumentace a zdrojové kódy jsou součástí přiloženého CD. Na adrese: je poslední verze aplikace i se sadou příkladů. Uživatelské prostředí je intuitivní a jeho ovládání je standardní, proto jej není třeba podrobně popisovat (Přílohy A). 4.1 Výchozí stav práce Výchozí aplikace vyřešila čtyři zásadní otázky: formulaci vstupních dat, vykreslení grafu, hledání nejkratší cesty a hledání minimální kostry. Vstupní data jsou aplikaci předávána vstupním souborem s příponou txt, který obsahuje seznam uzlů a jejich souřadnice, hrany charakterizované jednotlivými řádky z transponovaného tvaru matice incidence a jejich ohodnocení (příklad vstupního souboru je uveden v Příloze B). Při vykreslování grafu vyvstaly dva zásadní problémy. Musela být ošetřena násobnost hran a orientace hran. Nejzásadnější metody této sekce jsou drawline() a filloval(). Pro hledání nejkratší cesty byly zvoleny dva velmi známé algoritmy Dijsktrův algoritmus a Bellmanův algoritmus. Pro hledání minimální kostry byl použit Kruskalův algoritmus. Jejich realizaci a příklady nalezneme již ve zmiňované bakalářské práci Vizualizace grafových algoritmů. Příklady do výuky zajišťuje vytvořená sada příkladů. 4.2 Realizace průchodu grafem Algoritmy vedoucí k prohledávání do hloubky a do šířky nalezneme v třídě Traversal. Ta obsahuje konstruktor, který má na vstupu charakteristiku grafu v podobě 28

29 uzlů a hran. Metoda AlgoDFS() je implementací algoritmu DFS, pro prohledávání do hloubky, který používá strukturu zásobníku (LIFO). Implementací algoritmu BFS, pro prohledávání do šířky, je metoda AlgoBFS(), která funguje na principu fronty (FIFO). Z knihovny java.util zde byla importována třída LinkedList, jejímž prostřednictvím probíhá realizace fronty a zásobníku. Algoritmy mají stejné výstupní funkce (viz tabulka 2). tabulka 2 metody třídy Traversal NÁZEV METODY POPIS VÝSTUPNÍCH HODNOT GetOpenVertex() posloupnost otevíraných uzlů GetPreviouslyVertex() vektor předchůdců pro všechny uzly (odkud jsme do uzlu přišli) IsAllVertex() vrací hodnotu true, jestliže byly navštíveny všechny uzly GetStatusVertex(i) uzel (i) byl/nebyl navštíven Příklad prohledávání do hloubky Zadání úkolu popisuje obrázek 3. Prohledáváním do hloubky se pokusíme projít všemi uzly grafu. V tomto případě použijeme principu zásobníku. Zvolíme si uzel u 1 jako výchozí. obrázek 3 zadání prohledávání do hloubky a prohledávání do šířky Rozhlédneme se, zda uzel u 1 má nějakého následníka, ve kterém jsme ještě nebyli (v kroku kdy se díváme, zda má příslušný uzel následníka, jej vložíme do zásobníku). Následníky uzlu u 1 jsou u 2, u 5, u 7. Vybereme např. ten, který má nejnižší pořadové číslo tudíž u 2. Následující kroky zachycuje tabulka 3, jejíž poslední krok znázorňuje obrázek 4. 29

30 tabulka 3 mezikroky prohledávání do hloubky UZEL V ZÁSOBNÍKU NÁSLEDNÍK VYBRANÝ NÁSLEDNÍK u 1 u 2, u 5, u 7 u 2 u 2 u 6 u 6 u 6 u 4 u 4 u 4 u 3, u 5 u 3 u 3 u 5 u 5 u 5 obrázek 4 mezikrok prohledávání do hloubky (červeně obarvené uzly znázorňují, že jsme již těmito uzly prošli) Jelikož uzel u 5 má za následníka pouze uzel u 1, kterým jsme již procházeli, první část průchodu ukončíme. Nyní se podíváme, zda některý z následníků (procházených uzlů) není ještě volný. Zjistíme, že jediným takovým je právě uzel u 7. Porozhlédneme se po jeho následnících a dojdeme k poslednímu uzlu u 8 (obrázek 5). obrázek 5 výsledný průchod grafem 30

31 Průchod zadaným grafem si můžeme rozdělit na dvě části: u 1 u 2 u 6 u 4 u 3 u 5 a u 1 u 7 u 8. Jelikož jsme při průchodu do hloubky prošli všemi uzly v grafu, je tento graf souvislý Příklad prohledávání do šířky K prohledávání do šířky použijeme stejného zadání jako v kapitole (obrázek 3). Při řešení využijeme principu fronty. Průchod grafem zahájíme v uzlu u 1. I tentokrát hledáme jeho následníky, ale neprocházíme jen jedním vybraným následníkem, nýbrž všechny (u 2, u 5, u 7 ). Tento stav popisuje obrázek 6. obrázek 6 mezikrok prohledávání do šířky Frontu, kterou plníme při řešení popisuje tabulka 4. Vždy, když najdeme následníka uzlu vystupujícího z fronty, zařadíme jej do průchodu (v našem případě obarvíme červeně). tabulka 4 mezikroky prohledávání do šířky STAV FRONTY VYSTUPUJE Z FRONTY NÁSLEDNÍK u 1 u 1 u 2, u 5, u 7 u 2, u 5, u 7 u 2 u 2 u 5, u 7, u 6 u 5 u 3, u 4 u 7, u 6, u 3, u 4 u 7 u 8 u 6, u 3, u 4, u 8 tedy souvislý. Po přidání uzlu u 8 do fronty zjistíme, že jsme již všemi uzly grafu prošli. Graf je 31

32 4.3 Realizace hledání maximálního toku Třída Flow se skládá ze dvou algoritmů pro hledání maximálního toku. Tato třída ve svém konstruktoru obsahuje vstupní parametry: uzly, hrany a kapacitu (ohodnocení). Metoda Algo_FordFulkerson() je implementací Ford-Fulkersonova algoritmu a metoda AlgoGoldberg() implementuje Goldbergův algoritmus. Oba algoritmy používají shodné výstupní metody, ty zachycuje tabulka 5. tabulka 5 metody třídy Flow NÁZEV METODY StepsNumber() CurrentPath(i) CurrentFlow(i) MaxFlow() MaximalniTok() POPIS VÝSTUPNÍCH HODNOT počet průchodů pro fázování algoritmu. cesta ze zdroje do stoku nebo aktuální uzel, ze kterého se nasycují hrany v případě Goldbergova algoritmu v i-tém kroku. hodnoty průtoků na všech hranách v i-tém kroku výsledné hodnoty průtoků na všech hranách na konci algoritmu. hodnota maximálního toku na konci algoritmu Zpracování Ford-Fulkersonova algoritmu Hlavní myšlenka Ford-Fulkersonova algoritmu je obecně známá. Podstata je vždy v hledání nové zlepšující se cesty (viz kapitola 2.5.1), což vystihuje ukázka zdrojového kódu pod textem: while (NextPath()) // najdi další zlepšující se cestu { // nová cesta nalezena AddFlow(); // navýšení toku podle hodnot delta SavePath(); // uložení mezivýsledků step++; // čítač průchodů val=true; // indikace, nalezena aspoň jedna cesta } 32

33 4.3.2 Příklad Ford-Fulkersonova algoritmu Zadání příkladu na hledání maximálního toku vykresluje obrázek 7. Ohodnocení zde označuje kapacity jednotlivých hran. Vycházíme z teoretických poznatků uvedených v kapitole obrázek 7 zadání příkladu pro hledání maximálního toku V 1. kroku algoritmu najdeme zlepšující se cestu od zdroje ke stoku (u 1 u 2 u 5 u 7 ). Přepočítáme kapacity (obrázek 8). Každou hranou zlepšující se cesty projde 6 jednotek. obrázek 8 1. krok Ford-Fulkersonova algoritmu V 2. kroku zlepšující se cesta vede přes uzly: u 1 u 3 u 5 u 7. Kapacita této cesty je 5 jednotek. 3. krokem projdeme zlepšující se cestou o kapacitě 5 jednotek uzly: 33

34 u 1 u 3 u 6 u krok obsahuje zlepšující se cesta už uzlů 5 a to: u 1 u 2 u 3 u 6 u 7 a nese s sebou opět 5 jednotek. V 5. kroku, který je poslední prochází zlepšující se cesta uzly: u 1 u 4 u 6 u 7 a nese rovněž 5 jednotek. Jakmile již neexistuje zlepšující se cesta program oznámí, že jsme nalezli hledané řešení a seznámí nás s výsledkem maximálního toku v našem případě 26 jednotek (obrázek 9). obrázek 9 výsledek Ford-Fulkersonova algoritmu Zpracování Goldbergova algoritmu Při realizaci Goldbergova algoritmu je nutné přiřadit každému uzlu atributy výšky a přebytku (viz kapitola 2.5.2). Dále jsme rozšířili množinu vstupních hran, tak, aby ke každé hraně nevycházející ze zdroje a nekončící ve stoku vygenerovali zpětnou hranu s opačnou orientací a se stejnou kapacitou jako hrana původní. Tyto hrany mají za úkol odvedení přebytků z uzlů, při změnách výšky. Algoritmus jsme implementovali v následujících krocích: 1. nastavení výšky a přebytku každého uzlu na nulu, nastavení hodnoty toku podél všech hran na nulu 2. nasycení všech hran, které vedou ze zdroje, výpočet přebytků v cílových uzlech těchto hran 3. vytvoření seznamu uzlů, do kterého není zahrnut zdroj a stok 4. procházíme seznam od začátku a pro vybraný uzel provádíme: - odstranění přebytku metodou PremistiPrebytek(uzel) - pokud přebytek nebyl odstraněn alespoň částečně, požádáme o zvýšení hodnoty výšky vrcholu metodou ZvedniVrchol(uzel) 34

35 - pokud výška uzlu byla zvýšena, vložíme tento uzel na začátek seznamu a zpracování zahajujeme opět od začátku seznamu - jinak pokračujeme následujicím uzlem. Algoritmus funguje jako množina spojených nádob (uzly grafu). Jeho úkolem je najít výšku jednotlivých nádob, tak aby po rozlití vody ze zdroje, se protlačilo do stoku maximální množství. V průběhu algoritmus se střídají operace přemisťování přebytku a zvedání uzlu pro všechny uzly v seznamu. Pro potřebu vizualizace jsme zvolili jako jeden krok okamžik, kdy byla vybranému uzlu navýšena výška a uzel byl vložen na začátek seznamu. Z tohoto vybraného uzlu se začíná přemisťovat přebytek Příklad Goldbergova algoritmu Příklad Goldbergova algoritmu bude využívat stejného zadání příkladu jako úloha pro Ford-Fulkersonův algoritmus (obrázek 7). Aplikace v každém kroku označí uzel, ze kterého se začínají sytit hrany a ke každé hraně grafu zobrazí dvojici (tok, kapacita). 1. krok pouze zachycuje označení uzlu u 1. Krok 2 zachycuje obrázek 10 ukazuje nasycení všech hran, vedoucích ze zdroje. Výpočet přebytků v cílových uzlech hran znázorňuje tabulka 6. Ta popisuje také další kroky a ke každému uzlu v jednolivých krocích uvádí hodnotu jeho výšky a přebytku. Silně je vyznačen uzel, který se dostal na začátek seznamu a bude se přemísťovat jeho přebytek. obrázek krok Goldbergova algoritmu 35

36 tabulka 6 výšky (v) a přebytky (p) u uzlů v jednolivých krocích KROK u 2 u 3 u 4 u 5 u 6 u 7 v p v p v p v p v p v p 2. krok krok krok krok krok krok Přebytek uzlu u 7 se nepřemísťuje, proto není v seznamu, který se v každém kroku prochází. Za zmínku stojí ještě krok 6, který vykresluje situaci před přemístěním přebytky z uzlu u 6 (obrázek 11). obrázek krok Goldbergova algoritmu Po dokončení algoritmu, program provede výpis, že se jedná o poslední krok a vypíše výsledek maximálního toku v našem případě se jedná o 26 jednotek. 4.4 Realizace hledání kritické cesty metodou CPM Řešení hledání kritické cesty nalezneme v třídě Pcm. Zvolená metoda CPM je přenesena do algoritmu Algo. Vstupy jsou základní vlastnosti grafu (uzly, hrany, ohodnocení). Výstupem jsou funkce vracející hodnoty, viz tabulka 7. 36

37 tabulka 7 metody třídy Pcm NÁZEV METODY GetLenght() IsCriticalPoint(i) IsCriticalEdge(i) GetNmk(i) GetNmkInfo(i,nmk, previndex,duration) GetNpz(i) GetNpzInfo(i,nmz, previndex,duration) POPIS VÝSTUPNÍCH HODNOT délka kritické cesty uzel (i) je/není součástí kritické cesty hrana (i) je/není součástí kritické cesty hodnota NMK pro uzel (i) nmk (hodnota NMK), previndex (jak se do bodu dostaneme), duracion (ohodnocení doba trvání) pro uzel (i) hodnota NPZ pro uzel (i) nmz, previndex, duracion (obdoba GetNmkInfo()) pro uzel (i) Při výpočtu NMK se graf prochází od počátečního ke koncovému uzlu. Při výpočtu NMZ postupujeme opačně (od koncového k počátečnímu uzlu) Příklad hledání kritické cesty metodou CPM Úkolem je nalezení kritické cesty z uzlu u 1 do uzlu u 9 pro graf znázorňující obrázek 12. Metodu CPM, popsanou v kapitole 2.6, aplikujeme na graf, který je orientovaný a ohodnocený. obrázek 12 zadání hledání kritické cesty metodou CPM Prvním úkolem je vypočtení časové charakteristiky NMK (nejdříve možný konec) pro dílčí činnosti. Procházíme graf od počátečního uzlu u 1 do koncového uzlu u 9 37

38 a setkáme-li se s uzlem, do kterého ústí více hran, je potřeba vyhodnotit výsledné NMK u tohoto uzlu (maximální hodnota NMK dílčí činnosti). Druhým úkolem je vypočtení časové charakteristiky NPZ (nejdříve přípustný konec) pro jednotlivé činnosti. Grafem tentokrát procházíme od koncového uzlu u 9 k počátečnímu uzlu u 1 (v protisměru). Opět platí, že pokud narazíme na uzel, ze kterého vychází více hran, je nutné provést zhodnocení NPZ u příslušného uzlu (minimální hodnota NPZ dílčí činnosti). Vypočtené hodnoty uvádí tabulka 8. Tučně uvedené hodnoty generuje samotná aplikace, abychom se mohli při řešení kontrolovat a odstranili si případné chyby zavčas. tabulka 8 výpočet NMK a NPZ UZEL HRANA NMK UZEL HRANA NPZ u 1 0 u 1 h 1,2 3 u 2 h 1,2 3 u 1 h 1,3 0 u 3 h 1,3 2 u 1 h 1,4 2 u 4 h 1,4 5 u 2 h 2,5 6 u 5 h 2,5 7 u 3 h 3,5 2 u 5 h 3,5 10 u 3 h 3,6 6 u 6 h 3,6 11 u 4 h 4,6 7 u 6 h 4,6 13 u 4 h 4,7 15 u 6 h 5,6 15 u 5 h 5,6 10 u 7 h 4,7 6 u 5 h 5,8 12 u 7 h 6,7 16 u 6 h 6,7 15 u 8 h 5,8 22 u 6 h 6,9 19 u 9 h 6,9 26 u 7 h 7,9 16 u 9 h 7,9 30 u 8 h 8,9 24 u 9 h 8,9 28 u 9 30 Nyní můžeme pomocí vypočtených časových charakteristik určit uzly, které ohraničují kritické činnosti. Jsou to právě ty, které u příslušného uzlu mají shodné hodnoty NMK a NPZ (tabulka 8 červené hodnoty). Podobu grafu v této fázi výpočtu vykresluje obrázek

39 . obrázek 13 uzly ohraničující kritické činnosti Spojením těchto uzlů vykreslíme hledanou kritickou cestu z uzlu u 1 do uzlu u 9 (obrázek 14). Ke spojení použijeme ty hrany, které nás dovedly k výsledným časovým charakteristikám u jednotlivých uzlů (tabulka 8 červené hodnoty). obrázek 14 kritická cesta 4.5 Realizace barvení grafu Třída Coloring obsahuje tři algoritmy zabývající se problematikou barvení grafu Algo_Sequence, Algo_IndependentSet, Algo_Slepovani. V konstruktoru třídy se nachází na vstupu pouze uzly a hrany. Každý algoritmus má své modifikované metody 39

40 Sequence() a Color(). Výstupem metody Sequence() je posloupnost barvení uzlů. Na výstupu metody Color() nalezneme přiřazení barev jednotlivým uzlům, pomocí kódů barev. Oba výstupy jsou vektory, jejichž délky jsou stejné jako počet uzlů v grafu. Pro přehlednější práci s barvami bylo využito kódování barev pomocí mocnin dvou. Výhodou je snadnější testování jakou barvou obarvit příslušný uzel. Je možné použít binární součin pro dotaz, které barva je volná (testujeme, zda s barvou se stejným kódem není obarvený žádný sousední uzel. Za pomocí binárního součtu procházím všechny sousední uzly a sčítám jejich hodnoty barev, z toho následně odvodím vhodnou barvu pro hledaná uzel. Zdrojové kódy implementace těchto binárních operací se nalézají v Příloze C. Jednotlivé kroky algoritmů pro barvení grafy jsou znázorněny na příkladech uvedených v následujících kapitolách. Teoretická východiska těchto příkladů najdeme v kapitole Všechny uvedené příklady využívají stejného zadání (obrázek 15). obrázek 15 zadání pro příklady na barvení grafů Zpracování sekvenčního barvení grafu Algoritmus Algo_Sequence je nejjednodušší z algoritmů pro barvení grafu. Na začátku přiřadíme, každému uzlu velikost stupně, prostřednictvím metody SetLevel(). Zavoláním metody NextVertex() dostáváme první neobarvený uzel s nejvyšším stupněm. Cyklus běží tak dlouho, dokud existuje nějaký neobarvený uzel. Jakmile je neobarvený uzel s nejvyšším stupněm nalezen, následuje přiřazení barvy pomocí metody ColorVertex(). Na závěr algoritmu je zpracovávaný uzel zapsán do vektoru pořadí a do vektoru barev je vložen k příslušnému uzlu kód barvy. 40

41 4.5.2 Příklad sekvenčního barvení grafu Teoretické poznatky o sekvenčním barvení grafu implementujeme na konkrétní příklad (obrázek 15). V 1. kroku provedeme seřazení barev, které pro barvení použijeme (v našem případě to bude: zelená, oranžová, fialová, hnědá, ). V 2. kroku vytvoříme posloupnost příslušných uzlů dle velikosti stupňů. Posloupnost zapíšeme ve formátu uzel (stupeň): u 5 (6), u 7 (5), u 1 (4), u 3 (4), u 2 (3), u 4 (3), u 8 (3), u 6 (2), u 9 (2), u 10 (2). Uzel s nejvyšším stupněm u 5 obarvíme barvou na prvním pořadovém místě (obrázek 16). obrázek krok sekvenčního barvení grafu Ve 3. kroku vezmeme následující uzel z vytvořené posloupnosti (u 7 ). Zhodnotíme s jak obarvenými uzly sousedí (zelený uzel u 5 ). Uzel u 7 obarvíme následující barvou v našem případě oranžovou, tak aby neměl souseda stejné barvy (obrázek 17). obrázek krok sekvenčního barvení grafu 41

42 4. krok už jen zahrnuje opakování 3. kroku do té doby než jsou obarveny všechny uzly v grafu. Další průběh barvení grafu popisuje tabulka 9 a jeho výsledkem je obrázek 18. tabulka 9 4. krok sekvenčního barvení grafu UZEL OBARVENÝ SOUSED (BARVA) DALŠÍ BARVA u 1 (4) u 5 (zelená) oranžová u 3 (4) u 1 (oranžová), u 7 (oranžová) zelená u 2 (3) u 5 (zelená) fialová u 4 (3) u 1 (oranžová), u 3 (zelená), u 5 (zelená), u 7 (oranžová) fialová u 8 (3) u 3 (zelená), u 7 (oranžová) fialová u 6 (2) u 2 (fialová), u 5 (zelená) oranžová u 9 (2) u 5 (zelená), u 7 (oranžová) fialová u 10 (2) u 7 (oranžová), u 8 (fialová), u 9 (fialová) zelená obrázek 18 výsledek sekvenčního barvení grafu Nejvyšší pořadové číslo barvy je zároveň počtem barev použitých pro obarvení grafu (zelená, oranžová, fialová). Na obarvení zadaného grafu potřebujeme 3 barvy Zpracování barvení grafu pomocí nezávislých množin Algoritmus Algo_IndependentSet používá metodu SetLevel(), stejně tak, jak je uvedeno v kapitole V tomto algoritmu cyklicky voláme metoda NextVertex(), 42

43 která hledá neobarvený uzel s nejvyšším stupněm u i. Vybraný uzel obarvíme barvou b i. Metodou NextVertexIS(bi), hledáme postupně všechny uzly, které lze obarvit stejnou barvou b i, jakou byl obarven uzel u i. Jakmile již nelze barvit žádný uzel stejnou barvou, barva se změní a cyklus se opakuje, dokud nejsou obarveny všechny uzly v grafu. Informace z algoritmu opět zapisujeme do vektorů pořadí a barev Příklad barvení grafu pomocí nezávislých množin 1. a 2. krok algoritmu je totožný s příkladem uvedeným v kapitole 4.5.2, včetně posloupnosti, ke které jsme došli (u 5 (6), u 7 (5), u 1 (4), u 3 (4), u 2 (3), u 4 (3), u 8 (3), u 6 (2), u 9 (2), u 10 (2)). V 2. kroku jsme obarvili uzel u 5 zelenou barvou a budeme pokračovat 3. krokem. Což znamená, že procházíme sestupně posloupností a hledáme nesousední uzel s uzlem u 5. Narazíme na uzel u 3 a prohledáváme dále (hledáme nesousední uzly u 5 a u 3 ) než dojdeme k uzlu u 10. Jsme na konci posloupnosti, tudíž zakreslíme tuto nezávislou množinu uzlů do zadané-ho grafu (obrázek 19). obrázek krok barvení grafu pomocí nezávislých množin Ve 4. kroku opakovaně procházíme posloupnost a hledáme neobarvený uzel s nejvyšším stupněm (pro náš příklad uzel u 7 ). Stejně jako ve 3. kroku budeme hledat další nezávislou množinu, kterou obarvíme barvou s následujícím pořadovým číslem uzly u 7, u 1 a u 6 obarvíme oranžovou barvou (obrázek 20). Tento postup opakujeme tak dlouho, dokud neobarvíme všechny uzly grafu. 43

44 obrázek krok barvení grafu pomocí nezávislých množin Pro náš příklad poslední nezávislá množina obsahuje uzly u 2, u 4, u 8 a u 9, kterým přiřadíme 3. barvu fialovou (obrázek 21). Nad grafem jsem našli 3 nezávislé množiny, z čehož vyplývá, že pro obarvení zadaného grafu jsme použili 3 barvy. obrázek 21 výsledek barvení grafu pomocí nezávislých množin Zpracování barvení grafu slepováním uzlů Algoritmus Algo_Slepovani má na výstupu kromě metody Sequence() a Color(), metodu GetPreviouslyVertex(). Ta předává opět vektor, kde je každému uzlu grafu přiřazen jeho předchůdce. Konstruktor třídy Coloring nepracuje pouze s odkazem na načtené uzly a hrany, jak tomu je u ostatních tříd, ale vytváří kopii uzlů a hran. Právě algoritmus Al- 44

45 go_slepovani vyžaduje tuto výjimku, protože modifikuje pole hran (nelze volat opakovaně). V prvním kroku opět voláme metodu SetLevel(), která každému uzlu přiřadí velikost stupně. Poté je zahájen vnější cyklus, ve kterém je vybrán uzel u i pomocí metody NextVertex(). Další uzly vybíráme ve vnitřním cyklu pomoci metody NextVertexSlep(i), kde i je index uzlu u i vybraného ve vnějším cyklu. Tato metoda nalezneme uzel u k, který je neobarvený a zároveň nesousední s uzlem u i. Pak uzel u k slepíme s uzlem u i pomocí metody SlepUzly(i, k). Metoda SlepUzly(i,k) najde všechny hrany, jejichž byl slepovaný uzel u k součástí a přesměrujeme tyto hrany do uzlu u i, ke kterému se uzel u k přilepil. Vnitřní cyklus opakujeme do té doby, než jsou vyčerpané všechny neobarvené nesousední uzly. Slepené uzly obarvíme společnou barvou. Dále pokračuje vnější cyklus, který podle známých pravidel vybere další neobarvený uzel a algoritmus se opakuje, do té doby, než jsou slepené a následně obarvené všechny uzly grafu. Tentokrát výsledky plníme tři vektory (pořadí, barev, předchůdců) Příklad barvení grafu slepováním uzlů Z již známého zadání (obrázek 15), provedeme rovněž výpočet posloupnosti příslušných uzlů podle velikosti stupňů: u 5 (6), u 7 (5), u 1 (4), u 3 (4), u 2 (3), u 4 (3), u 8 (3), u 6 (2), u 9 (2), u 10 (2). I tentokrát vybereme uzel s nejvyšším stupněm uzel u 5, ale neobarvíme jej. Najdeme k němu nesousední uzel s nejvyšším stupněm uzel u 3 a s tím jej slepíme v jeden. Doplníme hrany, které nově vytvořený uzel propojí s původnímu sousedy uzlu u 5 a uzlu u 3. Pokračujeme než vyčerpáme všechny dvojice, které je možno takto spojit. V další fázi opakujeme stejný postup, tak dlouho dokud nejsou v grafu pouze sousední uzly. Průběh zachycuje tabulka 10. Po slepení uzlů následuje obarvení každého uzlu odlišnou barvou (obrázek 22). tabulka 10 průběh slepování uzlů SLEPENÉ UZLY NESOUSEDNÍ UZEL u 5 u 3 u 5, u 3 u 10 u 5, u 3, u 10 u 7 u 1 u 7, u 1 u 6 u 7, u 1, u 6 45

46 u 2 u 4 u 2, u 4 u 8 u 2, u 4, u 8 u 9 u 2, u 4, u 8, u 9 obrázek 22 graf po slepení všech možných uzlů a jejich obarvení Aplikace po kliknutí na nový uzel umožňuje výpis původních uzlů slepeného uzlu. Zelený uzel u 1 je slepen z uzlů u 5, u 3, u 10. Oranžový uzel u 2 pochází z uzlů u 7, u 1, u 6. Fialový uzel u 3 naplnily zbývající uzly u 2, u 4, u 8, u 9. V poslední fázi algoritmu dochází k zpětnému vykreslení grafu. Uzly rozlepíme, ale tentokrát již obarvené (obrázek 23). obrázek 23 výsledek barvení grafu slepováním uzlů 46

47 4.6 Sada příkladů Přiložená sada 33 příkladů obsahuje vstupní soubory sestavené přímo pro naši aplikaci. Každému algoritmu jsou přiděleny minimálně 3 soubory určené především pro jeho výuku a procvičování. Ukázku spolupráce vstupního souboru a aplikace můžeme vidět na vzorových příkladech uvedených v Příloze D. 47

48 5 Diskuse Po zpracování teoretických informací a vypracování aplikace, která dokáže vykreslit graf a následně nalézt jeho nejkratší cestu, minimální kostru, kritickou cestu a maximální tok, projít jej do hloubky či do šířky nebo jej obarvit, přistoupíme k zhodnocení diplomové práce. 5.1 Metodické a praktické přínosy řešení Teoretická část práce je komplexním přehledem základních pojmů a algoritmů z oblasti teorie grafů, tudíž je vhodným prostředkem pro tvorbu studijních materiálů k předmětům obsahující látku z teorie grafů. Výběr algoritmů byl sestaven s přihlédnutím k potřebám předmětům vyučovaných na PEF. Praktická část se skládá z aplikace a jejich vstupních souborů, které jsou uspořádány do cvičebnice (sady příkladů). Využití aplikace ve výuce je hlavním přínosem této práce. Flexibilita, kterou nabízí má široké využití. Vyučující má možnost využít předpřipravené sady příkladů nebo použít vlastní příklad transformovaný do formátu vstupního souboru k názornému vysvětlení látky pomocí krokování jednotlivých algoritmů. Rovněž tvorba zadání pro písemné zkoušky a jejich zpětná kontrola může být díky aplikaci jednodušší. Studentům aplikace poskytuje prostředek k procvičení nabytých znalostí, či kontrolu již vypracovaných úloh. Jak studenti tak vyučující si mohou sadu příkladů rozšiřovat o svá zadání prostřednictvím vstupních souborů, ke kterým potřebují jen znalost matice incidence. Přínosem této práce je také použitá metodika při tvorbě aplikace, která rozděluje tématicky problematiky do jednotlivých tříd a tím umožňuje snadné rozšiřování aplikace o další oblasti z teorie grafů. 5.2 Diskuse nad dalším pokračováním v práci Pro rozšíření aplikace můžeme implementovat další algoritmy již zpracované tématiky (zejména u hledání maximálního toku viz kapitola 2.5) nebo rozšířit aplikaci o další problematiku např. obchodní cestující. Také bychom mohli propracovat jednotlivé algoritmy do větších podrobností, např. přidání možnosti krok zpět ve fázování. 48

49 5.3 Srovnání s existujícími řešeními Aplikací ke zpracování námi použitých algoritmů existuje celá řada, ale většina z nich vyžaduje speciální softwarové vybavení. Pokud jsou běžné dostupné zpravidla umožňují fázování jen na autorem vytvořených příkladech. Námi vytvořená aplikace nepotřebuje žádný nadstandardní software a přesto umožňuje uživateli používat vlastní příklady. 49

50 6 Závěr Cílem diplomové práce bylo vytvoření aplikace pro výuku grafových a síťových algoritmů. Aplikace je vhodným rozšířením bakalářské práce, tak aby pokryla komplexně problematiku teorie grafů vyučovanou v rámci předmětů PEF. Po obeznámení se zadanou problematikou byla vytvořena teoretická část práce, která vychází ze zdrojů uvedených v kapitole Použitá literatura. Na základě získaných znalostí během studia, především z předmětů Teoretické základy informatiky, Teoretické informatiky, Ekonomicko-matematických metod, Operačního výzkumu a Programovacího jazyku Java, byla navrhnuta metodika pro realizaci aplikace. Vlastní práce zahrnuje vznik aplikace od návrhu až po její úspěšnou realizaci. Každý algoritmus je popisován podrobně na konkrétním příkladu tak, aby byl zřejmý obecný postup řešení. Na závěr práce bylo provedeno zhodnocení použitého řešení a jeho metodické i praktické přínosy. Diplomová práce byla vytvářena postupně podle stanovených cílů, kterých bylo dosáhnuto. Výstupem vlastní práce je desktopová aplikace, jenž je vhodná pro výuku teorie grafů. 50

51 7 Použitá literatura [1] ANDRÝSKOVÁ, J., FOLTÝNEK, T. Teorie grafů (elearningová opora). Brno: Mendelova zemědělská a lesnická univerzita, elearningový projekt. [2] ČERNÝ, J., Základní grafové algoritmy. [online] Poslední aktualizace: [cit ]. Dostupné z internetu: ~kuba/ka/ka.pdf [3] FOLTÝNEK, T. Barvení grafů, platónská tělesa. Brno: Mendelova univerzita, Přednáška. [4] FUCHS, E., KOVÁŘ, P. Diskrétní matematika a Teorie množin pro učitele, Grafové algoritmy. Brno: Masarykova univerzita, CD-ROM. [5] GOCZOLOVÁ, D. Vizualizace grafových algoritmů. [online] Poslední aktualizace: [cit ]. Dostupné z internetu: student/zp_portal_student.pl?studium=22053;obdobi=597 [6] GROSS, J. L., YELLEN, J. Handbook of Graph Theory. USA: CRC Press, s. ISBN [7] HEROUT, P. Učebnice jazyku JAVA. České Budějovice: Kopp, s. ISBN [8] HOLOUBEK, J. Ekonomicko-matematické metody. 1. vyd. Brno: Mendelova zemědělská a lesnická univerzita v Brně, s. ISBN X. [9] JABLONSKÝ, J. Operační výzkum. 2. vyd. Praha: Vysoká škola ekonomická v Praze, s. ISBN [10] JEDLIČKA, P. Vlastnosti a použití jazyku Java. Brno: Mendelova univerzita, Přednáška. [11] JIROVSKÝ, L. Teorie grafů. [online] Poslední aktualizace: [cit ]. Dostupné na internetu: [12] KOL. Hrana (graf). [online] Poslední aktualizace: [cit ]. Dostupné z internetu: [13] KOL. Vítejte u NetBeans. [online] Poslední aktualizace 2010 [cit ]. Dostupné z internetu: [14] MATOUŠEK, J., NEŠETŘIL, J. Kapitoly z diskrétní matematiky. 2. vyd. Praha: Nakladatelství Karolinum, s. ISBN

52 [15] O'BRIEN, J. J., PLOTNICK, F. L. CPM in Construction Management. 5. vyd. New York: The McGraw-Hill Companies, s. ISBN [16] O'CONNOR, J. J., ROBERTSON, E. F. The four colour theorem. [online] Poslední aktualizace: 1996 [cit ]. Dostupné na internetu: [17] PALUBJÁK, P., Moderní algoritmy pro hledání maximálního toku v síti. [online] Poslední aktualizace: 2001 [cit ]. Dostupné na internetu: [18] PLESNÍK, J. Grafové algoritmy. Bratislava: Vydavatelství Slovenskej akadémie vied, s. [19] SEDLÁČEK, J. L. Úvod do teorie grafů. PM in Construction Management. 2. vyd. Praha: Academia, s. [20] ŠEDA, M. Teorie grafů. [online] Poslední aktualizace: 2003 [cit ]. Dostupné na internetu: [21] ŠIŠMA, P. Teorie grafů vyd. Praha: Prometheus, s. ISBN [22] ŠVEC, P. Programy v Java 2. [online] Poslední aktualizace: [cit ]. Dostupné na internetu: [23] VEČERKA, A. Grafy a grafové algoritmy. [online] Poslední aktualizace: 2007 [cit ]. Dostupné na internetu: Grafy_a_grafove_algoritmy.pdf 52

53 Přílohy 53

54 A Uživatelské prostředí Uživatelské prostředí (Kritická cesta) 54

55 B Ukázkový vstupní soubor u1:100,150 u2:200,50 u3:300,150 u4:200,200 u5:400,150 u6:400,50 u7:500,200 h1:1,0,0,-1,0,0,0 h2:1,0,-1,0,0,0,0 h3:1,-1,0,0,0,0,0 h4:0,1,0,0,0,-1,0 h5:0,1,-1,0,0,0,0 h6:0,0,-1,1,0,0,0 h7:0,0,1,0,0,-1,0 h8:0,0,1,0,-1,0,0 h9:0,0,0,0,-1,1,0 h10:0,0,0,0,0,1,-1 h11:0,0,0,0,1,0,-1 o1:-2 o2:8 o3:1 o4:12 o5:-7 o6:4 o7:8 o8:10 o9:3 o10:11 o11:20 55

56 C Příklad zdrojového kódu /** * Vyber barvy pro zadany uzel cislo barvy index uzlu, ktery potrebujeme obarvit */ private int ColorVertex(int uzel) { int val = 0; graf2.data.hrana tmphrana = new graf2.data.hrana(); int tmpuzel; int barvy = 0; for (int i = 0; i < pocethran; i++ ) { tmphrana = hrany[i]; if (tmphrana.h[uzel]!=0 ) { tmpuzel = tmphrana.getvrcholid(1); barvy = barvy color[tmpuzel]; tmpuzel = tmphrana.getvrcholid(-1); barvy = barvy color[tmpuzel]; } } if ((barvy & 1) == 0) val = 1; else if ((barvy & 2) == 0) val = 2; else if ((barvy & 4) == 0) val = 4; else if ((barvy & 8) == 0) val = 8; return val; } 56

57 D Vzorové příklady z cvičebnice Příklad hledání minimální kostry Kruskalova algoritmu zadání příkladu na Kruskalův algoritmus 1. krok Kruskalova algoritmu 57

58 2. krok Kruskalova algoritmu 3., 4. a 5. krok Kruskalova algoritmu 58

59 6. krok Kruskalova algoritmu 7. krok Kruskalova algoritmu 59

60 8. krok Kruskalova algoritmu 8. krok Kruskalova algoritmu včetně uživatelského prostředí 60

Teoretická informatika Tomáš Foltýnek Barvení grafů Platónská tělesa

Teoretická informatika Tomáš Foltýnek Barvení grafů Platónská tělesa Tomáš Foltýnek foltynek@pef.mendelu.cz Barvení grafů Platónská tělesa strana 2 Opakování z minulé přednášky Co je to prohledávání grafu? Jaké způsoby prohledávání grafu známe? Jak nalézt východ z bludiště?

Více

07 Základní pojmy teorie grafů

07 Základní pojmy teorie grafů 07 Základní pojmy teorie grafů (definice grafu, vlastnosti grafu, charakteristiky uzlů, ohodnocené grafy) Definice grafu množina objektů, mezi kterými existují určité vazby spojující tyto objekty. Uspořádaná

Více

Algoritmizace prostorových úloh

Algoritmizace prostorových úloh INOVACE BAKALÁŘSKÝCH A MAGISTERSKÝCH STUDIJNÍCH OBORŮ NA HORNICKO-GEOLOGICKÉ FAKULTĚ VYSOKÉ ŠKOLY BÁŇSKÉ - TECHNICKÉ UNIVERZITY OSTRAVA Algoritmizace prostorových úloh Grafové úlohy Daniela Szturcová Tento

Více

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

Modely teorie grafů, min.kostra, max.tok, CPM, MPM, PERT PEF ČZU Modely teorie grafů, min.kostra, max.tok, CPM, MPM, PERT Okruhy SZB č. 5 Zdroje: Demel, J., Operační výzkum Jablonský J., Operační výzkum Šubrt, T., Langrová, P., Projektové řízení I. a různá internetová

Více

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

Základy informatiky. Teorie grafů. Zpracoval: Pavel Děrgel Úprava: Daniela Szturcová Základy informatiky Teorie grafů Zpracoval: Pavel Děrgel Úprava: Daniela Szturcová Obsah přednášky Barvení mapy Teorie grafů Definice Uzly a hrany Typy grafů Cesty, cykly, souvislost grafů Barvení mapy

Více

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

Operační výzkum. Síťová analýza. Metoda CPM. Operační výzkum Síťová analýza. Metoda CPM. Operační program Vzdělávání pro konkurenceschopnost Název projektu: Inovace magisterského studijního programu Fakulty ekonomiky a managementu Registrační číslo

Více

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

Základy informatiky. 07 Teorie grafů. Kačmařík/Szturcová/Děrgel/Rapant Základy informatiky 07 Teorie grafů Kačmařík/Szturcová/Děrgel/Rapant Obsah přednášky barvení mapy teorie grafů definice uzly a hrany typy grafů cesty, cykly, souvislost grafů Barvení mapy Kolik barev je

Více

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

Obsah prezentace. Základní pojmy v teorii o grafech Úlohy a prohledávání grafů Hledání nejkratších cest Obsah prezentace Základní pojmy v teorii o grafech Úlohy a prohledávání grafů Hledání nejkratších cest 1 Základní pojmy Vrchol grafu: {množina V} Je to styčná vazba v grafu, nazývá se též uzlem, prvkem

Více

Úvod do teorie grafů

Úvod do teorie grafů Úvod do teorie grafů Neorientovaný graf G = (V,E,I) V množina uzlů (vrcholů) - vertices E množina hran - edges I incidence incidence je zobrazení, buď: funkce: I: E V x V relace: I E V V incidence přiřadí

Více

Grafové algoritmy. Programovací techniky

Grafové algoritmy. Programovací techniky Grafové algoritmy Programovací techniky Grafy Úvod - Terminologie Graf je datová struktura, skládá se z množiny vrcholů V a množiny hran mezi vrcholy E Počet vrcholů a hran musí být konečný a nesmí být

Více

Vzdálenost uzlů v neorientovaném grafu

Vzdálenost uzlů v neorientovaném grafu Vzdálenosti a grafy Vzdálenost uzlů v neorientovaném grafu Je dán neorientovaný neohodnocený graf G = (V,E,I) vzdálenost uzlů u a v v neorientovaném souvislém grafu G je délka nejkratší cesty spojující

Více

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

5 Orientované grafy, Toky v sítích Petr Hliněný, FI MU Brno, 205 / 9 FI: IB000: Toky v sítích 5 Orientované grafy, Toky v sítích Nyní se budeme zabývat typem sít ových úloh, ve kterých není podstatná délka hran a spojení, nýbž jejich propustnost

Více

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

Grafy. RNDr. Petra Surynková, Ph.D. Univerzita Karlova v Praze Matematicko-fyzikální fakulta. 6 RNDr., Ph.D. Katedra didaktiky matematiky Univerzita Karlova v Praze Matematicko-fyzikální fakulta petra.surynkova@mff.cuni.cz http://surynkova.info množina vrcholů a množina hran hrana vždy spojuje

Více

Grafové algoritmy. Programovací techniky

Grafové algoritmy. Programovací techniky Grafové algoritmy Programovací techniky Grafy Úvod - Terminologie Graf je datová struktura, skládá se z množiny vrcholů V a množiny hran mezi vrcholy E Počet vrcholů a hran musí být konečný a nesmí být

Více

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

Základní pojmy teorie grafů [Graph theory] Část I Základní pojmy teorie grafů [Graph theory] V matematice grafem obvykle rozumíme grafické znázornění funkční závislosti. Pro tento předmět je však podstatnější pohled jiný. V teorii grafů rozumíme

Více

TEORIE GRAFŮ TEORIE GRAFŮ 1

TEORIE GRAFŮ TEORIE GRAFŮ 1 TEORIE GRAFŮ 1 TEORIE GRAFŮ Přednášející: RNDr. Jiří Taufer, CSc. Fakulta dopravní ČVUT v Praze, letní semestr 1998/99 Zpracoval: Radim Perkner, tamtéž, v květnu 1999 ZÁKLADNÍ POJMY Říkáme, že je dán prostý

Více

TGH09 - Barvení grafů

TGH09 - Barvení grafů TGH09 - Barvení grafů Jan Březina Technical University of Liberec 15. dubna 2013 Problém: Najít obarvení států na mapě tak, aby žádné sousední státy neměli stejnou barvu. Motivační problém Problém: Najít

Více

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

4EK311 Operační výzkum. 5. Teorie grafů 4EK311 Operační výzkum 5. Teorie grafů 5. Teorie grafů definice grafu Graf G = uspořádaná dvojice (V, E), kde V označuje množinu n uzlů u 1, u 2,, u n (u i, i = 1, 2,, n) a E označuje množinu hran h ij,

Více

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

STROMOVE ALGORITMY Prohledavani do sirky (level-order) Po vodorovnejch carach fronta STROMOVE ALGORITMY Prohledavani do sirky (level-order) Po vodorovnejch carach vlož do fronty kořen opakuj, dokud není fronta prázdná 1. vyber uzel z fronty a zpracuj jej 2. vlož do fronty levého následníka

Více

Výhody a nevýhody jednotlivých reprezentací jsou shrnuty na konci kapitoly.

Výhody a nevýhody jednotlivých reprezentací jsou shrnuty na konci kapitoly. Kapitola Reprezentace grafu V kapitole?? jsme se dozvěděli, co to jsou grafy a k čemu jsou dobré. rzo budeme chtít napsat nějaký program, který s grafy pracuje. le jak si takový graf uložit do počítače?

Více

GRAFY A GRAFOVÉ ALGORITMY

GRAFY A GRAFOVÉ ALGORITMY KATEDRA INFORMATIKY PŘÍRODOVĚDECKÁ FAKULTA UNIVERZITA PALACKÉHO GRAFY A GRAFOVÉ ALGORITMY ARNOŠT VEČERKA VÝVOJ TOHOTO UČEBNÍHO TEXTU JE SPOLUFINANCOVÁN EVROPSKÝM SOCIÁLNÍM FONDEM A STÁTNÍM ROZPOČTEM ČESKÉ

Více

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

TGH05 - aplikace DFS, průchod do šířky TGH05 - aplikace DFS, průchod do šířky Jan Březina Technical University of Liberec 31. března 2015 Grafová formulace CPM (critical path method) Orientovaný acyklický graf (DAG) je orientovaný graf neobsahující

Více

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

Grafy. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 13. Grafy doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava Prezentace ke dni 13. března 2017 Jiří Dvorský (VŠB TUO) Grafy 104 / 309 Osnova přednášky Grafy

Více

Teorie grafů. Teoretická informatika Tomáš Foltýnek

Teorie grafů. Teoretická informatika Tomáš Foltýnek Teorie grafů Teoretická informatika Tomáš Foltýnek foltynek@pef.mendelu.cz Opakování z minulé přednášky Co je to složitostní třída? Jaké složitostní třídy známe? Kde leží hranice mezi problémy řešitelnými

Více

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

TGH05 - aplikace DFS, průchod do šířky TGH05 - aplikace DFS, průchod do šířky Jan Březina Technical University of Liberec 28. března 2017 Grafová formulace CPM (critical path method) Orientovaný acyklický graf (DAG) je orientovaný graf neobsahující

Více

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

fakulty MENDELU v Brně (LDF) s ohledem na disciplíny společného základu http://akademie.ldf.mendelu.cz/cz (reg. č. CZ.1.07/2.2.00/28. Základy lineárního programování Vyšší matematika, Inženýrská matematika LDF MENDELU Podpořeno projektem Průřezová inovace studijních programů Lesnické a dřevařské fakulty MENDELU v Brně (LDF) s ohledem

Více

Metody síťové analýzy

Metody síťové analýzy Metody síťové analýzy Řeší problematiku složitých systémů, zejména pak vazby mezi jejich jednotlivými prvky. Vychází z teorie grafů. Základní metody síťové analýzy: CPM (Critical Path Method) deterministický

Více

TGH10 - Maximální toky

TGH10 - Maximální toky TGH10 - Maximální toky Jan Březina Technical University of Liberec 23. dubna 2013 - motivace Elektrická sít : Elektrická sít, jednotlivé vodiče mají různou kapacitu (max. proud). Jaký maximální proud může

Více

4EK213 LINEÁRNÍ MODELY

4EK213 LINEÁRNÍ MODELY 4EK213 LINEÁRNÍ MODELY Úterý 11:00 12:30 hod. učebna SB 324 3. přednáška SIMPLEXOVÁ METODA I. OSNOVA PŘEDNÁŠKY Standardní tvar MM Základní věta LP Princip simplexové metody Výchozí řešení SM Zlepšení řešení

Více

Jan Březina. 7. března 2017

Jan Březina. 7. března 2017 TGH03 - stromy, ukládání grafů Jan Březina Technical University of Liberec 7. března 2017 Kružnice - C n V = {1, 2,..., n} E = {{1, 2}, {2, 3},..., {i, i + 1},..., {n 1, n}, {n, 1}} Cesta - P n V = {1,

Více

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

LDF MENDELU. Simona Fišnarová (MENDELU) Základy lineárního programování VMAT, IMT 1 / 25 Základy lineárního programování Vyšší matematika, Inženýrská matematika LDF MENDELU Podpořeno projektem Průřezová inovace studijních programů Lesnické a dřevařské fakulty MENDELU v Brně (LDF) s ohledem

Více

bfs, dfs, fronta, zásobník, prioritní fronta, halda

bfs, dfs, fronta, zásobník, prioritní fronta, halda bfs, dfs, fronta, zásobník, prioritní fronta, halda Petr Ryšavý 19. září 2017 Katedra počítačů, FEL, ČVUT prohledávání grafů Proč prohledávání grafů Zkontrolovat, zda je sít spojitá. Hledání nejkratší

Více

Algoritmy na ohodnoceném grafu

Algoritmy na ohodnoceném grafu Algoritmy na ohodnoceném grafu Dvě základní optimalizační úlohy: Jak najít nejkratší cestu mezi dvěma vrcholy? Dijkstrův algoritmus s t Jak najít minimální kostru grafu? Jarníkův a Kruskalův algoritmus

Více

Vektory a matice. Obsah. Aplikovaná matematika I. Carl Friedrich Gauss. Základní pojmy a operace

Vektory a matice. Obsah. Aplikovaná matematika I. Carl Friedrich Gauss. Základní pojmy a operace Vektory a matice Aplikovaná matematika I Dana Říhová Mendelu Brno Obsah 1 Vektory Základní pojmy a operace Lineární závislost a nezávislost vektorů 2 Matice Základní pojmy, druhy matic Operace s maticemi

Více

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

Teorie grafů BR Solutions - Orličky Píta (Orličky 2010) Teorie grafů / 66 Teorie grafů Petr Hanuš (Píta) BR Solutions - Orličky 2010 23.2. 27.2.2010 Píta (Orličky 2010) Teorie grafů 23.2. 27.2.2010 1 / 66 Pojem grafu Graf je abstraktní pojem matematiky a informatiky užitečný

Více

1 Teorie grafů. Základní informace

1 Teorie grafů. Základní informace Teorie grafů Základní informace V této výukové jednotce se student seznámí s matematickým pojetím grafů a na konkrétních příkladech si vyzkouší vybrané algoritmy pro hledání v grafech. Výstupy z výukové

Více

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

Algoritmus pro hledání nejkratší cesty orientovaným grafem 1.1 Úvod Algoritmus pro hledání nejkratší cesty orientovaným grafem Naprogramoval jsem v Matlabu funkci, která dokáže určit nejkratší cestu v orientovaném grafu mezi libovolnými dvěma vrcholy. Nastudoval

Více

Definice 1 eulerovský Definice 2 poloeulerovský

Definice 1 eulerovský Definice 2 poloeulerovský Dále budeme předpokládat, že každý graf je obyčejný a má aspoň tři uzly. Definice 1 Graf G se nazývá eulerovský, existuje-li v něm uzavřený tah, který obsahuje každou hranu v G. Definice 2 Graf G se nazývá

Více

Hledáme efektivní řešení úloh na grafu

Hledáme efektivní řešení úloh na grafu Hledáme efektivní řešení úloh na grafu Mějme dán graf následující úlohy: G = ( V, E), chceme algoritmicky vyřešit Je daný vrchol t dosažitelný z vrcholu s? Pokud ano, jaká nejkratší cesta tyto vrcholy

Více

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

H {{u, v} : u,v U u v } Obyčejný graf Obyčejný graf je dvojice G= U, H, kde U je konečná množina uzlů (vrcholů) a H {{u, v} : u,v U u v } je (konečná) množina hran. O hraně h={u, v} říkáme, že je incidentní s uzly u a v nebo

Více

e-mail: RadkaZahradnikova@seznam.cz 1. července 2010

e-mail: RadkaZahradnikova@seznam.cz 1. července 2010 Optimální výrobní program Radka Zahradníková e-mail: RadkaZahradnikova@seznam.cz 1. července 2010 Obsah 1 Lineární programování 2 Simplexová metoda 3 Grafická metoda 4 Optimální výrobní program Řešení

Více

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

Teorie grafů. Kostra grafu. Obsah. Radim Farana Podklady pro výuku pro akademický rok 2013/2014 Teorie grafů Radim Farana Podklady pro výuku pro akademický rok 013/014 Obsah Kostra grafu. Tahy,. Úloha čínského pošťáka. Zdroj: Vítečková, M., Přidal, P. & Koudela, T. Výukový modul k předmětu Systémová

Více

24.11.2009 Václav Jirchář, ZTGB

24.11.2009 Václav Jirchář, ZTGB 24.11.2009 Václav Jirchář, ZTGB Síťová analýza 50.let V souvislosti s potřebou urychlit vývoj a výrobu raket POLARIS v USA při závodech ve zbrojení za studené války se SSSR V roce 1958 se díky aplikaci

Více

Základy umělé inteligence

Základy umělé inteligence Základy umělé inteligence Automatické řešení úloh Základy umělé inteligence - prohledávání. Vlasta Radová, ZČU, katedra kybernetiky 1 Formalizace úlohy UI chápe řešení úloh jako proces hledání řešení v

Více

TGH02 - teorie grafů, základní pojmy

TGH02 - teorie grafů, základní pojmy TGH02 - teorie grafů, základní pojmy Jan Březina Technical University of Liberec 28. února 2017 Metainformace materiály: jan.brezina.matfyz.cz/vyuka/tgh (./materialy/crls8.pdf - Introduction to algorithms)

Více

Kolik existuje různých stromů na pevně dané n-prvkové množině vrcholů?

Kolik existuje různých stromů na pevně dané n-prvkové množině vrcholů? Kapitola 9 Matice a počet koster Graf (orientovaný i neorientovaný) lze popsat maticí, a to hned několika různými způsoby. Tématem této kapitoly jsou incidenční matice orientovaných grafů a souvislosti

Více

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

1. Převeďte dané číslo do dvojkové, osmičkové a šestnáctkové soustavy: a) 759 10 b) 2578 10 Úlohy- 2.cvičení 1. Převeďte dané číslo do dvojkové, osmičkové a šestnáctkové soustavy: a) 759 10 b) 2578 10 2. Převeďte dané desetinné číslo do dvojkové soustavy (DEC -> BIN): a) 0,8125 10 b) 0,35 10

Více

bfs, dfs, fronta, zásobník

bfs, dfs, fronta, zásobník bfs, dfs, fronta, zásobník Petr Ryšavý 25. září 2018 Katedra počítačů, FEL, ČVUT prohledávání grafů Proč prohledávání grafů Zkontrolovat, zda je sít spojitá. Hledání nejkratší cesty, plánování cest. Prohledávání

Více

U Úvod do modelování a simulace systémů

U Úvod do modelování a simulace systémů U Úvod do modelování a simulace systémů Vyšetřování rozsáhlých soustav mnohdy nelze provádět analytickým výpočtem.často je nutné zkoumat chování zařízení v mezních situacích, do kterých se skutečné zařízení

Více

Vrcholová barevnost grafu

Vrcholová barevnost grafu Vrcholová barevnost grafu Definice: Necht G = (V, E) je obyčejný graf a k N. Zobrazení φ : V {1, 2,..., k} nazýváme k-vrcholovým obarvením grafu G. Pokud φ(u) φ(v) pro každou hranu {u, v} E, nazveme k-vrcholové

Více

4EK213 LINEÁRNÍ MODELY

4EK213 LINEÁRNÍ MODELY 4EK213 LINEÁRNÍ MODELY Úterý 11:00 12:30 hod. učebna SB 324 Mgr. Sekničková Jana, Ph.D. 2. PŘEDNÁŠKA MATEMATICKÝ MODEL ÚLOHY LP Mgr. Sekničková Jana, Ph.D. 2 OSNOVA PŘEDNÁŠKY Obecná formulace MM Množina

Více

= 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

= 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 Síť Síť je čtveřice N = ( G, s, t, c) kde G ( V, A) = je prostý orientovaný graf a každé orientované hraně ( u, v) je přiřazeno nezáporné číslo, které se nazývá kapacita hrany ( u, v), formálně c ( u,

Více

10 Přednáška ze

10 Přednáška ze 10 Přednáška ze 17. 12. 2003 Věta: G = (V, E) lze nakreslit jedním uzavřeným tahem G je souvislý a má všechny stupně sudé. Důkaz G je souvislý. Necht v je libovolný vrchol v G. A mějme uzavřený eurelovský

Více

Teorie síťových modelů a síťové plánování

Teorie síťových modelů a síťové plánování KSI PEF ČZU Teorie síťových modelů a síťové plánování Část přednášky doc. Jaroslava Švasty z předmětu systémové analýzy a modelování. Zápis obsahuje základní vymezení projektu, časového plánování a popis

Více

i=1 Přímka a úsečka. Body, které leží na přímce procházející body a a b můžeme zapsat pomocí parametrické rovnice

i=1 Přímka a úsečka. Body, které leží na přímce procházející body a a b můžeme zapsat pomocí parametrické rovnice I. Funkce dvou a více reálných proměnných 1. Úvod Značení: V textu budeme používat označení: N pro množinu všech přirozených čísel; R pro množinu všech reálných čísel; R n pro množinu všech uspořádaných

Více

Graf. Uzly Lokality, servery Osoby fyzické i právní Informatické objekty... atd. Hrany Cesty, propojení Vztahy Informatické závislosti... atd.

Graf. Uzly Lokality, servery Osoby fyzické i právní Informatické objekty... atd. Hrany Cesty, propojení Vztahy Informatické závislosti... atd. Graf 2 0 3 1 4 5 Uzly Lokality, servery Osoby fyzické i právní Informatické objekty... atd. Hrany Cesty, propojení Vztahy Informatické závislosti... atd. Běžné reprezentace grafu Uzly = indexy Stupně uzlů

Více

bfs, dfs, fronta, zásobník, prioritní fronta, halda

bfs, dfs, fronta, zásobník, prioritní fronta, halda bfs, dfs, fronta, zásobník, prioritní fronta, halda Petr Ryšavý 20. září 2016 Katedra počítačů, FEL, ČVUT prohledávání grafů Proč prohledávání grafů Zkontrolovat, zda je sít spojitá. Hledání nejkratší

Více

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

Prohledávání do šířky = algoritmus vlny Prohledávání do šířky = algoritmus vlny - souběžně zkoušet všechny možné varianty pokračování výpočtu, dokud nenajdeme řešení úlohy průchod stromem všech možných cest výpočtu do šířky, po vrstvách (v každé

Více

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

zejména Dijkstrův algoritmus pro hledání minimální cesty a hladový algoritmus pro hledání minimální kostry. Kapitola Ohodnocené grafy V praktických aplikacích teorie grafů zpravidla graf slouží jako nástroj k popisu nějaké struktury. Jednotlivé prvky této struktury mají často přiřazeny nějaké hodnoty (může jít

Více

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

TOKY V SÍTÍCH II. Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky, FIT České vysoké učení technické v Praze TOKY V SÍTÍCH II Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky, FIT České vysoké učení technické v Praze BI-GRA, LS 010/011, Lekce 10 Evropský sociální fond Praha & EU: Investujeme do vaší

Více

Délka (dny) 150 - - 2 terénní úpravy (prvotní) 15-20 - příprava staveniště (výstavba přístřešku pro materiál)

Délka (dny) 150 - - 2 terénní úpravy (prvotní) 15-20 - příprava staveniště (výstavba přístřešku pro materiál) Skupinová práce. Zadání skupinové práce Síťová analýza metoda CPM Dáno: Výstavba skladu zásob obilí představuje následující činnosti: Tabulka Název činnosti Délka (dny) Optimální projekt. Optimální dělníků

Více

3. Prohledávání grafů

3. Prohledávání grafů 3. Prohledávání grafů Prohledání do šířky Breadth-First Search BFS Jde o grafový algoritmus, který postupně prochází všechny vrcholy v dané komponentě souvislosti. Algoritmus nejprve projde všechny sousedy

Více

Metody analýzy kritické cesty

Metody analýzy kritické cesty UNIVERZITA PALACKÉHO V OLOMOUCI PŘÍRODOVĚDECKÁ FAKULTA KATEDRA MATEMATICKÉ ANALÝZY A APLIKACÍ MATEMATIKY SEMINÁRNÍ PRÁCE Metody analýzy kritické cesty Vypracoval: Tomáš Talášek AME, I. ročník Obsah 1 Základní

Více

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

Diskrétní matematika. DiM /01, zimní semestr 2018/2019 Diskrétní matematika Petr Kovář petr.kovar@vsb.cz Vysoká škola báňská Technická univerzita Ostrava DiM 470-2301/01, zimní semestr 2018/2019 O tomto souboru Tento soubor je zamýšlen především jako pomůcka

Více

8 Rovinnost a kreslení grafů

8 Rovinnost a kreslení grafů 8 Rovinnost a kreslení grafů V přímé návaznosti na předchozí lekci se zaměříme na druhý důležitý aspekt slavného problému čtyř barev, který byl původně formulován pro barevné rozlišení států na politické

Více

Zdůvodněte, proč funkce n lg(n) roste alespoň stejně rychle nebo rychleji než než funkce lg(n!). Symbolem lg značíme logaritmus o základu 2.

Zdůvodněte, proč funkce n lg(n) roste alespoň stejně rychle nebo rychleji než než funkce lg(n!). Symbolem lg značíme logaritmus o základu 2. 1 3 4 5 6 7 8 9 10 11 1 13 14 15 16 17 18 19 0 1 3 4 5 6 7 8 9 30 31 3 Zdůvodněte, proč funkce f(n) = n log(n) 1 n 1/ roste rychleji než funkce g(n) = n. Zdůvodněte, proč funkce f(n) = n 3/ log(n) roste

Více

Řízení projektů. Konstrukce síťového grafu pro řízení projektů Metoda CPM Metoda PERT

Řízení projektů. Konstrukce síťového grafu pro řízení projektů Metoda CPM Metoda PERT Řízení projektů Konstrukce síťového grafu pro řízení projektů Metoda CPM Metoda PERT 1 Úvod základní pojmy Projekt souhrn činností, které musí být všechny realizovány, aby byl projekt dokončen Činnost

Více

Maticí typu (m, n), kde m, n jsou přirozená čísla, se rozumí soubor mn veličin a jk zapsaných do m řádků a n sloupců tvaru:

Maticí typu (m, n), kde m, n jsou přirozená čísla, se rozumí soubor mn veličin a jk zapsaných do m řádků a n sloupců tvaru: 3 Maticový počet 3.1 Zavedení pojmu matice Maticí typu (m, n, kde m, n jsou přirozená čísla, se rozumí soubor mn veličin a jk zapsaných do m řádků a n sloupců tvaru: a 11 a 12... a 1k... a 1n a 21 a 22...

Více

0.1 Úvod do lineární algebry

0.1 Úvod do lineární algebry Matematika KMI/PMATE 1 01 Úvod do lineární algebry 011 Lineární rovnice o 2 neznámých Definice 011 Lineární rovnice o dvou neznámých x, y je rovnice, která může být vyjádřena ve tvaru ax + by = c, kde

Více

Matematika (CŽV Kadaň) aneb Úvod do lineární algebry Matice a soustavy rovnic

Matematika (CŽV Kadaň) aneb Úvod do lineární algebry Matice a soustavy rovnic Přednáška třetí (a pravděpodobně i čtvrtá) aneb Úvod do lineární algebry Matice a soustavy rovnic Lineární rovnice o 2 neznámých Lineární rovnice o 2 neznámých Lineární rovnice o dvou neznámých x, y je

Více

Extrémy funkce dvou proměnných

Extrémy funkce dvou proměnných Extrémy funkce dvou proměnných 1. Stanovte rozměry pravoúhlé vodní nádrže o objemu 32 m 3 tak, aby dno a stěny měly nejmenší povrch. Označme rozměry pravoúhlé nádrže x, y, z (viz obr.). ak objem této nádrže

Více

TGH06 - Hledání nejkratší cesty

TGH06 - Hledání nejkratší cesty TGH06 - Hledání nejkratší cesty Jan Březina Technical University of Liberec 26. března 2013 Motivační problémy Silniční sít reprezentovaná grafem. Najdi nejkratší/nejrychlejší cestu z místa A do místa

Více

Operační výzkum. Přiřazovací problém.

Operační výzkum. Přiřazovací problém. Operační výzkum Operační program Vzdělávání pro konkurenceschopnost Název projektu: Inovace magisterského studijního programu Fakulty ekonomiky a managementu Registrační číslo projektu: CZ..7/2.2./28.326

Více

Výukový materiál zpracován v rámci projektu EU peníze školám

Výukový materiál zpracován v rámci projektu EU peníze školám Výukový materiál zpracován v rámci projektu EU peníze školám Registrační číslo projektu: CZ. 1.07/1.5.00/34.0637 Šablona III/2 Název VY_32_INOVACE_39_Algoritmizace_teorie Název školy Základní škola a Střední

Více

II. Úlohy na vložené cykly a podprogramy

II. Úlohy na vložené cykly a podprogramy II. Úlohy na vložené cykly a podprogramy Společné zadání pro příklady 1. - 10. začíná jednou ze dvou možností popisu vstupních dat. Je dána posloupnost (neboli řada) N reálných (resp. celočíselných) hodnot.

Více

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

III přednáška Toky v sítích 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

Více

TGH06 - Hledání nejkratší cesty

TGH06 - Hledání nejkratší cesty TGH06 - Hledání nejkratší cesty Jan Březina Technical University of Liberec 31. března 2015 Motivační problémy Silniční sít reprezentovaná grafem. Ohodnocené hrany - délky silnic. Najdi nejkratší/nejrychlejší

Více

Algoritmizace prostorových úloh

Algoritmizace prostorových úloh INOVACE BAKALÁŘSKÝCH A MAGISTERSKÝCH STUDIJNÍCH OBORŮ NA HORNICKO-GEOLOGICKÉ FAKULTĚ VYSOKÉ ŠKOLY BÁŇSKÉ - TECHNICKÉ UNIVERZITY OSTRAVA Algoritmizace prostorových úloh Datové struktury Daniela Szturcová

Více

Definice 7.2. Nejmenší přirozené číslo k, pro které je graf G k-obarvitelný, se nazývá chromatické číslo (barevnost) grafu G a značí se χ(g).

Definice 7.2. Nejmenší přirozené číslo k, pro které je graf G k-obarvitelný, se nazývá chromatické číslo (barevnost) grafu G a značí se χ(g). 7 Barevnost grafu Definice 71 Graf G se nazývá k-obarvitelný, jestliže každému jeho uzlu lze přiřadit jednu z barev 1 k tak, že žádné dva sousední uzly nemají stejnou barvu Definice 72 Nejmenší přirozené

Více

KOMPLEXNÍ ČÍSLA INVESTICE DO ROZVOJE VZDĚLÁVÁNÍ

KOMPLEXNÍ ČÍSLA INVESTICE DO ROZVOJE VZDĚLÁVÁNÍ KOMPLEXNÍ ČÍSLA Gymnázium Jiřího Wolkera v Prostějově Výukové materiály z matematiky pro vyšší gymnázia Autoři projektu Student na prahu 21. století - využití ICT ve vyučování matematiky na gymnáziu INVESTICE

Více

Algoritmy a datové struktury

Algoritmy a datové struktury Algoritmy a datové struktury Stromy 1 / 32 Obsah přednášky Pole a seznamy Stromy Procházení stromů Binární stromy Procházení BS Binární vyhledávací stromy 2 / 32 Pole Hledání v poli metodou půlení intervalu

Více

ORIENTOVANÉ GRAFY, REPREZENTACE GRAFŮ

ORIENTOVANÉ GRAFY, REPREZENTACE GRAFŮ ORIENTOVANÉ GRAFY, REPREZENTACE GRAFŮ Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky, FIT České vysoké učení technické v Praze BI-GRA, LS 2/2, Lekce Evropský sociální fond Praha & EU: Investujeme

Více

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

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 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 Evropský sociální fond Praha & EU: Investujeme do vaší

Více

4EK212 Kvantitativní management. 7.Řízení projektů

4EK212 Kvantitativní management. 7.Řízení projektů 4EK212 Kvantitativní management 7.Řízení projektů 6.5 Řízení projektů Typická aplikace teorie grafů Projekt = soubor činností Příklady: Vývoj a uvedení nového výrobku Výstavba či rekonstrukce objektu Plán

Více

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

Diskrétní matematika. DiM /01, zimní semestr 2018/2019 Diskrétní matematika Petr Kovář petr.kovar@vsb.cz Vysoká škola báňská Technická univerzita Ostrava DiM 470-2301/01, zimní semestr 2018/2019 O tomto souboru Tento soubor je zamýšlen především jako pomůcka

Více

Úloha ve stavovém prostoru SP je <s 0, C>, kde s 0 je počáteční stav C je množina požadovaných cílových stavů

Úloha ve stavovém prostoru SP je <s 0, C>, kde s 0 je počáteční stav C je množina požadovaných cílových stavů Stavový prostor a jeho prohledávání SP = formalismus k obecnějšímu uchopení a vymezení problému, který spočívá v nalezení posloupnosti akcí vedoucích od počátečního stavu úlohy (zadání) k požadovanému

Více

popel, glum & nepil 16/28

popel, glum & nepil 16/28 Lineární rezoluce další způsob zjemnění rezoluce; místo stromu směřujeme k lineární struktuře důkazu Lineární rezoluční odvození (důkaz) z Ë je posloupnost dvojic ¼ ¼ Ò Ò taková, že Ò ½ a 1. ¼ a všechna

Více

Definice. Vektorový prostor V nad tělesem T je množina s operacemi + : V V V, tj. u, v V : u + v V : T V V, tj. ( u V )( a T ) : a u V které splňují

Definice. Vektorový prostor V nad tělesem T je množina s operacemi + : V V V, tj. u, v V : u + v V : T V V, tj. ( u V )( a T ) : a u V které splňují Definice. Vektorový prostor V nad tělesem T je množina s operacemi + : V V V, tj. u, v V : u + v V : T V V, tj. ( u V )( a T ) : a u V které splňují 1. u + v = v + u, u, v V 2. (u + v) + w = u + (v + w),

Více

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

Diskrétní matematika. DiM /01, zimní semestr 2018/2019 Diskrétní matematika Petr Kovář petr.kovar@vsb.cz Vysoká škola báňská Technická univerzita Ostrava DiM 470-2301/01, zimní semestr 2018/2019 O tomto souboru Tento soubor je zamýšlen především jako pomůcka

Více

CVIČNÝ TEST 36. OBSAH I. Cvičný test 2. Mgr. Tomáš Kotler. II. Autorské řešení 6 III. Klíč 15 IV. Záznamový list 17

CVIČNÝ TEST 36. OBSAH I. Cvičný test 2. Mgr. Tomáš Kotler. II. Autorské řešení 6 III. Klíč 15 IV. Záznamový list 17 CVIČNÝ TEST 36 Mgr. Tomáš Kotler OBSAH I. Cvičný test 2 II. Autorské řešení 6 III. Klíč 15 IV. Záznamový list 17 I. CVIČNÝ TEST 1 Určete iracionální číslo, které je vyjádřeno číselným výrazem (6 2 π 4

Více

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

Diskrétní matematika. DiM /01, zimní semestr 2018/2019 Diskrétní matematika Petr Kovář petr.kovar@vsb.cz Vysoká škola báňská Technická univerzita Ostrava DiM 470-2301/01, zimní semestr 2018/2019 O tomto souboru Tento soubor je zamýšlen především jako pomůcka

Více

4EK311 Operační výzkum. 6. Řízení projektů

4EK311 Operační výzkum. 6. Řízení projektů 4EK311 Operační výzkum 6. Řízení projektů 6. Řízení projektů Typická aplikace teorie grafů Projekt = soubor činností Příklady: Vývoj a uvedení nového výrobku Výstavba či rekonstrukce objektu Plán výrobního

Více

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

Kostry. 9. týden. Grafy. Marie Demlová (úpravy Matěj Dostál) 16. dubna 2019 Grafy 16. dubna 2019 Tvrzení. Je dán graf G, pak následující je ekvivalentní. 1 G je strom. 2 Graf G nemá kružnice a přidáme-li ke grafu libovolnou hranu, uzavřeme přesně jednu kružnici. 3 Graf G je souvislý

Více

CVIČNÝ TEST 15. OBSAH I. Cvičný test 2. Mgr. Tomáš Kotler. II. Autorské řešení 6 III. Klíč 15 IV. Záznamový list 17

CVIČNÝ TEST 15. OBSAH I. Cvičný test 2. Mgr. Tomáš Kotler. II. Autorské řešení 6 III. Klíč 15 IV. Záznamový list 17 CVIČNÝ TEST 15 Mgr. Tomáš Kotler OBSAH I. Cvičný test 2 II. Autorské řešení 6 III. Klíč 15 IV. Záznamový list 17 I. CVIČNÝ TEST VÝCHOZÍ TEXT K ÚLOZE 1 Je dána čtvercová mřížka, v níž každý čtverec má délku

Více

7. Rozdělení pravděpodobnosti ve statistice

7. Rozdělení pravděpodobnosti ve statistice 7. Rozdělení pravděpodobnosti ve statistice Statistika nuda je, má však cenné údaje, neklesejte na mysli, ona nám to vyčíslí Jednou z úloh statistiky je odhad (výpočet) hodnot statistického znaku x i,

Více

Řešení: PŘENESVĚŽ (N, A, B, C) = přenes N disků z A na B pomocí C

Řešení: PŘENESVĚŽ (N, A, B, C) = přenes N disků z A na B pomocí C Hanojské věže - 3 kolíky A, B, C - na A je N disků různé velikosti, seřazené od největšího (dole) k nejmenšímu (nahoře) - kolíky B a C jsou prázdné - úkol: přenést všechny disky z A na B, mohou se odkládat

Více

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

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 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 05 Zpráva o výsledcích přijímacího řízení do magisterského navazujícího studia

Více

0.1 Úvod do lineární algebry

0.1 Úvod do lineární algebry Matematika KMI/PMATE 1 01 Úvod do lineární algebry 011 Vektory Definice 011 Vektorem aritmetického prostorur n budeme rozumět uspořádanou n-tici reálných čísel x 1, x 2,, x n Definice 012 Definice sčítání

Více

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

Teorie informace a kódování (KMI/TIK) Reed-Mullerovy kódy Teorie informace a kódování (KMI/TIK) Reed-Mullerovy kódy Lukáš Havrlant Univerzita Palackého 10. ledna 2014 Primární zdroj Jiří Adámek: Foundations of Coding. Strany 137 160. Na webu ke stažení, heslo:

Více

State Space Search Step Run Editace úloh Task1 Task2 Init Clear Node Goal Add Shift Remove Add Node Goal Node Shift Remove, Add Node

State Space Search Step Run Editace úloh Task1 Task2 Init Clear Node Goal Add Shift Remove Add Node Goal Node Shift Remove, Add Node State Space Search Po spuštění appletu se na pracovní ploše zobrazí stavový prostor první předpřipravené úlohy: - Zeleným kroužkem je označen počáteční stav úlohy, který nemůže být změněn. - Červeným kroužkem

Více