Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

Teoretická informatika Tomáš Foltýnek Grafové algoritmy.

Podobné prezentace


Prezentace na téma: "Teoretická informatika Tomáš Foltýnek Grafové algoritmy."— Transkript prezentace:

1 Teoretická informatika Tomáš Foltýnek Grafové algoritmy

2 Teoretická informatika Opakování z minulé přednášky •Co je to strom, les, kostra? •Co je to kotřenový strom? •Co je to binární vyhledávací strom? •Co je to AVL strom? Jak funguje? •Jak funguje řazení haldou? strana 2

3 Teoretická informatika Osnova dnešní přednášky •Prohledávání grafu –do hloubky, do šířky •Bloudění v bludišti –Tarryho algoritmus •Hledání nejkratší cesty –Moorův, Dijkstrův, Bellman-Fordův, Floyd-Warshallův algoritmus •Hledání nejdelší / nejširší / nejbezpečnější cesty •Hledání minimální kostry –Kruskalův-Borůvkův, Jarníkův-Primův algoritmus strana 3

4 Teoretická informatika Prohledávání grafu •Systematické navštívení / zpracování všech uzlů v grafu •Prohledávání do šířky –datová struktura fronta •Prohledávání do hloubky –datová struktura zásobník strana 4

5 Teoretická informatika Obecný algoritmus prohledávání •Vstup: Souvislý graf G •Výstup: Posloupnost všech uzlů grafu G •Inicializace: Vlož libovolný uzel do D •Dokud je D neprázdné, opakuj –Vyber uzel, který je na řadě –Zpracuj / vypiš jej –Všechny jeho neoznačkované následovníky •označkuj a vlož do D •D = fronta / zásobník podle způsobu prohledávání •Díky značkování zpracujeme každý uzel právě jednou strana 5

6 Teoretická informatika Tarryho algoritmus bloudění •Hledání cesty z bludiště pomocí prohledávání do hloubky •Bludiště je tvořeno místnostmi, z nichž vedou dveře do chodeb spojujících jednotlivé místnosti •Nemáme k dispozici mapu •V každé místnosti je kousek křídy –můžeme uchovávat lokální informaci strana 6

7 Teoretická informatika Tarryho algoritmus: popis •Založen na značkování dveří podle následujících pravidel: –vstoupíš-li do místnosti, kde žádné dveře nejsou označeny, označkuj vstupní dveře “IN” –jsi-li v místnosti s alespoň jedněmi neoznačkovanými dveřmi, označ je “OUT” a projdi chodbou za nimi do následující místnosti –jsi-li v místnosti, kde jsou všechny dveře označeny, vstup do dveří označených “IN” –vstoupíš-li do místnosti, kde jsou všechny dveře označeny “OUT”, z bludiště není východ strana 7

8 Teoretická informatika Tarryho algoritmus: vlastnosti •Nemá-li bludiště východ, po skončení bude každá chodba projítá právě dvakrát –jednou tam a jednou zpátky –nikdy nejdeme stejnou chodbou stejným směrem dvkarát •Backtracking nastává teprve tehdy, není- li jiná alternativa •Existuje-li východ, po konečném počtu kroků je najdeme strana 8

9 Teoretická informatika Hledání nejkratší cesty •Moorův algoritmus –pro neohodnocené grafy •Dijkstrův algoritmus –pro nezáporně ohodnocené grafy •Bellman-Fordův algoritmus –pro grafy bez cyklu záporné délky •Floyd-Warshallův algoritmus –umožňuje detekci cyklu záporné délky strana 9

10 Teoretická informatika Moorův algoritmus •Prohledávání grafu do šířky •Každý uzel má značku (p,d), kde d je délka cesty (počet hran) a p je předcházející uzel •Počáteční uzel s dostane značku (-,0), ostatní (-,  ). V 0 = {s}, k=0 •Pro  i  V k uděláme –každého neoznačkovaného následníka uzlu i označkujeme (i, k+1) a vložíme jej do množiny V k+1 •Zvýšíme k o 1 a pokud V k  , opakujeme •Výsledkem je distanční rozklad množiny uzlů strana 10

11 Teoretická informatika Dijkstrův algoritmus •Prohledávání grafu do šířky •Každý uzel má značku (p,d), kde d je délka cesty (součet délek hran) a p je předcházející uzel •Značky jsou trvalé (množina S) a netrvalé (množ. Š) •Počáteční uzel s dostane trvalou značku (-,0), jeho následníci (s, d), ostatní (-,  ). S = {s}, Š=U-S •Dokud Š   –V množině Š vybereme uzel k s nejmenším d –Přesuneme jej do S –Prověříme značky všech následníků uzlu k z množiny Š a v případě potřeby je aktualizujeme •Proč není možné mít záporně ohodnocené hrany? strana 11

