38
bfs, dfs, fronta, z´ asobn´ ık Petr Ryˇ sav´ y 17. z´ ı 2019 Katedra poˇ ıtaˇ u, FEL, ˇ CVUT

BFS, DFS, fronta, zásobník - cvut.cz€¦ · bfs, dfs, fronta, zasobn´ık Petr Ryˇsav´y 17. z´aˇr´ı 2019 Katedra poˇc´ıtaˇc˚u, FEL, ˇCVUT. prohledav´an´ı graf˚u

  • Upload
    others

  • View
    5

  • Download
    0

Embed Size (px)

Citation preview

Page 1: BFS, DFS, fronta, zásobník - cvut.cz€¦ · bfs, dfs, fronta, zasobn´ık Petr Ryˇsav´y 17. z´aˇr´ı 2019 Katedra poˇc´ıtaˇc˚u, FEL, ˇCVUT. prohledav´an´ı graf˚u

bfs, dfs, fronta, zasobnık

Petr Rysavy17. zarı 2019

Katedra pocıtacu, FEL, CVUT

Page 2: BFS, DFS, fronta, zásobník - cvut.cz€¦ · bfs, dfs, fronta, zasobn´ık Petr Ryˇsav´y 17. z´aˇr´ı 2019 Katedra poˇc´ıtaˇc˚u, FEL, ˇCVUT. prohledav´an´ı graf˚u

prohledavanı grafu

Page 3: BFS, DFS, fronta, zásobník - cvut.cz€¦ · bfs, dfs, fronta, zasobn´ık Petr Ryˇsav´y 17. z´aˇr´ı 2019 Katedra poˇc´ıtaˇc˚u, FEL, ˇCVUT. prohledav´an´ı graf˚u

Proc prohledavanı grafu

• Zkontrolovat, zda je sıt’ spojita.• Hledanı nejkratsı cesty, planovanı cest.• Prohledavanı stavoveho prostoru, formulovanı planu (napr. jak vyresit

sudoku).• Spocıst komponenty grafu.

2

Page 4: BFS, DFS, fronta, zásobník - cvut.cz€¦ · bfs, dfs, fronta, zasobn´ık Petr Ryˇsav´y 17. z´aˇr´ı 2019 Katedra poˇc´ıtaˇc˚u, FEL, ˇCVUT. prohledav´an´ı graf˚u

Pozadavky na algoritmus prohledavajıcı graf

• Algoritmus musı umet nalezt cestu do vsech vrcholu, ktere jsoudosazitelne.

• Nechceme prochazet zadne casti grafu vıcekrat.• Pozadujeme linearnı cas behu (O(m + n)).

3

Page 5: BFS, DFS, fronta, zásobník - cvut.cz€¦ · bfs, dfs, fronta, zasobn´ık Petr Ryˇsav´y 17. z´aˇr´ı 2019 Katedra poˇc´ıtaˇc˚u, FEL, ˇCVUT. prohledav´an´ı graf˚u

Obecny algoritmus

function Generic-Graph-Search(graph, s)Oznac s jako navstıvenewhile lze nalezt hranu (u, v), ze u bylo navstıveno a v ne do

(u, v)← libovolna hrana, kde u bylo navstıveno a v neOznac v jako navstıvene

end whileend function

4

Page 6: BFS, DFS, fronta, zásobník - cvut.cz€¦ · bfs, dfs, fronta, zasobn´ık Petr Ryˇsav´y 17. z´aˇr´ı 2019 Katedra poˇc´ıtaˇc˚u, FEL, ˇCVUT. prohledav´an´ı graf˚u

Prohledavanı je uplne

Tvrzenı Na konci je vrchol v navstıveny prave tehdy, kdyz G obsahujecestu z s do v.

5

Page 7: BFS, DFS, fronta, zásobník - cvut.cz€¦ · bfs, dfs, fronta, zasobn´ık Petr Ryˇsav´y 17. z´aˇr´ı 2019 Katedra poˇc´ıtaˇc˚u, FEL, ˇCVUT. prohledav´an´ı graf˚u

Dukaz

6

Page 8: BFS, DFS, fronta, zásobník - cvut.cz€¦ · bfs, dfs, fronta, zasobn´ık Petr Ryˇsav´y 17. z´aˇr´ı 2019 Katedra poˇc´ıtaˇc˚u, FEL, ˇCVUT. prohledav´an´ı graf˚u

Rozdıly mezi BFS a DFS

Algoritmy se odlisujı podle toho v jakem poradı vrcholy prohledavajı

