TGH06 - Hledání nejkratší cesty

Podobné dokumenty
TGH06 - Hledání nejkratší cesty

Grafové algoritmy. Programovací techniky

TGH08 - Optimální kostry

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

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

Algoritmy na ohodnoceném grafu

Grafové algoritmy. Programovací techniky

Vzdálenost uzlů v neorientovaném grafu

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

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

Jan Březina. 7. března 2017

Použití dalších heuristik

Paralelní grafové algoritmy

TGH07 - Chytré stromové datové struktury

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

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

TGH07 - Chytré stromové datové struktury

TGH09 - Barvení grafů

Algoritmizace prostorových úloh

TGH10 - Maximální toky

TGH05 - Problém za milion dolarů.

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

Dijkstrův algoritmus

Dynamické programování

Dijkstrův algoritmus (připomenutí)

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

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

TGH04 - procházky po grafech

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

Stromy, haldy, prioritní fronty

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

07 Základní pojmy teorie grafů

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

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

Hranová konzistence. Arc consistency AC. Nejprve se zabýváme binárními CSP. podmínka odpovídá hraně v grafu podmínek

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.

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

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

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

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

Jarníkův algoritmus. Obsah. Popis

Úvod do teorie grafů

Matice sousednosti NG

TEORIE GRAFŮ TEORIE GRAFŮ 1

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

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

Ohodnocené orientované grafy

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

Grafové algoritmy. Programovací techniky

TGH12 - Problém za milion dolarů

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

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

Nejkratší cesta v grafu

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

Přijímací zkouška - matematika

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

10. Složitost a výkon

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

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í

Prioritní fronta, halda

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

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

ORIENTOVANÉ GRAFY, REPREZENTACE GRAFŮ

6. Tahy / Kostry / Nejkratší cesty

"Agent Hledač" (3. přednáška)

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

Úvod do informatiky. Miroslav Kolařík

Pokročilá algoritmizace amortizovaná složitost, Fibonacciho halda, počítačová aritmetika

4EK201 Matematické modelování. 2. Lineární programování

Hledání v textu algoritmem Boyer Moore

ALGORITMY A DATOVÉ STRUKTURY

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

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

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

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

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

Dynamické programování

Lineární programování

= 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

Principy indukce a rekursivní algoritmy

Úloha ve stavovém prostoru SP je <s 0, C>, kde s 0 je počáteční stav C je množina požadovaných cílových stavů

Test prvočíselnosti. Úkol: otestovat dané číslo N, zda je prvočíslem

CVIČNÝ TEST 36. OBSAH I. Cvičný test 2. Mgr. Tomáš Kotler. II. Autorské řešení 6 III. Klíč 15 IV. Záznamový list 17

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

