6. Tahy / Kostry / Nejkratší cesty

Podobné dokumenty
Úvod do teorie grafů

Algoritmy na ohodnoceném grafu

Stromy. Strom: souvislý graf bez kružnic využití: počítačová grafika seznam objektů efektivní vyhledávání výpočetní stromy rozhodovací stromy

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

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

Vzdálenost uzlů v neorientovaném grafu

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

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

Použití dalších heuristik

Stromy, haldy, prioritní fronty

VLASTNOSTI GRAFŮ. Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky, FIT České vysoké učení technické v Praze. BI-GRA, LS 2010/2011, Lekce 5

PROHLEDÁVÁNÍ GRAFŮ. Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky, FIT České vysoké učení technické v Praze

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

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

ORIENTOVANÉ GRAFY, REPREZENTACE GRAFŮ

Grafové algoritmy. Programovací techniky

Grafové algoritmy. Programovací techniky

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

07 Základní pojmy teorie grafů

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

2. Mřížky / Záplavové vyplňování

Teorie grafů. Kostra grafu. Obsah. Radim Farana Podklady pro výuku pro akademický rok 2013/2014

Binární vyhledávací stromy II

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

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

Dynamické datové struktury III.

Stromy. Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta a kol.

TGH06 - Hledání nejkratší cesty

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

Paralelní grafové algoritmy

Matice sousednosti NG

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 21.

TGH06 - Hledání nejkratší cesty

4. Rekurze. BI-EP1 Efektivní programování Martin Kačer

Rekurzivní algoritmy

VLASTNOSTI GRAFŮ. Vlastnosti grafů - kap. 3 TI 5 / 1

TGH08 - Optimální kostry

5. Dynamické programování

BI-EP1 Efektivní programování 1

ALGORITMIZACE 2010/03 STROMY, BINÁRNÍ STROMY VZTAH STROMŮ A REKURZE ZÁSOBNÍK IMPLEMENTUJE REKURZI PROHLEDÁVÁNÍ S NÁVRATEM (BACKTRACK)

BI-EP2 Efektivní programování 2

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

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

Dynamicky vázané metody. Pozdní vazba, virtuální metody

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

1. Úvodní informace. BI-EP1 Efektivní programování Martin Kačer

Časová a prostorová složitost algoritmů

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

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

Stromy. Příklady. Rekurzivní datové struktury. Základní pojmy

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

Dynamické programování

Jan Březina. Technical University of Liberec. 30. dubna 2013

Informatika navazující magisterské studium Přijímací zkouška z informatiky 2018 varianta A

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 12.

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

TGH04 - procházky po grafech

VYUŽITÍ NĚKTERÝCH METOD TEORIE GRAFŮ PŘI ŘEŠENÍ DOPRAVNÍCH PROBLÉMŮ

Dynamické datové struktury IV.

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

Stromy. Jan Hnilica Počítačové modelování 14

Jan Březina. Technical University of Liberec. 21. dubna 2015

Efektivní hledání nejkratších cest v sítích hromadné přepravy osob

Datové struktury Úvod

a) b) c) Radek Mařík

ALG 04. Zásobník Fronta Operace Enqueue, Dequeue, Front, Empty... Cyklická implementace fronty. Průchod stromem do šířky

TGH07 - Chytré stromové datové struktury

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

TGH07 - Chytré stromové datové struktury

STROMY. v 7 v 8. v 5. v 2. v 3. Základní pojmy. Řešené příklady 1. příklad. Stromy

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

ALGORITMIZACE 2010/03 STROMY, BINÁRNÍ STROMY VZTAH STROMŮ A REKURZE ZÁSOBNÍK IMPLEMENTUJE REKURZI PROHLEDÁVÁNÍ S NÁVRATEM (BACKTRACK)

Maturitní témata. IKT, školní rok 2017/18. 1 Struktura osobního počítače. 2 Operační systém. 3 Uživatelský software.

ALGORITMY A DATOVÉ STRUKTURY

DobSort. Úvod do programování. DobSort Implementace 1/3. DobSort Implementace 2/3. DobSort - Příklad. DobSort Implementace 3/3

