opakování reprezentace grafů, dijkstra, bellman-ford, johnson

Podobné dokumenty
opakování reprezentace grafů, dijkstra, bellman-ford, johnson

dag a dp v něm, bellman-ford, floyd-warshall

bfs, dfs, fronta, zásobník, prioritní fronta, halda

bfs, dfs, fronta, zásobník, prioritní fronta, halda

TGH06 - Hledání nejkratší cesty

TGH06 - Hledání nejkratší cesty

Grafové algoritmy. Programovací techniky

bfs, dfs, fronta, zásobník

Algoritmy na ohodnoceném grafu

Stromy, haldy, prioritní fronty

Základní datové struktury III: Stromy, haldy

Vzdálenost uzlů v neorientovaném grafu

Grafové algoritmy. Programovací techniky

Dijkstrův algoritmus

Algoritmus pro hledání nejkratší cesty orientovaným grafem

Úvod do teorie grafů

NEJKRATŠÍ CESTY I. Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky, FIT České vysoké učení technické v Praze

Grafové algoritmy. Aktualizováno: 29. listopadu / 228

Jan Březina. 7. března 2017

Algoritmizace prostorových úloh

Paralelní grafové algoritmy

07 Základní pojmy teorie grafů

Binární vyhledávací stromy pokročilé partie

Grafy. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 13.

TGH05 - aplikace DFS, průchod do šířky

STROMOVE ALGORITMY Prohledavani do sirky (level-order) Po vodorovnejch carach fronta

Algoritmizace Dynamické programování. Jiří Vyskočil, Marko Genyg-Berezovskyj 2010

Výhody a nevýhody jednotlivých reprezentací jsou shrnuty na konci kapitoly.

Teorie grafů BR Solutions - Orličky Píta (Orličky 2010) Teorie grafů / 66

4EK311 Operační výzkum. 5. Teorie grafů

Obsah prezentace. Základní pojmy v teorii o grafech Úlohy a prohledávání grafů Hledání nejkratších cest

Metody analýzy dat I (Data Analysis I) Rozsáhlé struktury a vlastnosti sítí (Large-scale Structures and Properties of Networks) - pokračování

Ukážeme si lineární algoritmus, který pro pevné k rozhodne, zda vstupní. stromový rozklad. Poznamenejme, že je-li k součástí vstupu, pak rozhodnout

TGH05 - Problém za milion dolarů.

Dynamické programování

Použití dalších heuristik

Dynamické programování

TGH05 - aplikace DFS, průchod do šířky

zejména Dijkstrův algoritmus pro hledání minimální cesty a hladový algoritmus pro hledání minimální kostry.

Často potřebujeme hledat mezi dvěma vrcholy grafu cestu, která je v nějakém

TGH07 - Chytré stromové datové struktury

Grafové algoritmy. Programovací techniky

Prioritní fronta, halda

Vyvažování a rotace v BVS, všude se předpokládá AVL strom

Operační výzkum. Síťová analýza. Metoda CPM.

Graf. Uzly Lokality, servery Osoby fyzické i právní Informatické objekty... atd. Hrany Cesty, propojení Vztahy Informatické závislosti... atd.

Zdůvodněte, proč funkce n lg(n) roste alespoň stejně rychle nebo rychleji než než funkce lg(n!). Symbolem lg značíme logaritmus o základu 2.

3. Prohledávání grafů

Výroková a predikátová logika - III

ALGORITMY A DATOVÉ STRUKTURY

PROGRAMOVÁNÍ. Cílem předmětu Programování je seznámit posluchače se způsoby, jak algoritmizovat základní programátorské techniky.

Stromové rozklady. Definice 1. Stromový rozklad grafu G je dvojice (T, β) taková, že T je strom,

TGH08 - Optimální kostry

Prohledávání do šířky = algoritmus vlny

Zadání a řešení testu z matematiky a zpráva o výsledcích přijímacího řízení do magisterského navazujícího studia od podzimu 2014

Grafy. RNDr. Petra Surynková, Ph.D. Univerzita Karlova v Praze Matematicko-fyzikální fakulta.

TEORIE GRAFŮ TEORIE GRAFŮ 1

8 Přednáška z