• BFS (Breadth-First Search, prohledavanı do sırky)• Vrcholy jsou prohledavany po urovnıch.• Sousedi jedne urovne tvorı dalsı uroven.• Muze pocıtat nejkratsı cesty a komponenty souvislosti.• O(m + n) s frontou.

• DFS (Depth-First Search, prohledavanı do hloubky)• Prohledavame stale hloubeji, backtrackujeme jen kdyz musıme.• Pocıta topologicke ocıslovanı a silne komponenty souvislosti.• O(m + n) se zasobnıkem.

7

Page 9: BFS, DFS, fronta, zásobník - cvut.cz€¦ · bfs, dfs, fronta, zasobn´ık Petr Ryˇsav´y 17. z´aˇr´ı 2019 Katedra poˇc´ıtaˇc˚u, FEL, ˇCVUT. prohledav´an´ı graf˚u

Rozdıly mezi BFS a DFS

Algoritmy se odlisujı podle toho v jakem poradı vrcholy prohledavajı

• BFS (Breadth-First Search, prohledavanı do sırky)• Vrcholy jsou prohledavany po urovnıch.• Sousedi jedne urovne tvorı dalsı uroven.• Muze pocıtat nejkratsı cesty a komponenty souvislosti.• O(m + n) s frontou.

• DFS (Depth-First Search, prohledavanı do hloubky)• Prohledavame stale hloubeji, backtrackujeme jen kdyz musıme.• Pocıta topologicke ocıslovanı a silne komponenty souvislosti.• O(m + n) se zasobnıkem.

7

Page 10: BFS, DFS, fronta, zásobník - cvut.cz€¦ · bfs, dfs, fronta, zasobn´ık Petr Ryˇsav´y 17. z´aˇr´ı 2019 Katedra poˇc´ıtaˇc˚u, FEL, ˇCVUT. prohledav´an´ı graf˚u

Rozdıly mezi BFS a DFS

Algoritmy se odlisujı podle toho v jakem poradı vrcholy prohledavajı

• BFS (Breadth-First Search, prohledavanı do sırky)• Vrcholy jsou prohledavany po urovnıch.• Sousedi jedne urovne tvorı dalsı uroven.• Muze pocıtat nejkratsı cesty a komponenty souvislosti.• O(m + n) s frontou.

• DFS (Depth-First Search, prohledavanı do hloubky)• Prohledavame stale hloubeji, backtrackujeme jen kdyz musıme.• Pocıta topologicke ocıslovanı a silne komponenty souvislosti.• O(m + n) se zasobnıkem.

7

Page 11: BFS, DFS, fronta, zásobník - cvut.cz€¦ · bfs, dfs, fronta, zasobn´ık Petr Ryˇsav´y 17. z´aˇr´ı 2019 Katedra poˇc´ıtaˇc˚u, FEL, ˇCVUT. prohledav´an´ı graf˚u

Zasobnık (anglicky stack)

• Datova struktura pro uchovavanı dat• Data prichazejı a odchazejı v poradı last in first out• Data pridavame i odebırame z konce• Implementace obvykle pomocı pole

8

Page 12: BFS, DFS, fronta, zásobník - cvut.cz€¦ · bfs, dfs, fronta, zasobn´ık Petr Ryˇsav´y 17. z´aˇr´ı 2019 Katedra poˇc´ıtaˇc˚u, FEL, ˇCVUT. prohledav´an´ı graf˚u

Fronta (anglicky queue)

• Datova struktura pro uchovavanı dat• Data prichazejı a odchazejı v poradı first in first out• Data pridavame na konec, odebırame ze zacatku• Implementace obvykle pomocı kruhoveho bufferu nebo spojoveho

seznamu

9

Page 13: BFS, DFS, fronta, zásobník - cvut.cz€¦ · bfs, dfs, fronta, zasobn´ık Petr Ryˇsav´y 17. z´aˇr´ı 2019 Katedra poˇc´ıtaˇc˚u, FEL, ˇCVUT. prohledav´an´ı graf˚u

Cas na programovanı

• Proved’te ukoly 1.-5.• Popis i implementaci v Jave naleznete na

http://introcs.cs.princeton.edu/java/43stack/. Zde je implementacepomocı spojoveho seznamu.

• Implementace fronty v C++ naleznete nahttp://www.programming-techniques.com/2011/11/

queue-is-order-collection-of-items-from.html a zasobnıku na http:

//www.algolist.net/Data_structures/Stack/Array-based_implementation.• Kazdopadne obe struktury zkuste naimplementovat sami a neinspirujte

se referencı.

10