Dijkstrův algoritmus

Prioritní fronta, halda

Volné stromy. Úvod do programování. Kořenové stromy a seřazené stromy. Volné stromy

Jan Březina. 7. března 2017

Kostry. 9. týden. Grafy. Marie Demlová (úpravy Matěj Dostál) 16. dubna 2019

5 Rekurze a zásobník. Rekurzivní volání metody

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

STROMY A KOSTRY. Stromy a kostry TI 6.1

Jarníkův algoritmus. Obsah. Popis

Datové struktury 2: Rozptylovací tabulky

TGH05 - Problém za milion dolarů.

Řešení: PŘENESVĚŽ (N, A, B, C) = přenes N disků z A na B pomocí C

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

Intervalové stromy. Představme si, že máme posloupnost celých čísel p 0, p 1,... p N 1, se kterou budeme. 1. Změna jednoho čísla v posloupnosti.

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.

Úvod do informatiky. Miroslav Kolařík

1 Nejkratší cesta grafem

Algoritmizace prostorových úloh

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

Cílem seminární práce je aplikace teoretických znalostí z přednášky na konkrétní úlohy. Podstatu algoritmu totiž

Základy algoritmizace c2005, 2007 Michal Krátký, Jiří Dvorský1/39

Základy umělé inteligence

NP-ÚPLNÉ PROBLÉMY. Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky, FIT České vysoké učení technické v Praze

Algoritmus Minimax. Tomáš Kühr. Projektový seminář 1

Tematická oblast: Informační a komunikační technologie (VY_32_INOVACE_09_1_IT) Autor: Ing. Jan Roubíček. Vytvořeno: červen až listopad 2013.

Transkript:

6. Tahy / Kostry / Nejkratší cesty BI-EP2 Efektivní programování 2 LS 2017/2018 Ing. Martin Kačer, Ph.D. 2011-18 Martin Kačer Katedra teoretické informatiky Fakulta informačních technologií České vysoké učení technické v Praze Vznik předmětu byl podpořen FRVŠ v rámci projektu 281/2011

Příklad: listonoš Listonoš chce rozvézt dopisy Jak každou ulicí projet právě jednou? Martin Kačer, BI-EP2 6. Tahy / Kostry / Cesty 2

Pravidla pro pokrytí Kdy lze pokrýt graf jedním tahem? musí být souvislý musí být Eulerův nebo právě 2 liché stupně Kolik tahů obecně na souvislý graf? Počet uzlů lichého stupně děleno dvěma A co když není souvislý? Řešíme každou komponentu zvlášť Martin Kačer, BI-EP2 6. Tahy / Kostry / Cesty 3

Jak to naprogramovat? 1. Rozdělit na komponenty souvislosti 2. V každé spočítat uzly s lichým stupněm 0 => jeden tah (a bude uzavřený) N => N/2 tahů (otevřených) Jak tahy přesně stanovit? (k diskuzi) Martin Kačer, BI-EP2 6. Tahy / Kostry / Cesty 4

Orientované grafy Princip je stejný Místo sudý stupeň je stejný vstupní a výstupní stupeň Pozor, když se liší o víc než 1 Nutno započítat celý rozdíl Martin Kačer, BI-EP2 6. Tahy / Kostry / Cesty

Konektivita grafů Martin Kačer, BI-EP2 6. Tahy / Kostry / Cesty 6

Artikulace Artikulace = uzel, jehož odebráním se zvýší počet souvislých komponent Martin Kačer, BI-EP2 6. Tahy / Kostry / Cesty 7

Most Most = hrana, jejímž odebráním se zvýší počet souvislých komponent (= hrana, která není v žádném cyklu) Martin Kačer, BI-EP2 6. Tahy / Kostry / Cesty 8

Další pojmy 2-souvislý (biconnected) graf 2-souvislá komponenta bez artikulací Praktická stránka: vliv na spolehlivost Výpadky uzlů Výpadky spojů mezi uzly Martin Kačer, BI-EP2 6. Tahy / Kostry / Cesty 9

