Algoritmy na ohodnoceném grafu

Podobné dokumenty
Grafové algoritmy. Programovací techniky

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

Použití dalších heuristik

TGH06 - Hledání nejkratší cesty

07 Základní pojmy teorie grafů

Grafové algoritmy. Programovací techniky

TGH08 - Optimální kostry

TGH06 - Hledání nejkratší cesty

Vzdálenost uzlů v neorientovaném grafu

Stromy, haldy, prioritní fronty

TGH07 - Chytré stromové datové struktury

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

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

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

TGH07 - Chytré stromové datové struktury

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

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

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

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

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

Union-Find problém. Kapitola 1

Dijkstrův algoritmus

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

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

Dynamické programování

Úvod do teorie grafů

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

6. Tahy / Kostry / Nejkratší cesty

Prioritní fronta, halda

Algoritmizace prostorových úloh

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

STROMY A KOSTRY. Stromy a kostry TI 6.1

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

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

TGH05 - Problém za milion dolarů.

Matice sousednosti NG

Algoritmy a datové struktury

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.

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

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

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

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

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

Paralelní grafové algoritmy

Dynamické datové struktury I.

Dynamické datové struktury III.

Dynamické datové struktury IV.

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

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

Metody síťové analýzy

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

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

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

3. Prohledávání grafů

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

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í

TGH04 - procházky po grafech

Jan Březina. 7. března 2017

ORIENTOVANÉ GRAFY, REPREZENTACE GRAFŮ

Grafové algoritmy III.

TGH10 - Maximální toky

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

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

TEORIE GRAFŮ TEORIE GRAFŮ 1

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

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

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

TGH02 - teorie grafů, základní pojmy

Jarníkův algoritmus. Obsah. Popis

Grafové algoritmy. Programovací techniky

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

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

Prioritní fronta, halda (heap), řazení

Binární Vyhledávací Stromy, u kterých je. složitost operací v nejhorším. rovná O(log n)

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

Binární vyhledávací stromy II

bfs, dfs, fronta, zásobník

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

Časová a prostorová složitost algoritmů

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

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

= 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

Minimální kostra. Kapitola 1

2 Datové struktury. Pole Seznam Zásobník Fronty FIFO Haldy a prioritní fronty Stromy Hash tabulky Slovníky

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

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

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

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

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

ALGORITMY A DATOVÉ STRUKTURY

Přijímací zkouška - matematika

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

Matematika III 10. přednáška Stromy a kostry

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

Algoritmy a datové struktury I, přednáška prof. RNDr. Lud ka Kučery, DrSc. Poznámky sepsal Robert Husák. Letní semestr 2009/2010

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

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

Převoditelnost problémů nezávislé množiny na problém hamiltonovského cyklu () IS HC 1/10

qwertyuiopasdfghjklzxcvbnmqwerty uiopasdfghjklzxcvbnmqwertyuiopasd fghjklzxcvbnmqwertyuiopasdfghjklzx cvbnmqwertyuiopasdfghjklzxcvbnmq

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

Transkript:

Algoritmy na ohodnoceném grafu Dvě základní optimalizační úlohy: Jak najít nejkratší cestu mezi dvěma vrcholy? Dijkstrův algoritmus s t Jak najít minimální kostru grafu? Jarníkův a Kruskalův algoritmus 1

Plánování trasy robotu 2

Ohodnocený graf Orientovaný nebo neorientovaný graf G = kterému přidáme funkci c : E R ( V, E), ke e E c( e) funkce každé hraně přiřazuje hodnotu 11 7 8 5. 2 13 3

Nejkratší cesta v ohodnoceném grafu G = ( V, E).. ohodnocený orientovaný graf P.. cesta v G délka cesty P: d ( P) = c( e) e P Budeme předpokládat, že ohodnocení je nezáporné. e E : c( e) 0 Jsou-li dány vrcholy délky z s do t? s, t V, jak nalezneme cestu nejkratší 4

Řešení za pomoci mravenců v každém čeká mravenců, každý na jiné výstupní hraně mravenci se pohybují stejnou rychlostí, délka hrany odpovídá jejímu ohodnocení v čase T0 out v V deg ( v) vystartují mravenci z vrcholu jakmile mravenec M doběhne po své hraně do koncového vrcholu, startují všichni mravenci čekající v čekáme na prvního mravence, který se v čase G t u s a M ze závodu odstupuje T1 objeví ve vrcholu u t s 5

Řešení za pomoci mravenců Jak zjistíme, kudy vedla nejkratší cesta z s do t? V každém vrcholu sledujeme, který mravenec sem dorazí jako první a poznamenáme si zde, odkud přišel (pokud dorazí jako první více mravenců současně, vybereme si jednoho z nich). Nejkratší cestu vystopujeme zpětně z do. t s Cílem algoritmu bude projít vrcholy grafu v pořadí, které odpovídá času prvního dosažení mravencem (tj. min. vzdálenostem vrcholů od s ). 6

Dijkstrův algoritmus T.. množina vrcholů, pro které již známe výslednou cestu minimální délky z vrcholu s F.. prioritní fronta D[v].. délka doposud zjištěné nejkratší cesty do v P[v].. předek vrcholu v doposud zjištěné cestě 7

Dijkstrův algoritmus Dijkstra(G,s): for each v in V do done P[v]:= NULL; D[v]:= ; D[s]:= 0; T:= Ø; // inicializace prázdnou množinou vytvoř prioritní frontu F z vrcholů ve V s klíči D[v]; while not F->empty() do v := F->deleteMin(); T->add(v); for each w in Sousede[v] do if D[w] > D[v]+c((v,w)) then D[w]:= D[v]+c((v,w)); P[w]:= v; F->changeKey(w,D[w]); endif done done 8