Základy informatiky. Teorie grafů. Zpracoval: Pavel Děrgel Úprava: Daniela Szturcová

TGH10 - Maximální toky

Jarníkův algoritmus. Obsah. Popis

ORIENTOVANÉ GRAFY, REPREZENTACE GRAFŮ

5 Orientované grafy, Toky v sítích

1. Převeďte dané číslo do dvojkové, osmičkové a šestnáctkové soustavy: a) b)

V každém kroku se a + b zmenší o min(a, b), tedy vždy alespoň o 1. Jestliže jsme na začátku dostali 2

= je prostý orientovaný graf., formálně c ( u, v) 0. dva speciální uzly: zdrojový uzel s a cílový uzel t. Dále budeme bez

TGH07 - Chytré stromové datové struktury

Často potřebujeme hledat mezi dvěma vrcholy grafu cestu, která je v nějakém

Amortizovaná složitost. Prioritní fronty, haldy (binární, d- regulární, binomiální, Fibonacciho), operace nad nimi a jejich složitost

Hledáme efektivní řešení úloh na grafu

Pokročilé haldy. prof. Ing. Pavel Tvrdík CSc. Fakulta informačních technologií České vysoké učení technické v Praze c Pavel Tvrdík, 2010

Přijímací zkouška - matematika

Kapitola 11. Vzdálenost v grafech Matice sousednosti a počty sledů

bin arn ı vyhled av an ı a bst Karel Hor ak, Petr Ryˇsav y 23. bˇrezna 2016 Katedra poˇ c ıtaˇ c u, FEL, ˇ CVUT

1. Minimální kostry Od mìsteèka ke kostøe

TOKY V SÍTÍCH II. Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky, FIT České vysoké učení technické v Praze

Modely teorie grafů, min.kostra, max.tok, CPM, MPM, PERT

Výroková a predikátová logika - IV

3. Třídy P a NP. Model výpočtu: Turingův stroj Rozhodovací problémy: třídy P a NP Optimalizační problémy: třídy PO a NPO MI-PAA

Cílem kapitoly je seznámit studenta se seznamem a stromem. Jejich konstrukci, užití a základní vlastnosti.

Numerická stabilita algoritmů

Metody síťové analýzy

Programování 3. hodina. RNDr. Jan Lánský, Ph.D. Katedra informatiky a matematiky Fakulta ekonomických studií Vysoká škola finanční a správní 2015

Vztah teorie vyčíslitelnosti a teorie složitosti. IB102 Automaty, gramatiky a složitost, /31

Ohodnocené orientované grafy

Výroková a predikátová logika - II

Základní pojmy teorie grafů [Graph theory]

B3B33ALP - Algoritmy a programování - Zkouška z předmětu B3B33ALP. Marek Boháč bohacm11

Lineární algebra : Násobení matic a inverzní matice

IB111 Úvod do programování skrze Python

Výroková a predikátová logika - III

Základy informatiky. 07 Teorie grafů. Kačmařík/Szturcová/Děrgel/Rapant

Dynamické datové struktury III.

Matice sousednosti NG

Analýza Petriho sítí. Analýza Petriho sítí p.1/28

GRAFY A GRAFOVÉ ALGORITMY

Minimální kostry. Teorie. Štěpán Šimsa

Drsná matematika III 10. demonstrovaná cvičení Kostry grafů

Kapitola 1. Úvod. 1.1 Značení. 1.2 Výroky - opakování. N... přirozená čísla (1, 2, 3,...). Q... racionální čísla ( p, kde p Z a q N) R...

H {{u, v} : u,v U u v }

Transkript:

opakování reprezentace grafů, dijkstra, bellman-ford, johnson Petr Ryšavý 19. září 2016 Katedra počítačů, FEL, ČVUT

opakování reprezentace grafů

Graf Definice (Graf) Graf G je uspořádaná dvojice G = (V, E), kde V je množina vrcholů a E V V je množina hran. Podle toho, zda jsou hrany uspořádané/neuspořádané dvojice rozlišujeme orientované/neorientované grafy. Příklady grafů: silniční/železniční sít, web, sociální sítě Typicky značíme V = n a E = m. 2