Page 14: BFS, DFS, fronta, zásobník - cvut.cz€¦ · bfs, dfs, fronta, zasobn´ık Petr Ryˇsav´y 17. z´aˇr´ı 2019 Katedra poˇc´ıtaˇc˚u, FEL, ˇCVUT. prohledav´an´ı graf˚u

Prestavka

11

Page 15: BFS, DFS, fronta, zásobník - cvut.cz€¦ · bfs, dfs, fronta, zasobn´ık Petr Ryˇsav´y 17. z´aˇr´ı 2019 Katedra poˇc´ıtaˇc˚u, FEL, ˇCVUT. prohledav´an´ı graf˚u

bfs

Page 16: BFS, DFS, fronta, zásobník - cvut.cz€¦ · bfs, dfs, fronta, zasobn´ık Petr Ryˇsav´y 17. z´aˇr´ı 2019 Katedra poˇc´ıtaˇc˚u, FEL, ˇCVUT. prohledav´an´ı graf˚u

Pseudokod

function Breadth-First-Search(graph, s)Q← new FIFO queueAdd(Q, s)Mark-Visited(s)while Size(Q) 6= 0 do

v ← Remove(Q)for all edges (v, w) do

if Unvisited(w) thenMark-Visited(w)Add(Q, w)

end ifend for

end whileend function

13

Page 17: BFS, DFS, fronta, zásobník - cvut.cz€¦ · bfs, dfs, fronta, zasobn´ık Petr Ryˇsav´y 17. z´aˇr´ı 2019 Katedra poˇc´ıtaˇc˚u, FEL, ˇCVUT. prohledav´an´ı graf˚u

Prıklad

14

Page 18: BFS, DFS, fronta, zásobník - cvut.cz€¦ · bfs, dfs, fronta, zasobn´ık Petr Ryˇsav´y 17. z´aˇr´ı 2019 Katedra poˇc´ıtaˇc˚u, FEL, ˇCVUT. prohledav´an´ı graf˚u

BFS splnuje pozadavky na prohledavacı algoritmus

Tvrzenı Na konci BFS navstıvı v ⇔ v G existuje cesta z s do v.

Dukaz

Tvrzenı Cas behu BFS je O(ms + ns).

Dukaz

15

Page 19: BFS, DFS, fronta, zásobník - cvut.cz€¦ · bfs, dfs, fronta, zasobn´ık Petr Ryˇsav´y 17. z´aˇr´ı 2019 Katedra poˇc´ıtaˇc˚u, FEL, ˇCVUT. prohledav´an´ı graf˚u

BFS splnuje pozadavky na prohledavacı algoritmus

Tvrzenı Na konci BFS navstıvı v ⇔ v G existuje cesta z s do v.

Dukaz

Tvrzenı Cas behu BFS je O(ms + ns).

Dukaz

15

Page 20: BFS, DFS, fronta, zásobník - cvut.cz€¦ · bfs, dfs, fronta, zasobn´ık Petr Ryˇsav´y 17. z´aˇr´ı 2019 Katedra poˇc´ıtaˇc˚u, FEL, ˇCVUT. prohledav´an´ı graf˚u

BFS splnuje pozadavky na prohledavacı algoritmus

Tvrzenı Na konci BFS navstıvı v ⇔ v G existuje cesta z s do v.

Dukaz

Tvrzenı Cas behu BFS je O(ms + ns).

Dukaz

15

Page 21: BFS, DFS, fronta, zásobník - cvut.cz€¦ · bfs, dfs, fronta, zasobn´ık Petr Ryˇsav´y 17. z´aˇr´ı 2019 Katedra poˇc´ıtaˇc˚u, FEL, ˇCVUT. prohledav´an´ı graf˚u

BFS splnuje pozadavky na prohledavacı algoritmus

Tvrzenı Na konci BFS navstıvı v ⇔ v G existuje cesta z s do v.

Dukaz

Tvrzenı Cas behu BFS je O(ms + ns).

Dukaz

15

Page 22: BFS, DFS, fronta, zásobník - cvut.cz€¦ · bfs, dfs, fronta, zasobn´ık Petr Ryˇsav´y 17. z´aˇr´ı 2019 Katedra poˇc´ıtaˇc˚u, FEL, ˇCVUT. prohledav´an´ı graf˚u

Aplikace na hledanı nejkratsıch cest

Cıl: spocıst dist(v), coz je nejmensı pocet hran na ceste z s do v.

function Breadth-First-Search(graph, s)Q← new FIFO queueAdd(Q, s)Mark-Visited(s)