12 Teoretická informatika Bellman-Fordův algoritmus •Každý uzel dostává značku (a, p, d), kde a je počet hran nejkratší cesty, d její délka a p předposlední uzel •Počátek s dostane značku (0, -, 0), ostatní uzly (0, -,  ). k=0 •Dokud je k<|U| –Pro každý uzel j, kde a=k •Prověříme značky všech následníků uzlu j a v případě potřeby je aktualizujeme –Zvýšíme k o 1 strana 12

13 Teoretická informatika Floyd-Warshallův algoritmus •Graf zadaný maticí sousednosti (D (0) ) obsahující délky hran nebo  •Výstupem je matice, z níž lze zjistit nejkratší cesty mezi všemi uzly •Konstruujeme posloupnost matic D (1), D (2), … D (n) tak, že •Každý prvek matice obsahuje délku nejkratší cesty z i do j, obsahující vnitřní uzly 1..k •Pro všechna k = 1..|U| konstruujeme k-tou matici z k-1-ní po řádcích, k-tý řádek se nemění •Cestu z i do j pak rekonstruujeme rekurzivně, hledajíce postupně taková l, kde d ij = d il + d lj strana 13

14 Teoretická informatika Hledání nejdelší cesty •Dané území, v němž chceme uspořádat cyklistický závod tak, aby byl co nejatraktivnější –tj. vedl co nejbotížnějšími úseky •Jak převést problém nejdelší cesty na problém nejkratší cesty? –nelze přičítat konstantu ani odečítat od konstanty, byť sebevětší •Graf nesmí obsahovat cyklus kladné délky –pak lze hranové ohodnocení vynásobit -1 –najít nejkratší cestu –ta odpovídá nejdelší cestě v původním grafu strana 14

15 Teoretická informatika Hledání nejbezpečnější cesty •Hranové ohodnocení odpovídá pravděpodobnosti bezpečného průchodu hranou –tj. h  •Hledáme cestu s maximálním součinem hranových ohodnocení •Přepočítáme hranové ohodnocení: h’ = - log h –logaritmus převede součin na součet –obrácení znaménka převádní hledání maxima na hledání minima •V nově ohodnoceném grafu hledáme nejkratší cestu strana 15

16 Teoretická informatika Hledání nejširší cesty I. •Ohodnocení hran odpovídají šířce •Šířka cesty je minimum šířek hran na této cestě •Algoritmus podobný Dijkstrovu –uzly dostávají značky (p, b) •p = předchůdce •b = šířka cesty z počátku do daného uzlu –značky jsou dočasné a trvalé –v každém kroku označíme jeden uzel trvale strana 16

17 Teoretická informatika Hledání nejširší cesty II. •Inicializace –S := {s}, Š = U – {s} –Označkuj počátek (-, ∞) –Označkuj následovníky počátku (s, b) •kde b je šířka příslušné hrany –Zbývající vrcholy označkuj (s, 0) •Iterace –Najdi vrchol j  Š, do nějž se lze z některého uzlu i  S dostat po nejširší cestě •tj. má maximální hodnotu min{b i, b ij } –Pro všechny následovníky uzlu j bez trvalé značky •přepočítáme značku, pokud jsme našli širší cestu strana 17

18 Teoretická informatika Hledání minimální kostry •Jarníkův-Primův-Dijkstrův algoritmus –založen na „růstu stromu“ –k okamžitému stromu přidáváme vždy nejkratší možnou hranu •Kruskalův-Borůvkův algoritmus –postupné spojování komponent lesa do jediného stromu •Analogicky lze hledat také maximální kostry. K čemu jsou dobré? strana 18

19 Teoretická informatika Kruskalův – Borůvkův algoritmus •Množinu hran seřadíme vzestupně podle hranového ohodnocení •Postupně budujeme nový graf –začínáme pouze s uzly (tj. „diskrétní faktor“) –přidáváme hrany dle pořadí délek –pokud by přidáním hrany vznikla kružnice, hranu nepřidáváme •spojujeme tedy jen uzly ležící v různých komponentách –pokusíme se přidat všechny hrany strana 19

20 Teoretická informatika Primův algoritmus •Opět začínáme s diskrétním faktorem původního grafu •Vybereme libovolný uzel –triviální počáteční strom •K okamžitému stromu připojíme uzel s nejmenší vzdáleností od tohoto stromu •Opakujeme, dokud nejsou připojeny všechny uzly strana 20


Stáhnout ppt "Teoretická informatika Tomáš Foltýnek Grafové algoritmy."

Podobné prezentace


Reklamy Google