qwertyuiopasdfghjklzxcvbnmqwerty uiopasdfghjklzxcvbnmqwertyuiopasd fghjklzxcvbnmqwertyuiopasdfghjklzx cvbnmqwertyuiopasdfghjklzxcvbnmq

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

Download "qwertyuiopasdfghjklzxcvbnmqwerty uiopasdfghjklzxcvbnmqwertyuiopasd fghjklzxcvbnmqwertyuiopasdfghjklzx cvbnmqwertyuiopasdfghjklzxcvbnmq"

Transkript

1 qwertyuiopasdfghjklzxcvbnmqwerty uiopasdfghjklzxcvbnmqwertyuiopasd fghjklzxcvbnmqwertyuiopasdfghjklzx cvbnmqwertyuiopasdfghjklzxcvbnmq APLIKACE GRAFY Dokumentace wertyuiopasdfghjklzxcvbnmqwertyui Jan Škvařil opasdfghjklzxcvbnmqwertyuiopasdfg hjklzxcvbnmqwertyuiopasdfghjklzxc vbnmqwertyuiopasdfghjklzxcvbnmq wertyuiopasdfghjklzxcvbnmqwertyui opasdfghjklzxcvbnmqwertyuiopasdfg hjklzxcvbnmqwertyuiopasdfghjklzxc vbnmqwertyuiopasdfghjklzxcvbnmq wertyuiopasdfghjklzxcvbnmqwertyui

2 OBSAH DOKUMENTU Zadání... 3 Program... 3 Reprezentace grafu... 3 Fronta a halda... 4 Zvolený algoritmus... 5 Počet nejkratších cest mezi dvěma vrcholy... 5 Hledání kružnice v grafu... 6 Hledání minimální kostry... 7 Topologické třídění... 8 Barvení rovinného grafu pěti barvami... 9 Reprezentace vstupních a výstupních dat aneb nápověda Formát grafů uložených v souboru Sada testovacích příkladů [2]

3 ZADÁNÍ Zadáním bylo vytvořit aplikaci, která bude umět zacházet s grafy a bude implementovat některé ze základních grafových algoritmů: hledání počtu nejkratších cest mezi dvěma vrcholy, hledání kružnice v grafu, hledání minimální kostry grafu a topologické třídění grafu. Dále má tato aplikace umět ukládat graf ve vhodném formátu do souboru a zpětně jej ze souboru načíst. Aplikace se nakonec poněkud rozrostla: umí pracovat jak s orientovanými, tak s neorientovanými grafy, načtený graf je možno editovat lze přidávat či odebírat vrcholy či hrany, každému vrcholu a každé hraně je možno přiřadit určitou váhu a tu posléze upravit. K implementovaným grafovým algoritmům přibylo ještě obarvení rovinného grafu pěti barvami. PROGRAM Jedná se o klasickou WinForms aplikaci vytvořenou v prostředí.net v programovacím jazyce C#. Funkce Main() ve třídě Program tedy pouze vytvoří nový hlavní formulář, který obsahuje komponenty sloužící ke komunikaci s uživatelem (menu, tlačítka atp.) a tyto komponenty umí obsloužit (a to i tak, že úkol deleguje nějakému jinému objektu). Exsitují ještě další, jednodušší formuláře, které slouží k vypsání nápovědy k aplikaci, případně k zadání vstupních hodnot od uživatele. Tyto formuláře jsou statické a všechny jsou potomky třídy NonResizableForm. Na této třídě je zajímavé pouze to, jakým způsobem je zaručeno, že od každého potomka této třídy bude najednou vytvořena maximálně jedna instance: abstraktní třída NonResizableForm si drží statickou proměnnou opened, do které se při otevření nového okna přičte hodnota identifikátoru daného typu formuláře. Tyto identifikátory jsou mocninou čísla 2 z bitové reprezentace proměnné opened můžeme tedy zrekonstruovat, která okna jsou otevřena (pomocí operátoru logického and [&]). REPREZENTACE GRAFU Grafy jsou v programu reprezentovány následujícím způsobem: hlavní okno aplikace obsahuje jednu instanci třídy Graph, která obsahuje seznam vrcholů grafu. Každý vrchol je [3]

4 instancí třídy Vertex a drží si informaci o tom, jaké je jeho číslo, na jaké pozici je aktuálně na obrazovce vykreslena a jaká je jeho barva a váha. Především si ale udržuje seznam hran, které z něj vycházejí. Neorientované grafy jsou tedy reprezentovány stejným způsobem jako orientované. Jediný rozdíl je v tom, že neorientovaná hrana je reprezentována dvěma hranami orientovanými. Každá hrana v grafu je instancí třídy Edge a drží si informaci o tom, do kterého vrcholu vede. To, z kterého vrcholu vede, není podstatné, tuto informaci známe, protože hranu musí obsahovat nějaký vrchol, a z tohoto vrcholu tedy hrana vychází. Hrany si také udržují informaci o tom, jaká je jejich aktuální barva a jakou mají váhu. Všechny vlastnosti této třídy jsou soukromé a třída k nim poskytuje rozhraní. Stejným způsobem je navržena třída Vertex, která má ale navíc několik veřejných proměnných, kam si mohou příslušné algoritmy ukládat hodnoty, které potřebují k výpočtu. Návrh je tedy takový, že existuje nějaký graf, který je obsažen v okně aplikace a zde je vykreslen. Mimo tento graf jsou algoritmy, které s ním něco udělají (např. jej obarví), a graf jim k tomu poskytuje podporu v podobě rozhraní. Třída Vertex má navrženy metody pro přidávání a odebírání hran; tím je zajištěno, že žádná hrana nebude v grafu obsažena vícektát a že nám v grafu nevzniknou smyčky. Podobným způsobem je realizována třída Graph, která umožňuje pohodlné přidávání a odebírání vrcholů z grafu, popř. i hran. Seznamy vrcholů i hran jsou udržovány setříděné (třída SortedList). Tím je zajištěno rychlé vyhledávání vrhcolů či hran podle jejich identifikačních čísel. FRONTA A HALDA Některé grafové algoritmy potřebují ke své práci frontu či haldu. Fronta je navržena jako generická třída (v C++ bychom řekli šablona), čímž je zajištěno, že si můžeme určit, jakého typu budou objekty, které v ní budeme uchovávat. Fronta má klasické operace Push() a Pop() pro přidání prvku do fronty a pro jeho odebrání. Halda na rozdíl od fronty není generická a je v ní možno uchovávat pouze vrcholy. Ty jsou v haldě seřazeny podle svého výstupního stupně, čehož je využito v algoritmu barvení [4]

