Drobnosti v přednáškách AG1:

  • handout přednášky 3, strana 14 ↗, nešťastně se v obrázku překrývají značení startu a cíle s čísly BFS průchodu
  • handout přednášky 4, strany 7 ↗ a 11 ↗, obrázky úplně zničený
  • handout 11, strana 23 ↗; To, že O(m log m)=O(m log n) je sice pravda, ale úplně stejnou úpravou můžu u Jarníka napsat, že je O(m log m). Tato úprava mi přijde předčasná a matoucí. Dává smysl aby se promítla až ve finální verzi složitosti, kde je započítaný i Union-Find.
  • Handout, přednáška 12, strana 16, rozbitý obrázek
  • Handout, přednáška 12, strana 43, rozbitý obrázek
  • GAK překlep “reprezentující hrany s oběma kopie koncových vrcholů”

Zdroje

  • Přednášky předmětů BI-AG1, BI-AG2
  • Materiály k MI-GAK
  • Modern Graph Theory - Bollobas
  • Graph Theory - Diestel
  • Parametrized Algorithms (modrá knížka)
  • (Wikipedie)

Teorie grafů a kombinatorika

Grafové modely ?

Kolář: “To bývalo jakési motivační téma, které ukazovalo přehršli “problémů z praxe”, které se daly formulovat jako grafový problém a řešit nějakým grafovým algoritmem.”

Výpočetní modely

Výpočetní model RAM (Random Access Machine) obsahuje

  • Paměť: celočíselné paměťové buňky adresované celými čísly,
  • Program: konečná posloupnost sekvenčně prováděných instrukcí,
  • Instrukce: Aritmeticko-logické mají za argumenty konstanty / adresy / nepřímé adresy; Řídicí jsou skoky, podmíněné skoky, zastavení programu.

Časová složitost je maximum instrukcí přes možné vstupy. Paměťová složitosti je maximum z počtu použitých poměťových buněk přes všechny vstupy.

Neorientované grafy, Sousednost, Souvislost

Neorientovaný graf je uspořádaná dvojice $(V,E)$, kde $V$ je neprázdná konečná množina vrcholů, a $E$ je množina hran, tj. neuspořádaných dvojic vrcholů. Vrcholy, které jsou spojeny hranou nazveme sousední. Pokud hrana obsahuje vrchol, pak jsou navzájem incidentní.

Stupeň vrcholu $deg(v)$ je počet jeho sosuedů. Otevřené okolí $N(v)$ je množina sousedů v. Uzavřené okolí $N[v] = N(v) + v$.

Typické grafy: $K_n$ úplný, $K_{n,m}$ úplný bipartitní (k-partitní), $P_n$ cesta, $C_n$ kružnice, $S_n$ hvězda.

Doplněk grafu je, že prohodíme hrany a nehrany.

Graf je souvislý, pokud existuje cesta mezi každou dvojicí jeho vrcholů. Každý v inkluzi maximální souvislý pograf tvoří komponentu souvislosti.

Další pojmy

  • Izolovaný vrchol: Vrchol stupně 0
  • Princip sudosti: součet stupňů všech vrcholů je roven 2 krát počtu hran, $\sum_{v\in V}deg(v) = 2|E|$
  • Podgraf: Graf H je podgrafem G, když $V(H) \subseteq V(G)$ a $E(H) \subseteq E(G)\cap 2^{V(H)}$
  • Indukovaný pograf G[V’]: $V’=V(H) \subseteq V(G)$, ale $E(H)=E(G) \cap 2^{V(H)}$ (hrany se nevybírají)
  • Klika: podmnožina vrcholů, kde jsou všechny po dvojicích sousední
  • Nezávislá množina: podmnožina vrcholů, kde po dvojicích žádné nejsou sousední

Reprezentace grafů

  • graf (obrázek, viz vizualiace grafů)
  • matice sousednosti: $N \times N$ matice, 1 na místech sousedích vrcholů, 0 všude jinde
  • matice incidence: $N \times M$ matice, 1 na místech incidentních vrcholů a hran, 0 všude jinde
  • seznam sousedů: u každého vrcholu máme seznam jeho sousedů – vhodné pro většinu aplikací (nejkratší cesty, kostry, toposort, barvení)
  • seznam incidentních hran: u každého vrcholu máme seznam incidentních hran, sousedi mohou ukazovat buď na stejnou instanci, nebo svoji instanci, která je se sestrou nějak propojená – vhodné pro mnoho pokročilých aplikací (toky, párování)

Vážený graf (nebo hranově ohodnocený) je rozšíření grafu o váhovou funkci $w:E \rightarrow R$, která přiřazuje každé hraně reálné číslo. Váha podgrafu G je potom součet vah všech jeho hran.

Věta o souboru stupňů: (sestupně seřazená) posloupnost $(D_1,D_2,\dots,D_N)$ je soubor stupňů nějakého grafu právě tehdy, když $(D_2-1,D_3-1,\dots,D_{(1+D_1)}-1, D_{(2+D_1)},\dots,D_N)$ je soubor stupňů nějakého grafu.

Izomorfismus

Grafy G a H jsou izomorfní, právě když existuje bijekce $F : V(G) \rightarrow V(H)$ taková, že $$ {u,v} \in E(G) \Leftrightarrow {F(u),F(v)} \in E(H). $$

Automorfismus je izomorfismus kde $G=H$.

Izomorfismus grafů je obsažen ve třídě GI ↗ (graph isomorphism). Zároveň je ve třídách NP and co-AM ↗.

  • V NP je proto, že ano-certifikát je výsledné mapování vrcholů, které lze jednoduše ověřit.
  • (ověřit:) V co-AM je proto, že lze protokolem ověřit, že někdo umí tento problém řešit rychle. Konkrétněji: pošleme mu grafy A,B,C a má odpovědět, jestli je A isomorfní s B či C. To, že umí GI řešit lze ověřit opakovaným ptaním, s přepermutovanými vrcholy, a obmněněným třetím grafem.

Při implementaci se můžeme omezit na srovnávání pouze těch vrcholů, které sdílejí všechny vlastnosti.

  • stupeň
  • soubor stupňů sousedů
  • souvislá komponenta, 2-souvislá, 3-souvislá komponenta

Orientované grafy, Silná souvislost

Orientovaný graf je uspořádaná dvojice $(V,E)$, kde $V$ je neprázdná konečná množina vrcholů, a $E$ je množina orientovaných hran, tj. uspořádaných dvojic vrcholů.

Typické grafy: orientovaná cesta, orientovaná kružnice, zakořeněný strom

Stupeň vrcholu $deg(v)$ je počet všech incidentních hran. Vstupní stupeň vrcholu $deg^+(v)$ je počet příchozích hran a výstupní stupeň $deg^-(v)$ je počet odchozích hran, a zřejmě $deg^+(v) + deg^-(v) = deg(v)$.

Definice pro vstupní okolí (předchůdci), výstupní okolí (následníci), a okolí grafu jsou jasné (jsou to podmnožiny sousedství).

  • Zdroj: vrchol se vstupním stupněm 0
  • Stok: vrchol s výstupním stupněm 0
  • Izolovaný vrchol: má stupeň 0
  • Podgraf, Indukovaný podgraf a izomorfismus funguje stejně jako u neorientovaných.

Symetrizace udělá z orientovaného grafu neorientovaný tak, že nahradí orientované hrany za neorientované hrany (a vyhodí případné duplikáty).

Orientace neorientovaného grafu je když z neorientovaných hran uděláme nějakým definovaným způsobem orientované.

Orientovaný graf je slabě souvislý, když je souvislá jeho symetrizace. Orientovaný graf je silně souvislý, když pro každou dvojici vrcholů $u,v$ existuje orientovaná cesta z $u$ do $v$.

Hledání silně souvislých komponent lze udělat pomocí odtrhávání stokových komponent. Vzhledem k tomu, že poslední uzavřený vrchol DFS (které pouštíme postupně ze všech nenavštívených vrcholů) je vždy ve zdrojové komponentě, tak můžele toto DFS pustit na grafu s obrácenými hranami a najít tak stokovou komponentu. Ve stokové komponentě pustíme DFS abychom našli všechny dostupné vrcholy, což jsou vrcholy oné komponenty. Tuto komponentu smažeme (uložíme stranou) a opakujeme. Výhodou je, že když máme uloženy pořadí uzavírání vrcholů z prvotního DFS, tak ho nemusíme pouštět stále dokola, ale stačí procházet odzadu a vždy vybrat poslední nesmazaný vrchol.

Kondenzování silně souvislých komponent nám nutně dá DAG.

Prohledávání grafu do hloubky (DFS) a do šířky (BFS)

Algoritmy prohledávání grafu procházejí graf po vrcholech a hranách, aby o grafu něco zjistili. Hlavním způsobem odlišení algoritmů je pořadí ve kterém procházejí vrcholy.

Depth-first search (DFS)

všechny vrcholy označ jako nenavštívené
navštiv startovní vrchol

funkce navštiv vrchol u:
    označ v jako otevřený
    pro v z N(u):
        pokud je v nenavštívený:
            voláme funkci navštiv vrchol v
    označ v jako uzavřený

Chování algoritmu je trochu jiné pro orientované a neorientované grafy.

Pro neorientované grafy můžeme procházet hrany (do sousedů) v obou směrech. Průchod navštíví celou souvislou komponentu. Proto se často DFS pouští postupně na všechny vrcholy, které jsou nenavštívené Hrany můžeme během průchodu označovat podle situace, ve které jsme je prošli, získáme tak:

  • stromové (hlaví průchod, navštívení do teď nenavštívených vrcholů) a
  • zpětné (navštívení již projitých vrcholů).