Příklad Uvažujme neorientovaný graf s n vrcholy, bez paralelních hran, který je tvořený jedinou komponentou souvislosti. Jaký je minimální a maximální počet hran, které graf může mít? n(n 1) 1. n 1 a 2 2. n 1 a n 2 3. n a 2 n 4. n a n n 3

Hustý vs. řídký graf (anglicky dense a sparse) Ve většině aplikací je m mezi Ω(n) a O(n 2 ). Pro řídký graf je m v O(n) nebo se mu bĺıží. Pro hustý graf je m bĺızko Θ(n 2 ). 4

Matice sousednosti (anglicky adjacency matrix) Graf representujeme jako matici nul a jedniček o rozměrech n n (tj. A {0, 1} n n ), kde platí A ij = 1 iff G má hrany mezi vrcholy i a j. Varianty: A ij je počet hran mezi vrcholy i a j, A ij je váha (cena/délka) hrany, A ij je ±1 podle orientace hrany. 5

Příklad Jaká je prostorová náročnost uložení matice sousednosti? 1. Θ(n) 2. Θ(m) 3. Θ(m + n) 4. Θ(n 2 ) 6

Příklad Jaká je prostorová náročnost uložení matice sousednosti? 1. Θ(n) 2. Θ(m) 3. Θ(m + n) 4. Θ(n 2 ) Kvadratická prostorová náročnost je v pořádku pro hustý graf. V řídkém grafu plýtváme prostorem. 6

List sousednosti (anglicky adjacency list) pole (list) vrcholů pole (list) hran každá hrana odkazuje odpovídající dvojici vrcholů každý vrchol odkazuje na incidentní hrany 7

Příklad Jaká je prostorová náročnost uložení listu sousednosti? 1. Θ(n) 2. Θ(m) 3. Θ(m + n) 4. Θ(n 2 ) 8

Která reprezentace je lepší? Záleží na hustotě. Záleží na operacích, které chceme poskytovat List sousednosti je lepší pro prohledávání grafu. Například web má 10 10 vrcholů. 9

dijkstrův algoritmus

Single-source shortest path Vstup: Orientovaný graf G = (V, E) každá hrana má nezápornou váhu počáteční vrchol s Výstup: Pro každý vrchol v V spočtěme L(v) = délka nejkratší cesty z s do v. Předpoklady: (pro pohodlnost) Vše je dostupné z s. Délky hran jsou nezáporné. 11

Příklad Jaké jsou délky nejkratších cest z vrcholu s do vrcholů s, v, w, t v grafu na tabuli? 0, 1, 2, 3 0, 1, 4, 7 0, 1, 4, 6 0, 1, 3, 5 12

Neumíme redukovat problém na BFS? 1. Nepočítá už BFS nejkratší cesty v lineárním čase? 13

Neumíme redukovat problém na BFS? 1. Nepočítá už BFS nejkratší cesty v lineárním čase? Ano, ale l e = 1 pro všechny hrany e E 13

Neumíme redukovat problém na BFS? 1. Nepočítá už BFS nejkratší cesty v lineárním čase? Ano, ale l e = 1 pro všechny hrany e E 2. Nešlo by nahradit celočíselné váhy cestami jednotkové délky? 13

Neumíme redukovat problém na BFS? 1. Nepočítá už BFS nejkratší cesty v lineárním čase? Ano, ale l e = 1 pro všechny hrany e E 2. Nešlo by nahradit celočíselné váhy cestami jednotkové délky? Neškáluje, problém se může značně zvětšit. 13

Neumíme redukovat problém na BFS? 1. Nepočítá už BFS nejkratší cesty v lineárním čase? Ano, ale l e = 1 pro všechny hrany e E 2. Nešlo by nahradit celočíselné váhy cestami jednotkové délky? Neškáluje, problém se může značně zvětšit. Řešením je Dijkstrův algoritmus. 13

Pseudokód function Dijkstra-Algorithm(graph, s) returns shortest path to each v X {s} Množina vrcholů, pro které známe L(v) A[s] = 0 Spočtená délka cesty B[s] = emptypath Spočtená cesta while X V do (v, w ) hrana (v, w) E s v X, w X, která minimalizuje A[v] + l (v,w) X X {w } A[w ] = A[v ] + l (v,w ) B[w ] = B[v ] (v, w ) end while end function 14