5 rovinného grafu pěti barvami. Halda má také klasické operace: Insert() a ExtractMin() pro přidání prvku do haldy a pro odebrání vrcholu s minimálním výstupním stupněm. ZVOLENÝ ALGORITMUS Grafových algoritmů je v aplikaci implementováno celkem pět a všechny si zde postupně rozebereme, neboť se jedná o algoritmicky nejdůležitější část programu. Kromě těchto algoritmů se zmíním pouze o tom, jakým způsobem funguje klikání na vrcholy ve vykresleném grafu (tedy přidávání a odebírání hran či přidávání vrcholů). K tomuto účelu jsou využity metody OnMouseDown a OnMouseUp, kdy podle souřadnic, kam bylo kliknuto, zjistíme, jestli se tam nachází nějaký vykreslený vrchol. Zjištění probíhá v lineárním čase vzhledem k počtu vrcholů (kterých není nikdy vykresleno více než 200) projdeme všechny vrcholy a zjistíme, jestli je vzdálenost bodu, kam jsme klikli myší od středu daného vrcholu, menší než poloměr tohoto vrchou, který činí 6px. Vzdálenost mezi dvěma body počítáme jako klasickou vzdálenost v eukleidovském dvourozměrném prostoru. V popisu všech algoritmů ještě předem označme písmenem N počet vrcholů grafu a písmenem M počet hran grafu. POČET NEJKRATŠÍCH CEST MEZI DVĚMA VRCHOLY Ve fázi inicializace si algoritmus v lineárním čase nastaví proměnné u vrcholů na výchozí hodnotu, vytvoří si novou frontu a umístí do ní vrchol, ze kterého hledáme počet nejkratších cest. Poté následuje fáze, ve které procházíme graf, a to tak dlouho, dokud se frontě nachází nějaký vrchol. Ve smyčce vždy vyzvedneme z fronty vrchol, který v ní čeká jako první, a označíme jej jako dokončený, čímž je zaručeno, že se do fronty již znovu nedostane a že algoritmus vždy skončí, neboť má konečný počet vrcholů (shora omezený konstantou 20000). U každého vrcholu, který jsme právě vyzvedli z fronty, projdeme všechny jeho hrany a podíváme se na vrcholy, kam tyto hrany vedou. Pokud hrana vede do vrcholu, kam ještě [5]

6 nevede žádná nejkratší cesta, nebo pokud jsme našli novou nejkratší cestu, přenastavíme u vrcholu, kam hrana vede, počet nejkratších cest takto: nechť aktuální hrana vede z vrcholu u do vrcholu v, pak nastavíme vrcholu v počet nejkratších cest jako v.pathcounter = v.pathcounter + u.pathcounter. Technicky se tedy jedná o prohledávání do šířky. Počet nejkratších cest nakonec nalzneme u koncového vrcholu v jeho proměnné pathcounter. Pokud žádná takováto cesta neexistuje, je proměnná správně nastavena na 0. Díky tomu, že si u každého vrcholu udržujeme seznam vrcholů, z kterých jsme do něj přišli nejkratší cestou, můžeme nakonec zrekostruovat jednu z nejkratších cest a vyznačit ji v grafu uživateli. Poznámka: Z důvodu hrozby přetečení datového typu Int32 není počet nejkratších cest vypisován přesně; jedná se o zbytek po dělení velkým číslem. Časová složitost algoritmu je O(N + M). HLEDÁNÍ KRUŽNICE V GRAFU V tomto algoritmu využijeme prohledávání do hloubky budeme prohledávat daný graf a u každého vrcholu si budeme držet informaci, kdy jsme do něj vstoupili a kdy jsme z něj vystoupili. K tomu využijeme statickou proměnnou timer, kterou budeme postupně zvyšovat o 1 a časy si budeme do vrcholů zaznamenávat. Prohledávání do hloubky zde není realizováno klasickou rekurzivní metodou, ale je nahrazeno cyklem se zásobníkem. Důvod je ten, že u velkých grafů se může stát, že se vyčerpá kapacita systémového zásobníku. Po vynoření z této metody tedy máme u každého vrcholu zaznamenán určitý časový interval. Tím, jak jsme procházeli graf, jsme vlastně vytvářeli určitý strom, který ovšem může obsahovat tzv. příčné, dopředné či zpětné hrany. A právě díky této znalosti můžeme poznat, jestli graf obsahuje kružnici. Obsahuje ji právě tehdy, když tento graf DFS průchodu obsahuje zpětnou hranu a tu poznáme díky zaznamenaným časům vstupu a výstupu u každého vrcholu. Konkrétně poznáme zpětnou hranu tak, že čas příchodu do vrcholu, odkud hrana vede, je větší než čas příchodu do vrcholu, kam hrana vede, a zároveň je čas odchodu z vrcholu, [6]

7 odkud hrana vede, menší než čas odchodu z vrcholu, kam hrana vede. Takto si poznamenáme všechny zpětné hrany. Poté tyto zpětné hrany projdeme ještě totiž nemáme vyhráno, protože musíme rozlišit případ, kdy se jedná o orientovaný graf (poté nás zajímá i kružnice na dvou vrcholech), od případu, kdy se jedná o neorientovaný graf (poté požadujeme, aby měla kružnice alespoň tři vrcholy). U každé zpětné hrany tedy najdeme nejdelší cestu mezi těmito dvěma vrcholy a podíváme se, zdali nalezená kružnice (se zpětnou hranou tato cesta určitě tvoří kružnici) vyhovuje našim požadavkům. Pokud ano, pak tuto kružnici algoritmus v grafu označí. Algoritmus by měl pracovat v čase O(N + M), avšak konstanty jsou zde trochu větší, protože musíme celý graf projít vícekrát. HLEDÁNÍ MINIMÁLNÍ KOSTRY K hledání minimální kostry je implementován Kruskalův algoritmus, kde požadujeme, aby se jednalo o neorientovaný souvislý graf. Tyto dvě podmínky tedy algoritmus na začátku otestuje. V tomto algoritmu se hodí udržovat si hrany jako dvojice vrcholů, využijeme tedy třídu VertexDouble. Na začátku si vyrobíme seznam hran setříděných dle jejich váhy. Kruskalův algoritmus ale předpokládá, že každé dvě hrany mají rozdílnou váhu. Protože máme váhy hran celočíselné, můžeme z nich udělat váhy reálné, a to tak, že pokud najdeme nějaké dvě hrany se shodnou váhou, pak k jedné z nich přičteme malou reálnou konstantu, čímž můžeme hrany jednoznačně uspořádat. Na začátku si vyrobíme pomocný graf, který bude obsahovat pouze vrcholy našeho prohledávaného grafu; technicky se tedy jedná o les. Samotný algoritmus poté dělá toto: projdeme seznam hran setříděných dle váhy a u každé se podíváme na to, zda by jejím přidáním do grafu vznikla kružnice. Pokud by kružnice nevznikla, přidáme ji. Kontrolu, jestli by vznikla kružnice, nám zajišťuje metoda TreeFind, která zjistí, zda jsou v našem pomocném grafu vrcholy, mezi kterými vede tato hrana, ve stejné komponentě souvislosti. Pokud ano, pak by tato hrana vytvořila kružnici. Pokud ne, pak tuto hranu [7]