U orientovaných grafů bereme N(v) pouze ty sousedy, do kterých z u vede orientovaná hrana. Průchod navštíví všechny vrcholy, které jsou dosažitelné z u. (Navštíví souvislou komponentu u, a všechny souvislé komponenty dostupné z komponenty u.) Opět lze klasifikovat hrany:

  • stromové (hlavní průchod, navštívení do teď nenavštívených vrcholů),
  • zpětné (navštívení otevřených vrcholů),
  • dopředné (navštívení již uzavřených vrcholů, které jsme otevřeli po našem) a
  • příčné (navštívení již uzavřených vrcholů, které jsme otevřeli před naším).

Časová složitost je $O(|V|+|E|)$ a používá $O(|V|)$ paměti navíc.

Breadth-first search (BFS)

všechny vrcholy označ jako nenavštívené

vytvoř prázdnou frontu
přidej do fronty startovací vrchol
označ startovací vrchol jako otevřený

dokud není fronta prázdná:
    vyjmi první vrchol u z fronty
    označ u jako uzavřený
    pro v z N(u):
        pokud je v nenavštívený:
            označ v jako otevřený
            přidej v do fronty

Algoritmus hledá nejkratší cestu z u do všech ostatních vrcholů, co se počtu hran týče.

Časová složitost je $O(|V|+|E|)$ a používá $O(|V|)$ paměti navíc.

Lexicographic breadth-first search (LexBFS)

Obecnému BFS je jedno, v jakém pořadí projde prvky z jedné vlny. Pro rozhodování těchto remíz lze použít řadu pravidel – nejjednodušší je pro sousedy jednoho vrcholu vzít pořadí seznamu sousedů z reprezentace grafu, a potomci z jedné vlny jsou zpracováni v pořadí kdo dřív přijde, ten dřív mele.

LexBFS rozhoduje remízy tak, že se podívá kdo má za souseda vrchol, který byl v pořadí odebrání dříve, a při opětovné remíze kouká na druhého souseda, atd.

Topologické uspořádání

Topologické uzpořádání orientovaného grafu je takové pořadí vrcholů, že pro každou hranu (u,v) platí, že u je v uspořádání před v. Zjevně neexistuje, pokud má graf cyklus, proto se bavíme pouze o orientovaných grafech bez cyklů (DAG).

Lze najít buď odřezáváním zdrojů, nebo obrácením pořadí uzavírání vrcholů v DFS (vrcholy bez odchozí hrany jsou v daném kroce stoky).

Počítání, kolik má graf topologických uspořadání je #P-complete, takže pro obecný graf se jedná o problém, který neumíme efektivně řešit. Pro malé grafy (max tak 20 vrcholů) lze projít všechny možnosti (s prořezáváním), případně zkusit urychlit přes DP na podmnožiny.

Mosty, artikulace a 2-souvislost

Most je hrana, kterou když odstraníme, tak se zvýší počet souvislých komponent Hrana je most právě tehdy, když neleží na žádné kružnici.

Mosty můžeme najít pomocí DFS tak, že si při průchodu pamatujeme nejnižší ID vrcholu, který jsme viděli. Pokud při uzavírání vrcholu nám synové vrátili, že já jsem nejvyšší vrchol, který viděli, tak hrana ode mě nahoru je most. Pokud synové vrátili vrchol, který je víš, tak vim, že existuje hrana z mého podstromu do vrcholu nademnou, a proto hrana ode mě nahoru není most.

Artikulace je vrchol, který když odstraníme, tak se zvýší počet souvislých komponent

Graf je (vrcholově) 2-souvislý, pokud neobsahuje artikulaci. (A je hranově 2-souvislý, pokud neobsahuje most.) Každý 2-souvislý graf lze vytvořit z kružnice přidáváním uší (napojení koncú nové cesty do dvou různých vrcholů grafu).

2-souvislá komponenta je v inkluzi maximální 2-souvislý pograf. Dekompozice grafu na 2-souvislé komponenty lze udělat v lineárním čáse pomocí DFS. Artikulace je vrchol, který je ve více jak jedné 2-souvislé komponentě. Most je každá 2-souvislá komponenta obsahující 2 vrcholy.

Více o k-souvislosti v oddílu o tocích.

# Barevnost

$k$-obarvení grafu je funkce $c:V(G) \rightarrow {1,\dots,k}$, tj. obarvení vrcholů $k$ barvami, takové, že ${u,v}\in E(G) \implies c(u) \ne c(v)$. Barevnost grafu $\chi(G) = \min k$ pro které existuje $k$-obarvení grafu $G$.

Najít nejmenší počet barev pro dobré obarveni grafu je NP-úplný problém.

Věta o čtyřech barvách: Každý rovinný graf lze obarvit čtyřmi barvami. (Nemáme rozumný důkaz, pouze samé šílenosti. :D )

Věta o pěti barvách: Každý rovinný graf lze obarvit pěti barvami. Lze dokázat hned několika způsoby, jeden z nich předvedeme:

Proof: V rovonném grafu vždy existuje vrchol stupně nejvýše 5 (plyne z eulerovy rovnice). Uvažujme pořadí odebírání vrcholů takové, že vždy vybereme vrchol nejnižšího stupně. Pořadí obrátíme, vracíme je do grafu a zároveň je barvíme. (pozn. z toho triviálně plyne 6-barvení) Jediný problém nastává, když máme 5 různě obarvených sousedů. Vybereme dva protější, a koukneme na graf indukovaný jejich barvami. Pokud nejsou ve stejné komponentě indukovaného grafu, tak prohodim ty dvě barvy v komponentě jednoho z nich. Pokud jsou ve stejné, tak kouknu na jinou protější dvojici, která stejnou vlastnost nemůže splňovat, protože by se tyto komponenty (které mají disjunktní barvy) musely někde protnout.

Brooksova věta: pokud souvislý G není lichý cyklus ani klika, tak platí, že barevnost(G) $\le$ největší stupeň(G).

Proof: Použijeme indukci nad počtem vrcholů. Uvažujme max stupeň 2, pak se jedná o sudou kružnici či cestu, kde tvrzení platí. Dekomponujme případy podle vrcholové souvislosti Kv(G).
  • Pokud Kv(G)=3, G není klika, proto obsahuje indukovanou cestu na 3 vrcholech (třešničku) s vrcholy v pořadí x,z,y. V G bez x,y existuje kostra (z 3-souvislosti), uděláme dfs z vrcholu z, pak toposort, abychom získali pořadí takové, kde má každý vrchol jednu hranu ‘doprava’. Přidáme x a y na začátek. First-Fit obarví x a y stejně, pak použije ne víc jak max stupeň barev, protože vždy jeden soused není obarven (ten vpravo), z může taky obarvit, protože barva x a y je stejná.
  • Pokud Kv(G)=2, tak existuje {x,y} řez, přidáme hranu {x,y} a vyřešíme komponenty nezávisle, jednu přebarvíme tak, aby se na {x,y} rovanly a šli tak spojit do jedné. Přidání hrany nezvýší max stupeň v podkomponentách, protože aby mohly být {x,y} v řezu, tak musí mít alespoň jednu hrany do obou komponent.
  • Pokud Kv(G)=1, tak má artikulaci, rozpojíme komponenty dle artikulace, a obarvíme zvlášť, přepermutujeme barvy a spojíme. Pokud nějaká komponenta je klika či lichá kružnice, tak pozorujeme, že spojením se zvýší stupeň ale ne obarvení komponenty.

Hadwigerova doměnka: Pokud graf nemá $K_t$ jako minor, pak jeho barevnost je ostře menší než $t$.

Hadwigerova doměnka je dokázaná pro $1 \le t \le 6$.

# Rovinné grafy

Kuratowského věta

Věta o pěti barvách viz výše v části o barvenosti.

Regularita a symetrie grafů

Graf je $r$-regulární, pokud stupeň každého jeho vrcholu je $r$. Graf je regulární, pokud všechny vrcholy mají stejný stupeň. Regulární graf nemůže mít lichou regularitu a zároveň lichý počet vrcholů (z principu sudosti).

Stromy

Souvislý graf bez kružnic nazveme stromem. Les je graf bez kružnic. List je vrchol stupně 1.

Alternativní definice:

  • mezi každými dvěma vrcholy existuje právě jedna cesta
  • je souvislý a vynecháním libovolné hrany vznikne nesouvislý graf
  • je souvislý a $|V|=|E|+1$

Pro každý strom existuje pořadí odřezávání listů tak, že všechny mezi-grafy jsou také stromy (reverzní DFS pořadí).

Kostry, Minimální kostry grafu

Podgraf $K$ souvislého grafu $G$ je kostra grafu $G$, pokud $V(K)=V(G)$ a $K$ je strom. Najít lze vybráním stromových hran DFS / BFS průchodu.

Minimální kostra ve váženém grafu je mezi všemi kostrami ta, která má nejmenší váhu. Problém minimální kostry se dá řešit řadou algoritmů:

Jarníkův (v zahraničí Primův) algoritmus: Začneme s komponentou o jednom vrcholu. $(N-1)$-krát přidáme vrchol takový, do kterého z dosavadní komponenty vede nejlehčí hrana. Složitost je] $$ O(n \cdot \text{vybrání minima} + n \cdot \text{přidání do hlady} + m \cdot \text{decrease key}). $$ Když při implementaci použijeme pro hledání nejlehčí hrany haldu, tak bude časová šložitost $O((n+m) \log n)$. Pokud to zabijeme Fibonacciho haldou, dostaneme $O(m + n \log n)$.

