TI 3.1 UPOZORNĚNÍ Reprezentace grafů, odst. 4.1 dne (za týden) bude X36TIN dvakrát dne (za 5 týdnů) bude X36OSY dvakrát skripta.

Slides:



Advertisements
Podobné prezentace
Grafové algoritmy.
Advertisements

LOGISTICKÉ SYSTÉMY 14/15.
NEJKRATŠÍ CESTY MEZI VŠEMI UZLY
PLANARITA A TOKY V SÍTÍCH
Stavový prostor. • Existují úlohy, pro které není k dispozici univerzální algoritmus řešení • různé hry • problém batohu, problém obchodního cestujícího.
Dualita úloh lineárního programování a analýza citlivosti
Cvičení Úloha 1: Rozhodněte zda posloupnost znaků v poli délky n tvoří palindrom (slovo, které je stejné při čtení zprava i zleva). Př.: [a,l,e,l,a] [a,n,n,a]
10. Dynamické datové struktury
Aplikace teorie grafů Základní pojmy teorie grafů
ALGO – Algoritmizace 1. cvičení
Statické systémy.
CW – 05 TEORIE ROZHODOVACÍCH PROCESŮ
Algoritmy I Cvičení č. 3.
Principy překladačů Mezikód Jakub Yaghob.
ADT Strom.
Lineární algebra.
LOGISTICKÉ SYSTÉMY 7/14.
Matice D.: Matice je systém m .n čísel, uspořádaný do m řádků a n sloupců. Je to jenom symbol, nemá to žádnou číselnou hodnotu! Označení: řádek, řádkový.
SÍŤOVÁ ANALÝZA.
TI 6.1 STROMY A KOSTRY Stromy a kostry. TI 6.2 Stromy a kostry Seznámíme se s následujícími pojmy: kostra grafu, cyklomatické číslo grafu, hodnost grafu.
TI 7.1 NEJKRATŠÍ CESTY Nejkratší cesty - kap. 6. TI 7.2 Nejkratší cesty z jednoho uzlu Seznámíme se s následujícími pojmy: w-vzdálenost (vzdálenost na.
ORIENTOVANÉ GRAFY V této části se seznámíme s následujícími pojmy:
Základní teorie grafů a její aplikace
Algoritmy vyhledávání a řazení
Stromy.
Radim Farana Podklady pro výuku
Matice.
3. Příkazy  Příkazy dělíme na jednoduché a strukturované.  Jednoduché příkazy - žádnou jejich dílčí částí neni příkaz - přiřazovací, vstupu a výstupu,
Fakulta životního prostředí Katedra informatiky a geoinformatiky
Další typy dopravních problémů
STROMY Datová struktura sestávající z uzlů
Modulární systém dalšího vzdělávání pedagogických pracovníků JmK v přírodních vědách a informatice CZ.1.07/1.3.10/ Grafové pojmy Projekt učitelé.
VLASTNOSTI GRAFŮ Vlastnosti grafů - kap. 3.
7. Typ soubor Souborem dat běžně rozumíme uspořádanou množinu dat, uloženou mimo operační paměť počítače (na disku). Pascalský soubor je abstrakcí skutečného.
Teorie grafů.
Matematické metody optimalizace Tomáš Vaníček Katedra inženýrské informatiky Stavební fakulta ČVUT Thákurova 7, Praha 6 Dejvice, b407
KIV/PRO Cvičení Nejkratší cesta Vstup – N měst – Mezi některými dvojicemi měst vedou obousměrné silnice, zadány délky cest Výstup – Nejkratší.
Kostra grafu Prohledávání grafu
Vektorové prostory.
Kanonické indexování vrcholů molekulového grafu Molekulový graf: G = (V, E, L, ,  ) Indexování vrcholů molekulového grafu G: bijekce  : V  I I je indexová.
Doc. Josef Kolář (ČVUT)Prohledávání grafůGRA, LS 2010/11, Lekce 4 1 / 15Doc. Josef Kolář (ČVUT)Prohledávání stavového prostoruGRA, LS 2013/14, Lekce 11.
Planarita a toky v sítích
Doc. Josef Kolář (ČVUT)Prohledávání grafůGRA, LS 2010/11, Lekce 4 1 / 15Doc. Josef Kolář (ČVUT)NP-úplné problémyGRA, LS 2012/13, Lekce 13 1 / 14 NP-ÚPLNÉ.
VLASTNOSTI GRAFŮ Doc. RNDr. Josef Kolář, CSc
STROMY A KOSTRY Doc. RNDr. Josef Kolář, CSc
Jak je to s izomorfismem
Doc. Josef Kolář (ČVUT)Prohledávání grafůGRA, LS 2010/11, Lekce 4 1 / 15Doc. Josef Kolář (ČVUT)Toky v sítích IIGRA, LS 2013/14, Lekce 10 1 / 35 TOKY V.
Hledání cyklů Komunikační sítě Elektrické obvody Odběr surovin a výrobků v průmyslové výrobě Logistika Chemie ….
Hledání silně souvislý komponent Silně souvislá komponenta orientovaného grafu G= (V,E) je maximální množina uzlů UV taková že ∀ u,v ∈ V : u je dosažitelné.
Matice Přednáška č.4. Definice: Soubor prvků nazýváme maticí typu i-tý řádek j-tý sloupec prvky matice.
NEJKRATŠÍ CESTY Nejkratší cesty - kap. 6.
ALGORITMY UMĚLÉ INTELIGENCE
STROMY A KOSTRY Stromy a kostry - odst. 3.2.
Znázornění dopravní sítě grafem a kostra grafu Předmět: Teorie dopravy - cvičení Ing. František Lachnit, Ph.D.
MODELY TEORIE GRAFŮ.
Maximální propustnost rovinné dopravní sítě
Běžné reprezentace grafu
Příkazy cyklu (1) Umožňují vícekrát (nebo ani jednou) pro-vést určitý příkaz Jazyk C rozlišuje příkaz cyklu: s podmínkou na začátku: obecný tvar: while.
CW – 05 TEORIE ROZHODOVACÍCH PROCESŮ
Běžné reprezentace grafu
PLANARITA A TOKY V SÍTÍCH
Lineární funkce a její vlastnosti
ORIENTOVANÉ GRAFY V této části se seznámíme s následujícími pojmy:
Toky v sítích.
Prakticky identické postupy:
Cyklus for (1) Obecný tvar: for (výraz1; výraz2; výraz3) příkaz
NEJKRATŠÍ CESTY MEZI VŠEMI UZLY
Grafy kvadratických funkcí
Algoritmizace a datové struktury (14ASD)
Grafy kvadratických funkcí
Transkript prezentace:

TI 3.1 UPOZORNĚNÍ Reprezentace grafů, odst. 4.1 dne (za týden) bude X36TIN dvakrát dne (za 5 týdnů) bude X36OSY dvakrát skripta X36TIN jsou v prodeji na katedře, místnost K326

TI 3.2 REPREZENTACE GRAFŮ maticové spojové další... Reprezentace grafů, odst. 4.1 V této části se seznámíme s pojmy: matice incidence NG/OG, matice sousednosti NG/OG (základní) spojová reprezentace NG/OG Skripta odstavec 4.1, str

TI 3.3 Matice incidence NG A = [ a ik ] obdélníková matice typu |U| x |H| nad tělesem mod 2 (pozor na základní operace!) hrana h k inciduje s uzlem u i a ik = jinak adebc a b c d e ? Co nám říká matice incidence o grafu ? ? Smyčky, rovnoběžné hrany ? Reprezentace grafů, odst. 4.1

TI 3.4 Poznáme podle matic incidence, zda jsou dva grafy izomorfní? Např.: G 1  G 2 ?? právě když ??A 1  A 2 Zjištění: součet (mod 2) ve sloupci je 0 (vždy dvě jedničky!)  řádky jsou lineárně závislé, takže hodnost matice A... h(A)  |U| - 1 (rovnost platí pro souvislé grafy) h(A) = |U| - p obecný vztah pro graf s p komponentami Reprezentace grafů, odst. 4.1

TI 3.5 Matice sousednosti NG V = [ v ij ] čtvercová matice typu |U| x |U| nad okruhem celých čísel: v ij = počet hran mezi uzly u i a u j adebc a b c d e a b c d e ? Co nám říká matice sousednosti o grafu ? ? Smyčky, rovnoběžné hrany ? Reprezentace grafů, odst. 4.1

TI 3.6 Poznáme podle matic incidence, zda jsou dva grafy izomorfní? Např.: G 1  G 2 ?? právě když ??V 1  V 2 Zjištění: V = V T V r = [v ik (r) ]... počet sledů délky r mezi u i a u k A. A T = V + D, D = [ d ii ], kde d ii = (u i ) Reprezentace grafů, odst. 4.1

TI 3.7 Matice incidence OG A = [ a ik ] obdélníková matice typu |U| x |H| nad okruhem celých čísel: 1... hrana h k vychází z uzlu u i a ik =-1... hrana h k končí v uzlu u i 0... jinak adebc a b c d e Vlastnosti podobné jako pro NG Reprezentace grafů, odst. 4.1

TI 3.8 Matice sousednosti OG V = [ v ij ] čtvercová matice typu |U| x |U| nad okruhem celých čísel: v ij = počet hran z uzlu u i do uzlu u j adebc a b c d e a b c d e ? Poznáme izomorfní orientované grafy ? ? V = V T ? a b c d e a b c d e Reprezentace grafů, odst. 4.1

TI 3.9 Zjištění: V r = [v ik (r) ]... počet spojení délky r z u i do u k V* =  V i, i=0,... d, kde d = min(|H|, |U|-1) ?? Co asi říká o grafu tato matice V* ?? A. A T = D - V - V T, D = [ d ii ], kde d ii =  + (u i )+  - (u i ) Reprezentace grafů, odst. 4.1

TI 3.10 Spojová reprezentace grafu |U | NG - seznamy sousedů OG - seznamy následníků Adj[u]: Srovnání paměťové složitosti: NG A: |U|.|H| (bitů!) V: |U|.|U| (integer ? Boolean) Adj: |U| + 2.|H| OG Adj: |U|+|H| Reprezentace grafů, odst. 4.1

TI 3.11 Základní spojovou reprezentaci mohou ještě doplňovat: seznamy předchůdců uzlů (pro OG) u každého prvku v seznamu následníků/předchůdců lze uvést i odpovídající označení (číslo) hrany přiřazení dvojic (uspořádaných dvojic) uzlů hranám ( a ) ohodnocení/označení uzlů a/nebo hran atd. Reprezentace grafů, odst. 4.1 Místo spojové reprezentace seznamů následníků/předchůdců je též možno použít např. uložení v poli:

TI 3.12 Reprezentace grafů, odst. 4.1 Až dosud jsme měli na mysli vnitřní reprezentaci grafů, ale jsou také různé vnější reprezentace, jimiž lze zadat graf na vstupu nějakého programu, např.: // počet uzlů a hran 5 7 // hrany jako dvojice uzlů Zkuste vymyslet další možnosti...

TI 3.13 Vlastní reprezentaci mohou mít některé speciální typy grafů, jako např.: kořenové stromy pravidelné stromy atd. Tím se budeme zabývat později... Reprezentace grafů, odst. 4.1

TI 3.14 Kontrolní otázky 1.Jak se z matice incidence neorientovaného grafu určí množina sousedů zadaného uzlu? Jaká bude časová složitost této operace? 2.Jak se z matice incidence orientovaného grafu určí množina předchůdců zadaného uzlu? Jaká bude časová složitost této operace? 3.Přesně popište, jaký bude vztah matice sousednosti (obecného) neorientovaného grafu G a matice sousednosti grafu G', který vznikl nějakou orientací hran grafu G. 4.V jakém orientovaném grafu bude r-tá mocnina V r matice sousednosti V obsahovat počty různých orientovaných cest mezi jednotlivými uzly ? 5.Jak se z matice sousednosti neorientovaného grafu určí množina sousedů zadaného uzlu? Jaká bude časová složitost této operace? 6.Jak se z matice sousednosti orientovaného grafu určí množina předchůdců zadaného uzlu? Jaká bude časová složitost této operace? 7.Navrhněte algoritmus převodu matice incidence A neorientovaného grafu na jeho matici sousednosti V. 8.Navrhněte algoritmus převodu matice sousednosti V orientovaného grafu na jeho matici incidence A. Reprezentace grafů, odst. 4.1

TI 3.15 Prohledávání grafů V této části se seznámíme s pojmy: prohledání grafu do šířky (BFS), strom prohledání do šířky (BF-strom), časová složitost prohledání do šířky, rozklad neorientovaného grafu na komponenty prohledání grafu do hloubky (DFS), strom prohledání do hloubky (DF-strom), časové značky uzlů, časová složitost prohledání do hloubky algoritmus topologického uspořádání uzlů algoritmus určení silných komponent orientovaného grafu Skripta odstavec 4.2, str Prohledávání grafů, odst. 4.2

TI 3.16 Prohledávání grafu do šířky BFS - Breadth-First Search Je zadán graf G = H,U, (není podstatné, zda NG nebo OG) a jeho uzel s  U. Prohledáním do šířky dostaneme strom (nejkratších) s  u cest pro všechny uzly u dostupné z uzlu s (BF-strom) Stavy uzlů: FRESH - nový (dosud neobjevený) uzel OPEN - právě objevený („nadějný“) uzel CLOSED - vyčerpaný uzel Prohledávání do šířky - odst. 4.2

TI Prohledávání do šířky - odst. 4.2

TI 3.18 Použité datové struktury: stav[u] - FRESH / OPEN / CLOSED d[u] - zjištěná vzdálenost s  u p[u] - předchůdce uzlu u (viz ) fronta - OPEN uzly s u v d[u]=k d[v]=k+1 p[v]=u Průběh prohledávání do šířky Prohledávání do šířky - odst. 4.2

TI 3.19 BFS (G, s)... pseudokód 1for každý uzel u  U-s 2{ stav[u]  FRESH; d[u]  ; p[u]  nil } 3stav[s]  OPEN; d[s]  0; p[s]  nil; 4InitQueue; Enqueue(s); 5while not EmptyQueue { 6u  QueueFirst; 7for každé v  Adj[u] { 8 if stav[v]=FRESH { 9 stav[v]  OPEN; d[v]  d[u]+1; 10 p[v]  u; Enqueue(v); } 11} 12 Dequeue; 13stav[u]:=CLOSED 14 } Prohledávání do šířky - odst. 4.2

TI Prohledávání do šířky - odst

TI 3.21 Jak je BFS složitý ? cykl ř. 1 a 2... |U| operace s frontou O(1) na uzel  celkem O(|U|) cykly a 7-11 pro každého souseda  O(|H|)  O(|U| + |H|) Zjištění: pokud fronta obsahuje uzly v 1, v 2,..., v r, potom platí d[v r ]  d[v 1 ] + 1 d[v i ]  d[v i+1 ] pro i=1,2,...,r-1 BFS nalezne nejkratší s  v cestu pro každý uzel v dosažitelný z uzlu s a (p[v],v) určuje její poslední hranu všechny tyto hrany tvoří tzv. BF-strom Prohledávání do šířky - odst. 4.2

TI 3.22 Kontrolní otázky 1.Změní se nějak chování či výsledek algoritmu BFS, pokud příkazy na řádcích 12 a 13 umístíme bezprostředně za řádek 6? 2.Jak bude výsledek algoritmu BFS (tzn. vytvořený BFS-strom a hodnoty d[u]) ovlivněn změnou pořadí uzlů v seznamech sousedů ? 3.Změní se nějak složitost algoritmu BFS, pokud namísto spojové reprezentace použijeme k vyjádření struktury grafu jeho matici incidence A (resp. matici sousednosti V) ? 4.Zdůvodněte, proč nelze následující strom T získat jako BFS-strom při prohledání grafu G do šířky pro žádné uspořádání uzlů v seznamech sousedů uzlů, přestože strom T představuje jeden z možných stromů nejkratších cest z uzlu s do všech ostatních uzlů. GT s s 5.Jak vypadá neorientovaný graf, jehož BFS strom má při libovolném uspořádání uzlů v seznamu sousedů tvar hvězdice ? 6.Upravte algoritmus BFS tak, aby určoval počet a strukturu komponent neorientovaného grafu. Prohledávání do šířky - odst. 4.2

TI 3.23 Prohledávání grafu do hloubky Základní princip DFS : postupuje se stále dál od počátečního uzlu dosud neprozkoumaným směrem. Když už to dál nejde, vrátíme se a postupujeme zase co nejdál. Prohledávání do hloubky - odst. 4.2 Pro jednoduchost předpokládáme, že sousedi jsou řazeni v pořadí rostoucích pořadových čísel uzlů

TI Prohledávání do šířky - odst

TI 3.25 DFS - Depth-First Search Výsledkem bude DF-strom (nebo les) Uzly jsou opět FRESH, OPEN nebo CLOSED, ale mají časové značky s hodnotami 1 … 2*|U| – d[u] přidělí se při otevření uzlu – f[u] přidělí se při uzavření uzlu (tzn. d[u]<f[u]) Jak budeme DFS implementovat ? Prohledávání do hloubky - odst. 4.2

TI 3.26 DFS (G)... pseudokód 1for každý uzel u U 2 { stav[u]  FRESH; p[u]  nil; } 3i  0; 4 for každý uzel u U 5 { if stav[u] = FRESH { DFS-Projdi(u); } } DFS-Projdi(u) 1stav[u]  OPEN; i  i+1; d[u]  i; 2for každý uzel v  Adj[u] { 3 if stav[u] = FRESH { 4 p[v]  u; DFS-Projdi(v); } } 5stav[u]  CLOSED; i  i+1; f[u]  i; Prohledávání do hloubky - odst. 4.2

TI Prohledávání do hloubky - odst / 2/3/ 4/5/1/185/64/73/82/910/11/ 12/13/ 13/14 12/1511/1610/17 OPEN CLOSED stromovázpětnádopřednápříčná

TI 3.28 Jak je DFS složitý ? v DFS se cykly na ř a 4 – 5 provedou |U|-krát DFS-Projdi se volá |U|-krát cykl v DFS-Projdi na ř. 2-4 se provádí |Adj[u]|-krát  dohromady O(|H|)  O(|U| + |H|) Prohledávání do hloubky - odst. 4.2

TI 3.29 K čemu je dobré značkování uzlů ? Sledujme stromové hrany: 1/ 2/ 3/4/ 5/ 1/18 5/6 4/73/8 2/9 10/11/ 12/ 13/13/14 12/15 11/1610/17 (1.. 18)  (2.. 9)  (3.. 8)  (4.. 7)  (5.. 6) (1.. 18)  ( )  ( )  ( )  ( ) Obecně platí: (d[u],f[u])  (d[v],f[v]) =  nebo (d[u],f[u])  (d[v],f[v]) nebo (d[v],f[v])  (d[u],f[u]) Prohledávání do hloubky - odst. 4.2

TI / 2/3/ 4/5/1/185/64/73/82/910/11/ 12/13/ 13/14 12/1511/1610/17 zpětná hrana (u,v) vede k OPEN uzlu v dopředná a příčná hrana (u,v) vede ke CLOSED uzlu - dopředná má d[u]<d[v] - příčná má d[u]>d[v] Prohledávání do hloubky - odst. 4.2

TI 3.31 Jak se liší DFS u neorientovaného grafu ? Jsou zde pouze stromové a zpětné hrany ! 1/ 2/ 3/4/ 5/ 1/18 5/14 4/153/16 2/17 10/11/ 12/ 13/9/10 8/11 7/126/ Prohledávání do hloubky - odst. 4.2

TI 3.32 Top-Sort-1 (G) 1)S:= 2)prováděj DFS(G) a v okamžiku f[u] ulož uzel u na začátek seznamu S 3)S obsahuje uzly v topologickém uspořádání V: G je acyklický  DFS(G) neobjeví zpětnou hranu Top-Sort-2 (G) eliminací kořenů - viz dříve  [u] =  - G [u] M - množina kořenů (fronta) Prohledávání do hloubky - odst. 4.2 Topologické uspořádání uzlů pomocí DFS