dist(v) ={

0, pro v = s,

∞ jinak.

while Size(Q) 6= 0 dov ← Remove(Q)for all edges (v, w) do

if Unvisited(w) thenMark-Visited(w)Add(Q, w)dist(w) = dist(v) + 1

end ifend for

end whileend function

16

Page 23: BFS, DFS, fronta, zásobník - cvut.cz€¦ · bfs, dfs, fronta, zasobn´ık Petr Ryˇsav´y 17. z´aˇr´ı 2019 Katedra poˇc´ıtaˇc˚u, FEL, ˇCVUT. prohledav´an´ı graf˚u

Aplikace na hledanı nejkratsıch cest

Cıl: spocıst dist(v), coz je nejmensı pocet hran na ceste z s do v.function Breadth-First-Search(graph, s)

Q← new FIFO queueAdd(Q, s)Mark-Visited(s)

dist(v) ={

0, pro v = s,

∞ jinak.

while Size(Q) 6= 0 dov ← Remove(Q)for all edges (v, w) do

if Unvisited(w) thenMark-Visited(w)Add(Q, w)dist(w) = dist(v) + 1

end ifend for

end whileend function

16

Page 24: BFS, DFS, fronta, zásobník - cvut.cz€¦ · bfs, dfs, fronta, zasobn´ık Petr Ryˇsav´y 17. z´aˇr´ı 2019 Katedra poˇc´ıtaˇc˚u, FEL, ˇCVUT. prohledav´an´ı graf˚u

Prıklad

17

Page 25: BFS, DFS, fronta, zásobník - cvut.cz€¦ · bfs, dfs, fronta, zasobn´ık Petr Ryˇsav´y 17. z´aˇr´ı 2019 Katedra poˇc´ıtaˇc˚u, FEL, ˇCVUT. prohledav´an´ı graf˚u

BFS hleda nejkratsı cesty

Tvrzenı Na konci BFS platı dist(v) = i ⇔ v lezı v i-te vrstve.

Dukaz

18

Page 26: BFS, DFS, fronta, zásobník - cvut.cz€¦ · bfs, dfs, fronta, zasobn´ık Petr Ryˇsav´y 17. z´aˇr´ı 2019 Katedra poˇc´ıtaˇc˚u, FEL, ˇCVUT. prohledav´an´ı graf˚u

BFS hleda nejkratsı cesty

Tvrzenı Na konci BFS platı dist(v) = i ⇔ v lezı v i-te vrstve.

Dukaz

18

Page 27: BFS, DFS, fronta, zásobník - cvut.cz€¦ · bfs, dfs, fronta, zasobn´ık Petr Ryˇsav´y 17. z´aˇr´ı 2019 Katedra poˇc´ıtaˇc˚u, FEL, ˇCVUT. prohledav´an´ı graf˚u

Programovanı

• Proved’te ukoly 6.-8.• Vzorovou implementaci prohledavanı do sırky naleznete na

http://www.geeksforgeeks.org/breadth-first-traversal-for-a-graph/.Opet se ale snazte vse naimplementovat a odladit sami.

19

Page 28: BFS, DFS, fronta, zásobník - cvut.cz€¦ · bfs, dfs, fronta, zasobn´ık Petr Ryˇsav´y 17. z´aˇr´ı 2019 Katedra poˇc´ıtaˇc˚u, FEL, ˇCVUT. prohledav´an´ı graf˚u

dfs

Page 29: BFS, DFS, fronta, zásobník - cvut.cz€¦ · bfs, dfs, fronta, zasobn´ık Petr Ryˇsav´y 17. z´aˇr´ı 2019 Katedra poˇc´ıtaˇc˚u, FEL, ˇCVUT. prohledav´an´ı graf˚u

Prıklad

DFS prohledava graf vıce agresivne a vracı se co nejmene.

21

Page 30: BFS, DFS, fronta, zásobník - cvut.cz€¦ · bfs, dfs, fronta, zasobn´ık Petr Ryˇsav´y 17. z´aˇr´ı 2019 Katedra poˇc´ıtaˇc˚u, FEL, ˇCVUT. prohledav´an´ı graf˚u

Pseudokod

Nahradıme frontu zasobnıkemfunction Depth-First-Search(graph, s)

Q← new LIFO stackAdd(Q, s)Mark-Visited(s)while Size(Q) 6= 0 do

v ← Remove(Q)for all edges (v, w) do

if Unvisited(w) thenMark-Visited(w)Add(Q, w)

end ifend for

end whileend function

22

Page 31: BFS, DFS, fronta, zásobník - cvut.cz€¦ · bfs, dfs, fronta, zasobn´ık Petr Ryˇsav´y 17. z´aˇr´ı 2019 Katedra poˇc´ıtaˇc˚u, FEL, ˇCVUT. prohledav´an´ı graf˚u

Pseudokod, rekurzivne

function Depth-First-Search(graph, s)Mark-Visited(s)for all edges (s, v) do

if Unvisited(v) thenDepth-First-Search(graph, v)

end ifend for

end function

23

Page 32: BFS, DFS, fronta, zásobník - cvut.cz€¦ · bfs, dfs, fronta, zasobn´ık Petr Ryˇsav´y 17. z´aˇr´ı 2019 Katedra poˇc´ıtaˇc˚u, FEL, ˇCVUT. prohledav´an´ı graf˚u

DFS splnuje pozadavky na prohledavacı algoritmus

Tvrzenı Na konci DFS navstıvı v ⇔ v G existuje cesta z s do v.

Dukaz

Tvrzenı Cas behu DFS je O(ms + ns).

Dukaz

24

Page 33: BFS, DFS, fronta, zásobník - cvut.cz€¦ · bfs, dfs, fronta, zasobn´ık Petr Ryˇsav´y 17. z´aˇr´ı 2019 Katedra poˇc´ıtaˇc˚u, FEL, ˇCVUT. prohledav´an´ı graf˚u

DFS splnuje pozadavky na prohledavacı algoritmus

Tvrzenı Na konci DFS navstıvı v ⇔ v G existuje cesta z s do v.

Dukaz

Tvrzenı Cas behu DFS je O(ms + ns).

Dukaz

24

Page 34: BFS, DFS, fronta, zásobník - cvut.cz€¦ · bfs, dfs, fronta, zasobn´ık Petr Ryˇsav´y 17. z´aˇr´ı 2019 Katedra poˇc´ıtaˇc˚u, FEL, ˇCVUT. prohledav´an´ı graf˚u

DFS splnuje pozadavky na prohledavacı algoritmus

Tvrzenı Na konci DFS navstıvı v ⇔ v G existuje cesta z s do v.

Dukaz

Tvrzenı Cas behu DFS je O(ms + ns).

Dukaz

24

Page 35: BFS, DFS, fronta, zásobník - cvut.cz€¦ · bfs, dfs, fronta, zasobn´ık Petr Ryˇsav´y 17. z´aˇr´ı 2019 Katedra poˇc´ıtaˇc˚u, FEL, ˇCVUT. prohledav´an´ı graf˚u

DFS splnuje pozadavky na prohledavacı algoritmus

Tvrzenı Na konci DFS navstıvı v ⇔ v G existuje cesta z s do v.

Dukaz

Tvrzenı Cas behu DFS je O(ms + ns).

Dukaz

24

Page 36: BFS, DFS, fronta, zásobník - cvut.cz€¦ · bfs, dfs, fronta, zasobn´ık Petr Ryˇsav´y 17. z´aˇr´ı 2019 Katedra poˇc´ıtaˇc˚u, FEL, ˇCVUT. prohledav´an´ı graf˚u

Programovanı

• Proved’te ukoly 9.-11. Tentokrat ale pouzijte prohledavanı do hloubkymısto do sırky.

• Vzorovou implementaci prohledavanı do hloubky naleznete nahttp://www.geeksforgeeks.org/depth-first-traversal-for-a-graph/. Opetse ale snazte vse naimplementovat a odladit sami.

25

Page 37: BFS, DFS, fronta, zásobník - cvut.cz€¦ · bfs, dfs, fronta, zasobn´ık Petr Ryˇsav´y 17. z´aˇr´ı 2019 Katedra poˇc´ıtaˇc˚u, FEL, ˇCVUT. prohledav´an´ı graf˚u

References

• heavily inspired by Tim Roughgarden’s online courses,http://theory.stanford.edu/˜tim/videos.html

• Robert Sedgewick and Kevin Wayne, Algorithms,http://algs4.cs.princeton.edu/home/, namelyhttp://algs4.cs.princeton.edu/44sp/

• Halim, S., Halim, F., Skiena, S. S., & Revilla, M. A. (2013).Competitive Programming 3. Lulu Independent Publish.

26

Page 38: BFS, DFS, fronta, zásobník - cvut.cz€¦ · bfs, dfs, fronta, zasobn´ık Petr Ryˇsav´y 17. z´aˇr´ı 2019 Katedra poˇc´ıtaˇc˚u, FEL, ˇCVUT. prohledav´an´ı graf˚u

Dekuji za pozornost.Cas na otazky!

27