8 přidáme do kostry a sloučíme dvě komponenty souvislosti v pomocném grafu do jedné. Nakonec minimální kostru v grafu vyznačíme. Jak vypadají tyto komponenty souvislotsti v našem pomocném grafu? Každou komponentu si pamatujeme jako zakořeněný strom, v němž si každý vrchol pamatuje svého otce. Metoda TreeFind tedy najde kořeny komponent, ve kterých se nacházejí dané dva vrcholy, a tyto dva kořeny porovná. Pokud jsou shodné, pak se vrcholy nacházejí v téže komponentě. Každý kořen si ještě pamatuje hloubku svého stromu. Pokud tedy spojujeme dva stromy do jednoho, podíváme se na jejich hloubky a zařadíme mělčí strom pod hlubší. Pokud jsou jejich výšky shodné, je to jedno, ale musíme novému kořeni zvýšit výšku o 1. Vzhledem k maximálně logaritmické výšce pěstovaných stromů funguje algoritmus celkově v čase O(M.logN). TOPOLOGICKÉ TŘÍDĚNÍ Topologické třídění lze provést pouze na orientovaných grafech bez kružnic algoritmus tedy na začátku zkontroluje, jestli zadaný graf splňuje tyto dvě podmínky. Využijeme faktu, že v takovém grafu musí existovat alespoň jeden vrchol se vstupním stupněm 0 (jedná se totiž o les). Na začátku tedy spočítáme u každého vrcholu jeho vstupní stupeň a najdeme vrcholy se vstupním stupněm 0 a ty přidáme do fronty. Následně procházíme celý graf, dokud není fronta prázdná, a to tak, že vždy vyzvedneme vrchol fronty, označíme jej jako dokončený, projdeme všechny jeho hrany a u vrcholů, kam vedou, snížíme vstupní stupeň o 1. Jedná se [8]

9 tedy o odtržení vrcholu od grafu; tento vrchol přidáme na konec našeho topologického třídění grafu. Následně do fronty přidáme všechny vrcholy, které mají nově vstupní stupeň roven 0 a zárověň jsme je ještě neměli ve frontě. Tím je zaručeno, že se na každý vrchol podíváme právě jednou a algoritmus skončí v čase O(N + M). Nakonec dané topologické třídění vypíšeme. BARVENÍ GRAFU PĚTI BARVAMI Jedná se o nejsložitější implementovaný algoritmus. Na vstupu předpokládá neorientovaný graf, který má maximálně 3N 6 hran, tedy třídu grafů větší než jsou rovinné grafy, neboť rovinné grafy musí splňovat tuto podmínku, avšak mohou ji splňovat i některé grafy nerovinné. Předpokládejme nyní, že algoritmus dostane na vstupu skutečně rovinný graf, který umí obarvit pěti barvami. Pokud na vstupu dostane nerovinný graf a nepodaří se jej obarvit, pak o této skutečnosti informuje. Algoritmus funguje přesně podle důkazu věty o pěti barvách až na jednu odchylku, o které se zmíním později. Nejdříve vytvoříme haldu vrcholů, kde bude v jejím kořeni vždy vrchol s minimálním výstupním stupněm. Z rovinnosti grafu plyne, že tento vrchol bude mít stupeň menší nebo roven číslu 5 (aneb v každém rovinném grafu extistuje vrchol stupně nejvýše 5). Důkaz věty o pěti barvách se provádí indukcí toho je zde využito a algoritmus je rekurzivní. Nejedná se o přímou rekurzi, nýbrž o cyklus se zásobníkem, což je v důsledku totéž, uvažujme však, jako by byl algoritmus implementován rekurzivně. Při každém zavolání rekurzivní metody se zkontroluje, jestli je v haldě nanejvýš 5 vrcholů, které případně můžeme jednoduše obarvit pěti barvami každému vrcholu přiřadíme jednu z pěti barev, kterými graf barvíme. Jestliže je v haldě, která představuje aktuálně barvený graf, více než 5 vrcholů, pak z ní odebereme vrchol, který je aktuálně v kořeni (ten s nejnižším stupněm), a odtrhneme jej od grafu, což technicky znamená, že všem jeho sousedům v haldě snížíme stupeň o jedna a vzniklou strukturu případně přeorganizujeme tak, aby se opět jednalo o haldu. U vrcholu, který jsme odebrali z haldy, si poznamenáme, že jsme jej již zpracovali. [9]