fakulty MENDELU v Brně (LDF) s ohledem na disciplíny společného základu (reg. č. CZ.1.07/2.2.00/28.

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

Konstrukce relace. Postupně konstruujeme na množině všech stavů Q relace i,

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

NPRG030 Programování I, 2018/19 1 / :03:07

ADT prioritní fronta. Haldy. Další operace nad haldou. Binární halda. Binomické stromy. Časová složitost jednotlivých operací.

TGH02 - teorie grafů, základní pojmy

Dynamické datové struktury IV.

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

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

LDF MENDELU. Simona Fišnarová (MENDELU) Základy lineárního programování VMAT, IMT 1 / 25

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

VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ BRNO UNIVERSITY OF TECHNOLOGY

TGH02 - teorie grafů, základní pojmy

TGH02 - teorie grafů, základní pojmy

Učební texty k státní bakalářské zkoušce Matematika Základy lineárního programování. študenti MFF 15. augusta 2008

Transkript:

TGH06 - Hledání nejkratší cesty Jan Březina Technical University of Liberec 31. března 2015

Motivační problémy Silniční sít reprezentovaná grafem. Ohodnocené hrany - délky silnic. Najdi nejkratší/nejrychlejší cestu z místa A do místa B. Hledání nejširší cesty (přeprava rozměrných nákladů). Najdi nejrychlejší dopravní spojení (IDOS). Routovaní. Nejkratší cesta pro pakety TCP/IP spojení. AI - pathfinding, pro roboty a boty. Ohodnocení délkou, bezpečností,... AI (problem solving) např. skládání rubikovy kostky,

Grafové formulace Vstup: Graf (vrcholu, hrany), orientovaný Ohodnocení hran (nezáporné) Shortest path: Najdi nejkratší cestu z vrcholu A do vrcholu B. Single source shortest path: Najdi nejkratší cesty z vrcholu S do všech vrcholů. V single source úloze je řešením strom nejkratších cest (z každého vrcholu kromě S vede právě jedna hrana směrem k S, tj. N 1 hran). All-to-all shortest path: Najdi nejkratší cestu pro všechny dvojice vrcholů.

Modifikace BFS Pro celočíselná ohodnocení bychom mohli hrany rozdělit na podhrany.

Modifikace BFS Pro celočíselná ohodnocení bychom mohli hrany rozdělit na podhrany. Spustíme BFS z vrcholu S. Z vrcholu S vypustíme Číňany. Ve vrcholech se budou dělit.

Modifikace BFS Pro celočíselná ohodnocení bychom mohli hrany rozdělit na podhrany. Spustíme BFS z vrcholu S. Z vrcholu S vypustíme Číňany. Ve vrcholech se budou dělit. Pro velká ohodnocení budeme opakovaně dávat do fronty vrcholy na stejných makro hranách. Číňané pouze jdou.

Modifikace BFS Pro celočíselná ohodnocení bychom mohli hrany rozdělit na podhrany. Spustíme BFS z vrcholu S. Z vrcholu S vypustíme Číňany. Ve vrcholech se budou dělit. Pro velká ohodnocení budeme opakovaně dávat do fronty vrcholy na stejných makro hranách. Číňané pouze jdou. Chceme zjistit, který Čínan první dorazí na nějakou křižovatku. Pro něj provedeme rozdělení.

Modifikace BFS Pro celočíselná ohodnocení bychom mohli hrany rozdělit na podhrany. Spustíme BFS z vrcholu S. Z vrcholu S vypustíme Číňany. Ve vrcholech se budou dělit. Pro velká ohodnocení budeme opakovaně dávat do fronty vrcholy na stejných makro hranách. Číňané pouze jdou. Chceme zjistit, který Čínan první dorazí na nějakou křižovatku. Pro něj provedeme rozdělení. Lépe: Na kterou křižovatku dorazí prvně nějaký Číňan. Křižovatek (vrcholů) je méně než skupin Číňanů (hran).

Prioritní fronta Datová struktura s operacemi: Odeber Minum (AcessMin, DeleteMin) - vrat prvek s minimálním kĺıčem a odeber ho z fronty Zmenši Kĺıč (DecreaseKey) - zmenši kĺıč daného prvku ve frontě Naplnění fronty - vytvoření fronty z dané množiny prvků, nebo operace přidání prvku Možno implementovat pomocí haldy. Pro binární haldu máme složitost prvních dvou operací O(log n).

Dijkstra s algorithm Vstup: vrcholy V a sousednosti Adj[u] = {e E e(u, v)} s ohodnocením w(e), počáteční vrchol s Výstup: vzdálenosti d[i] od s, předci π[i] stromu minimálních vzdáleností for u V do d[u] = ; ; d[s] = 0; π[s] = NULL; Naplň prioritní frontu Q vrcholy V s prioritami d[ ]. while u = OdeberMin(Q) do for e = (u, v) Adj[u] do alt = d[u] + w(e); if alt < d[v] then π[v] = u; d[v] = alt; ZmenšiKĺıč(Q,v);

Složitost Dijkstra Obecně: Pro seznam: O( V (čas OdeberMin) + E (čas ZmenšiKĺıč)) O( V O( V ) + E O(1)) = O( V 2 ) Pokud E V 2 je toto optimální, jinak se vyplatí použít: Binární haldu: O(( V + E ) log V ) nebo dokonce Fibonacciho haldu: O( V log V + E )

Správnost Dijkstra Theorem Necht R je množina vrcholů mimo prioritní frontu. V průběhu celého algoritmu platí d[v] = δ(v) := δ(s, v) pro všechny vrcholy v R. Důkaz indukcí. Na počátku je R =, tvrzení platí. Pokud platí pro R, platí i po přidání vrcholu v, tj. pro R {v}. Sporem: Existuje cesta P = (s,..., x, y,..., v) kratší než d[v], Necht, (x, y), x R a y / R, je hrana nejbĺıže s (existuje, protože s R a v / R. Vrchol v má nejmenší d[ ] z vrcholů mimo R. Tedy d[v] d[y]. Při přidání x do R jsme prošli i hranu (x, y), je tedy: d[x] + w(x, y) d[y] a zároveň d[x] = δ(x) podle indukčního předpokladu. Dohromady: w(p ) δ(x) + w(x, y) d[v] takže cesta P není kratší.

Bottleneck path Problém: Najdi cestu z města A do města B s největší minimální šířku silnice. Modifikace Dijkstra: vrcholy - města hrany - silnice váhy hran - šířky silnic délka cesty - minum z hodnot hran (nejužší místo na cestě) fronta - maximální, d[ ] šířka nejširší cesty while u = OdeberMax(Q) do for e = (u, v) Adj[u] do alt = min(d[u], w(e)); if alt > d[v] then π[v] = u; d[v] = alt; ZvětšKĺıč(Q,v);

Hledání nejkratší cesty Hledání nejkratší nebo nejrychlejší cesty na mapě. (Rovinný graf) IDOS. Nejrychlejší dopravní spojení. (DAG) Hledání spojení s maximální propustností. (bottleneck path) Path density. Importance of people in social networks.

Path density

Bellman-Ford pro záporné váhy for u V do d[u] = ; ; d[s] = 0; π[s] = NULL; for i = 1,..., V 1 do for e = (u, v) E do alt = d[u] + w(e); if alt < d[v] then π[v] = u; d[v] = alt; for e = (u, v) E do u = e.begin; v = e.end; alt = d[u] + w(e); if alt < d[v] then Error: negative cycle.; princip: V kroku i najdu všechny nejkratší cesty délky i. složitost: O( V E )

Bellman-Ford aplikace Hrany jsou akce, ohodnocení jejich cena (kladná - placená práce, záporná - jiné aktivity), cílem je dosáhnout daného cíle a maximalizovat náklady. Hrany jsou chemické reakce, ohodnocení uvolněné teplo. Kurzová arbitráž. Hrany jsou možné konverze mezi měnami. Cílem je najít negativní cyklus a na něm se obohatit. Zjednodušené verze některých NP-úplných problémů (lineární programování). Řešení soustavy rozdílových nerovnic: x i x j w ij Vrcholy jsou proměnné, hrany jsou nerovnice, přidán startovní vrchol s nulovými hranami do ostatních.

Floyd Warshall - všechny nejkratší cesty Počáteční hodnota d[i][j] je hodnota příslušné hrany, nebo nekonečno pokud hrana neexistuje. middle[ ][ ] = NULL for k = 1,..., V do for i = 1,..., V do for j = 1,..., V do if d[i][k] + d[k][j] < d[i][j] then d[i][j] = d[i][k] + d[k][j]; middle[i][j] = k; Pro každé k se aktualizuje d[i][j], což je nejkratší cesta z i do j s použitím vrcholů 1,..., k. middle[i][j] udává mezivrchol s nejvyšším indexem na nejkratší cestě z i do j. Libovolnou nejkratší cestu i j je možno rekurzivně rekonstruovat jako: i middle[i][j], middle[i][j] j. Při přítomnosti záporných cyklů jsou na diagonále matice d záporná čísla.

Princip optimality Pokud X Z Y je nejkratší cesta z X do Y, pak X Z a Z Y jsou také nejkratší cesty. Důsledek:

Dynamické programování

A algorithm Dijkstrův algoritmus + heuristika vzdálenosti do cíle c. Přípustná (admisible) heuristika h(v): pro každý vrchol v máme navíc spodní odhad nejkratší vzdálenosti, t.j. monotóní heuristika δ(v, c) h(v) h(x) δ(x, y) + h(y) V Dijkstrově algoritmu pak modifikujeme ceny hran na: FINISH d (u, v) = d(u, v) h(u) + h(v)

A* algorithm, monotonni for u V do d[u] = ; ; d[s] = 0; π[s] = NULL; Naplň prioritní frontu Q vrcholy V s prioritami d[ ]. while u = OdeberMin(Q) do for e = (u, v) Adj[u] do alt = d[u] + w(e) h[u] + h[v]; if alt < d[v] then π[v] = u; d[v] = alt; ZmenšiKĺıč(Q,v); Stačí modifikovat ohodnocení hran. Díky monotonii nevznikaji zaporné hrany a každý vrchol se do fronty dostane maximálně jednou.

A* algorithm, monotonni for u V do d[u] = ; ; d[s] = 0; π[s] = NULL; Naplň prioritní frontu Q vrcholy V s prioritami d[ ]. while u = OdeberMin(Q) do for e = (u, v) Adj[u] do alt = d[u] + w(e); if alt < d[v] then π[v] = u; d[v] = alt; ZmenšiKĺıč(Q,v, d[v] + h[v]); Ohodnocení i hodnoty d[:] jsou jako v Dijkstrovi, ale priority ve frontě jsou modifikované. Pro monoténní heuristiku je to ekvivalentní předchozímu přístupu. Jinak se vrcholy mohou do fronty vracet. Jakou to pak má složitost??

Dálniční hierarchie