From 3a05e9a022b0b53ed2d60746cd9bf46c6e4d2e1f Mon Sep 17 00:00:00 2001 From: Filip Znachor Date: Fri, 5 May 2023 09:18:59 +0200 Subject: [PATCH] =?UTF-8?q?=C3=9Aprava=20p=C5=99edn=C3=A1=C5=A1ky=2010=20a?= =?UTF-8?q?=20p=C5=99id=C3=A1n=C3=AD=2011.=20p=C5=99edn=C3=A1=C5=A1ky=20z?= =?UTF-8?q?=20PPA2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- KIV PPA2/Prednaska10.md | 9 ++++--- KIV PPA2/Prednaska11.md | 57 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 62 insertions(+), 4 deletions(-) create mode 100644 KIV PPA2/Prednaska11.md diff --git a/KIV PPA2/Prednaska10.md b/KIV PPA2/Prednaska10.md index 5a6d646..be388b1 100644 --- a/KIV PPA2/Prednaska10.md +++ b/KIV PPA2/Prednaska10.md @@ -176,13 +176,14 @@ + zpracovává vrcholy grafu od vrcholu `s` v pořadí **od blízkých ke vzdáleným** + postup vyžaduje označování vrcholů + označení uložíme do pole délky $\vert V\vert$ -+ možná označení vrcholů - + nenavštívený (kód 0) - + čekající na zpracování (kód 1) - + hotový (kód 2) + vrcholy se vkládají do fronty + všechny vrcholy ve vzdálenosti `k` se zpracují před těmi se vzdáleností `> k` +**Značení vrcholů** ++ nenavštívený (kód 0) ++ čekající na zpracování (kód 1) ++ hotový (kód 2) + **Pozorování** - BFS je potřeba doplnit o nějaký užitečný kód + záleží to na řešeném problému diff --git a/KIV PPA2/Prednaska11.md b/KIV PPA2/Prednaska11.md new file mode 100644 index 0000000..9c117a6 --- /dev/null +++ b/KIV PPA2/Prednaska11.md @@ -0,0 +1,57 @@ +# 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 \ No newline at end of file