10 Rovinný graf, od kterého jsme odtrhli vrchol, je opět rovinný, a tím pádem v něm opět musí existovat vrchol stupně nanejvýš pět, který najdeme v kořeni haldy. Tím pádem se můžeme rekurzivně zavolat a celou proceduru zopakovat, až se dostaneme k triviálnímu případu, kdy nám zbude graf o pěti vrcholech, který umíme vyřešit. Z toho, že postupně odtrháváme vrcholy z grafu (technicky vzato snižujeme jejich stupeň v haldě), plyne, že náš aktuálně odebraný vrchol z haldy má stupeň nanejvýš 5. Označme tento vrchol písmenem v. Nyní víme, že po rekurzivním zavolání má náš graf G-v z indukčního předpokladu nějaké korektní obarvení pěti barvami. Počet sousedů každého vrcholu po odebrání z haldy si u něj udržujeme v proměnné OutputDeg. Důležité je, že tato proměnná se po zavolání rekurzivní metody již nezmění, neboť jsme si u vrcholu poznamenali, že jsme jej již navštívili, a u takových vrcholů stupeň již nesnižujeme. Předtím, než se ponoříme do rekurze, si ještě u vrcholu vytvoříme seznam jeho sousedů (kterých musí být maximálně 5). Po vynoření z rekurze u něj tedy máme poznamenán jeho stupeň a seznam jeho sousedů. Pokud má vrchol v stupeň ostře menší než 5 (tj. má maximálně 4 sousedy), pak jej obarvíme zbývající barvou. Pokud má přesně pět sousedů a nepodařilo se nám najít barvu, kterou bychom mohli náš vrchol v obarvit (tedy jeho sousední vrcholy mají navzájem různé barvy), pak budeme muset graf přebarvit. V důkazu věty o pěti barvách využíváme toho, že máme konkrétní rovinné nakreslení grafu G, a vezmeme protilehlé dvojice sousedů vrcholu v. Toho zde využít nemůžeme, a budeme tedy muset postupně projít všech 10 dvojic sousedů vrcholu v. Pro každou z nich otestujeme, jestli v grafu G-v mezi nimi vede cesta tvořená pouze vrcholy, které používají barvy těchto dvou vrcholů. Z těchto deseti dvojic musí existovat alespoň jedna, která není takovouto cestou spojena, což plyne z rovinnosti grafu. Při hledání této dvojice vrcholů (označme si tyto dva vrcholy jako u a t) si vždy vytvoříme množinu vrcholů D, které jsou dosažitelné z vrcholu u právě těmito dvoubarevnými cestami. Speciálně pokud se v této množině nachází i vrchol t, pak metoda pro hledání této dvojice vrací true, neboť mezi vrcholy u a t tato dvoubarevná cesta existuje. Jakmile tedy najdeme [10]

11 dvojici vrcholů u a t, mezi nimiž tato cesta neexistuje, pak v množině D přebarvíme vrcholy obarvené barvou příslušnou vrcholu u na barvu příslušnou vrcholu t a opačně. Jinými slovy v této množině vrcholů prohodíme vrcholům jejich barvy. Toto je určitě opět korektní obarvení grafu G-v, avšak vrcholy u a t mají nyní stejnou barvu, a to tu, kterou měl původně vrchol t. Můžeme tedy náš vrchol v obarvit barvou, kterou měl původně vrchol u. Protože je stejný postup aplikován na každý vrchol grafu G, znamená to, že tento algoritmus vydá korektní obarvení rovinného grafu pěti barvami. Aplikace umí toto obarvení přímo vykreslit a v případě velkých grafů nabídne uživateli možnost toto obarvení uložit do nějakého souboru. Časová složitost je O(N 2 ). REPREZENTACE VSTUPNÍCH A VÝSTUPNÍCH DAT ANEB NÁPOVĚDA Po spuštění aplikace Grafy se nám zobrazí úvodní uvítací obazovka. Zde můžeme buď vytvořit zcela nový graf, načíst graf ze specifikovaného souboru či zobrazit uživatelskou nápovědu aplikace, kde se můžeme seznámit s její základní funkčností. Nový graf můžeme vytvořit buď orientovaný, nebo neorientovaný. Klávesovou zkratkou CTRL+N nebo kliknutím na tlačítko Nový graf se vždy vytvoří neorientovaný graf. Orientovaný graf lze tedy vytvořit pouze výběrem této možnosti z horního menu. [11]

12 Kliknutím na tlačítko Otevřít graf (nebo stisknutím klávesové zkratky CTRL+O nebo výběrem položky Soubor > Otevřít z vrchního menu) můžeme načíst graf, který máme uložený v nějakém souboru. Tento soubor musí mít určitý formát, který je popsán níže, avšak jedná-li se o soubor, který byl vytvořen aplikací Grafy (uložením nějakého grafu např. klávesovou zkratkou CTRL+S), pak tento formát určitě splňuje. V menu Upravit se můžeme přepnout do jednoho z šesti možných módů aplikace (kromě módu standardního). Můžeme do grafu přidávat vrcholy či hrany, odebírat vrcholy či hrany nebo upravit váhu vrcholů či hran. Po vytvoření nového grafu se automaticky zapne mód přidávání vrcholů. Nový vrchol přidáme tak, že (pokud jsme v módu přidávání vrcholů) klikneme myší někam, kde zatím není vykreslen žádný vrchol, a tam se vrchol objeví. Novou hranu přidáme tak, že klikneme postupně na dva vrcholy, které má nová hrana spojovat. Tyto vrcholy se budou postupně obarvovat zeleně. Odebrání vrcholu či hrany z grafu se provádí obdobným postupem musíme být samozřejmě v příslušném módu aplikace. Při odebírání hran se budou vrcholy, které tato hrana tvoří, obarvovat červeně. [12]

13 Úprava vah vrcholů či hran je založena na stejném principu tedy vybereme vrchol či hranu a do nově otevřeného okna vepíšeme novou váhu. Váha musí být zadána jako přirozené číslo (nulu zde za přirozené číslo nepovažujeme). V menu zobrazit si můžeme vybrat, jestli chceme zobrazit váhy vrcholů, váhy hran či čísla vrcholů. Příslušné ohodnocení či číslo vrcholu se u něj následně objeví, ohodnocení hrany se objeví v jejím středu. Pokud máme zapnuto zobrazování vah vrcholů i jejich čísel, vypíše se u vrcholu nejdříve jeho číslo a za dvojtečkou jeho váha. [13]

14 Na načtený graf je možno aplikovat jeden z pěti algoritmů přístupných v menu Graf. Pokud je graf vykreslitelný (tedy má nejvýše 200 vrcholů), pak algoritmus pro počet nejkratších cest v grafu jednu z těchto cest vyznačí. Algoritmus pro hledání kružnice ji v grafu rovněž vyznačí a algoritmus pro hledání minimální kostry ji také vykreslí. Všechna tato vyznačení jsou provedena modrou barvou, vyznačené hrany jsou vyobrazeny tučně a modře. Pokud je graf příliš velký, pak po dokončení algoritmu hledání kružnice nabídne aplikce možnost uložit výsledky jeho práce do souboru. V tomto souboru je na každém řádku napsáno číslo vrcholu, který je v kružnici obsažen, a mezerou je odděleno číslo vrcholu, do kterého z něj vede hrana. Pokud je tento soubor otevřen v aplikaci Grafy, pak je skutečně vykreslena kružnice. Obdobně je pro příliš velké grafy nabídnuto uživateli uložit výsledky práce algoritmu hledání minimální kostry. Formát tohoto souboru je takový, že na každém řádku je uložena jedna hrana grafu, která je obsažena v minimální kostře. Tato hrana je zapsána jako dvojice čísel vrcholů ve složených závorkách a za znakem x pak následuje váha této hrany. Výstup topologického třídění grafu je vždy seznam čísel vrcholů oddělených mezerami. Tyto vrcholy čteny zleva doprava tvoří topologické uspořádání grafu, tedy vrchol více vlevo je v daném topologickém uspořádání menší než vrchol více vpravo. [14]