Kruskalův algoirtmus: Seřadíme hrany podle váhy. Projdeme hrany v pořadí, a přidáme je do kostry, pokud by v ní nevytvořily cyklus. Pro implementaci kontroly cyklů použijeme Union-Find. Složitost $$ O(m \log m + m \cdot \text{find} + n \cdot \text{union}) $$ Bottleneck je řazení, s tím se nedá nic dělat, časová složitost je $O(m \log m)$.

Borůvkův algoritmus: Pustíme Jarníkův ze všech vrcholů zároveň.

Disjoint-Set Union-Find

Nejen v Kruskalově algoirtmu potřebujeme datovou strukturu, která dovede udržovat, které vrcholy jsou spolu v množině, a dovede množiny spojovat. Množiny můžeme uložit tak, že každá množina bude mít reprezentanta, na kterého ukazují (přímo nebo nepřímo) všechny její prvky. Samotný reprezentant bude ukazovat sám na sebe. Nyní jen vyřešit, jak množiny spojovat.

Jedna možnost je spojit množiny tak, že přepíšeme všechny reprezentanty menší množiny. Tohle provede maximálně $\log n$ operací na jeden prvek. Spojení tak bude amortizovaně $\log n$, ale hledání je O(1).

Další možnost pro spojení dvou množin je najít jejich reprezentanty, a jedním ukázat na druhý. Když chceme zjistit, jestli jsou prvky ze stejné množiny, tak porovnáme jejich reprezentanty, na které nepřímo ukazují. Co by se ale mohlo dít je, že řetízky nepřímích odkazů budou narůstat až na $\log n$, pokud spojujeme nižší strom pod vyšší. Tohle bude 2x find + O(1) na spojení, ale za to $O(\log n)$ na nalezení reprezentanta.

Tohle se dá vylepšit tím, že když vyhledáváme prvek, tak jeho odkaz a odkazy celého řetězu referencí přepojíme na jejich společného reprezentanta. Dobrou složitost zaručuje následující věta.

Věta: Amortizovaná složitost datové struktury Union-Find je $O(\log^*n)$ (iterovaný logaritmus).