Jak najít artikulace/mosty? Relativně jednoduchý algoritmus Zkusím odebírat uzly (příp. hrany) Testuji, zda graf je stále souvislý (případně vzrostl počet komponent) Operační složitost? O(u.(u+h)) (artik.) O(h.(u+h)) (mosty) Martin Kačer, BI-EP2 6. Tahy / Kostry / Cesty 10

Hledání artikulací efektivněji Jeden průchod hledání do hloubky Vznikne strom + zpětné hrany Jak vypadá artikulace? Martin Kačer, BI-EP2 6. Tahy / Kostry / Cesty 11

Hledání artikulací Artikulace = vnitřní uzel (tj. ne list) stromu, z jehož potomka se nelze dostat do předků Stačí jeden takový potomek Může vést i do daného uzlu (artikulace) Martin Kačer, BI-EP2 6. Tahy / Kostry / Cesty 12

Hledání artikulací jak na to? Časové značky => pořadí uzlu d[u] Rekurze vrací, do jakého nejnižšího uzlu se lze z kterého podstromu vrátit low[u] 2 1 2 1 1 9 9 u d[u] 2 4 2 3 7 6 1 3 8 v d[v] low[v] low[v] d[u] Martin Kačer, BI-EP2 6. Tahy / Kostry / Cesty 13

Artikulace speciální případ Artikulace = kořen, pokud má víc dětí Martin Kačer, BI-EP2 6. Tahy / Kostry / Cesty 14

Hledání mostů Velmi podobně Most = stromová hrana, z jejíhož podstromu se nelze dostat k vyšším uzlům 2 2 2 7 1 8 8 u d[u] 2 4 2 3 7 6 3 v d[v] low[v] low[v] > d[u] Martin Kačer, BI-EP2 6. Tahy / Kostry / Cesty 1

Kostry grafu Martin Kačer, BI-EP2 6. Tahy / Kostry / Cesty 16

Jarník-Prim: princip algoritmu Postupně připojujeme uzel, který je nejblíže k již připojeným 6 3 2 8 7 4 7 4 6 4 7 6 8 Martin Kačer, BI-EP2 6. Tahy / Kostry / Cesty 17

Jarník-Prim: princip algoritmu Postupně připojujeme uzel, který je nejblíže k již připojeným 6 3 2 8 7 4 7 4 6 4 7 6 8 Martin Kačer, BI-EP2 6. Tahy / Kostry / Cesty 18

Jarník-Prim: základ kódu for (Node n : allnodes()) { n.open = true; n.dist = + ; } start.dist = 0; inicializace while (anyopennodeleft()) { Node n = findopenwithmindist(); n.open = false; selectedge(n.prev, n); for (Node x : neighbors(n)) { if (x.open && x.dist > edgelen(n, x)) { } } } x.dist = edgelen(n, x); x.prev = n; připoj nejbližšího uprav vzdálenosti jeho sousedů Martin Kačer, BI-EP2 6. Tahy / Kostry / Cesty 19

Jarník-Prim: složitost Jaká je složitost? Záleží na implementaci prioritní fronty!! Obyčejné pole => O(u 2 ) Binární halda => O(h. log u) (což může být i víc než u pole!) A také na reprezentaci grafu (jako vždy) Martin Kačer, BI-EP2 6. Tahy / Kostry / Cesty 20

Jarník-Prim: jak naprogramovat for (Node n : allnodes()) { n.open = true; n.dist = + ; } start.dist = 0; while (anyopennodeleft()) { Node n = findopenwithmindist(); n.open = false; selectedge(n.prev, n); for (Node x : neighbors(n)) { if (x.open && x.dist > edgelen(n, x)) { x.dist = edgelen(n, x); x.prev = n; } } } Martin Kačer, BI-EP2 6. Tahy / Kostry / Cesty 21

Nejkratší cesty Martin Kačer, BI-EP2 6. Tahy / Kostry / Cesty 22

Dijkstra: princip algoritmu Postupně zavíráme uzly, které mají nejmenší vzdálenost 10 10 3 2 3 3 7 4 7 4 6 4 7 6 8 Martin Kačer, BI-EP2 6. Tahy / Kostry / Cesty 23