15 Pokud je v topologickém uspořádání příliš mnoho vrcholů (více než 200), pak je uživateli nabídkuto uložit toto uspořádání do souboru. Formát tohoto souboru je shodný s formátem topologického třídění vypsaného přímo na obrazovku v případě menších grafů. Obarvení rovinného grafu probíhá u vykreslitelných grafů (méně než 200 vrcholů) přímo, u větších grafů je nabídnuto uložit toto obarvení do souboru. V tomto souboru se na každém řádku nachází číslo jednoho vrcholu a za znakem x následuje číslo barvy, kterou je obarven. [15]

16 Tento soubor je možno následně v apliakci Grafy otevřít a čísla barev (od 1 do 5) budou interpretována jako váhy vrcholů. FORMÁT GRAFŮ ULOŽENÝCH V SOUBORU Soubor, ve kterém je uložen nějaký graf, musí splňovat následující specifikaci: na každém neprázdném řádku, který není komentářem, je uloženo číslo vrcholu a za mezerou následuje mezerami oddělený seznam čísel vrcholů, do kterých z tohoto vrcholu vedou hrany. Za každým číslem vrcholu uloženým v souboru může následovat znak x, oddělující jeho váhu; stejným způsobem lze uložit váhy jednotlivých hran, opět pomocí znaku x, oddělujícího váhu dané hrany. V souboru je možno používat komentáře komentář je řádek, který začíná znakem # ; tyto řádky jsou při načítání grafu ignorovány. Avšak pozor: po zpětném uložení grafu jsou všechny komentáře, které v souboru původně byly, přesunuty na začátek tohoto souboru. Po komentářích ještě může následovat řádek, který specifikuje, jestli se jedná o orientovaný nebo neorientovaný graf. Pokud je na řádku napsáno slovo normal, jedná se o neorientovaný graf, pokud je na řádku napsáno orientated, jedná se o orientovaný graf. Výchozí hodnota je normal. Pozor, tato specifikace musí předcházet všem v souboru specifikovaným vrcholům a musí být napsána malými písmeny, jinak na ni nebude brán zřetel. Graf bude považován za neorientovaný a aplikace ohlásí chybu, že formát souboru je chybný (avšak graf načte). Za seznamem hran na řádku příslušícím určitému vrcholu mohou ještě následovat středníkem oddělená dvě čísla, která specifikují pozici vrcholu v aplikaci (x-ová a y-ová souřadnice). Takto je možno do souboru společně s grafem uložit i jeho konkrétní nakreslení. SADA TESTOVACÍCH PŘÍKLADŮ Sada testovacích příkladů je v adresáři Testovaci-priklady. U každého zde uloženého grafu je v komentáři na začátku souboru popsáno, o jaký graf se jedná. Tyto testovací příklady mohou také sloužit jako ukázka formátu grafů uložených v souboru. [16]

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

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

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

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

Ú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

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

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

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

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

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

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

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

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

DUM 06 téma: Tvorba makra pomocí VBA

DUM 06 téma: Tvorba makra pomocí VBA DUM 06 téma: Tvorba makra pomocí VBA ze sady: 03 tematický okruh sady: Tvorba skript a maker ze šablony: 10 Algoritmizace a programování určeno pro: 4. ročník vzdělávací obor: 18-20-M/01 Informační technologie

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

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

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

PQ-stromy a rozpoznávání intervalových grafů v lineárním čase -stromy a rozpoznávání intervalových grafů v lineárním čase ermutace s předepsanými intervaly Označme [n] množinu {1, 2,..., n}. Mějme permutaci π = π 1, π 2,..., π n množiny [n]. Řekneme, že množina S

Více

Přehledy pro Tabulky Hlavním smyslem této nové agendy je jednoduché řazení, filtrování a seskupování dle libovolných sloupců.

Přehledy pro Tabulky Hlavním smyslem této nové agendy je jednoduché řazení, filtrování a seskupování dle libovolných sloupců. Přehledy pro Tabulky V programu CONTACT Professional 5 naleznete u firem, osob a obchodních případů záložku Tabulka. Tuto záložku lze rozmnožit, přejmenovat a sloupce je možné definovat dle vlastních požadavků

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

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

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

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

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

Ř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

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

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

4 Stromy a les. Definice a základní vlastnosti stromů. Kostry grafů a jejich počet. 4 Stromy a les Jedním ze základních, a patrně nejjednodušším, typem grafů jsou takzvané stromy. Jedná se o souvislé grafy bez kružnic. Přes svou (zdánlivou) jednoduchost mají stromy bohatou strukturu a

Více

Uživatelský manuál. Aplikace GraphViewer. Vytvořil: Viktor Dlouhý

Uživatelský manuál. Aplikace GraphViewer. Vytvořil: Viktor Dlouhý Uživatelský manuál Aplikace GraphViewer Vytvořil: Viktor Dlouhý Obsah 1. Obecně... 3 2. Co aplikace umí... 3 3. Struktura aplikace... 4 4. Mobilní verze aplikace... 5 5. Vytvoření projektu... 6 6. Části

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

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

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

02. HODINA. 2.1 Typy souborů a objektů. 2.2 Ovládací prvky Label a TextBox

02. HODINA. 2.1 Typy souborů a objektů. 2.2 Ovládací prvky Label a TextBox 02. HODINA Obsah: 1. Typy souborů a objektů 2. Ovládací prvky Label a TextBox 3. Základní příkazy a vlastnosti ovládacích prvků 4. Práce s objekty (ovládací prvky a jejich vlastnosti) 2.1 Typy souborů

Více

Dijkstrův algoritmus

Dijkstrův algoritmus Dijkstrův algoritmus Hledání nejkratší cesty v nezáporně hranově ohodnoceném grafu Necht je dán orientovaný graf G = (V, H) a funkce, která každé hraně h = (u, v) H přiřadí nezáporné reálné číslo označované

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

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

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

Binární vyhledávací stromy II

Binární vyhledávací stromy II Binární vyhledávací stromy II doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava Prezentace ke dni 19. března 2019 Jiří Dvorský (VŠB TUO) Binární vyhledávací

Více

Stěžejní funkce MS Excel 2007/2010, jejich ovládání a možnosti využití

Stěžejní funkce MS Excel 2007/2010, jejich ovládání a možnosti využití Stěžejní funkce MS Excel 2007/2010, jejich ovládání a možnosti využití Proč Excel? Práce s Excelem obnáší množství operací s tabulkami a jejich obsahem. Jejich jednotlivé buňky jsou uspořádány do sloupců

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