Příklad 15

korektnost dijkstrova algoritmu

Korektnost Dijkstrova algoritmu Tvrzení (Dijkstra, 1959) Pro každý orientovaný graf s nezápornými délkami hran Dijsktrův algoritmus spočte korektně všechny nejkratší cesty z vrcholu s, tj. v V : A[v] = L(v). 17

Důkaz Indukcí přes počet iterací. 18

implementace dijkstrova algoritmu

Příklad Jaký je čas běhu, pokud Dijkstrův algoritmus naimplementujeme naivně podle pseudokódu? 1. Θ(m + n) 2. Θ(n log n) 3. Θ(n 2 ) 4. Θ(mn) 20

Lepší implementace? Stále opakujeme operaci hledání minima. Nešlo by tyto opakované výpočty urychlit pomocí lepší organizace dat? 21

Halda Datová struktura co provádí operace insert a extract-min v O(log n). Perfektně vyvážený binární strom. V každém vrcholu je splněná vlastnost haldy: velikost kĺıče je menší než velikosti kĺıčů potomků. extract-min- odebereme vrchol, na jeho místo vložíme poslední uzel a probubláme dolů insert- vložíme na konec a probubláme nahoru Dále máme možnost odebrat z prostředku (probublávání nahoru nebo dolů podle potřeby) 22

Dijkstra s prioritní frontou. Invariant 1 V haldě máme vrcholy z množiny V \ X. 23

Dijkstra s prioritní frontou. Invariant 1 V haldě máme vrcholy z množiny V \ X. Invariant 2 Pro každý v / X platí, že key[x] je nejmenší Dijkstrovo hladové skóre ze všech hran (u, v) E s u X (popř., neexistuje-li taková hrana) 23

Dijkstra s prioritní frontou. Invariant 1 V haldě máme vrcholy z množiny V \ X. Invariant 2 Pro každý v / X platí, že key[x] je nejmenší Dijkstrovo hladové skóre ze všech hran (u, v) E s u X (popř., neexistuje-li taková hrana) Pokud udržíme tyto invarianty pravdivé, pak extract-min vede ke správnému vrcholu w, který přidáme do X v dalším kroku algoritmu. 23

Jak udržet Invariant 2 pravdivý? Mění se množina hran, která přechází hranici z X do V \ X. Přidáním w se mohlo snížit minimální skóre. 24

Jak udržet Invariant 2 pravdivý? Mění se množina hran, která přechází hranici z X do V \ X. Přidáním w se mohlo snížit minimální skóre. Když je w přidáno, provedeme následující kroky: for each (w, v) in E do odeber v z haldy přepočítej key[v] = min{key[v], A[w] + l wv } znovu vlož v do haldy end for 24

Čas běhu (list sousednosti) n 1 krát provedeme operaci extract-min Každá hrana způsobí maximálně jednu dvojici operací delete a insert. Čas běhu je tedy O ((n 1) log n + m log n) = O ((m + n) log n). 25

Čas běhu (matice sousednosti) Pro nalezení všech hran, co vedou z vrcholu je třeba Θ(n) práce. Nepotřebujeme haldu, nalezení minima stačí v Θ(n). Místo haldy postačuje pole. n 1 operací extract-min Pro každou Θ(n) práce, celkem tedy Θ(n 2 ). 26

Přestávka 27

problém hran záporné délky

Příklad Dijkstra na grafu se záporně ohodnocenými hranami. 29

Zkusme přidat kladnou konstantu ke všem hranám. 30

Zkusme přidat kladnou konstantu ke všem hranám. Problém, že nejkratší cesta nemusí být stále nejkratší. Cesty mají rozdílnou délku! 30

Závěr Dijkstra může spočíst špatně nejkratší cestu, pokud graf obsahuje záporně ohodnocené hrany. Dijkstrův algoritmus je rychlý, ale ne vždy korektní. Dijkstrův algoritmus se špatně distribuuje. Řešením je Bellman-Fordův algoritmus 31

Definice nejkratší cesty v grafu s cykly záporné délky Funguje naše dosavadní chápání nejkratší cesty pro graf s cykly záporné délky? 32