TI 3.33 Prohledávání do hloubky - odst. 4.2 Silné komponenty pomocí DFS S-COMP (G) 1)pomocí DFS(G) se určí f[u] pro všechny u  U 2)vytvoří se G - (opačně orientovaný graf) 3)provede se DFS(G - ) s tím, že uzly v hlavním cyklu se berou v klesajícím pořadí f[u] 4)stromy DF-lesa určují silné komponenty

TI /22 2/21 3/18 4/9 19/20 15/16 10/17 5/8 12/13 11/14 6/7 1/6 3/4 7/12 17/22 2/5 8/11 9/10 19/20 14/15 13/16 18/21 Prohledávání do hloubky - odst. 4.2

TI 3.35 Kontrolní otázky 1.Vysvětlete na příkladu, že je možné, aby uzel u orientovaného grafu skončil při prohledání do hloubky jako jediný uzel nějakého dílčího DF-stromu, přestože do u vcházejí i z něho vycházejí hrany. 2.Navrhněte obecný postup orientace hran neorientovaného grafu, jehož výsledkem bude acyklický orientovaný graf. 3.Upravte algoritmus procházení neorientovaného (resp. orientovaného) grafu do hloubky tak, aby generoval všechny cesty (resp. orientované cesty) vycházející ze zadaného počátečního uzlu s. 4.Navrhněte algoritmus časové složitosti O(|U|+|H|), který pro zadaný acyklický orientovaný graf určí počet (nikoliv nutně strukturu) všech neprázdných orientovaných cest v tomto grafu. 5.Navrhněte algoritmus časové složitosti O(|U|), který zjistí, zda zadaný neorientovaný graf je stromem. Prohledávání do hloubky - odst. 4.2