Grafové algoritmy. Programovací techniky

Podobné dokumenty
Grafové algoritmy. Programovací techniky

Grafové algoritmy. Programovací techniky

Algoritmy na ohodnoceném grafu

Vzdálenost uzlů v neorientovaném grafu

TGH06 - Hledání nejkratší cesty

TGH06 - Hledání nejkratší cesty

Úvod do teorie grafů

Paralelní grafové algoritmy

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

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

Algoritmizace prostorových úloh

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

07 Základní pojmy teorie grafů

Použití dalších heuristik

TGH08 - Optimální kostry

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

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

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

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

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

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

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

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.

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

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

TEORIE GRAFŮ TEORIE GRAFŮ 1

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

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

Metody síťové analýzy

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

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

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

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

Dijkstrův algoritmus

Jarníkův algoritmus. Obsah. Popis

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

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

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

ORIENTOVANÉ GRAFY, REPREZENTACE GRAFŮ

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

Matice sousednosti NG

Stromy, haldy, prioritní fronty

= 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

Jan Březina. 7. března 2017

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

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

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

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

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

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

TGH04 - procházky po grafech

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

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

Dynamické programování

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

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

Algoritmy a datové struktury

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

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

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

Diskrétní matematika. DiM /01, zimní semestr 2018/2019

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

PLANARITA A TOKY V SÍTÍCH

3. Prohledávání grafů

TGH02 - teorie grafů, základní pojmy

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

Dijkstrův algoritmus (připomenutí)

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

Úvod do informatiky. Miroslav Kolařík

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

Dynamické datové struktury III.

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.

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

Teorie grafů. zadání úloh. letní semestr 2008/2009. Poslední aktualizace: 19. května First Prev Next Last Go Back Full Screen Close Quit

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

TGH10 - Maximální toky

ALGORITMY A DATOVÉ STRUKTURY

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í

1 Teorie grafů. Základní informace

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

Přijímací zkouška - matematika

TGH09 - Barvení grafů

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

Prioritní fronta, halda

TGH02 - teorie grafů, základní pojmy

Ohodnocené orientované grafy

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.

Optimalizace & soft omezení: algoritmy

TGH02 - teorie grafů, základní pojmy

6. Tahy / Kostry / Nejkratší cesty

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

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

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

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

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

Dynamické programování

Dynamické datové struktury I.

Teorie grafů. Teoretická informatika Tomáš Foltýnek

Transkript:

Grafové algoritmy Programovací techniky

Grafy Úvod - Terminologie Graf je datová struktura, skládá se z množiny vrcholů V a množiny hran mezi vrcholy E Počet vrcholů a hran musí být konečný a nesmí být nulový u vrcholů ani u hran Grafy Orientované hrana (u,v) označena šipkou u->v Neorientované pokud ex. (u,v), existuje také (v,u) Souvislost graf je souvislý, jestliže pro všechny v(i) z V existuje cesta do libovolného v(j) z V, nesouvislý graf je rozdělen na komponenty Strom graf, ve kterém pro každé 2 vrcholy existuje právě jedna cesta

Grafy Úvod - Terminologie

Grafy Úvod Reprezentace grafu Incidenční matice:

Matice sousednosti:

Spojové seznamy: - výhodné pokud je proměnný počet hran

Neorientovaný graf:

Plexová struktura: - princip podobný reprezentaci seznamem, ale statické pole je nahrazeno dynamickým spojovým seznamem - výhodné pokud používáme proměnný počet uzlů Orientovaný graf: 1 2 4 5 / 2 3 / 3 4 / 4 2 5 / 5 1 /

Neorientovaný graf: 1 2 4 5 / 2 1 3 4 3 2 4 / 4 1 2 3 5 / 5 1 4 /

Ohodnocené grafy hrany grafu jsou ohodnoceny (např. délka cesty mezi dvěma městy, doba potřebná k projetí apod.) reprezentace grafů incidenční maticí je obdobná, akorát místo hodnot 1 je uvedeno ohodnocení hrany, 0 se obvykle nahrazuje symbolem. pokud reprezentujeme graf spojovým seznamem nebo plexovou strukturou má položka seznamu tvar u h Ukazatel na další prvek ohodnocení hrany Uzel ve kterém hrana končí

Prohledávání grafu Systematický postup pro řešení následujících úloh: 1. Zjistit, zda vrchol t je dosažitelný z vrcholu r 2. Najít množinu všech vrcholů dosažitelných z vrcholu r 3. Najít jakoukoliv cestu z vrcholu r do vrcholu t (pokud existuje) 4. Najít jakékoliv cesty z vrcholu r do všech vrcholů, které jsou z něj dosažitelné 5. Pro všechny vrcholy, které jsou dosažitelné z vrcholu r provést zadanou operaci Metody prohledávání: prohledávání do hloubky (depth-first search) prohledávání do šířky (breath-first search) heuristické prohledávání

Prohledávání grafu do hloubky

Časová složitost prohledávání do hloubky: O( V + H )

Prohledávání grafu do šířky Časová složitost prohledávání do šířky: O( V + H )

