Grafy a grafové algoritmy. Formalizace základních grafových pojmů, reprezentace grafů. Souvislost grafu, barevnost, rovinné grafy. Algoritmy (včetně složitosti a základní myšlenky důkazů korektnosti): prohledávání grafu do šířky a do hloubky, nejkratší vzdálenosti, kostry, toky v sítích.
Upozornění: bez nároku na úplnost a korektnost. Podle hesla „lepší něco než nic“. Ale snaha byla o co nejlepší výsledek.
+ váhovaný graf, multigraf
Silně souvislá komponenta je takový maximální podgraf orientovaného grafu, v němž pro každou dvojici vrcholů u, v existuje sled.
Barvení grafu se zabývá přiřazováním barev nejčastěji vrcholům (příp. hranám či stěnám).
Nechť G = (V, E) je graf, k přirozené číslo. Zobrazení b: V → {1, …, k} nazveme obarvením grafu G pomocí k barev, pokud pro každou hranu {x, y} ∈ E platí b(x) ≠ b(y). Barevnost grafu (také chromatické číslo) G je minimální počet barev potřebný pro obarvení G. Značí se (= velké chí).
Věta (Eulerova formule): V rovinném grafu G=(V, E) platí:
1. |V| − |E| + s = |E|+2. (s = počet stěn)
2. |E| ≤ 3|V|−6.
Věta (o 4 barvách): Vrcholy rovinného grafu lze obarvit 4 barvami tak, aby žádná hrana nespojovala dva vrcholy stejné barvy.
Včetně složitosti a základní myšlenky důkazů korektnosti!
algoritmus | složitost |
---|---|
BFS | |
DFS |
BFS
Složitost
Korektnost
Právě vrcholy zařazené do Q mají d[v] < ∞. Pokud v nedosažitelné z s, tak d[v] >= δ(s, v) = ∞, proto v nebude objeven.
V_k = {v ∈ V | δ(s, v) = k}, k ∈ N_0, → indukcí vzhledem ke k.
IK: Pokud v jde do Q, d[v], π[v] se již nikdy nemění. Jsou-li vrcholy zařazovány do Q v pořadí v_1, …, v_r, pak d[v_1] ≤ … ≤ d[v_r]. Nechť v ∈ V_k (k ≥ 1), tj. je objeven až po objevení všech z V_k-1. Poněvadž δ(s, v) = k, ex. cesta s, …, u (∈ V_k-1), v délky k. Nechť u je první takový objevený. V jistém okamžiku se u objeví na čele Q, v je objeven při prohlídce sousedů u. Tedy pro v ∈ V_k je π[v] ∈ V_k-1, a proto d[v] = d[π[v]] + 1. Nejkratší cestu do v tak získáme tím, že půjdeme po nejkratší cestě do π[v], a pak po hraně (π[v], v).
Depth-First Search (DFS)
Algoritmus
Složitost
Korektnost
DF-forest = predecessor subgraph, kde hrany = { (π[v], v) | v ∈ V ∧ π[v] ≠ nil } → forest, protože DFS může být opakováno z více vrcholů
relaxace
algoritmus (1-to-n) | složitost | typ grafu |
---|---|---|
BFS | vzdálenost = počet hran | |
Dijkstrův algoritmus | nezáporné délky hran | |
Bellman-Ford |
algoritmus (n-to-n) | složitost | typ grafu |
---|---|---|
Násobení matic | ||
Floyd-Warshall | ||
Johnson |
Dijkstrův algoritmus
Složitost
Korektnost
Ukážeme, že d[v] = δ(s, v) v okamžiku přidání v do S; (a že) rovnost je pak zachována. [dokazuje se na u jako prvním vrcholu, pro který to neplatí, na cestě je pak nějaké y z V\S (stejně jako u), kde přes d[y] = δ(s, y) ≤ δ(s, u) ≤ d[u], ale pak dostaneme rovnost, protože y není v S v okamžiku, kdy se tam dostává u (tj. spor s volbou u)]
Bellman-Ford
Složitost
Korektnost
Násobení matic
Floyd-Warshall
Johnson
Pravidla použitá při definici/důkazech:
(viz slidy MA015)
Cut Property
⬇
Blue rule: Pro daný řez bez modrých hran vybereme neobarvenou hranu a obarvíme ji modře.
Cycle Property
⬇
Red rule: Pro daný cyklus neobsahující žádnou červenou hranu vybereme maximální neobarvenou hranu a obarvíme ji na červeno.
algoritmus | složitost |
---|---|
Borůvka | |
Kruskal | |
Jarník | |
Fredman-Tarjan (Jarník + Fibonacciho halda) | |
Fredman-Tarjan (limit velikosti haldy) | |
Gabow et al. (F-T + packeting) |
Kruskal
Složitost
Korektnost
Jarník (Prim)
Algoritmus
Složitost
Korektnost T je nějaká minimální kostra G a K je výstup Jarníkova algoritmu. K = T triviální. Pokud K != T, pak nechť e je první, která je v K, ale ne v T. V je množina vrcholů přidaných do K před e – pak jeden konec e je ve V, druhý ne. V T ale musí existovat cesta spojující oba konce – na této cestě se musí nacházet hrana f spojující vrchol ve V s vrcholem, který ve V ještě není. V okamžiku, kdy je e přidána ke K, mohla by být přidána i hrana f, pokud by vážila méně. Z jejího nepřidání plyne, že d[e] ⇐ d[f].
V T je možné vyměnit hranu f za e – výsledný strom zůstane souvislý, obsahuje stejný počet hran a váha jeho hran se nezvýší. Tedy je rovněž minimální kostrou G. Opakováním tohoto postupu dojdeme k tomu, že K je rovno minimální kostře G.
Borůvka
Složitost
Flow network („toková síť“) je čtveřice :
Network flow (tok v síti) je funkce splňující:
Ford-Fulkerson: MAX-FLOW=MIN-CUT
Reziduální síť
Reziduální kapacita
Augmentující cesta Cesta z s do t v reziduálním grafu.
Augmentace toku Upravíme tok na základě bottleneck kapacity augmentující cesty.
algoritmus | složitost |
---|---|
Ford-Fulkerson | C – nejvyšší kapacita |
Edmonds-Karp (FF + shortest aug. path) | |
Dinitz (saturate all s-t paths in ) | |
MPM (three indians) | |
push-relabel |
Ford-Fulkerson
Algoritmus
Složitost
Korektnost
Push-Relabel
Složitost
Korektnost
V průběhu celého výpočtu platí:
Pokud alg. vrátí pseudotok, tak je to maximální tok.
→