Prioritní fronta Datová struktura podobná frontě Každý prvek má navíc definovaný klíč (prioritu) p R Pokud vložíme na konec nový prvek, předběhne ve frontě všechny prvky s vyšším klíčem (a,1) (b,2) (c,3) (d,3) (e,4) Insert ( f,2) Operace: Insert(v), DeleteMin, ChangeKey(v, newvalue) 9

Prioritní fronta s využitím seznamu Jednotlivé prvky ukládáme (neuspořádaně) do spojového seznamu Realizace operací: DeleteMin seznam sekvenčně prohledáme O(n) Insert(v) vkládáme na konec seznamu O(1) ChangeKey(v,p) změníme pouze prioritu prvku v, pořadí v seznamu neměníme O(1) (b,2) (c,3) (a,1) (d,3) (e,4) 10

Prioritní fronta s využitím haldy Prvky ukládáme do binární haldy 3 7 6 11 23 15 9 úplný binární strom každý vrchol má hodnotu klíče hodnotě klíče potomka 31 39 (vizualizujeme pouze klíče) DeleteMin, Insert(v), ChangeKey(v, p) vše O(log n) (každá z operací mění strukturu stromu v čase O(log n) ) 11

Dijkstrův algoritmus časová složitost Označme V = n, E = m Čas je úměrný počtu operací provedených na F, těch je max.: n x DeleteMin + m x ChangeKey + n x Insert Podle implementace F varianta seznam: O = varianta halda: O ( 2 ) ( 2 n + m O n ) (( n + m) log n) Je-li m = ( 2 / log n) O n, vyplatí se použít haldu, jinak je lepší seznam. 12

Další algoritmy na nejkratší cestu Bellman-Fordův funguje pro libovolné ohodnocení hran ( 3 ) 3 O V = O( n ) Floyd-Warshallův nalezne nejkratší cestu pro všechny dvojice vrcholů hrany mohou být ohodnoceny i záporně, graf ale nesmí obsahovat cyklus záporné délky O( V E ) = O( n m) 13

Úloha s počítačovou sítí 14

Kostra grafu Kostra neorientovaného souvislého grafu je souvislý faktor s minimálním počtem hran, tj. strom na všech vrcholech. Jednu z koster v daném grafu můžeme nalézt pomocí DFS nebo BFS. Jak nalezneme minimální kostru T v ohodnoceném grafu? c ( T ) = c( e) e T 15

Obecný postup hledání kostry Kostra-Generic(G,c): M:= Ø; while M není kostra do najdi vhodnou hranu a přidej ji do M; return M; P e Předpokládejme: M je rozšiřitelná do minimální kostry P je komponenta M e je nejlevnější hrana vedoucí z P ven Potom: M {e} je též rozšiřitelná do minimální kostry 16

Union-Find problém Cíl: datová struktura pro evidenci komponent grafu. Pro každou komponentu vybereme jeden vrchol její reprezentant. Jako r označíme reprezentanta komponenty, ve které leží vrchol v. v Požadujeme tyto operace: Find(v) nalezne r v Union(u,v) sjednotí komponenty obsahující vrcholy u a v. Find ( v) = r Find ( u) = r Union ( u, v) : 1 2 r 1 r 1 r 2 Find ( v) = r 1 Find ( u) = r 1 v u v u 17

Union-Find problém implementace Reprezentace komponent pomocí orientovaných stromů. 1 4 8 2 6 7 3 5 Find(v): projdeme z v do kořene P[v].. předchůdce vrcholu ve stromu rank[v].. délka nejdelší orientované cesty vedoucí do v Union(u,v): 1. Nalezneme r u a r v 2. Pokud r u = r v, jsme hotovi 3. Sloučíme stromy, pro ru a rv, kořenem je 4 vrchol s větším rank 1 2 6 3 18

Union-Find problém časová složitost Předpokládejme, že začínáme s máme graf s izolovanými vrcholy. V komponentami, tj. Pozorování: 1. Union(u,v) zvětší rank kořene maximálně o 1 2. Je-li rank stromu, má strom alespoň prvků nejvyšší možný rank je k log V 2 k Důsledek: Časová složitost Find i Union je ( ) O log V 19

Kruskalův algoritmus Hladový algoritmus 1. Setřiď hrany podle jejich ohodnocení 2. Inicializuj. Procházej hrany v získaném pořadí. Pokud hrana spojuje různé komponenty v, přidej M do. c( e ) c( e2) M := 0 c( e 1 m 3. Na konci obsahuje hledanou minimální kostru. ) ei M ei M 20

Kruskalův algoritmus Časová složitost: m O( mlog m) = O( mlog n) 1. Setřídění hran v čase m ( n 1) 2. Při průchodu -krát Find a -krát Union O (( m + n 1)log n) = O( mlog n) Výsledná složitost: O ( mlog n) 21

Jarníkův-Primův algoritmus Kostru vytváříme souvisle, začínáme s jedním vrcholem a postupně přidáváme nejlevnější hrany. Algoritmus je velmi podobný Dijkstrovu algoritmu a má i stejnou časovou složitost. 22

Jarníkův-Primův algoritmus Jarnik(G,s): for each v in V do P[v]:= NULL; D[v]:= ; done D[s]:= 0; M:= Ø; // inicializace prázdnou množinou vytvoř prioritní frontu F z vrcholů ve V s klíči D[v]; while not F->empty() do v := F->deleteMin(); M->add({v,P[v]}); for each w in Sousede[v] do if D[w] > c({v,w}) then D[w]:= c({v,w}); P[w]:= v; F->changeKey(w,D[w]); endif done done 23