Barevnost grafů MFF UK

Barevnost grafů MFF UK Barevnost grafů Z. Dvořák MFF UK Plán vztah mezi barevností a maximálním stupněm (Brooksova věta) hranová barevnost (Vizingova věta) příště: vztah mezi barevností a klikovostí, perfektní grafy Barevnost

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

Semestrální práce 2 znakový strom

Semestrální práce 2 znakový strom Semestrální práce 2 znakový strom Ondřej Petržilka Datový model BlockFileRecord Bázová abstraktní třída pro záznam ukládaný do blokového souboru RhymeRecord Konkrétní třída záznamu ukládaného do blokového

Více

4 Pojem grafu, ve zkratce

4 Pojem grafu, ve zkratce Petr Hliněný, FI MU Brno, 2014 1 / 24 FI: IB000: Pojem grafu 4 Pojem grafu, ve zkratce Třebaže grafy jsou jen jednou z mnoha struktur v matematice a vlastně pouze speciálním případem binárních relací,

Více

Záznamník trasy. Michal Sluštík slustmic@fel.cvut.cz Y39PDA ČVUT, FEL, 2010. Popis aplikace. Specifikace požadavků

Záznamník trasy. Michal Sluštík slustmic@fel.cvut.cz Y39PDA ČVUT, FEL, 2010. Popis aplikace. Specifikace požadavků Záznamník trasy Michal Sluštík slustmic@fel.cvut.cz Y39PDA ČVUT, FEL, 2010 Popis aplikace Program bude sloužit pro záznam trasy pro třetí osobu. Uživatel bude trasu zaznamenávat manuálně na mapě nebo pomocí

Více

Intervalové stromy. Představme si, že máme posloupnost celých čísel p 0, p 1,... p N 1, se kterou budeme. 1. Změna jednoho čísla v posloupnosti.

Intervalové stromy. Představme si, že máme posloupnost celých čísel p 0, p 1,... p N 1, se kterou budeme. 1. Změna jednoho čísla v posloupnosti. Intervalové stromy Představme si, že máme posloupnost celých čísel p 0, p 1,... p N 1, se kterou budeme průběžně provádět tyto dvě operace: 1. Změna jednoho čísla v posloupnosti. 2. Zjištění součtu čísel

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

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

Ukážeme si lineární algoritmus, který pro pevné k rozhodne, zda vstupní. stromový rozklad. Poznamenejme, že je-li k součástí vstupu, pak rozhodnout Ukážeme si lineární algoritmus, který pro pevné k rozhodne, zda vstupní graf má stromovou šířku nejvýše k, a je-li tomu tak, také vrátí příslušný stromový rozklad. Poznamenejme, že je-li k součástí vstupu,

Více

Reliance 3 design OBSAH

Reliance 3 design OBSAH Reliance 3 design Obsah OBSAH 1. První kroky... 3 1.1 Úvod... 3 1.2 Založení nového projektu... 4 1.3 Tvorba projektu... 6 1.3.1 Správce stanic definice stanic, proměnných, stavových hlášení a komunikačních

Více

Stromy, haldy, prioritní fronty

Stromy, haldy, prioritní fronty Stromy, haldy, prioritní fronty prof. Ing. Pavel Tvrdík CSc. Katedra počítačů FEL České vysoké učení technické DSA, ZS 2008/9, Přednáška 6 http://service.felk.cvut.cz/courses/x36dsa/ prof. Pavel Tvrdík

Více

Použití dalších heuristik

