TGH03 - stromy, ukládání grafů Jan Březina Technical University of Liberec 7. března 2017
Kružnice - C n V = {1, 2,..., n} E = {{1, 2}, {2, 3},..., {i, i + 1},..., {n 1, n}, {n, 1}}
Cesta - P n V = {1, 2,..., n} E = {{1, 2}, {2, 3},..., {i, i + 1},..., {n 1, n}}
Úplný graf - K n
Úplný bipartitní graf - K n,m
Rovinný graf Graf je rovinný, pokud jej lze nakreslit bez křížení hran.
Definition Strom je souvislý graf neobsahující kružnici. Lemma Každý strom s alespoň dvěma vrcholy má alespoň dva listy (vrcholy stupně 1).
Definition Strom je souvislý graf neobsahující kružnici. Lemma Každý strom s alespoň dvěma vrcholy má alespoň dva listy (vrcholy stupně 1). Důkaz: Nejdelší cesta P = (v 0, e 1, v 1,..., e t, v t ) na stromu T.
Definition Strom je souvislý graf neobsahující kružnici. Lemma Každý strom s alespoň dvěma vrcholy má alespoň dva listy (vrcholy stupně 1). Důkaz: Nejdelší cesta P = (v 0, e 1, v 1,..., e t, v t ) na stromu T. Její konce musí být listy. Dokážeme sporem:
Definition Strom je souvislý graf neobsahující kružnici. Lemma Každý strom s alespoň dvěma vrcholy má alespoň dva listy (vrcholy stupně 1). Důkaz: Nejdelší cesta P = (v 0, e 1, v 1,..., e t, v t ) na stromu T. Její konce musí být listy. Dokážeme sporem: Pokud by jeden z nich nebyl list (třeba v 0 ), pak bud existuje hrana v 0, u, u P a tedy kružnice (T není strom)
Definition Strom je souvislý graf neobsahující kružnici. Lemma Každý strom s alespoň dvěma vrcholy má alespoň dva listy (vrcholy stupně 1). Důkaz: Nejdelší cesta P = (v 0, e 1, v 1,..., e t, v t ) na stromu T. Její konce musí být listy. Dokážeme sporem: Pokud by jeden z nich nebyl list (třeba v 0 ), pak bud existuje hrana v 0, u, u P a tedy kružnice (T není strom) nebo P jde prodloužit (P není nejdelší)
Věta o stromech Theorem Necht G = (V, E) je graf, pak následující podmínky jsou ekvivalentní 1. G je strom 2. jednoznačnost cesty Mezi každými dvěma vrcholy x, y V existuje právě jedna cesta. 3. maximální graf bez kružnice Každá přidaná hrana vytvoří kružnici. 4. minimální souvislý graf G je souvislý a vynecháním libovolné hrany vznikne nesouvislý graf. 5. Eulerův vzorec G je souvislý a platí V = E + 1
Důkaz 1) 2) zdefinice souvislosti: G je souvislý mezi každými dvěma vrcholy x, y V existuje cesta. druhá část G neobsahuje kružnici cesta je jednoznačná (2 cesty kružnice) stejné jako: G obsahuje kružnici pro nějakou dvojici vrcholů existují 2 cesty
Důkaz 1) 3) Pro graf G bez kružnice chceme dokázat: G je souvislý G je maximální 1) 3) přidáním hrany e = (x, y) vytvořím kružnici, jelikož mezi x a y už existuje cesta (souvislost). not 3) not 1) G není souvislý G není maximální pokud mohu přidat hranu (x, y) bez vytvožení kružnice je graf nesouvislý
Důkaz 1) 4) Pro souvislý graf G chceme dokázat: G je bez kružnice G je minimální 1) 2) 4) Pro každou hranu (x, y) neexistuje jiná cesta, odstranění hrany nesouvislý graf not 1) not 4) Pokud existuje kružnice, je možno odebrat hranu, G není minimální.
Důkaz 1) 5) 1) 5), indukcí podle počtu vrcholů 1. Pro V = 1 vzorec platí. 2. Pokud vzorec platí pro V = n 1, musím dokázat, že platí i pro n: strom má alespoň 2 listy (lemma), pokud jeden odeberu, vzorec už platí Vzorec graf bez kružnice Součet s stupňů grafu: s = 2 E = 2 V 2 Kvůli souvislosti jsou všechny stupně aspoň 1, tj. max V 2 nejsou listy, tj. existuje list. Utrhnu list a použiju platnost implikace pro n 1, (opět indukce)
Kořenové stromy Kořenový strom je strom s jedním vyznačeným vrcholem kořenem. Orientace od listů ke kořeni. Každý vrchol kromě kořene má právě jednoho bezprostředního předka π(x). Pokud vede (orientovaná) cesta z y do x je x předek y a y potomek x Vrcholy kromě listů mají jednoho nebo více bezprosředních potomků. Zobrazením π(x) : V V je strom jednoznačně určen. pojmy: hladina, výška, šířka, k-ární strom
Reprezentace grafů Jakými způsoby můžeme reprezentovat grafy v počítači? Příklady pro grafy: Vrcholy i hrany budeme číslovat od jedné.
Seznam hran Ukládám počet vrcholů + seznam hran: graf G 5 vrcholů hrany: (1,2) (1,3) (1,4) (2,4) (3,4) (4,5) graf H 4 vrcholy hrany: (1,2) (2,1) (1,3) (3,2) (4,3) Příklad v C a C++: s t r u c t Graph { unsigned i n t n vtx, n edg ; unsigned i n t [ 2 ] edges ; } s t r u c t Graph { unsigned i n t n v t x ; v e c t o r < p a i r <int, int > > edges ; }
Matice sousednosti Vrcholy grafu očíslujeme 1,..., n = V, pak A i,j G = { 1 pokud existuje (orientovaná) hrana mezi vrcholy i, j 0 pokud hrana neexistuje závisí na uspořádání vrcholů počet prvků na řádku roven stupni vrcholu deg(g) = deg + (G) + deg (G) pro neorientované grafy symetrická příklad: A G = 0 1 1 1 0 1 0 0 1 0 1 0 0 1 0 1 1 1 0 1 0 0 0 1 0 A H = 0 1 1 0 1 0 0 0 0 1 0 0 0 0 1 0
Incidenční matice Očíslujeme vrcholy 1,..., n = V a hrany 1,..., m = E. Neorientovaná incidenční matice C o rozměrech m n pro neorientovaný graf má prvek C i,j = 1 pokud j je vrcholem hrany i, jinak je C i,j = 0. Pro orientovaný graf je C i,j = 1 pokud hrana i opouští vrchol j (e i = (j, x)) a C i,j = 1 pokud hrana j přichází do vrcholu i (e i = (x, j)). Orientovanou incidenční matici můžeme sestavit i pro neorientovaný graf.
Seznamy sousedů Pro každý vrchol máme pole jeho sousedů. příklad: 2, 3, 4 1, 4 graf G: 1, 4 graf H: 1, 2, 3, 5 4 Pomocí dvou poĺı: G: (1, 4, 6, 8, 12, 13), (2, 3, 4, 1, 4, 1, 4, 1, 2, 3, 5, 4) H: (1, 3, 4, 5, 6), (2, 3, 1, 2, 3) 2, 3 1 2 3
Řídké grafy a matice Seznam hran: řídké uložení incidenční matice. Seznamy sousedů: řídké uložení matice sousednosti
Výhody uložení Ozačme: n - počet vrcholů, m - počet hran, r - max. počet sousedů je uv hrana průchod sousedů pamět seznam hran O(m) O(m) O(m) matice sousednosti O(1) O(n) O(n 2 ) seznamy sousedů O(r) O(r) O(n + m)
Vztah mezi maticemi (neorientované grafy) Lemma Necht C je neorientovaná incidenční matice a A je matice sousednosti grafu G. Pak C T C = A + D, kde D je diagonální matice stupňů D i,i = deg(i)
Matice konektivity, ohodnocení a vzdáleností Matice konektivity, nesymetrická matice sousednosti, M i j = 1 pokud existuje hrana (i, j). Matice ohodnocení hran. Matice vzdálenosti, matice metriky grafu.
Řídké grafy a matice pole začátků řádků, pole sloupců, pole hodnot (alokace dohromady) pro každý řádek pole sloupců nenulových prvků a pole jejich hodnot (alokace zvlášt ) místo poĺı lineární (spojový) seznam (každý prvek zvlášt )