TGH06 - Hledání nejkratší cesty

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

TGH08 - Optimální kostry

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

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

Grafové algoritmy. Programovací techniky

Algoritmy na ohodnoceném grafu

Vzdálenost uzlů v neorientovaném grafu

Grafové algoritmy. Programovací techniky

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

Použití dalších heuristik

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

TGH07 - Chytré stromové datové struktury

TGH07 - Chytré stromové datové struktury

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

Jan Březina. 7. března 2017

TGH10 - Maximální toky

Algoritmizace prostorových úloh

TGH09 - Barvení grafů

Paralelní grafové algoritmy

TGH05 - Problém za milion dolarů.

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

Dijkstrův algoritmus

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

Stromy, haldy, prioritní fronty

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

Dijkstrův algoritmus (připomenutí)

07 Základní pojmy teorie grafů

TGH04 - procházky po grafech

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

Dynamické programování

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

Jarníkův algoritmus. Obsah. Popis

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

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

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.

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

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

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

Matice sousednosti NG

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

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

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

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

Úvod do teorie grafů

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

Nejkratší cesta v grafu

Ohodnocené orientované grafy

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

Přijímací zkouška - matematika

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

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

Grafové algoritmy. Programovací techniky

Prioritní fronta, halda

TGH12 - Problém za milion dolarů

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í

TEORIE GRAFŮ TEORIE GRAFŮ 1

10. Složitost a výkon

6. Tahy / Kostry / Nejkratší cesty

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

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

Principy indukce a rekursivní algoritmy

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

= 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

ORIENTOVANÉ GRAFY, REPREZENTACE GRAFŮ

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

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

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

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

Ú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ů

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

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

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

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

Hledání v textu algoritmem Boyer Moore

TGH02 - teorie grafů, základní pojmy

Úvod do informatiky. Miroslav Kolařík

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

ALGORITMY A DATOVÉ STRUKTURY

Problém obchodního cestujícího(tsp) Vstup: Množina n měst a vzdálenosti mezi nimi. Výstup: Nejkratší okružní cesta procházející všemi městy.

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

TGH02 - teorie grafů, základní pojmy

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

TGH02 - teorie grafů, základní pojmy

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

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

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

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

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

Univerzita Karlova v Praze Matematicko-fyzikální fakulta. Vedoucí práce: RNDr. Martin Pergel, Ph.D.

Multirobotická kooperativní inspekce

bfs, dfs, fronta, zásobník

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

4 Stromy a les. Definice a základní vlastnosti stromů. Kostry grafů a jejich počet.

Dynamické datové struktury III.

8 Přednáška z

Dynamické programování

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

Dynamické datové struktury IV.

Transkript:

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

Motivační problémy Silniční sít reprezentovaná grafem. Najdi nejkratší/nejrychlejší cestu z místa A do místa B. Najdi nejrychlejší dopravní spojení (IDOS). Routovaní. Nejkratší cesta pro pakety TCP/IP spojení. AI (pathfinding) pro roboty a boty (ohodnocení grafu může zahrnovat i nebezpečnost cesty) Hledání nejširší cesty (přeprava rozměrných nákladů).

Reálné problémy - 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

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ů.

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:

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);

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 )

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.

Dynamic programming

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