Použití dalších heuristik Použití dalších heuristik zkracování cesty při FIND-SET UNION podle hodností Datové struktury... p[x] - předchůdce uzlu x MAKE-SET(x) p[x] := x hod[x] := 0 hod[x] - hodnost (aprox. výšky) UNION(x,y) LINK(FIND-SET(x),

Více

Velmi stručný návod jak dostat data z Terminálu Bloomberg do R

Velmi stručný návod jak dostat data z Terminálu Bloomberg do R Velmi stručný návod jak dostat data z Terminálu Bloomberg do R Ondřej Pokora, PřF MU, Brno 11. března 2013 1 Terminál Bloomberg Klávesou Help získáte nápovědu. Dvojím stisknutím Help Help spustíte online

Více

Obecná informatika. Matematicko-fyzikální fakulta Univerzity Karlovy v Praze. Podzim 2012

Obecná informatika. Matematicko-fyzikální fakulta Univerzity Karlovy v Praze. Podzim 2012 Obecná informatika Přednášející Putovních přednášek Matematicko-fyzikální fakulta Univerzity Karlovy v Praze Podzim 2012 Přednášející Putovních přednášek (MFF UK) Obecná informatika Podzim 2012 1 / 18

Více

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

Matematika III 10. přednáška Stromy a kostry Matematika III 10. přednáška Stromy a kostry Michal Bulant Masarykova univerzita Fakulta informatiky 20. 11. 2007 Obsah přednášky 1 Izomorfismy stromů 2 Kostra grafu 3 Minimální kostra Doporučené zdroje

Více

Úvodní list. Název školy Integrovaná střední škola stavební, České Budějovice, Nerudova 59 Číslo šablony/ číslo sady Poř. číslo v sadě 19 32/10

Úvodní list. Název školy Integrovaná střední škola stavební, České Budějovice, Nerudova 59 Číslo šablony/ číslo sady Poř. číslo v sadě 19 32/10 Úvodní list Název školy Integrovaná střední škola stavební, České Budějovice, Nerudova 59 Číslo šablony/ číslo sady Poř. číslo v sadě 19 32/10 Jméno autora Období vytvoření materiálu Název souboru Zařazení

Více

ALGORITMY A DATOVÉ STRUKTURY

ALGORITMY A DATOVÉ STRUKTURY Název tématického celku: Cíl: ALGORITMY A DATOVÉ STRUKTURY Metodický list č. 1 Časová složitost algoritmů Základním cílem tohoto tematického celku je vysvětlení potřebných pojmů a definic nutných k popisu

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

Pokud nebude na příkazové řádce uveden právě jeden argument, vypište chybové hlášení a stručný

Pokud nebude na příkazové řádce uveden právě jeden argument, vypište chybové hlášení a stručný KIV/PC ZS 2015/2016 Zadání ZADÁNÍ SEMESTRÁLNÍ PRÁCE ŘEŠENÍ KOLIZÍ FREKVENCÍ SÍTĚ VYSÍLAČŮ VARIANTA 2 (REx) Naprogramujte v ANSI C přenositelnou 1 konzolovou aplikaci, která jako vstup načte z parametru

Více

Postup pro zpracování kontrolního hlášení

Postup pro zpracování kontrolního hlášení Postup pro zpracování kontrolního hlášení 1. Zadávání dokladů Doklady se zadávají běžným způsobem tak jako dosud, výběrem sazby DPH (s číslem řádku přiznání) v položce dokladu se zároveň pro položku automaticky

Více

Manuál k programu KaraokeEditor

Manuál k programu KaraokeEditor Manuál k programu KaraokeEditor Co je KaraokeEditor? Program slouží pro editaci tagů v hudebních souborech formátu mp3. Tagy jsou doprovodné informace o písni, uložené přímo v mp3. Aplikace umí pracovat

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

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

Základní datové struktury III: Stromy, haldy

Základní datové struktury III: Stromy, haldy Základní datové struktury III: Stromy, haldy prof. Ing. Pavel Tvrdík CSc. Katedra počítačových systémů Fakulta informačních technologií České vysoké učení technické v Praze c Pavel Tvrdík, 2010 Efektivní

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

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

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

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

Zadání soutěžních úloh

Zadání soutěžních úloh 16. až 18. dubna 2015 Krajské kolo 2014/2015 Úlohy můžete řešit v libovolném pořadí a samozřejmě je nemusíte vyřešit všechny. Za každou úlohu můžete dostat maximálně 10 bodů, z nichž je většinou 9 bodů

Více

Matice sousednosti NG

Matice sousednosti NG Matice sousednosti NG V = [ v ij ] celočíselná čtvercová matice řádu U v ij = ρ -1 ( [u i, u j ] )... tedy počet hran mezi u i a u j?jaké vlastnosti má matice sousednosti?? Smyčky, rovnoběžné hrany? V

Více

Lokality a uživatelé

Lokality a uživatelé Administrátorský manuál TTC TELEKOMUNIKACE, s.r.o. Třebohostická 987/5 100 00 Praha 10 tel.: 234 052 111 fax.: 234 052 999 e-mail: ttc@ttc.cz http://www.ttc-telekomunikace.cz Datum vydání: 15.října 2013

Více

Zadání soutěžních úloh

Zadání soutěžních úloh Zadání soutěžních úloh Kategorie žáci Soutěž v programování 24. ročník Krajské kolo 2009/2010 15. až 17. dubna 2010 Úlohy můžete řešit v libovolném pořadí a samozřejmě je nemusíte vyřešit všechny. Za každou

Více

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

Práce s programem IIS Ekonom

Práce s programem IIS Ekonom Práce s programem IIS Ekonom Obsah 1 Ovládání programu IIS Ekonom... 2 1.1 Ovládání přes hlavní nabídku... 2 1.2 Panel nástrojů a funkční klávesy... 2 2 Přihlašovací dialog... 4 3 Úvodní obrazovka... 4

Více

24 Uživatelské výběry

24 Uživatelské výběry 24 Uživatelské výběry Uživatelský modul Uživatelské výběry slouží k vytváření, správě a následnému používání tématicky seskupených osob a organizací včetně jejich kontaktních údajů. Modul umožňuje hromadnou

Více

V každém kroku se a + b zmenší o min(a, b), tedy vždy alespoň o 1. Jestliže jsme na začátku dostali 2

V každém kroku se a + b zmenší o min(a, b), tedy vždy alespoň o 1. Jestliže jsme na začátku dostali 2 Euklidův algoritmus Doprovodný materiál pro cvičení Programování I. NPRM044 Autor: Markéta Popelová Datum: 31.10.2010 Euklidův algoritmus verze 1.0 Zadání: Určete největšího společného dělitele dvou zadaných

Více

Lineární spojový seznam (úvod do dynamických datových struktur)

Lineární spojový seznam (úvod do dynamických datových struktur) Lineární spojový seznam (úvod do dynamických datových struktur) Jan Hnilica Počítačové modelování 11 1 Dynamické datové struktury Definice dynamické struktury jsou vytvářeny za běhu programu z dynamicky

Více

Semestrální práce z KIV/PC. Kolja Matuševský (A14B0310P)

Semestrální práce z KIV/PC. Kolja Matuševský (A14B0310P) Semestrální práce z KIV/PC Řešení kolizí frekvencí sítě vysílačů Kolja Matuševský (A14B0310P) mkolja@students.zcu.cz 10. ledna 2016 Obsah 1 Zadání 2 2 Analýza úlohy 3 2.1 Vytvoření grafu..........................

Více

Spuštění a ukončení databázové aplikace Access

Spuštění a ukončení databázové aplikace Access Spuštění a ukončení databázové aplikace Access Aplikaci Access spustíte tak, že vyhledáte její ikonu v nabídce "Start" a klepnete na ní. Najdete ho v Sekci Všechny programy/mircosoft Office. Po výběru

Více

Programování 3. hodina. RNDr. Jan Lánský, Ph.D. Katedra informatiky a matematiky Fakulta ekonomických studií Vysoká škola finanční a správní 2015

Programování 3. hodina. RNDr. Jan Lánský, Ph.D. Katedra informatiky a matematiky Fakulta ekonomických studií Vysoká škola finanční a správní 2015 Programování 3. hodina RNDr. Jan Lánský, Ph.D. Katedra informatiky a matematiky Fakulta ekonomických studií Vysoká škola finanční a správní 2015 Umíme z minulé hodiny Implementace zásobníku a fronty pomocí

Více

Zpracování chybějících dat a dat mimo rozsah

Zpracování chybějících dat a dat mimo rozsah StatSoft Zpracování chybějících dat a dat mimo rozsah V tomto článku si představíme jeden z možných postupů, jak se rychle a snadno vypořádat s detekcí chybějících dat a dat mimo stanovený rozsah. Načtení

Více

GeoGebra známá i neznámá

GeoGebra známá i neznámá GeoGebra známá i neznámá MODAM 2018 Z. Morávková, P. Schreiberová, J. Volná, P. Volný MODAM 2018 GeoGebra známá i neznámá Příklad 1: Nejmenší společný násobek Zadání: Vytvoříme aplikaci, ve které se vygenerují

Více

Stromy. Jan Hnilica Počítačové modelování 14

Stromy. Jan Hnilica Počítačové modelování 14 Stromy Jan Hnilica Počítačové modelování 14 1 Základní pojmy strom = dynamická datová struktura, složená z vrcholů (uzlů, prvků) propojených hranami hrany chápeme jako orientované, tzn. vedou z uzlu A

Více

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme: 1. lekce 1. Minimální program do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme: #include #include int main() { printf("hello world!\n"); return 0; 2.

Více

Dokument a jeho části oddíly, záhlaví, zápatí

Dokument a jeho části oddíly, záhlaví, zápatí Dokument a jeho části oddíly, záhlaví, zápatí Nejčastějším úkolem bývá ukončení stránky a pokračování textu na další stránce nebo vložení stránky před napsaný text. Podobným úkolem je jiné svislé zarovnání

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

Kreslení grafů na plochy Tomáš Novotný

Kreslení grafů na plochy Tomáš Novotný Kreslení grafů na plochy Tomáš Novotný Úvod Abstrakt. V první části příspěvku si vysvětlíme základní pojmy týkající se ploch. Dále si ukážeme a procvičíme možné způsoby jejich zobrazování do roviny, abychom

Více

ZSF web a intranet manuál

ZSF web a intranet manuál ZSF web a intranet manuál Verze pro školení 11.7.2013. Návody - Jak udělat...? WYSIWYG editor TinyMCE Takto vypadá prostředí WYSIWYG editoru TinyMCE Jak formátovat strukturu stránky? Nadpis, podnadpis,

Více

Test prvočíselnosti. Úkol: otestovat dané číslo N, zda je prvočíslem

Test prvočíselnosti. Úkol: otestovat dané číslo N, zda je prvočíslem Test prvočíselnosti Úkol: otestovat dané číslo N, zda je prvočíslem 1. zkusit všechny dělitele od 2 do N-1 časová složitost O(N) cca N testů 2. stačí zkoušet všechny dělitele od 2 do N/2 (větší dělitel

Více

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme: 1. lekce 1. Minimální program do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme: #include #include int main() { printf("hello world!\n"); return 0; 2.

Více

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

Výroková a predikátová logika - III Výroková a predikátová logika - III Petr Gregor KTIML MFF UK ZS 2017/2018 Petr Gregor (KTIML MFF UK) Výroková a predikátová logika - III ZS 2017/2018 1 / 16 2-SAT 2-SAT Výrok je v k-cnf, je-li v CNF a

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

Obsah. 1.1 Práce se záznamy... 3 1.2 Stránka Dnes... 4. 2.1 Kontakt se zákazníkem... 5

Obsah. 1.1 Práce se záznamy... 3 1.2 Stránka Dnes... 4. 2.1 Kontakt se zákazníkem... 5 CRM SYSTÉM KORMORÁN UŽIVATELSKÁ PŘÍRUČKA Obsah 1 Základní práce se systémem 3 1.1 Práce se záznamy................................. 3 1.2 Stránka Dnes.................................... 4 1.3 Kalendář......................................

Více

Maturitní téma: Programovací jazyk JAVA

Maturitní téma: Programovací jazyk JAVA Maturitní téma: Programovací jazyk JAVA Insert Sort (třídění vkládáním) 1. Jako setříděnou část označíme první prvek pole. Jako nesetříděnou část označíme zbytek pole. 2. Vezmeme první (libovolný) prvek

Více

Gymnázium Vysoké Mýto nám. Vaňorného 163, 566 01 Vysoké Mýto

Gymnázium Vysoké Mýto nám. Vaňorného 163, 566 01 Vysoké Mýto Gymnázium Vysoké Mýto nám. Vaňorného 163, 566 01 Vysoké Mýto Registrační číslo projektu Šablona Autor Název materiálu / Druh CZ.1.07/1.5.00/34.0951 III/2 INOVACE A ZKVALITNĚNÍ VÝUKY PROSTŘEDNICTVÍM ICT

Více

Implementace LL(1) překladů

Implementace LL(1) překladů Překladače, přednáška č. 6 Ústav informatiky, FPF SU Opava sarka.vavreckova@fpf.slu.cz Poslední aktualizace: 30. října 2007 Postup Programujeme syntaktickou analýzu: 1 Navrhneme vhodnou LL(1) gramatiku

Více

1. Základní pojmy, používané v tomto manuálu. 2. Stránky

1. Základní pojmy, používané v tomto manuálu. 2. Stránky Redakční systém manuál 1. Základní pojmy, používané v tomto manuálu Hlavní menu Menu v horní světlemodré liště obsahující 7 základních položek: Publikovat, Správa, Vzhled, Komentáře, Nastavení, Pluginy,

Více

Cílem kapitoly je seznámit studenta se seznamem a stromem. Jejich konstrukci, užití a základní vlastnosti.

Cílem kapitoly je seznámit studenta se seznamem a stromem. Jejich konstrukci, užití a základní vlastnosti. Seznamy a stromy Cílem kapitoly je seznámit studenta se seznamem a stromem. Jejich konstrukci, užití a základní vlastnosti. Klíčové pojmy: Seznam, spojový seznam, lineární seznam, strom, list, uzel. Úvod

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

Dynamické datové struktury I.

Dynamické datové struktury I. Dynamické datové struktury I. Seznam. Fronta. Zásobník. Tomáš Bayer bayertom@natur.cuni.cz Katedra aplikované geoinformatiky a kartografie, Přírodovědecká fakulta UK. Tomáš Bayer bayertom@natur.cuni.cz

Více

8 Přednáška z

8 Přednáška z 8 Přednáška z 3 12 2003 Problém minimální kostry: Dostaneme souvislý graf G = (V, E), w : E R + Našim úkolem je nalézt strom (V, E ) tak, aby výraz e E w(e) nabýval minimální hodnoty Řešení - Hladový (greedy)

Více

Popis ovládání. Po přihlášení do aplikace se objeví navigátor. Navigátor je stromově seřazen a slouží pro přístup ke všem oknům celé aplikace.

Popis ovládání. Po přihlášení do aplikace se objeví navigátor. Navigátor je stromově seřazen a slouží pro přístup ke všem oknům celé aplikace. Popis ovládání 1. Úvod Tento popis má za úkol seznámit uživatele se základními principy ovládání aplikace. Ovládání je možné pomocí myši, ale všechny činnosti jsou dosažitelné také pomocí klávesnice. 2.

Více

Úvod do informatiky. Miroslav Kolařík

Úvod do informatiky. Miroslav Kolařík Úvod do informatiky přednáška desátá Miroslav Kolařík Zpracováno dle R. Bělohlávek, V. Vychodil: Diskrétní matematika 2, http://phoenix.inf.upol.cz/esf/ucebni/dm2.pdf P. Martinek: Základy teoretické informatiky,

Více