Definice nejkratší cesty v grafu s cykly záporné délky Funguje naše dosavadní chápání nejkratší cesty pro graf s cykly záporné délky? Nefunguje. Nejkratší cesta občas neexistuje. 32

Definice nejkratší cesty v grafu s cykly záporné délky Funguje naše dosavadní chápání nejkratší cesty pro graf s cykly záporné délky? Nefunguje. Nejkratší cesta občas neexistuje. Zkusme spočíst nejkratší cestu z s do v, která neobsahuje cyklus. 32

Definice nejkratší cesty v grafu s cykly záporné délky Funguje naše dosavadní chápání nejkratší cesty pro graf s cykly záporné délky? Nefunguje. Nejkratší cesta občas neexistuje. Zkusme spočíst nejkratší cestu z s do v, která neobsahuje cyklus. NP-těžký problém... 32

Definice nejkratší cesty v grafu s cykly záporné délky Funguje naše dosavadní chápání nejkratší cesty pro graf s cykly záporné délky? Nefunguje. Nejkratší cesta občas neexistuje. Zkusme spočíst nejkratší cestu z s do v, která neobsahuje cyklus. NP-těžký problém... Předpokládejme, že graf neobsahuje cyklus se zápornou délkou. Chceme, aby algoritmus byl schopný takovýto cyklus objevit. 32

Příklad Necht graf G neobsahuje cyklus se zápornou délkou. Pak platí: 1. Pro všechny vrcholy existuje nejkratší cesta s nejvýše n 1 hranami. 2. Pro všechny vrcholy existuje nejkratší cesta s nejvýše n hranami. 3. Pro všechny vrcholy existuje nejkratší cesta s nejvýše m hranami. 4. Každá nejkratší cesta může obsahovat libovolný počet hran. 33

Single-source shortest path, revisited Vstup: Orientovaný graf G = (V, E) každá hrana má váhu l e počáteční vrchol s Výstup: 1. Pro každý vrchol v V spočtěme L(v) = délka nejkratší cesty z s do v. nebo 2. Identifikujeme cyklus se zápornou délkou. 34

bellman-fordův algoritmus

Dynamické programování Definujeme jak řešit větší problém pomocí známých řešení podproblémů. Podobné rekurzi, ale jdeme odspodu, ne shora a řešení podproblémů máme první. 36

Aplikace DP na SSSP Podcesta nejkratší cesty je sama o sobě nejkratší cestou. Omezíme problém podle počtu hran v nejkratší cestě. 37

Aplikace DP na SSSP Podcesta nejkratší cesty je sama o sobě nejkratší cestou. Omezíme problém podle počtu hran v nejkratší cestě. Máme tedy jeden podproblém na 1. každý vrchol v 2. počet hran, které připouštíme na nejkratší cestě. 37

Lemma Necht G = (V, E) je orientovaný graf s délkami hran l e a počátečním vrcholem s. Pro všechny v V a i N označme jako P nejkratší cestu z s do v s nejvýše i hranami (cykly jsou povoleny). Pak platí 1. pokud má P nejvýše i 1 hran, pak je i nejkratší cestou z s do v s nejvýše i 1 hranami; 2. pokud má P právě i hran s poslední hranou z w do v, pak cesta P je nejkratší cestou z s do w s nejvýše i 1 hranami. 38

Důkaz 39

Příklad Kolik existuje kandidátu pro optimální řešení pro podproblém zahrnující vrchol v a i hran? 1. 2 2. 1 + in degree(v) 3. n 1 4. n 40