Dijkstra: princip algoritmu Postupně zavíráme uzly, které mají nejmenší vzdálenost 10 10 7 3 2 3 3 7 4 7 4 6 4 7 6 8 10 Martin Kačer, BI-EP2 6. Tahy / Kostry / Cesty 24

Dijkstra: princip algoritmu Postupně zavíráme uzly, které mají nejmenší vzdálenost 10 7 3 2 3 7 4 10 9 3 7 4 6 4 7 6 8 Martin Kačer, BI-EP2 6. Tahy / Kostry / Cesty 2

Dijkstra: princip algoritmu Postupně zavíráme uzly, které mají nejmenší vzdálenost 10 7 3 10 3 4 2 3 7 12 4 7 6 4 6 7 12 8 13 9 Martin Kačer, BI-EP2 6. Tahy / Kostry / Cesty 26

Dijkstra: základ kódu for (Node n : allnodes()) { n.open = true; n.dist = + ; } start.dist = 0; inicializace while (anyopennodeleft()) { Node n = findopenwithmindist(); n.open = false; for (Node x : neighbors(n)) { if (x.dist > n.dist + len(n, x)) { x.dist = n.dist + len(n, x); x.prev = n; } } } připoj nejlepšího uprav vzdálenosti jeho sousedů Martin Kačer, BI-EP2 6. Tahy / Kostry / Cesty 27

Dijkstra x Jarník-Prim V čem je rozdíl oproti hledání kostry? Přestože řeší jinou úlohu, jsou si algoritmy strukturou podobné while (anyopennodeleft()) { Node n = findopenwithmindist(); n.open = false; for (Node x : neighbors(n)) { int d = n.dist + len(n, x); if (x.dist > d) { x.dist = d; x.prev = n; } } } Martin Kačer, BI-EP2 6. Tahy / Kostry / Cesty 28

Dijkstra: složitost Jaká je složitost? Záleží na implementaci prioritní fronty!! Obyčejné pole => O(u 2 ) Halda => O(h. log u) (což může být i víc než u pole!) A také na reprezentaci grafu (jako vždy) Martin Kačer, BI-EP2 6. Tahy / Kostry / Cesty 29

Příklad: Velikost potrubí Graf modelující potrubí Ohodnocení hran = průměr trubky Jaký největší předmět lze poslat? => Jiné operace při kombinování cest Martin Kačer, BI-EP2 6. Tahy / Kostry / Cesty 30

Příklad: Velikost potrubí Jaký největší předmět lze poslat? + min min max while (anyopennodeleft()) { Node n = findopenwithmindist(); n.open = false; for (Node x : neighbors(n)) { int d = min( n.dist + ; len(n, x); ) if (x.dist > < d) { x.dist = d; x.prev = n; } } } Martin Kačer, BI-EP2 6. Tahy / Kostry / Cesty 31

Další operace pro cesty Nejspolehlivější komunikační linka + min max while (anyopennodeleft()) { Node n = findopenwithmindist(); n.open = false; for (Node x : neighbors(n)) { int d = n.dist +. len(n, x); if (x.dist > < d) { x.dist = d; x.prev = n; } } } Martin Kačer, BI-EP2 6. Tahy / Kostry / Cesty 32

Další operace pro cesty Nejvýhodnější směnný kurz + min min while (anyopennodeleft()) { Node n = findopenwithmindist(); n.open = false; for (Node x : neighbors(n)) { int d = n.dist +. len(n, x); if (x.dist > d) { x.dist = d; x.prev = n; } } } Martin Kačer, BI-EP2 6. Tahy / Kostry / Cesty 33

Příklad: Cestování MHD Doba jízdy mezi zastávkami Pro jednoduchost to není jízdní řád Přestup: Tramvaj-tramvaj: 1 min Tramvaj-metro: min Metro-metro: 3 min Martin Kačer, BI-EP2 6. Tahy / Kostry / Cesty 34