Proof: ([zdroj](https://www.cs.cmu.edu/~avrim/451f13/lectures/lect0912.pdf), [wiki zdroj](https://en.wikipedia.org/wiki/Proof_of_O(log*n)_time_complexity_of_union%E2%80%93find)) Ukážeme, že celková složitost po zavolání $m$ operací Find a Union je $O(m \log n)$. Vzhledem k tomu, že operace pouze volá 2x find, tak stačí analyzovat složitost $m$ zavolání operace find.

Našim cílem je spočítat kolik se udělá přechodů při vybublávání v operaci find. Cenu kořene a jeho syna (zde se nepřepojují ukazatele) započteme do ceny operace find přímo (konstantní počet instrukcí na operaci). Zaveďme pro každý vrchol rank, který je na začátku 0, a který zvedneme o 1 pro kořen stromu, pokud je pod něj zapojen kořen stejného ranku. Intuitivně, rank je maximální výška podstromu vrcholu přes celou jeho historii, protože výška se může zmenšit, ale rank ne.

  • vrchol je buď kořen, nebo má rodiče vyššího ranku,
  • vrcholu, který není kořen, se už nezvýší rank,
  • vrchol s rankem $i$ má alespoň $2^i$ vrcholů ve svém podstromě,
  • vrcholů ranku $i$ je nejvýše $N/2^i$,
  • vrcholů ranku $\ge i$ je nejvýše $2 N/2^i$ (suma $\frac{N}{2^i} + \frac{N}{2^{i+1}} + \dots$).

Vytvořme $K$: kyblíky ranků, kde $i$-tý kyblík obsahuje všechny vrcholy ranku $2 \uparrow\uparrow i$ až $(2 \uparrow\uparrow (i+1))-1$ (aneb $2^{2^{2^{\dots}}}$, Knuthův zápis ↗). Konkrétně, kyblíky postupně začínají na ranku: $(0,1,2,4,16,\dots,B,2^B,\dots)$. Označme $K(u)$ kyblík vrcholu $u$, $LK(u)$ nejnižší a $UK(u)$ nejvyšší rank obsažený v kyblíku $K(u)$.

  • kyblíků je $\log^*n$ (inverzní funkce k $\uparrow\uparrow$),
  • ranky v kyblíku $[B,2^B-1]$ dohromady obsahují nejvýše $2n / 2^B$ vrcholů.

Nyní rozpočteme jednotlivé operace vybublávání při vykonávání $m$-krát FIND. Přechod z vrcholu $u$ do vrcholu $v$.

  • Přechodů, kde $v$ je kořen, je dohromady $m$.
  • Přechodů mezi kyblíky, tedy $K(u) \ne K(v)$ je dohromady nejvýšel $O(m \log ^n)$ protože je $\log^ n$ kyblíků, a více rozhraní v jednom FIND nemůžeme přejít.
  • Přechod uvnitř stejného kyblíku, tedy $K(u) = K(v)$. Prvně si připomeneme, že rank $u$ se nikdy nezvýší, protože není kořen. Dále, zkrácením linku z $u$ bude nová hrana vést do vrcholu s vyšším rankem, než měl $v$, protože $v$ také není kořen. Pokud se rank cílového vrcholu zvedne natolik, že je v jiném kyblíku, tak už nikdy nebude přechod z vrcholu $u$ započítán jako přechod ve stejném kyblíku. Díky tomu bude počet těchto započtení na jeden vrchol omezen počtem ranků v kyblíku, kterých je $2^B-B-1 < 2^B$. Dříve jsme ukázali, že v bucketu s prvním rankem $B$ je dohromady nejvýše $2n / 2^B$ vrcholů, za každého z nich započteme nejvýše $2^B$, což dohromady dává $2^B \cdot 2n / 2^B = 2n$ operací na bucket, tj. $2n \log^* n$ operací za všechny buckety.

Celkově dostáváme $O(m + m \log^* n + n \log^* n) = O(m \log^* n)$.

Autor důkazu později ukázal, že stejný výsledek platí i pokud napojujeme keře pod sebe náhodně. Emprické testy nasvědčují, že při náhodném zavěšování je struktura trochu (ale znatelně) pomalejší.

Implementace přepojovací verze v C++ může vypadat třeba takto:

struct Uf{
    vector<ll> p, r; // p=element's parent, r=rank
    Uf(ll n):p(n),r(n){ iota(p.begin(), p.end(), 0); }

    // finds representant of a's set
    ll find(ll a){ return p[a]==a ? a : p[a]=find(p[a]); }

    // unifies sets of a and b
    void uni(ll a, ll b){
        a = find(a);
        b = find(b);
        if(a==b)return;
        if(r[a]<r[b]) swap(a, b);
        p[b] = a;
        r[a] += r[a]==r[b];
    }

    // check if elements are in the same set
    bool same(ll a, ll b){ return find(a) == find(b); }
};

Nejkratší cesty

Uvažujme vážený graf G. Sled z u do v je střídavá posloupnost po sousedech incidentních vrcholů a hran, která začíná u a končí v. Tah je sled ve kterém se neopakují hrany. Cesta je tah ve kterém se neopakují vrcholy.

Délka cesty (tahu a sledu) je součet délek hran, které obsahují.

Pokud jsou hrany nezáporné, tak platí trojúhelníková nerovnost, tj. $dist(u \rightarrow v) \le dist(u \rightarrow w) + dist(w \rightarrow v)$.

Relaxace hrany {u,v} (wlog w(u) < w(v)) znamená, že do v si zapíšeme min(w(v), w(u)+W(uv)).

Hlednání nejkratší cesty v ohodnoceném grafu řeší několik algoritmů:

Dijkstrův algoritmus: Předpokládá nezáporně ohodnocený graf. Relaxuje hrany incidentní vrcholům, které ještě nebyly relaxované a které mají nejmenší vzdálenost od startu. Časová složítost je $$ O(n \cdot \text{vybrání minima} + n \cdot \text{přidání do hlady} + m \cdot \text{decrease key}). $$

  • Pro husté grafy budeme snížení dělat přepisem, a extrakci průchodem; dostáváme $O(n^2)$.
  • Pro řídké grafy budeme snižení a extrakci dělat v haldě; dostáváme $O(m + (n+m) \log (n+m))$.
  • Pokud chceme overkill, tak přes Fibonacciho haldu dostaneme $O(m + n \log n)$.

Pokud dovolíme Dijkstrovi otevírat vrcholy opakovaně, tak existují grafy bez záporných cyklů, ale se zápornými hranami, na kterých má exponenciální časovou složitost (bude se tam opravovat jako binární sčítačka).

Bellman-Fordův algoirtmus: Funguje i na grafech se zápornými hranami, ovšem nesmí existovat záporný cyklus. Základní verze pouze relaxuje všechny hrany N-krát, což do každého vrcholu nastaví délku nejkratšího sledu ze startovního vrcholu; hledaná nejkratší cesta je sled bez opakovaných vrcholů. Vylepšená verze relaxuje pouze hrany, které mohou relaxací něco změnit, tj. dijkstra, kde si dáváme vrcholy do (neprioritní) fronty, provedeme ovšem pouze N iterací. Pokud se něco změní v jedné další iteraci, tak víme, že graf obsahuje záporný cyklus. Časová složitost je $O(n \cdot m)$.

Najít nejkratší cestu v libovolně ohodnoceném grafu je NP-úplné (všude vezměme ohodnocení -1 a nejlevnější=nejdelší cesta tj. uměli bychom hledat Hamiltonovskou cestu).

# Toky v sítích

Síť je čtveřice (G,z,s,c) kde G=(V,E) je orientovaný graf, z a s jsou zdroj a stok, a c je funkce kapacity c:E -> R+0.

Tok v síti je každá funkce $f:E \rightarrow \mathbb{R}^+_0$, která splňuje $0 \le f(e) \le c(e)$ (tok zkrz hranu je v mezích kapacity), a pro každý vrchol u mimo zdroj a stok platí $\sum f(x,u) = \sum f(u,y)$ (první Kirchhoffův zákon).

Řez mezi z a s (kterému budeme říkat pouze řez) v síti nazveme podmnožinu R hran sítě takovou, že v síti s odebraným R neexistuje orientovaná cesta ze z do s. Kapacita řezu je součet kapacit jeho hran.

Pro každou síť se velikost maximálního toku rovná kapacitě minimálního řezu.

Mějme dělení sítě na dvě disjunktní množiny A a B takové, že z je v A a s je v B, pak hrany z A do B jsou řez, který značíme S(A,B) a nazveme jej elementárním řezem. Každý v inkluzi minimální řez je elementární. Pokud množina vrcholů A obsahuje zdroj a neobsahuje stok, tak celkový tok se rovná tomu, co vyteče z A do B mínus to co teče z B do A. Maximální tok je nejvýše velikost minimálního řezu. Nasycená cesta je taková, že podél ní nelze zvětšit tok. Tok je maximální, právě když je nasycený (kdyby nebyl, dovedeme podél nenasycené cesty trošku vylepšit). Pro každý maximální tok, existuje řež takový, že se velikost toku rovná kapacitě řezu (řez bude S(A,B) kde A jsou vrcholy, které jsou v nějaké nasycené cestě před první nasycenou hranou).

Maximálních toky řeší následující algoritmy:

Ford-Fulkersonův algoritmus (FF): Najdi zlepšující cestu (libovolnou) a zlepšiji co to jde; toto opakuj dokud existuje zlepšující cesta. Pro racionální váhy vždy skončí (protože se vždy zvětšuje alespoň o 1/LCM). Pro reálné váhy exisují grafy a výběr cest takový, že neskončí. Časova složitost závisí na velikosti vah v síti.

Edmondův-Karpův algoirtmus (první ho publikoval Dinitz): Stejný jako FF, ale určí cestu pomocí BFS. Je konečný pro reálné váhy. Časová složitost je O(|V||E|^2).

Hranová a Vrcholová k-Souvislost

Graf je hranově $k$-souvislý, když neexistuje řez velikosti nejvýše $k-1$. Graf je vrcholově $k$-souvislý, když neexistuje vrcholový řez velikosti nejvýše $k-1$, a má alespoň $k$ vrcholů. Vrcholová souvislost grafu G $\le$ jeho hranová souvislost.

Ford Fulkersonova věta: Hranová souvislost $\ge T \Leftrightarrow$ mezi každými dvěma různými vrcholy u a v existuje alespoň $T$ hranově disjunktních cest.

Proof:

$\Leftarrow$ Pokud bychom měli řez T-1 a rozpojili ho, pak vzali vrcholy z výsledných různých komponent, mezi kterými mělo vést T hranově disjunktních cest, tak řez T-1 hran nemohl stačit.

$\Rightarrow$ Vezmeme maximální tok, který je alespoň T, protože minimální řez je T; Potom vynulujeme cirkulace a ukážeme, že FF by celou dobu pracoval v celých číslech, nalezený tok můžeme upravit tak, že jednu cestu vynulujeme, tím se sníži tok o 1 a našli jsme jednu cestu; takto postupně získáme alespoň T hranově disjunktních cest.

Mengerova věta: Vrcholová souvislost $\ge T \Leftrightarrow$ mezi každými dvěma různými vrcholy u a v existuje alespoň $T$ vrcholově (až na start a cíl) disjunktních cest.

Proof: (náznak) Důkaz je podobný FF.

$\Leftarrow$ opět sporem, že bychom potřebovali větší vrcholový řez

$\Rightarrow$ graf zorientujeme a rozdělíme vrcholy (podmínku pro průchod každého max 1) a tok převedeme na vrcholově disjunktní cesty.

Párování

Párování je množina nezávislých hran. Perfektní párování má |V|/2 hran, a tedy pokrývá všechny vrcholy.

Edmondsův Blossom algoritmus dovede párování najít v polynomiálním čase.

V bipartitních grafech se tato úloha dá lehce převést na toky, protože jde o maximální tok z jedné partity do druhé s tím, že každý vrchol má max přítok / odtok 1. FF zde zafunguje v O(nm).

Systém rýzných reprezentantů (SRR) je funkce $f:I \rightarrow X$ taková, že pro každé i z I je f(i) z Mi, a že f je prosté; tedy výběr jednoho prvku (reprezentanta) z každé množiny Mi tak, že každý vybraný prvek je vybrán maximálně jednou množinou.

Hallova věta: SRR existuje $\Leftrightarrow$ Pro každou podmnožinu množin M, označme jejich počet K, je sjednocení jejich prvků alespoň velikosti K.

Proof:

$\Rightarrow$ Jelikož má každá množina vlastního reprezentanta, tak jejich sjednocení bude mít alespoň K disjunktních prvků, právě ty reprezentanty; (obměnou) Pokud je menší, tak není dost reprezentantů aby šlo vybrat různého reprezentanta pro každou.

$\Leftarrow$ TODO

Edmondsův (Blossom) algoritmus pro hledání maximálního párování na obecném grafu

Uvažujme graf G, na kterém je částečné párování M. Volná střídavá cesta VSC je cesta, která začíná a končí v nespárovaných vrcholech, a každá její druhá hrana je v párování M. Zřejmě prohozením párovaných a nepárovaných hran ve VSC lze párování vylepšit. Zajímavé je, že pokud G nemá VSC, tak je M maximální (lze konstruktivně ukázat).

V bipartitních grafech umíme maximální párování hledat efektivně, proto se zaměříme na liché kružnice. Květ vzhledem k M je lichá kružnice v G velikosti K, kde (K-1)/2 hran kružnice je v M, a poslední vrchol (ten nespárovaný uvnitř květu) je součástí stonku. Stonek je cesta sudé délky, kde se střídají hrany v M a mimo M (připouštíme i délku 0). Nyní hlavní myšlenka: Pro graf G s květem K je párování M maximální $\Leftrightarrow$ M bez hran C je maximální pro G s kontrahovaným C. Toto tvrzení lze ukázat tak, že VSC existuje v G $\Leftrightarrow$ VSC existuje v G’; hlavní je rozbor případů při kontrakci květu, kde nějaké VSC květ a stonek protíná.

Díky této rovnosti můžeme graf kontrahovat, najít zlepšující VSC v bipartitním grafu, a pak graf dekontrahovat a dostat VSC v původním grafu. Toto zopakujeme nejvýše N-krát, a dostaneme maximální párování.

Technické detaily:

  • Jak najít květ: budeme v G hledat VSC pomocí DFS, když narazíme na již projitý vrchol ve druhé paritě, tak část před opakovaným vrcholem je stonek, a onen cyklus je květ.

Hladové algoritmy ?

(jednalo se jen o obecnou charakterizaci hladových algoritmů, resp. úloh, na jejichž řešení jdou použít)

Mohutnost množin konečných struktur (zobrazení, relací, stromů, ap)

  • Počet všech bijektivních zobrazení N do N ($N!$), všech funkcí ($N^N$).
  • Počty relací ruznýho typu
    • reflexivních (diagonála 1, zbytek 0/1 = $2^{n^2-n}$),
    • symetrických (dolní trojúhelník 0/1 = $2^{n(n+1)/2}$),
    • asymetrických (diagonála 0, zbytek buď 00,01,10 = $3^{n(n-1)/2}$),
    • antisymetrických (diagonála 0/1, zbytek 00,01,10 = $2^n . 3^{n(n-1)/2}$).
  • Počet zakořeněných stromů (Catalanovo číslo, tj. $({1 \over {n+1}}) \cdot {2n \choose n}$).

# Catalanovo číslo

Catalanovo číslo ↗ $C_n$ je rovno počtu

  • binomiálních stromů na $n$ vrcholech,
  • validních uzávorkování $2n$ závorkami,
  • průchodů $n \times n$ mřížkou nad diagonálou z jednoho do druhého rohu,
  • triangulací konvexního polygonu,
  • (a mnoho dalšího).

$$ C_n = \binom{2n}{n} - \binom{2n}{n+1} = \frac{1}{n+1}\binom{2n}{n} $$

Tyto počty se na sebe vzájemně bijektivně převádějí.

Ukážeme si důkaz počtu binárních stromů pomocí generujících funkcí.

Věta: Počet zakořeněných binárních stromů na $n$ vrcholech je roven Catalanovu číslu $C_n$.

Proof: Pro počet vrcholů $n$ můžeme počet binárních zakořeněných stromů $P(n)$ spočítat tak, že strom rozdělíme na jeden kořen, levý podstrom a pravý podstrom. Vyjádřeno formálně $$ P(n)=\sum_{i=0}^{n-1} \big(P(i) \cdot P(n-1-i)\big). $$ Tento součet je stejný jako koeficient při $x^{n-1}$ v násobku $A_1 \cdot A_2$ dvou polynomů tvaru $A_1=A_2=(P(0)x^0 + P(1)x^1 + \dots + P(n-1)x^{n-1})$. Tyto polynomy můžeme rozšířit na nekonečné řady $B(x) = (P(0)x^0 + P(1)x^1 + \dots)$, protože členy s alespoň $x^n$ se do výsledného členu při $x^{n-1}$ nepromítnou. $B(x)^2$ nám dá správnou hodnotu při koeficientu $x^{n-1}$, přenásobením celku $x$ jej posuneme na $x^n$. Platí, že členy B(x) jsou rovny členům $xB(x)^2$ pro všechny členy s $x \ge 1$ (ty, které definuje náš vzorec). Avšak, konstantní koeficient při polynomu $B(x)$ má být $1$, proto bude platit $$ B(x)=1+xB(x)^2. $$ Vyřešíme kvadratickou rovnici pro 'proměnnou' $B(x)$, a dostáváme kořeny $B_1(x) = (1+\sqrt{1-4x}) / 2x$ a $B_2(x) = (1-\sqrt{1-4x}) / 2x$. Vzhledem k tomu, že první kořen v nule diverguje, nemůže být generující funkcí. Odmocninu upravíme pomocí zobecněné binomické věty $(1-4x)^{1/2} = \sum_{k=0}^{\infty} \binom{1/2}{k}(-4x)^k$. První člen rozvoje se pokrátí s $1$, a zbytek jde vydělit $2x$, substituujeme $k'=k-1$. $$ B(x) = \frac{1-\sqrt{1-4x}}{2x} = \frac{1-\sum_{k=0}^{\infty} \binom{1/2}{k}(-4x)^k}{2x} = 2\sum_{k'=0}^{\infty} \binom{1/2}{k'+1}(-4x)^{k'} $$ Z $B(x)$ nás zajímá pouze člen při $x^n$, což je $-\frac{1}{2}{(-4)}^{n+1}\binom{1/2}{n+1}$. $$ -\frac{1}{2}{(-4)}^{n+1}\binom{1/2}{n+1} =^{(1)} -\frac{1}{2}{(-4)}^{n+1}\frac{\prod_{i=0}^n (\frac12-i)}{(n+1)!} $$ $$ =-\frac{1}{2}(-1)^{n+1}2^{2n+2}\frac{\prod_{i=0}^N (\frac12-i)}{(n+1)!} =-(-1)^{n+1}2^{2n+1}\frac{\prod_{i=0}^n (\frac12-i)}{(n+1)!} $$ $$ =^{(2)}-2^{2n+1}\frac{\prod_{i=0}^n (i-\frac12)}{(n+1)!} =^{(3)}-2^{n}\frac{\prod_{i=0}^n (2i-1)}{(n+1)!} =^{(4)}2^{n}\frac{\prod_{i=1}^n (2i-1)}{(n+1)!} $$ $$ =\frac{\prod_{i=1}^n (2i-1)}{(n+1)n!}\frac{2^{n}n!}{n!} =\frac{\prod_{i=1}^n (2i-1)}{(n+1)n!}\frac{\prod_{i=1}^n (2i)}{n!} $$ $$ =^{(5)}\frac{\prod_{i=1}^{2n} i}{(n+1)n!n!} =\frac{1}{n+1}\frac{(2n)!}{n!n!} =\frac{1}{n+1}\binom{2n}{n} $$
  1. zobecněná binomická věta
  2. $n+1$ aplikování $-1$ na produkt v čitatli
  3. $n+1$ pronásobení $2$ na produkt v čitatli
  4. vyndání prvního členu (-1) z produktu čitatele
  5. spojení produktů lichých a sudých čísel do společného produktu

Sadou úprav jsme se dostali ke kanonickému tvaru Catalanova čísla.


Teorie grafů

# Intervalové grafy

Graf G je Intervalový graf (ISGCI ↗) pokud existuje množina reálných intervalů, které reprezentují vrcholy, takových, že dva intervaly mají neprázdný průnik právě tehdy, když příslušné vrcholy jsou spojené hranou.

  • Intervalové grafy jsou podmnožina chordálních (a tedy i perfektních) grafů.
  • Graf je intervalový právě tehdy když je chordální, a jeho doplněk je comparability graf (aneb. graf převoditelný na poset; ten AB hranou ukáže, že je interval A vpravo od intervalu B).
  • Na intervalovém grafu lze polynomiálně řešit mnoho problémů, jako najít optimální obarvení, maximální (váženou) kliku, (vážená) nezávislá množina, dominance, hamiltonovský cyklus a cesta, klikové pokrytí, či isomorfismůs grafů.

Rozpoznání Intervalových grafů lze udělat v lineárním čase. Původní postup to řešil pomocí p,q-stromů. Novější postup to řeší za pomoci 6 iterací LexBFS.

# Chordální grafy

Graf je chordální graf (ISGCI ↗) pokud neobsahuje indukovanou kružnici velikosti alespoň 4. Jinak řečeno, každá kružnice má chordu.

  • Jsou podmnožinou perfektních grafů.
  • Vlastnost zjevně platí i pro všechny indukované podgrafy.
  • Vždy obsahuje vrchol, jehož sousedství indukuje kliku (simpliciální vrchol).
  • Sekvence iterativního odebírání simpliciálního vrcholu tvoří (vrcholové) Perfektní Eliminační Schéma (PES).
  • Graf je chordální $\Leftrightarrow$ graf má PES.
  • PES lze použít pro výstavbu optimálního stromového rozkladu. Bag bude vždy vrchol a pravé sousedství v PES. Bagy se skládají z klik, takže lepší dekompozice nejde vytvořit.
  • Chordální grafy jsou ekvivaltení průnikovým grafům podstromů ve stromě.
  • Polynomiálně řešitelné problémy obsahují optimální obarvení (FF na PES), (vážená) klikovost, (vážená) nezávislá množina, stromová dekompozice, feedback-vertex set, a lineárně rozpoznání
  • NP-complete je dominující množina, hamiltonovský cyklus a cesta, a max-cut

Polynomiálně lze najít PES lehce iterativním odebíráním simpliciálního vrcholu. PES se dá lineárně najít pomocí LexBFS.

Lemma: Každý v inkluzi minimální vrcholový řez je úplný.

Proof: Každý vrchol je spojen s každou zbylou komponentou (jinak není v inc. min.). Kdyby mezi dvěma vrcholy $x,y$ nebyla hrana, tak nejkratší cesta $x,H_1,y$ spojená s nej. cestou $y,H_2,x$ tvoří kružnici bez chordy.

Lemma: Každý chordální graf má simpliciální vrchol.

Proof: Pokud je $K_n$ či $|V| \le 4$ tak je to zřejmé. Jinak indukcí nad počtem vrcholů ukážeme, že $G$ obsahuje dva nesousední simpliciální vrcholy. Jinak lze postupovat indukcí nad počtem vrcholů, rozdělením grafu podle vrcholového řezu $A$ na $(G_1 \cup A)$ a $(G_2 \cup A)$. A je klika, tak tam je z indukce max jeden, a druhý vrchol zůstává simpliciální i po spojení.

# Perfektní grafy

Erdős ukázal, že existují grafy s velikým girth (obvod) a velikou barevností – u takových grafů je barevnost v jistém smyslu globální vlastnost, protože lokálně jsou tyto grafy podobné stromům. Tento výsledek otevřel otázku o grafech, kde je barevnost daná pouze lokálními vlastnostmi.

Graf je perfektní (ISGCI ↗) právě tehdy, když pro každý jeho indukovaný podgraf je barevnost rovna klikovosti.

  • slabá věta o perfektních grafech (Lovász): graf je perfektní $\Leftrightarrow$ doplněk grafu je perfektní
  • silná věta o perfektních grafech (Sezmour a spol.): graf je perfektní $\Leftrightarrow$ graf ani jeho doplněk neobsahují lichý indukovaný cyklus velikosti alespoň 5

Další vlastnosti

  • polynomiálně řešitelné jsou barevnost, nezávislá množina, klikovost, a rozpoznání
  • NP-complete je dominující množina, hamiltonovký cyklus a cesta, feedback-vertex set

recognition todo?

Vztah tříd a složitostní dopady speciálních tříd grafů

intervalové $\subset$ chordální $\subset$ perfektní

Složitosti problémů podle ISGCI:

vlastnost / problém intervalové chordální perfektní obecné
rozpoznání lin lin poly
3-barevnost lin lin poly NP-com.
barevnost lin lin poly NP-com.
nezávislá mn. lin lin poly NP-com.
klika poly poly poly NP-com.
stromová dekompozice poly poly NP-com.
Feedback vertex set lin poly NP-com. NP-com.
dominující mn. lin NP-com. NP-com. NP-com.
isomorfismus lin GI-com. ↗ GI-com. GI-com.
Hamiltonovský cyklus lin NP-com. NP-com. NP-com.
Hamiltonovská cesta poly NP-com. NP-com. NP-com.

Minory

Reflexivní a tranzitivní relace je quasi-ordering (alt en: preorder, cs: Kvaziuspořádání). Pokud máme i < j a x_i <= x_j, potom (x_i,x_j) je good pair. Sekvence je good pokud obsahuje good pair. Quasi-ordering je well-quasi-ordering právě tehdy, když každá jeho nekonečná vybraná podposloupnost je good. Well-quasi-ordering jsou právě takové, které neobsahují nekonečný antichain, nebo nekonečnou klesající poloupnost (dk via Ramsey theorem 3 obarvení relace <, >, ~=).

Pro relaci minoru se dá ukázat, že je uzavřená, a well-quasi-ordered, a proto každá třída grafů, která je uzavřená na minory, je vyjadřitelná konečným množstvím zakázaných minorů.

Stromová šířka

Stromová šířka (alt: Stromový zdvih)

Stromová dekompozice grafu $G$ je strom $T$, kde každý vrchol stromu je pozmnožina (bag) $X_1, X_2, \dots$ vrcholů G, a kde T splňuje následující podmínky.

  1. Každý vrchol z $V(G)$ je obsažen v nějakém $X_n$,
  2. každá hrana z $E(G)$ má v nějakém $X_n$ obsažené oba incidentní vrcholy,
  3. pro každou dvojici bagů $X_i$ a $X_k$ platí, že jejich průnik je podmnožina všech $X_j$ na cestě z $X_i$ do $X_k$ v $T$.

Alternatnvně lze 3. podmínka formulovat tak, že každý vrchol z $V(G)$ je obsažen v souvislém podstromu $T$.

Stromová šířka $tw(G)$ grafu $G$ je velikost největší bag mínus $1$. (Stromy mají stromovou šířku $1$.)

Zjištění stromové šířky grafu je NP-hard. Konstrukce dekompozice s šířkou nejvýše $k$ je FPT v $k$, tj. v $k$-exponenciální, ale v $n$ je lineární – pro málá $k$ tractable.

  • Pokud $H \preccurlyeq G$ (minor), potom $tw(H) \le tw(G)$.
  • Stromová šířka rovinných grafů s $n$ vrcholy je $O(\sqrt{n})$.
  • $tw(K_n)=n-1$, $tw(K_{a,b}) = \min{a,b}-1$, expandery mají $tw = \Omega(n)$

Každá dekompozice se dá převést na hezkou dekompozici, tj. dekompozice bude reprezentovaná zakořeněným stromem, rozdíl dvou bagů bude max v jednom vrcholu, a pokud má vrchol dekompozice více jak jednoho syna, tak je jeho bag totožný s bagy synů. Hezká dekompozice rozlišuje 3 typy vrcholů: introduce (přidá vrchol), forget (odebere vrchol), a join (má více synů). Dá se zkonstruovat v čase $O(k^2 \cdot \max(|V(T)|,|V(G)|))$ a má nejvíce $O(k \cdot |V(G)|)$ vrcholů.

Na hezké stromové dekompozici lze (s trochou cviku) navrhnout DP pro rychlý výpočet obecně těžkých úloh. Často je DP podobné klasické stromové dynamice, ale namísto $S$ stavů v jednom vrcholu budeme mít $S^K$ v každém bagu, kde $K$ je velikost bagu. Více v sekci algoritmy na stromovém rozkladu.

Dualita s Brabmlemi

Bramble je množina bramblátek, tj. souvislých množin vrcholů, které se po dvojicích překrývají nebo alespoň sousedí.

Velikost bramble je nejmenší hitting set, tj. nejmenší množina vrcholů takových, že v každém bramblátku je alespoň jeden.

Theorem (tree-width duality, Seymour & Thomas): Mějme celé číslo $k \ge 0$. Graf má $tw(G) < k \Leftrightarrow G$ neobsahuje brambli řádu $>k$.

Proof: (skeč) V dekompozici najdeme bag, který pokrývá brambli. Mějme iniciální bag, který nepokrývá všechny bramblátka. Najdeme kde v dekompozici je bramblátko a pohneme se blíže k němu. Bramblátka nemohou být ve více částech, protože by se nemohli dotýkat dle jejich definice. Ze stejného důvodu nemůže bramblátko přestat být pokryté vybraným bagem.

Druhý směr je docela těžký. (todo?)

Dualita s Chordálními grafy

Theorem: $tw(G) = \min {\omega(H)-1 \mid G \subseteq H; H\text{ je chordální} }$, tj. slovy, největší bag optimální dekompozice je roven klikovosti chordálního nadgrafu s nejnižší klikovostí.

Proof: U chordálních grafů je jednoduché najít optimální dekompozici, a tak máme $tw(G) \le tw(H) = \omega(H)-1$.

Na druhou stranu, když máme optimální dekompozici $G$, tak můžeme do $G$ přidat všechny (neexistující) hrany, které budou v nějakém bagu. Každý bag se stane klikou, a z G je chordální nadgraf H, kterému se nezvýšilo $tw$, a proto $tw(H) \le tw(G)$.

Stromová šířka = Velikost bramble - 1

Hledání stromového rozkladu

Theorem (Bodlaender): Existuje algoritmus, který pro $n$-vrcholový graf $G$ a konstantu $k$ v čase $k^{O(k^3)} \cdot n$ najde stromovou dekompozici s šířkou $k$ nebo řekne, že šířka je $>k$.

TODO: algoritmus, pro nalezení stromové šířky?

Cestová šířka (alt: Cestný zdvih) (definice)

Cestová dekompozice grafu G je sekvence podmnožin $(X_1,X_2,\dots)$ vrcholů V(G), která dodržuje dvě vlastnosti:

  1. Pro každou hranu z $E(G)$ platí, že v některé podmnožině $X_n$ se vyskytují oba incidentní vrcholy, a
  2. pro každé $i \le j \le k$ platí, že průnik $X_i$ a $X_k$ je podmnožina $X_j$.

Cestová šířka je velikost největší množiny mínus 1.

Je stejná jako stromová dekompozice, kde je graf dekompozice cestou.

Kliková šířka (alt: Klikový zdvih) (definice)

Kliková šířka grafu G je minimální počet barev, který je potřeba pro vytvoření grafu G pomocí následujících čtyř operací:

  1. Vytvoření nového isolovaného barevného vrcholu,
  2. Disjunktní sjednocení dvou barevných grafů,
  3. Spojení dvou různých barevných tříd úplným bipartitních grafem,
  4. Přebarvení všech vrcholů stejné barvy na jinou barvu.

Kografy jsou grafy právě s klikovou šířkou 2.

Uzavřené na indukované podgrafy.

Bounda na klikovou šířku je cca $2^{tw}$, takže když je stromová šířka bounded, tak je i kliková šířka bounded.

Konstruováni dekompozice i když máme předem dané $k$ je NP-těžký.

NLC width

Podobné klikové šířce, jen má upravené operace:

  1. Vytvoření nového isolovaného barevného vrcholu,
  2. Přemapování barev vrcholů,
  3. Disjunktní sjednocení dvou barevných grafů, a přidání hran $e \in (u,v), u\in A, v\in B$ kde $(A,B) \in S \subseteq G_A \times G_B$, tj. při operaci vybereme jaké dvojice značek se mají propojit úplným bipartitním grafem.

$\text{NLC} \le \text{kliková šířka} \le 2 \cdot \text{NLC}$

Vztah mezi šířkami (stručně)

Cestová dekompozice je stromová dekompozice, kde graf dekompozice je cesta, takže je stejná nebo větší.

Husté grafy mohou mít omezenou klikovou šířku, ale obecně nemají omezenou stromovou šířku. Konkrétně, pokud má třída grafů omezenou klikovou šířku, tak buď má omezenou stromovou šířku, nebo každý bipartitní graf je podgrafem nějakého grafu z této třídy.

# Algoritmy pro grafy s omezenou stromovou šířkou

Běžně se jedná o dynamiku nad bagy. Navrhujeme DP pro hezkou dekompozici, tj. zakořeněný binární strom, kde přechod v dekompozici se skládá pouze z přidávání a odebírání vrcholů, a všechny větvící vrcholy nemění obsah bagu. Stačí navrhnout pouze 3 druhy operace:

  • Přidání vrcholu (hrany),
  • Odebrání vrcholy (hrany),
  • Merge dvou podstromů identickým bagem na rozhraní.

Příklady řešitelných problémů:

  • vážená nezávislá množina / vrcholové pokrytí $2^k k^{O(1)} n$ – stavy: free a forbidden; intro pouze přidá, remove dovolí pokrýt, join sečte podvýsledky
  • dominující množina $4^k k^{O(1)} n$ – navíc v dekompozici má introduce edge node; stavy: free, covered a taken; intro pouze přidá, remove může pokrýt, join zas sečte
  • Steinerův strom $k^{O(k)} n$ – dek. má introduce edge node; přidá do každého bagu jeden z terminálů, aby měl neprázdné mezistavy; stav bagu: connected komponenty ve Steinerově lese (části řešení); introduce node vytvoří komponentu pokud je vrchol terminál, introduce edge potencielně spojí komponenty, forget node nechá nejlepší ze sloučených dělení po odebrání vrcholu, join musí dát bacha by nenadělal cykly (nesmí spojit do kruhu ani prvky s dvou komponent, tak ani komponenty dohromady)
  • feedback vertex set, hamiltonian path & cycle, chromatic number, cycle packing, connected VC DS a FVS

# Monadická logika druhého řádu

Pojem monadická logika druhého řádu popisuje logiku ↗ rozšířenou následovně.

  • monadická – dovolujeme kvantifikace přes podmnožiny prvků
  • druhého řádu – podmnožinové kvantifikace lze dělat přes vrcholy i hrany (první řád jsou pouze vrcholy), to je způsobeno tím, že v $MSO_2$ se grafu můžeme ptát na indicenci, v $MSO_1$ se ptáme pouze na sousednost vrcholů

Pro představu následuje příklad z modré knížky na kontrolu souvislosti množiny $X$. $$ conn(X) = \forall_{Y \subseteq V} \big[(\exists_{u \in X}, u \in Y \wedge \exists_{v\in X}, v\not\in Y) \Rightarrow (\exists_{e\in E}, \exists_{u\in X}, \exists_{v\in X}, inc(u,e) \wedge inc(v,e)\wedge u\in Y \wedge v\not\in Y)\big]. $$ Tento výraz kontroluje, jestli existuje množina vrcholů $Y$, která neporkývá celé $X$, ale zároveň v $X$ neexistuje hrana z $Y$ do $\neg Y$. Takže pokud je $X$ nesouvislé, tak $Y$ může pokrýt jednu z jeho komponent, a formule zdetekuje, že $X$ není souvislé.

V $MSO_2$ máme proměnné pro vrcholy, hrany, a podmnožiny vrcholů či hran, přes které kvantifikujeme univerzálním $\forall$ a existenčním $\exists$ kvantifikátorem. Dále je k disposici funkce incidence $int(u,e)$, logické operátory $\wedge,\vee,\Rightarrow,\neg$, a dále $\in, =$, a řadu zkratek $\subseteq, \neq$ či kvantifikace přes možiny různé od $V$ a $E$.

  • souvislost – ukázáno výše
  • dělení na konstantní počet množin – vypíšeme, že vrchol je právě v první, nebo v druhé, …
  • nezávislá množina – nejsou v ní 2 sousední vrcholy
  • 3 barevnost – existuje dělení vrcholů na 3 množiny, kde každá je nezávislá
  • vrcholy stupně 2 – pro vrchol existují 2 různé sousední hrany, každá další hrana je buď rovna té první či druhé
  • souvislost hran – podobné vrcholové
  • hamiltonovský – výběr souvislých hran takový, že všechny vrcholy mají stupeň 2

Courcellův teorém

Každá grafová vlastnost vyjádřitelná v $MSO_2$ monadické logice druhého řádu na grafech formulí $\varphi$ délky $||\varphi||$ s omezeonu stromovou šířkou $t=tw(G)$ lze rozhodnout v čáse $f(||\varphi||,t)\cdot n$.

Barevnost

Rozhodnout, jestli lze graf $k$-obarvit ($k \ge 3$) je NP-úplný problém. Pro rovinné grafy platí $\chi(G) \le 4$ (důkaz netriviální). Důkaz pěti barev je relatively ezy (buď Thomassen z vybíravosti, nebo přímo přes dvoubarevné chainy ve stylu důkazu šesti barev).

Důkaz šesti barev je skoro triviální.

Proof: Eulerova formule nám dává, že v rovinném grafu je vrchol stupně 5. $$ 1+C=V-E+F, F \le 2E/3, E \le 3V-6 $$ Když budeme mít obrácené pořadí iterativního odebírání vrcholů stupně nejvýše 5, tak při vracení vrcholů do grafu má každý v tu chvíli maximálně 5 sousedů, a tak vždy zbude šestá barva, kterou jde obarvit.

Důkaz pěti barev také není těžký.

Proof: Postupujeme stejně jako v důkazu šesti barev, jen je potřeba vyřešit případ, kdy vracený vrchol stupně 5 má všechny sousedy různé barvy. Označme sousedy v cyklickém pořadí $A,B,C,D,E$ a jejich barvu funkcí $c$. Zaměřme se na podgraf $G$ indukovaný vrcholy barvy $c(A)$ a $c(C)$, a jestli v něm jsou vrcholy $A$ a $C$ ve stejné komponentě. Pokud ne, tak lze prohodit barvy $c(A)$ a $c(C)$ v komponentě $C$, a pak by měli $A$ i $C$ stejnou barvu. Pokud jsou ve stejné komponentě, uděláme stejné pozorování na vrcholy $B$ a $D$. Ovšem nyní je garantované, že nejsou ve stejné $BD$-komponentě, protože by se cesta musela v rovinném nakreslení křížit s $AC$-cestou, ale to nemohou, protože nesdílejí barvy.

Brook’s theorem: Barevnost grafu $\chi(G) \le \Delta-1$, pokud $G$ není klika nebo lichý cyklus.

Proof: Uvažujme souvislý neúplný graf. Takový graf má indukovanou cestu na třech vrcholech, které označíme vrcholy v pořadí $x,v,y$ ($x,y$ nejsou spojeny). Vyrobme kostru z vrcholu $v$ a orientujme v ní hrany k $v$. Vyrobme topologické uspořádání této kostry, ve kterém ale dáme $x$ a $y$ na začátek. Obarvíme vrcholy v pořadí uspořádání první volnou barvou. $x$ a $y$ jsou obarveny stejně, a zjevně všem vrcholům až na $v$ bude stačit $\Delta$ barev, protože mají v uspořádání vždy jednoho souseda v uspořádání dál (neobarveného). $v$ ale také bude stačit pouze $\Delta$ barev, protože $x$ a $y$ mají stejnou barvu.

Hranová barevnost

Barvíme hrany, žádné dvě incidentní hrany nesmí mít stejnou barvy (dobré obarvení). Hranové chromatické číslo $\chi’(G)$ je minimální počet barev, kdy existuje dobré obravení. Pozorujeme, že $\chi’(G)=\chi(L(G))$, kde $L(G)$ line graf, takže lze na hranovou barevnost nahlížet jako barevnost na speciální třídě grafů.

Každá hrana je incidentní nejvýše $2(\Delta(G)-1)$ hranám, a proto $\chi’(G) \le 2\Delta(G)-1$. Navíc, pro grafy s $\Delta(G) \ge 3$ dává Brooksova věta boundu $\chi’(G) \le 2\Delta-2$.

Königova věta (1916): Pro bipartitní grafy $\chi’(G) = \Delta(G)$.

Proof: Postupujme indukcí nad počtem hran. Pro $|E|=0$ není co dokazovat. Nyní uvažujme, že tvrzení platí pro všechny grafy s počtem hran menším než $|G(E)|$. Odeberme z $G$ hranu $\{x,y\}$ a z indukce dostaneme obarvení upraveného grafu $G'$. Rozeberme jak upravit obarvení po navrácení hrany $\{x,y\}$ do $G'$.
  • stupeň (búno) vrcholu $x$ v $G’$ je $\le \Delta-1$, ale jedna z chybějících barev není incidentní ani $y$ – pak lze vybrat chybějící barvu,
  • stupeň (búno) vrcholu $x$ v $G’$ je $\le \Delta-1$, ale chybějící barva B je incidentní $y$ – pak existuje barva $A$ incidentní $x$ a neincidentní $y$, vyberme $AB$-střídavou cestu z $x$ a pozorujeme, že nemůže skončit v $y$ (protože $y$ není incidentní $A$), nakonec prohodíme barvy $AB$ střídavé cesty, což umožní obarvit ${x,y}$ barvou $A$.

Vizingova věta (1964): Hranová barevnost $\chi’(G)$ je vždy $\Delta$ nebo $\Delta+1$.

Proof: Zjevně $\chi'(G) \ge \Delta$. Nyní ukážeme, že algoritmus doobarvení jedné neobarvené hrany pomocí $\Delta+1$ barev. Tímto algoritmem budeme moci postupně postavit a barvit hrany celého grafu.

Mějme barvy $B={1,\dots,\Delta+1}$. Mějme $G$ a jeho obarvení $c:E(G)\rightarrow B$ s jednou neobarvenou ${x,y_1}$ hranou, a funkci $m:V(G) \rightarrow B$ (missing), která říká jaká barva není incidentní vrcholu $v$. Pokud $m(x)=m(y_1)$, tak můžeme ${x,y_1}$ obarvit barvou $m(x)$. Jinak vezměme maximální seznam sousedů $x$ značený $Y = {y_1,y_2,\dots,y_h}$, pro který platí $m(y_i)=c({x,y_{i+1}})$ pro $1 \le i \le h-1$ (Obrázek 1). Pokud $m(y_h)=m(x)$, tak přehodíme barvy hran $c({x,y_i}) := m(y_i)$ pro $1 \le i \le h$ (Obrázek 2). Jinak víme, že $m(y_i)\ne m(x)$ takže existuje $j < h$ pro které $m(y_h)=c({x,y_j})$, (pro $j > h$ by $Y$ nebylo maximální). Jako první krok přebarvíme $c({x,y_i}) := m(y_i)$ pro všechna $i < j$ a odbarvíme hranu ${x,y_j}$ (Obrázek 3). Buď $$ H_{c_1,c_2}\subseteq (V(G),{e\in E(G) \mid c(e)=c_1 \vee c(e)=c_2}), $$ slovy je to graf, kde jsou ponechané jen hrany barvy $c_1$ a $c_2$ (červená barva na obrázku). Zjevně má $\Delta(G)\le 2$, takže se jedná o disjunktní sjednocení cest a kružnic, konkrétně vrcholy kde $m(v) \in {c_1,c_2}$ jsou ty kde jsou konce cest.

Pozorujme strukturu $H_{m(x),m(y_h)}$. Pokud $x$ a $y_j$ jsou v $H_{m(x),m(y_h)}$ konce různých cest, tak můžeme v jedné cestě prohodit barvy $m(x)$ a $m(y_j)$, což způsobí, že $m(x)=m(y_j)$ a lze tuto barvu použít pro neobarvenou hranu (Obrázek 4). Pokud však $x$ a $y_j$ jsou konce stejné cesty, tak cesta vedoucí z $y_h$ nemůže být napojena na $x$. Obarvíme zbytek až po $y_h$, tj. $c({x,y_i}) := m(y_i)$ pro $j\le i < h$ a odbarvíme $h$. Prohodíme barvy $m(x)$ a $m(y_h)$ v komponentě $H_{m(x),m(y_h)}$ vrcholu $y_h$, čímž bude $m(y_h)=m(x)$ a můžeme tuto barvu použít pro neobarvenou hranu (Obrázek 5).

Ilustrace případů v důkazu Vizingovy věty

Legenda obrázku: barvy hran: černá (obarvená), čárkovaná (neobarvená), zelená (poslední dobarvení), červená (podgraf $H_{m(x),m(y_h)}$, modré šipky (posun obarvení), červený čárkovaný ovál (prohození barev $m(x)$ a $m(y_h)$.

Vizingův výsledek dělí grafy na Vizingovu třídu 1 ($\chi’(G)=\Delta$) a třídu 2 ($\chi’(G)=\Delta+1$). Rozhodnout jestli $G$ patří do Vizingovy třídy 1 je NP-úplné.

Seznamová (listová) barevnost a Vybíravost

Vybíravost $ch(G)$ je minimální velikost seznamů barev každého vrcholu taková, že pro libovolně vybrané seznamy existuje dobré obarvení grafu, kde má každý vrchol barvu z jeho seznamu.

  • Barevnost je vždy nejvýše vybíravost, tj. $\chi(G) \le ch(G)$.
  • Obdobně pro hranovou vybíravost a hranovou barevnost platí $\chi’(G) \le ch’(G)$.
  • Barevnost úplného bipartitního grafu je 2, ale vybíravost této třídy není omezená.
  • Zjevně $ch(G) \le d+1$ (degenerovanost)
  • je NP-hard (claim z GAK – je NP-úplný)
  • Brooksův teorém lze dokázat i pro vybíravost.

Thomassenova věta (vybíravost rovinných grafů $\le 5$):

Proof: Doplňme G na rovinnou vnější triangulaci, vnitřní vrcholy mají seznamy velikosti 5, krajní cyklus mimo hranu {x,y} má listy velikosti 3, a x a y mají listy velikosti 1; G má seznamové obarvení. Dokážeme indukcí na počtu vrcholů: Pro 3 jasně platí. Pokud má vnější cyklus chodru, která rozděluje graf na G1 (kde je na obvodu x a y) a G2, tak můžeme z indukce vyřešit G1 a následně zafixovat jeho barvy a dořešit G2. Pokud nemá chordu, tak sousedu w vrcholu x odebereme z listu jedinou barvu listu x, a všem jeho vnitřním sousednům ze seznamů odebereme jeho seznam dvou zbývajících barev. Nyní odebráním w máme menší graf, který má stále vnější cyklus (w nemohl být na chordě), kde jeho vrcholy mají listy velikosti 3 a vrcholy x y mají listy velikosti 1. Při navrácení w do grafu může být pouze druhý soused na vnějším cyklu (mimo x) obarven barvami z listu w, tak w vybereme tu druhou barvu.

Theorem: Existuje rovinný graf s vybíravostí vyšší než 4, takže vybíravost třídy rovinných grafů je 5.

Proof: Konstrukce tkví ve vytvoření "banánů", tj. rovinných grafů, které nemohou být obarveny konkrétní dvojicí barev (např. 12-banán nemůže mít na jednom konci 1 a na druhém 2). Banány pak spojíme vedle sebe ve všech kombinacích mezi dva vrcholy $x$ a $y$, tudíž nemohou mít žádnou dvojici barev, protože vždy existuje banán, který té kombinaci brání.

banánová konstrukce

Výše vidíme ilustraci banánové konstrukce z předmětu GAK.

Dinitzova domněnka

Domněnka o seznamové barevnosti (Dinitz): Každý graf splňuje $ch’(G) = \chi’(G)$.

Jádro orientovaného grafu $J(G)$ je nezávislá množina, která je zároveň dominující ve směru proti hranám. Jinak řečeno, $\forall_{v\in (V(G) \setminus J(G))}, \exists_{u\in J(G)}, (v,u) \in E(G)$. (Ne každý graf má jádro, např. lichý orientovaný cyklus.)

Lemma: Pro graf $G$ a jeho orientaci $\bar G$, kde $deg^-(v) \le k$ a kde $\forall \bar H \subseteq_{ind} \bar G$ má $\bar H$ jádro, potom $ch(G)\le k+1$.

Proof: Vezměme barvu $c$ a podgraf $\bar H$ indukovaný vrcholy s listy obsahující barvu $c$. Určeme vrcholy jádra $\bar H$ a zafixujme jim barvu $c$, a odstraňme je z grafu $G$. Z ostatních vrcholů barvu $c$ odstraníme z listu. Všem vrcholům, kterým jsme odebrali barvu z listu jsme snížili výstupní stupeň. Výstupní stupeň byl na začátku $\le k$, tudíž listy velikosti $k+1$ budou stačit.

Lemma: Každá orientace bipartitiního grafu má jádro.

Proof: Indukce nad počtem vrcholů. Isolované vrcholy zahrňme do jádra vždy. Pokud má stok, tak dejme stok do jádra, odeberme ho a všechny jeho předchůdce, použijme indukci na zbytek grafu. Pokud nemá stok, tak $deg^-(v) \ge 1$, a stačí vzít celou jednu partitu.

Věta: Vybíravost rovinných bipartitních grafů je rovna 3.

Proof: Horní mez plyne z předchozích lemmat, pokud ukážeme existenci orientování $\bar G$ bipartitního grafu $G$ takové, že $deg^-(v) \le 2$. Dolní mez je daná protipříkladem na $K_{2,4}$.

Pro rovinné bipartitní grafy platí $|E| \le 2|V|-4$. Vytvořme $G’$ z $G$ následovně: Prvně vytvořeme nové vrcholy $X$ tak, že podrozdělíme všechny hrany. Potom zdvojíme všechny původní vrcholy $V(G)$ (ne $X$). Díky zmíněné nerovnosti víme, že pro každou podmnožinu $W \subseteq X$ je splněna hallova podmínka, takže existuje párování pokrývající $X$. Párování si v $G$ vyložíme tak, že si hrana vybere zdrojový vrchol své orientace. Jelikož je každý vrchol v $G’$ pouze 2x a párování může pokrýt max jednou, tak v $G$ vedou z každého vrcholu maximálně 2 hrany.

Dinitzovu domněnku pro bipartitní grafy dokázal Galvin.

Galvinova věta (1995): Pro bipartitní grafy $ch’(G) = \chi’(G)$ (což s Königovou větou dokazuje $ch’(G)=\Delta(G)$).

Proof: Mějme graf $G$ s partitami $X$ a $Y$ a jeho optimální hranové obarvení $c$ používající $k = \chi'(G)$ barev. Je jasné, že $ch'(G) \ge k$. Ukážeme, že line-graf $H$ grafu $G$ má $ch(H) \le k$, na což stačí ukázat orientaci $H$ kde $\forall_{v\in V(H)} deg^-(v) < k$, a že tato orientace má jádro.

Orientaci $D$ grafu $H$ určíme následovně: Pro sousední hrany $e,e’\in E(G)$, kde $c(e)<c(e’)$, bude v $H$ hrana ${e,e’}$ orientovaná směrem $(e’,e)$ pokud mají společného souseda v $X$, a směrem $(e,e’)$ pokud mají společného souseda v $Y$.

Z vrcholu $e \in H$ vychází hrana pouze pro sousední hrany z $G$, ale pro $X$ pouze ty s nižší barvou, a pro $Y$ pouze s vyšší, nedotýká se stejné barvy, tudíž $deg^-(e) < k$.

V $G$ je uspořádání hran incidentní $x$ lineární, takže může vyjadřovat preference. Bipartitní graf vždy má stabilní párování – to koresponduje s jádrem v $H$, protoze kdyby z hrany $e \in E(G)$ nevedla v $H$ hrana do hrany párování $e’\in E(G)$, tak by to znamenalo, že by oba incidentní vrcholy preferovali mít $e$ spíš než jejich aktuální volbu, a párování by nebylo stabilní. Takže z každé nevybrané hrany v $E(G)$ vede v $E(H)$ hrana do vybrané hrany, a párování je nezávislá množina vrcholů z $V(H)$, což je definice jádra.

# Vizualizace grafů

Obv. můžeme nakreslit do roviny, vrcholy jako body a hrany jako křivky (mapování intervalu [0,1] do 2d tak, že 0 je výchozí vrchol a 1 je cílový). Pak chceme aby se křivky nedotýkaly bodů jinde než v 0 či 1, aby vrcholy měli unikátní body, a aby se křivky nedotýkaly, pokud se v onom bodě neprotnou (degenerované příady).

Pokud lze graf nakreslit bez křížení hran, tak je rovinný.

V oblasti vizualizace se studuje, jaké parametry mají vliv na hezké nakreslení grafu. Do těch například spadá

  • edge-length ratio – nejkratší a nejdelší hrana by se neměla moc lišit,
  • crossing number – počet křížících se hran, chceme minimalizovat,
  • area – pokud kreslíme vrcholy na mřížku, tak nás zajímá velikost oblasti, kterou potřebujeme,
  • number of bends – můžeme dovolit, aby hrany byly polyline, pak nás zajímá minimální počet zalomení,
  • angular resolution – chceme, aby v nareslení nebyly moc malé úhly.

Je řada metod vizualizace, třeba

  • force-based – nastřelí pozici vrcholů, a potom je pomalu, (skoro-)spojitě upravuje, není to exaktní metoda,
  • orthogonal – kreslí vrcholy na mřížku, a hrany zarovnává rovnoběžně s osami, (např. UML),
  • layered – podle hloubky v DAGu, (např. rodokmen).

Další témata

Základy kombinatoriky

Princip inkluze a exkluze

Dominující a nezávislé množiny

Náhodné grafy (-)

Toky a řezy