Skoro každá úloha v tomhle kurzu — nejkratší cesty, toky, obchodní cestující, rozvrhování s precedencemi — se formalizuje pomocí grafu (graph). Neformálně: graf se skládá z vrcholů (nodes, také uzly) a hran (edges); každá hrana spojuje dva vrcholy.
Hrana mezi vrcholy $v$ a $w$ může být dvojího druhu:
Množina $\{v,w\}$ nemá pořadí: $\{v,w\} = \{w,v\}$ — po neorientované hraně se dá „jít“ oběma směry. Uspořádaná dvojice $(v,w)$ pořadí má: $(v,w) \ne (w,v)$ — orientovaná hrana vede jen z $v$ do $w$. Proto se orientované hrany kreslí se šipkou.
Graf s vrcholy $V$ a hranami $E$ obvykle značíme $G = (V, E)$. Orientovaný graf (directed graph, digraph) má hrany — uspořádané dvojice $(v,w) \in V \times V$, $v \ne w$. Neorientovaný graf má hrany — dvouprvkové podmnožiny $\{v,w\} \subseteq V$. Obě množiny $V$ i $E$ jsou konečné.
Pár pojmů, které budeme potkávat pořád:
Hrana = dvojice vrcholů, takže $\binom{5}{2} = 10$ hran. Obecně má $K_n$ přesně $\binom{n}{2} = \frac{n(n-1)}{2}$ hran. To je dobré číslo pro odhady: „hustý“ graf má až $O(n^2)$ hran.
Samotná struktura grafu většinou nestačí — optimalizujeme přes čísla přiřazená hranám:
Většina algoritmů v kurzu je formulovaná pro digrafy. Vadí to u neorientovaných grafů?
Každou neorientovanou hranu $\{v,w\}$ nahradíme dvojicí protisměrných orientovaných hran $(v,w)$ a $(w,v)$ — obě se stejnou váhou/kapacitou. Po obou se dá jít „tam i zpět“, přesně jako po původní neorientované hraně. Proto stačí umět algoritmy pro digrafy.
“From an undirected graph we can make a digraph by replacing every undirected edge by a pair of inverse directed edges.” Apply this construction to the undirected graph drawn below (triangle $a, b, c$ with edge weights $c(\{a,b\})=2$, $c(\{b,c\})=5$, $c(\{a,c\})=4$): write down the node set $V$ and the edge set $E$ of the resulting digraph, including the weight of each directed edge.
Máš neorientovaný trojúhelník se třemi váženými hranami. Úkol: přepsat ho na orientovaný graf (digraf) podle pravidla ze slidu — každá neorientovaná hrana → dvě protisměrné orientované — a vypsat $V$, $E$ i váhy.
Kolik orientovaných hran vznikne ze 3 neorientovaných? Jakou váhu dostane každá z dvojice protisměrných hran? (Stejnou jako původní hrana — jízda „tam“ stojí stejně jako „zpět“.)
Vrcholy se nemění: $V = \{a, b, c\}$. Každá ze 3 neorientovaných hran dá 2 orientované, celkem 6 hran:
$$E = \{(a,b), (b,a), (b,c), (c,b), (a,c), (c,a)\}$$Váhy: $c((a,b)) = c((b,a)) = 2$, $\;c((b,c)) = c((c,b)) = 5$, $\;c((a,c)) = c((c,a)) = 4$. Obecně: neorientovaný graf s $m$ hranami → digraf s $2m$ hranami, váhy se kopírují na obě protisměrné hrany.