U úloh s leteckými linkami jsme znázorňovali města pomocí koleček a jednotlivé linky pomocí spojnic či šipek mezi nimi. Takovým schématům se v matematice říká grafy, přičemž městům se říká vrcholy a linkám mezi nimi hrany. Hrany, jak jsme již viděli mohou či nemusí být jednosměrné. Pokud jsou, říkáme jim orientované hrany a grafu s orientovanými hranami říkáme orientovaný graf.
Situací, v nichž lze takové obrázky kreslit, je bezpočet. Kromě různých dopravních plánů lze například pomocí grafů znázorňovat sociální interakce, třeba přátelství na Facebooku. Nebo, jak bylo naznačeno v hodině o hrách, lze grafů užit k analýze her pomocí V a P pozic. Vrcholy odpovídaly stavům hry a hrany odpovídaly možným tahům (tedy přesunům z jednoho stavu do druhého).
Povězme si tedy o grafech a jejich aplikacích více.
Úloha: K danému výřezu šachovnice nakreslete graf, v němž vrcholy reprezentují políčka a hrany spojují ty dvojice políček, mezi nimiž může šachový jezdec skočit jedním tahem.
Je-li nám v každém kroku dovoleno táhnout libovolným z jezdců na neobsazené pole, rozhodněte (s využitím nakresleného grafu) zda:
Jako příklad grafu z reálného života uveďme graf přátelství uživatelů sítě facebook. Vrcholy reprezentují uživatele a hrany spojují „přátelé“. Asi nepřekvapí, že tento graf má přes miliardu vrcholů, přičemž z každého z nich vychází průměrně několik stovek hran. Co ale následující fakta, překvapují vás? Co z nich dovedete usoudit o tom, jak se tvoří prátelství mezi lidmi?
Problém: Najděte společné znaky následujících grafů a rozhodněte se, zda byste je považovali spíše za stejné či za různé.
Způsob, jakým se matematici vyrovnali s předchozím problémem je následující. Dohodneme se, že grafem budeme nazývat výčet vrcholů opatřený i výčtem dvojic vrcholů spojených hranami, a nebudeme jej tak rovnou spojovat s žádným obrázkem. V tuto chvíli jsou oba obrázky stejným grafem daným výčtem vrcholů \{1,2,3,4\} a hran
Pro jejich odlišení zavedeme pojem nakreslení grafu, tedy znázornění vrcholů jako bodů v rovině a hran jako křivek spojujících odpovídající dvojice bodů. Vidíme tedy, že tentýž graf může mít různá nakreslení.
Například při návrhu procesorů či elektrických obvodů je důležité hledat takové nakreslení grafu, v němž se žádné dvě spojnice nekříží. Grafům, jež je možné takto bez křížení nakreslit budeme říkat rovinné grafy. Někdy zase může být praktické, aby nekřížící se křivky byly dokonce úsečkami.
Úloha: Nakreslete následující grafy tak, aby se žádné jejich hrany nekřížily. Zvládnete to i tak, aby hrany byly úsečky?
Úloha: Nakreslete rovinný graf, který nelze nakreslit bez křížení pouze pomocí úseček.
Podotkněme ještě, že podobné otázky si lze klást i o kreslení na jiné povrchy než jen rovina, napřiklad povrch koule, válce či třeba pneumatiky. Těmito problémy a jejich vícerozměrnými analogiemi se zabývá takzvaná topologická teorie grafů a hypergrafů.
Začněme úlohou.
Úloha: Nakreslete „domeček“ jedním tahem.
V řeči teorie grafů se požaduje najít posloupnost navazujících hran, v níž se každá hrana vyskytne přesně jednou. Naším cílem nyní bude se na situaci podívat o něco obecněji. Grafům, které lze projít jedním tahem budeme říkat jednotažky. Jednotažky, které lze dokonce projít tak, aby cesta začínala a končila ve stejném vrcholu, nazveme kruhovými jednotažky.
Úloha: Poznejte jednotažky. Určete, které z nich jsou kruhové, a které počáteční či koncové vrcholy připadají v úvahu.
Úloha: Městem Königsberg (dnešní Kaliningrad) protéká řeka Pregole a uprostřed ní se nachází ostrov. Dříve mezi břehy vedly mosty tak jako na obrázku. Rozhdněte, zda lze při jedné procházce projít každý most právě jednou. Můžete si vybrat, odkud procházku začnete a kde skončíte.
Poznámka: Úlohu výše vyřešil roku 1735 Leonhard Euler. Byla to první úloha, která byla vyřešena pomocí postupů a pojmů, které se později začaly nazývat teorií grafů.
Jak jste možná již poznali výběr počátečních vrcholů souvisí s tím, kolik hran z daného vrcholu vychází. Toto čislo nazveme stupněm vrcholu.
Úloha: Na základě vašich výsledků rozhodněte, které z následujících hypotéz jsou pravdivé.
Úloha: Nakreslete graf o šesti vrcholech a šesti hranách, v němž má každý vrchol stupeň dva. Nalezněte dvě řešení! Jsou obě kruhové jednotažky?
Úloha: Zformulujte hypotézy a hledejte argumenty i protiargumenty.
Na území České republiky je rozmístěno přes 150 radiových vysílačů, z nichž ty nejvýznamnější jsou znázorněny na mapě níže. Každý z nich má přiřazené frekvenční pásmo, na němž vysílá signál. Pokud by se ovšem stalo, že nějaké dva blízké vysílače vysílají na podobné frekvenci, došlo by k interferenci radiových vln a znehodnocení signálu. Je tedy nutné, aby každé dva blízké vysílače využívaly jiného frekvenčního pásma. To samozřejmě není problém, je-li k dispozici dostatek pásem, ovšem v praxi dochází k omezením. Určení minimálního počtu potřebných frekvenčních pásem je příkladem dalšího typu problémů, jimiž se zabývá teorie grafů.
Vrcholy našeho grafu budou vysílače a hranou spojíme ty, jež jsou dostatečně blízké na to, aby docházelo k interferenci. Naším úkolem bude vrcholům grafu přiřadit barvy (frekvenční pásma) tak, aby žádné dva sousední vrcholy neměly stejnou barvu. Každému takovému přiřazení barev budeme říkat prostě obarvení a hlavní otázkou bude, kolik nejméně barev je k obarvení potřeba.
Úloha: V následujícím obrázku je graf obarven pěti barvami. Rozhodněte, zda jej lze obarvit úsporněji, tedy pomocí nižšího počtu barev.
Úloha: Obarvěte následující grafy pomocí co nejnižšího počtu barev.
Na předchozích příkladech je patrné, že žádný pevný počet barev nemůže stačit k obarvení všech možných grafů. Pokud ale zúžíme svoji pozornost jenom na některé typy grafů, situace se může změnit. Nejznámější výsledek v této oblasti je takzvaná Věta o čtyřech barvách. Ta říká, že každý rovinný graf lze obarvit pomocí čtyř barev, neboli je čtyř-obarvitelný. Ačkoliv byla tato hypotéza vznesena již v polovině devatenáctého století, její pravdivost se podařilo spolehlivě dokázat až v posledních desetiletích. Není bez zajímavosti, že součástí důkazu je i užití počítače k ověření čtyř-obarvitelnosti 663 konkrétních grafů.
Úloha: Následující graf byl jistou, byť krátkou, dobu považován za příklad rovinného grafu, který nelze obarvit čtyřmi barvami. Na obrázku je obarven pěti barvami. Ukažte, že lze jednu barvu „ušetřit“.
Grafy, jejichž obarvení je potřeba nalézt v praktických situacích mají často příliš mnoho vrcholů na to, aby bylo možné jejich nejúspornější obarvení najít ručně. Je proto potřeba vyvinout algoritmus, který si i s velkými grafy poradí v rozumném výpočetním čase. Vývoj takového algoritmu fungujícího pro zcela obecné grafy se ovšem ukazuje jako nesmírně těžký.
Úloha: Uvažme následující algoritmus přiřazující vrcholům grafu přirozená čísla reprezentující barvy.
Rozhodnětě, zda je výsledkem algoritmu vždy nejúspornější možné obarvení grafu.
Poslední zastávka při naší exkurzi do teorie grafů bude ryze informatická. Ukážeme si dvě s praxí spojené úlohy, jejichž podstatu nejlépe zachytíme pomocí grafů.
Úlohu o hledání nejkratšího, nejrychlejšího či nejlevnějšího spojení mezi vrcholy grafu řeší miliony počítačových programů dennodenně. Asi nás nepřekvapí, že algoritmů pro výpočet nejkratší cesty využívají například mobilní aplikace pro hledání optimálního dopravního spojení, ať už autem, letadlem nebo v MHD. Méně přímočarými aplikacemi mohou být programy hledající například, jak z dané pozice nejrychleji složit Rubikovu kostku či jak nejrychleji vynutit mat v šachové koncovce.
Zformulujme nyní naši úlohu přesněji. Je dán graf, jehož každá hrana má přirazenu svoji „délku“, již vyjadřujeme kladným reálným číslem. V grafu máme vyznačeny dva vrcholy a naším úkolem je najít cestu mezi nimi, za jejíž průchod „zaplatíme“ v součtu co nejméně.
Úloha: V následujících grafech nalezněte nejkratší cestu mezi dvojicemi stejně označených vrcholů.
Nyní předložíme několik návrhů, jak by mohl počítač při hledání nejkratší cesty postupovat. Vaším úkolem u každého z nich bude rozhodnout, zda takový postup skutečně vždy dosáhne nejkratší možné cesty. Je-li nejkratších cest více, stačí, aby algoritmus našel nějakou z nich, ne nutně všechny.
Ve všech algoritmech budeme o jednom z označených vrcholů mluvit jako o koncovém a o jednom jako o počátečním.
Algoritmus 1:
Algoritmus 2:
Algoritmus 3:
Tento algoritmus nalezne nejkratší cestu z počátečního vrcholu P do všech ostatních, tedy i do cílového. Vrcholy, do nichž jsme nalezli již nějakou cestu budeme značit červeně a vrcholy, do nichž jsme již našli nejkratší cestu budeme značit modře. Pro každý červený i modrý vrchol si budeme pamatovat dosud nejkratší nalezenou cestu do něj vedoucí jakož i její délku. Této cestě budeme říkat aktuálně nejkratší cesta a její délce budeme říkat aktuální vzdálenost.
Algoritmus 4:
Budeme postupovat téměř stejně jako v algoritmu 3. Jedinou změnou bude, že tučné slovo nejnižší nahradíme slovem libovolný.
Když se ve dvacátých letech 20. století elektrifikovala jižní Morava, vyvstala otázka, jak zavést proud do každého z měst za co nejnižších nákladů. Přesněji za minimální celkové délky elektrického vedení. Podotkněme, že pro zavedení proudu mezi dvěma městy nevadí, pokud vedení prochází také přes jiná města. Různé trasy elektrického vedení se ovšem mohou rozdělovat a spojovat pouze ve městech. Na obrázku naleznete příklad takového elektrického vedení.
Úloha: Nalezněte nejúspornější síť v následujícím grafu.
V řeči teorie grafů lze předchozí úlohu zformulovat takto. Je dán graf, jehož každá hrana je opatřena kladným reálným číslem. V tomto kontextu budeme toto číslo nazývat váhou hrany. Cílem je najít podmnožinu hran zajišťující spojení mezi každou dvojicí vrcholů a přitom s minimálním možným součtem vah (tzv. minimální kostru). Pro vysvětlení dodejme, že kostrou grafu se nazývá každá podmnožina hran zajišťující přesně jednu cestu mezi každou dvojicí měst.
U následujících algoritmů opět rozhodněte, zda opravdu vedou k nalezení minimální kostry.
U všech algoritmů budeme postupně hrany do hledané kostry vybírat a aktuálně vybraným hranám budeme říkat modré.
Algoritmus 1:
Algoritmus 2:
Množiny vrcholů mezi nimiž se lze přepravit pouze pomocí modrých hran budeme nazývat komponenty. Na začátku, tedy před obarvením modrých hran, je každý vrchol samostatnou komponentou.
Algoritmus 3:
Algoritmus 4: