2.3 KiB
2.3 KiB
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)
- reprezentace maticí -
- 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
- může být i
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
- je potřeba prioritní fronta