Vyhledávání nejkratší cesty v grafech Úkolem této skupiny algoritmů je nalézt nejkratší orientovanou cestu: z daného vrcholu do daného vrcholu, z daného výchozího vrcholu do každého vrcholu grafu, z každého vrcholu do daného koncového vrcholu, mezi všemi uspořádanými dvojicemi vrcholů Algoritmy jsou založeny na prohledávání grafu, do kterého je přidáno kritérium při výběru hran - délka cesty (součet cen všech hran, které tvoří cestu z výchozího vrcholu do koncového vrcholu). Pokud nalezneme jakoukoliv cestu z výchozího vrcholu do libovolného dalšího, testujeme, je-li to nejkratší cesta ověřujeme platnost trojúhelníkové nerovnosti c j >c i +c ij, Kde c j je cena dosud nejkratší cesty z výchozího vrcholu do vrcholu v j, c ij je cena hran mezi vrcholy v i a v j. Pokud je nerovnost splněna, nalezli jsme lepší cestu a c j :=c i +c ij, pokud ne neměníme nic.

Základní algoritmus

Zlepšený algoritmus

Dijkstrův algoritmus Hledání nejkratší cesty v ohodnoceném grafu z vrcholu s do vrcholu t Předpokládáme: Graf je souvislý Neorientované hrany (lze použít i pro orientované grafy) Má nezáporně ohodnocené hrany Z navštívených vrcholů vytváříme mrak. Zpočátku mrak obsahuje počáteční vrchol S, postupně přidáváme uzly až do nalezení cílového uzlu V každém kroku přidáme do mraku vrchol v vně mraku s nejmenší vzdáleností d(v) (prioritní fronta) Opravíme vzdálenosti vrcholů sousedících s v (vede často k relaxaci hran)

Dijkstrův algoritmus Relaxace hran Relaxace hrany e upravuje vzdálenost d(z) takto: d(z) min{d(z),d(u)+weight(e)}

Bellman-Fordův algoritmus podobný Dijkstrovu algoritmu, v algoritmu je zavedeno další pole, ve kterém je u každého vrcholu uvedeno, kolik hran obsahuje nejkratší cesta z výchozího vrcholu do daného vrcholu. algoritmus preferuje nejkratší cestu s nejmenším počtem hran algoritmu lze využít k detekci cyklu se zápornou cenou v grafu o n vrcholech je maximálně n-1 hran pokud algoritmus neskončí po n-1 krocích je v grafu cyklus se zápornou cenou.

Bellman-Fordův algoritmus

Floyd-Warshallův algoritmus Algoritmus hledající minimální cestu mezi všemi páry vrcholů (all-pair shortest path algorithm) Vhodný pro husté grafy v tom případě rychlejší než Dijkstra opakovaný pro všechny vrcholy Pracuje s maticí sousednosti Složitost O(n 3 ) Můžeme stanovit max. počet vrcholů, přes které se jde Je technikou dynamického programování viz dále

Matice sousednosti je uložena ve w d je matice aktuálně spočtených nejkratších vzdáleností mezi je matice nejkratších mezicest, je nainicializována na -1 (null) V každém kroku algoritmu zjišťuji, jestli existuje mezi vrcholy i,j kratší cesta přes vrchol k, pokud ano, nastavím vzdálenost v d[i][j] na novou velikost a do path[i][j] zaznamenám vrchol k

Floyd-Warshallův algoritmus

Floyd-Warshallův algoritmus Rekonstrukce nejkratší cesty mezi i,j V mezi[i,j] je index vrcholu k, přes který se má jít. Pokud k není -1(null) podívám se do mezi na nejkratší cestu mezi i,k a k,j Toto opakuji rekurzivně dokud nenajdu mezi[i,j] == -1 null). Cesta(i,j) begin if mezi[i,j]=null then tisk(i,j) else begin Cesta(i, mezi[i,j]); Cesta(mezi[i,j], j); end; end;

Minimální kostra grafu Algorimus na hledání minimální kostry grafu (Minimum Spanning Tree) Kostra grafu: minimální souvislý podgraf, který obsahuje všechny vrcholy neobsahuje cykly je to strom Definice: Je dán souvislý graf G, jehož hrany jsou ohodnoceny reálnými čísly, které budeme nazývat cenami. Kostrou grafu, která má nejmenší ohodnocení hran mezi všemi kostrami, nazýváme nejlevnější (minimální) kostrou grafu

Kruskalův algoritmus:

Primův Jarníkův algoritmus

Prim- Jarnikův algoritmus (využívá prioritní frontu) for u V do begin klíč[u]:= end; klíč[r]:=0; před[r]:=nil; uvnitř[u]:=false Q:=prioritní_fronta(V); {vložení vrcholů do prioritní fronty Q} while Neprázdná(Q) do end; begin u:=odebermin(q); for v Adj[u] do if (not(uvnitř[v])) and (w[u,v]<klíč[v]) then begin klíč[v]:=w(u,v); end; uvnitř[u]:=true; ZmenšiKlíč(Q,v,klíč[v]); před[v]:=u

Primův-Jarníkův algoritmus Příklad(1)

Primův-Jarníkův algoritmus Příklad - pokračování

Toky v sítích

Příklady grafů se zadanou velikostí toku, kapacitou hrany a dolním omezením.

Maximální tok sítí

Příklad:

Souvislost grafů Graf, ve kterém jsou z libovolného vrcholu dostupné (po neorientované cestě) všechny ostatní vrcholy, se nazývá souvislý graf (obrázek 1.9). Maximální souvislý podgraf daného grafu G se nazývá souvislá komponenta grafu G. Platí, že každý vrchol grafu je obsažen v právě jedné komponentě souvislosti.

Určení souvislých komponent Po ukončení předchozího algoritmu projdeme pole Kv i rozdílná čísla značí rozdílné komponenty. Uzly se stejnou hodnotou - souvislá komponenta

2 3 1 5 4