Bellman-Fordův algoritmus Necht L i,v je délka nejkratší cesty z s do v, která připouští nejvýše i hran. Pak v V, i N platí L i,v = min { Li 1,v, min (w,v) E {L i 1,v + l wv }. Korektnost vychází z předchozího lemmatu. 41

Pokud graf G neobsahuje cyklus záporné délky Pokud graf G neobsahuje cyklus záporné délky, pak nejkratší cesty neobsahují cykly, mají nejvýše n 1 hran, stačí uvažovat pouze i do n 1. 42

Pseudokód function Bellman-Ford(graph, s) returns shortest path to each v A prázdné pole indexované i a v A[0, s] = 0 v V \ {s} : A[0, v] = for i = 1 to n 1 do for each v V do A[i, v] = min { A[i 1, v], min (w,v) E {A[i 1, w] + l wv } } end for end for end function 43

Příklad 44

Příklad Jaký je čas běhu Bellman-Fordova algoritmu? 1. O(n 2 ) 2. O(mn) 3. O(n 3 ) 4. O(m 2 ) 45

Předčasné zastavení Pokud se nic nezmění pro nějaké j < n 1, pak víme, že v V : A[j, v] = A[j 1, v] Nic se nezmění ani pro j + 1, ani nikdy dále. Můžeme zastavit výpočet dříve. 46

detekce záporných cyklů

Co se stane při existenci cyklu záporné délky Tvrzení G nemá cyklus záporné délky pokud přidáme jednu iteraci B-F algoritmu, pak v V : A[n 1, v] = A[n, v]. 48

Důkaz 49

Arbitrage detection Máme převodní kurzy několika měn. Detekujeme cyklus, kde je součin kurzů 1. 50

Arbitrage detection Máme převodní kurzy několika měn. Detekujeme cyklus, kde je součin kurzů 1. Formulujeme jako detekci negativního cyklu po nahrazení délek hran jejich logaritmem. 50

johnsonův algoritmus

All-pairs shortest path nebo Vstup: Orientovaný graf G = (V, E) každá hrana má váhu l e Výstup: 1. Pro každou dvojici vrcholů u, v V spočtěme délku nejkratší cesty z u do v. 2. Identifikujeme cyklus se zápornou délkou. 52

Souvislost s předchozími APSP se redukuje na n volání SSSP. Algoritmus Čas běhu Přípustná data n volání Dijkstry O(mn log n) nezáporné délky hran n volání Bellman-Forda O(mn 2 ) obecný graf Floyd-Warshall O(n 3 ) obecný graf Johnson 1 O(mn log n) obecný graf 1 1 volání B-F, n volání Dijkstry 53

Převážení hran Necht G = (V, E) je orientovaný graf s obecnými délkami hran l e. Zafixujme číslo p v pro každý vrchol v V. Nech pro každou hranu e = (u, v) grafu G je l e = l e + p u p v. 54

Příklad Je-li P libovolná cesta z s do t délky L, jaká je délka P, pokud převážíme hrany? 1. L 2. L + p s + p t 3. L + p s p t 4. L p s + p t 55

Důsledek Každá cesta z s do t se změní o stejnou hodnotu. Převážení zachovává uspořádání cest podle jejich délek. Nejkratší cesta zůstává nejkratší cestou. Existují vždy takové váhy, aby se ceny hran staly nezáporné? 56

Příklad Přidejme nový počáteční vrchol. Spust me Bellman-Fordův algoritmus a spočtěme nejkratší cestu z s do libovolného vrcholu. hodnoty použijme jako váhy vrcholů p v = délka nejkratší cesty z s do v. 57

Hrany mají po převážení nezáporné váhy Tvrzení Pro všechny hrany e = (u, v) platí l e = l e + p u p v 0. 58

Důkaz 59

Pseudokód function Johnson-Algorithm(graph) vytvoř G z G přidáním vrcholu s a hran (s, v) o ceně 0 pro všechny v V spust Bellman-Fordův algoritmus na G s počátečním vrcholem s zastav, pokud nalezneš cyklus záporné délky v V : p v délka nejkratší cesty z s do v v G e = (u, v) E : l e = l e + p u p v for each v V do spust Dijkstrův algoritmus na grafu G s l e a s počátkem u označ vypočtené délky jako d (u, v) pro všechny v V end for u, v V : d(u, v) d (u, v) p u + p v end function 60

Čas běhu O(n) + O(mn) + O(m) + O(mn log n) + O(n 2 ) = O(mn log n). To je mnohem lepší než Floyd-Warshallův algoritmus pro řídké grafy. 61

References heavily inspired by Tim Roughgarden s online courses, http://theory.stanford.edu/ tim/videos.html Robert Sedgewick and Kevin Wayne, Algorithms, http://algs4.cs.princeton.edu/home/, namely http://algs4.cs.princeton.edu/44sp/ 62

Děkuji za pozornost. Čas na otázky! 63