Příklad: Cestování MHD Nutné rozdvojit uzly Metro x Tramvaj Nám. Míru T M T M Muzeum I. P. Pavlova T M Karlovo nám. T M M Můstek Národní třída T M Martin Kačer, BI-EP2 6. Tahy / Kostry / Cesty 3

Příklad: Cestování MHD Pozor na zahrnování přestupů! Nutno vzít v úvahu při příjezdu Nám. Míru T M I. P. Pavlova Karlovo nám. X+7 T 6 X M M X+11 T M M Muzeum Můstek Národní třída X+ 4 T M X+9 Martin Kačer, BI-EP2 6. Tahy / Kostry / Cesty 36

Příklad: Rande Dvě osoby skončí v nějakou dobu v práci Pracovní doba nemusí být pro oba stejná Jak se mohou co nejrychleji potkat? Nezáleží na místě (úloha Catch the Bus, CTU Open 2007) Martin Kačer, BI-EP2 6. Tahy / Kostry / Cesty 37

Příklad: Rande Pustíme Dijkstrův algoritmus pro oba Hledáme nejmenší maximum z obou časů 18 13 2 10 7 4 9 3 3 9 1 7 4 7 16 14 4 Martin Kačer, BI-EP2 6. Tahy / Kostry / Cesty 38 11 6 10 1 4 3 7 6 12 18 10 8 13 13

Tvorba úloh

Vaše autorská úloha Podmínka získání zápočtu!!! 1. Zadání 2. Vzorové řešení 3. Testovací data 4. Časový limit Martin Kačer, BI-EP2 6. Tahy / Kostry / Cesty 40

Autorská úloha zadání Čeština / angličtina (příp. slovenština) Přesné Jednoznačné Stručné Formát vstupu a výstupu Jednoduché příklady Kdy je špatné? Někdo nepochopí (a není to jeho chyba) Martin Kačer, BI-EP2 6. Tahy / Kostry / Cesty 41

Autorská úloha řešení C / C++ / Java Správné Přehledné (demonstruje postup) S vysvětlením algoritmu (česky/anglicky) Na začátku zdrojového kódu Ve zvláštním souboru Kdy je špatné? Existuje platné zadání, které nevyřeší Martin Kačer, BI-EP2 6. Tahy / Kostry / Cesty 42

Autorská úloha testovací data Odpovídající zadání (formát i data) Postihující maximum případů Nejmenší a největší případy Speciální případy Mohou být generována programem Několik ručních ukázkových vstupů Kdy jsou špatná? Dovolí přijmout nesprávné řešení Martin Kačer, BI-EP2 6. Tahy / Kostry / Cesty 43

Autorská úloha časový limit Stačí krátké zdůvodnění Jak moc je časový limit důležitý Násobek času vzorového programu Na čem selže neefektivní řešení (je-li takové) Ne (!) konkrétní časy Kdy je špatně? Když dle toho nejde nastavit konkrétní limit Martin Kačer, BI-EP2 6. Tahy / Kostry / Cesty 44

Autorská úloha odevzdání Termín 30. dubna 2018 (1.. v 6:00) Dva týdny před zápočtem Hodnocení kolegů od 4. května Bez uvedení autora Snažte se opravdu hodnotit úlohu Objevování chyb (viz dříve) Martin Kačer, BI-EP2 6. Tahy / Kostry / Cesty 4

Autorská úloha hodnocení Podmínka zápočtu Celkem max. 1 bodů 4 body estetický dojem Vhodnost tématu Správná obtížnost Nápaditost, příběh 7 bodů faktická správnost Ovlivněna objevenými chybami 4 body hodnocení kolegů Martin Kačer, BI-EP2 6. Tahy / Kostry / Cesty 46

Autorské úlohy připomenutí Zadání Vzorové řešení Testovací data Stručný rozbor časového limitu Termín do 1. května! Martin Kačer, BI-EP2 6. Tahy / Kostry / Cesty 47

Úlohy Grafy Toll (přemýšlejte, co je v této verzi neobvyklé) Play on Words Freckles Tourist Guide Martin Kačer, BI-EP2 6. Tahy / Kostry / Cesty 48