Část III: Teorie grafů Teoretické základy informatiky Tomáš Foltýnek foltynek@pef.mendelu.cz Část III: Teorie grafů Zdroj: http://www.allthingsdistributed.com/
Teorie grafů Grafy mají velmi užitečné aplikace nejen v informatice Teoretické základy informatiky 2 Teorie grafů Grafy mají velmi užitečné aplikace nejen v informatice Problém sedmi mostů města Královce Problém obarvení mapy čtyřmi barvami Problém obchodního cestujícího Problém hlídání muzea Grafy usnadňují vyhledávání, řazení, kódování Aplikace: dopravní síť, infrastruktura, rodokmen, GIS – mapy, … Chemie, elektrotechnika, teorie her, kybernetika, management, …
Literatura Gross, Yellen: Handbook of Graph Theory Teoretické základy informatiky 3 Literatura Gross, Yellen: Handbook of Graph Theory Gross, Yellen: Graph Theory and its Applications Nešetřil, J.: Teorie grafů Plesník, J.: Grafové algoritmy Fuchs, E.: Teorie grafů Wikipedia (anglická!) Google…
Graf je uspořádaná trojice G = (U,H,f), kde Teoretické základy informatiky 4 Definice grafu Graf je uspořádaná trojice G = (U,H,f), kde U je množina uzlů H je množina hran f je incidenční zobrazení f: H → U2 Je-li f(h) = (x,y), nazýváme x počáteční a y koncový uzel hrany h Uzly x a y nazýváme sousední Je-li x = y, říkáme, že h je smyčka
Charakteristiky uzlů v grafu Teoretické základy informatiky 5 Charakteristiky uzlů v grafu Je dán graf G = (U, H, f) U+G(x) = {z∈U | ∃h∈H: f(h) = (x,z)} je množina následníků uzlu x U-G(x) = {z∈U | ∃h∈H: f(h) = (z,x)} je množina předchůdců uzlu x UG(x) = V+G(x) ∪ V-G(x) je množina sousedů uzlu x H+G(x) = {h∈H | ∃u∈U: f(h) = (x,u)} je výstupní okolí uzlu x H-G(x) = {h∈H | ∃u∈U: f(h) = (u,x)} je vstupní okolí uzlu x HG(x) = H+G (x) ∪ H-G (x) je okolí uzlu x d+G(x) = |H+G(x)| je výstupní stupeň uzlu x d-G(x) = |H-G(x)| je vstupní stupeň uzlu x dG(x) = d+G(x) + d-G(x) je stupeň uzlu x
Teoretické základy informatiky 6 (Ne)orientovaný graf Jestliže ke každé hraně h, pro níž platí, že f(h) = (x, y) existuje hrana h’ tak, že f(h’) = (y, x) tzv. protisměrná hrana Říkáme, že graf je neorientovaný U neorientovaného grafu nemluvíme o počátečním a koncovém uzlu hrany Jinak říkáme, že graf je orientovaný (nebo též digraf) 6
Teoretické základy informatiky 7 Prostý graf Definice incidenčního zobrazení připouští existenci dvou různých hran h1 a h2 f(h1) = f(h2) = (x,y) Hovoříme o násobných hranách Graf bez násobných hran se nazývá prostý protože incidenční zobrazení je prosté Prostý graf určuje relaci na množině U tato relace je symetrická graf je neorientovaný 7
Speciální případy grafů Teoretická informatika 8 Speciální případy grafů Nekonečný graf množina U je nekonečná Prázdný (nulový graf) množina uzlů (a tedy i množina hran) jsou prázdné Diskrétní graf graf s neprázdnou množinou uzlů, ale prázdnou množinou hran stupeň každého uzlu je 0 graf obsahuje pouze izolované uzly
Každé dva uzly jsou spojeny právě jednou hranou Značení: Kn Teoretická informatika 9 Úplné grafy Každé dva uzly jsou spojeny právě jednou hranou Značení: Kn Počet hran je ½*n*(n-1) Stupeň každého uzlu je roven n-1 Zdroj: altermundus.com Zdroj: mathworld.wolfram.com
Množina uzlů je rozložena na dvě disjunktní třídy Teoretická informatika 10 Bipartitní grafy Množina uzlů je rozložena na dvě disjunktní třídy U = U1 ∪ U2 U1 ∩ U2 = ∅ Hrany spojují jen uzly z různých tříd ∀h∈H: f(h) ∈ (U1× U2 ∪ U2× U1) Úplný bipartitní graf značíme Km,n kde m=|U1|, n=|U2|
Rovinný graf Nakreslení grafu je zobrazení, které Teoretické základy informatiky 11 Rovinný graf Nakreslení grafu je zobrazení, které Každému uzlu přiřazuje bod roviny Každé hraně přiřazuje spojitou jednoduchou rovinnou křivku spojující body příslušející incidenčním uzlům Rovinné nakreslení je takové nakreslení, v němž mají křivky zobrazující hrany společné nejvýše krajní body (tedy obrazy uzlů) Graf, k němuž existuje rovinné nakreslení, se nazývá rovinný (plošný, planární) graf. Využití rovinných grafů: Tištěné obvody Základní nerovinné grafy: K5, K3,3
Podgraf Uvažujme množinu V ⊆ U Teoretické základy informatiky 12 Podgraf Uvažujme množinu V ⊆ U Dále uvažujme množinu J ⊆ H takovou, že z H vybereme hrany spojující uzly ležící ve V (ne nutně všechny) Pak G’ = (V, J, f/J) nazýváme podgraf grafu G = (U, H, f) Pokud U=V, hovoříme o faktoru grafu G
Teoretické základy informatiky 13 Sled Sled je posloupnost uzlů a hran tvaru u0, h1, u1, h2, u2, … hk, uk, kde f(hi) = (ui-1, ui) ∀i = 1..k Uzel u0 nazýváme počátečním uzlem sledu, uzel uk koncovým uzlem sledu. Číslo k nazýváme délka sledu Triviální sled je sled pouze o jednom uzlu Je-li u0 = uk, říkáme, že sled je uzavřený
Sled II. Sled nelze definovat jen jako “posloupnost uzlů a hran” Teoretické základy informatiky 14 Sled II. Sled nelze definovat jen jako “posloupnost uzlů a hran” využití incidenčního zobrazení je nezbytné jinak by i posloupnost AgEiCkB byla sledem! Na sled nejsou kladeny žádné další omezující požadavky uzly i hrany se mohou opakovat Sled je jednoznačně určen posloupností hran uzly jsou nadbytečné, vždy je lze doplnit
Tah, cesta, kružnice, cyklus Teoretické základy informatiky 15 Tah, cesta, kružnice, cyklus https://www.pexels.com/photo/hiking-path-way-trail-4805/ Tah je sled, v němž se žádná hrana neopakuje (kreslení jedním tahem) Cesta je tah, v němž se neopakuje žádný uzel s výjimkou u0 = uk Uzavřená neorientovaná cesta se nazývá kružnice Uzavřená orientovaná cesta se nazývá cyklus Graf, který neobsahuje kružnice (cykly) se nazývá acyklický
Teoretické základy informatiky 16 Eulerovský tah Eulerovský tah je takový tah, který obsahuje každou hranu právě jednou Problém sedmi mostů města Královce Graf, v němž existuje Eulerovský tah, se nazývá Eulerovský Podmínka: Všechny uzly mají sudý stupeň, nebo právě dva uzly mají lichý stupeň (tah není uzavřený) Použití: Kreslení jedním tahem, trasa popelářů/sypačů/… Wikipedia Wikipedia
Teoretické základy informatiky 17 Hamiltonovská cesta Hamiltonovská cesta je cesta procházející každým uzlem uzly se neopakují => projde každým právě jednou Hamiltonovská kružnice je uzavřená Hamiltonovská cesta Graf je Hamiltonovský, jestliže v něm existuje Hamiltonovská cesta Ta existuje, jestliže je stupeň každého uzlu ≥ n/2, kde n je počet uzlů celého grafu Postačující, nikoliv nutná podmínka Problém obchodního cestujícího Nalézt nejkratší Hamiltonovskou kružnici Wikipedia
Teoretické základy informatiky 18 Souvislost grafu Neorientovaný graf nazveme souvislý, jestliže mezi každými dvěma uzly existuje sled. Orientovaný graf nazveme slabě souvislý, jestliže nahrazením všech jeho orientovaných hran hranami neorientovanými (resp. přidáním protisměrných hran) vznikne souvislý neorientovaný graf silně souvislý, jestliže mezi každými dvěma uzly existuje (orientovaný) sled. Každý maximální souvislý podgraf nesouvislého grafu se nazývá komponenta
Uzlové ohodnocení grafu Teoretické základy informatiky 19 Uzlové ohodnocení grafu Je zobrazení k: U → R Číslo k(u) nazveme klíčem uzlu u, též hovoříme o hodnotě nesené uzlem u Aplikace: Řazení Vyhledávání Kódování
Hranové ohodnocení grafu Teoretické základy informatiky 20 Hranové ohodnocení grafu Je zobrazení d: H → R+ někdy připouštíme i nulu nebo záporné hodnoty Číslo d(h) nazveme délkou hrany h, též hovoříme o vzdálenosti uzlů Délku sledu lze v hranově ohodnoceném grafu předefinovat jako součet délek hran Aplikace: Minimální kostra Nejkratší cesta Toky v sítích
Stromy Prostý neorientovaný graf bez kružnic se nazývá les Teoretické základy informatiky 21 Stromy Prostý neorientovaný graf bez kružnic se nazývá les Souvislý les se nazývá strom Les je tedy takový graf, jehož každou komponentou je strom Strom je tedy prostý souvislý neorientovaný acyklický graf Vlastnosti stromů Mezi každými dvěma uzly stromu vede jediná cesta Přidáním jedné nové hrany do stromu vznikne kružnice (právě jedna) Odebráním libovolné hrany se poruší souvislost stromu Strom je minimální souvislý graf na daných uzlech Kostra grafu je takový podgraf, který obsahuje všechny uzly původního grafu a je to strom https://www.pexels.com/photo/wood-nature-leaves-tree-4258/
Kořenový strom Vybereme uzel, všechny hrany orientujeme od něj Teoretické základy informatiky 22 Kořenový strom Vybereme uzel, všechny hrany orientujeme od něj vybraný uzel nazveme kořen získáváme kořenový strom Hovoříme o předchůdci (otci, rodiči) následnících (synech, potomcích) sousedech (bratrech, sourozencích) Arita stromu je maximální počet potomků každého uzlu Uzel bez potomků se nazývá list Liší-li se vzdálenost mezi kořenem a všemi listy nejvýše o 1, mluvíme o vyváženém stromu Maximální vzdálenost mezi kořenem a listem se nazývá výška stromu Wikipedia
Zejména uzlově ohodnocené stromy Binární vyhledávací strom Teoretické základy informatiky 23 Aplikace stromů Zejména uzlově ohodnocené stromy Binární vyhledávací strom složitost vyhledávání je O(log(n)) a ne O(n) je-li strom vyvážený Řazení algoritmem heap-sort časová složitost O(n*log(n)) Kódování Morse, Huffmann, … Wikipedia
Binární vyhledávací strom Teoretické základy informatiky 24 Binární vyhledávací strom Hodnoty v levém podstromu jsou menší, než hodnota v kořeni, ta je menší, než hodnoty v pravém podstromu Algoritmy: přidání uzlu odebrání uzlu vyhledání uzlu Wikipedia
Halda je zleva úplný vyvážený binární strom Teoretické základy informatiky 25 Halda Halda je zleva úplný vyvážený binární strom Rodič nese větší (menší) hodnotu než všichni jeho potomci Algoritmy přidání prvku odebrání kořene Wikipedia
Každá fáze vyžaduje O(n*log(n)) operací Teoretické základy informatiky 26 Heap sort Řazení haldou Dvě fáze Vytvoření haldy Postupné odebírání kořene Každá fáze vyžaduje O(n*log(n)) operací