FAV-ZCU/KIV PPA2/Prednaska11.md

57 lines
2.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Grafy 2
#### Prohledávání do šířky (BFS)
**Strom dosažitelnosti**
- tvoří se z nějakého určeného vrcholu (kořen)
- ukazuje, jaká je nejkratší cesta do ostatních vrcholů
- reprezentován polem, kde na indexu vrcholu je uložen předek
- nemusí být jednoznačný (může existovat více nejkratších cest)
#### Prohledávánı́ do hloubky (DFS)
- Depth-First Search
- algoritmus postupuje do většı́ vzdálenosti od počátečnı́ho vrcholu, pokud může
+ předpokládáme, že označenı́ (mark) je před volánı́m DFS inicializováno na 0 pro všechny vrcholy
+ DFS je potřeba doplnit o nějaký užitečný kód
+ záleží to na řešeném problému
**Značenı́ vrcholů**
- nezpracovaný (”bı́lá”), kód 0
- rozpracovaný (”šedá”), kód 1
- dokončený (”černá”), kód 2
**Složitost**
- rekurzivní metoda se pro každý vrchol volá pouze jednou - $\Omega(\vert V\vert)$
- pro každý vrchol se prochází seznam hran:
- reprezentace maticí - $\Omega(\vert V\vert^2)$
- reprezentace seznamem - $\mathcal{O}(\vert E\vert)$
- celkem: $\mathcal{O}(\vert V\vert + \vert E\vert)$ při reprezentaci seznamem
- může být i $\Omega(\vert V\vert^2)$, pokud $\vert E\vert = k\vert V\vert^2$
**Použití DFS**
- Zjištění dosažitelnosti vrcholu
- pokud předpokládáme, že bude vrchol daleko, je DFS vhodnější než BFS
+ Zjištění cyklu v grafu
+ vrchol označíme jedničkou a poté ho znovu hledáme
+ Topologické řazení
+ prvně je potřeba ověřit, že graf nemá cykly
+ vrcholy jsou činnosti, hrany jsou závislosti
+ hrana $A \to B$ značí, že se prvně musí vykonat A a potom až B
+ pomocí DFS můžeme snadno určit pořadí činností (pomocí otočeného grafu)
**DFS bez rekurze**
- pravděpodobně nastanou problémy s hloubkou zásobníku
+ vystačíme si se zásobníkem celých čísel (vrcholů)
+ `segment` (jaký je stav vrcholu) je v označení vrcholu (`mark`)
**Nejkratší cesta v ohodnoceném grafu**
- velmi častý problém
- ohodnocení: čas, vzdálenost, ...
- úkol: nalézt nejkratší vzdálenost ke všem vrcholům
- **Dijkstrův algoritmus**
- je potřeba prioritní fronta
- přidání dvojice vrchol + ohodnocení
- vybrání/odebrání vrcholu s nejmenším ohodnocením
- změna ohodnocení vrcholu