bfs, dfs, fronta, zásobník

Podobné dokumenty
bfs, dfs, fronta, zásobník, prioritní fronta, halda

bfs, dfs, fronta, zásobník, prioritní fronta, halda

dag a dp v něm, bellman-ford, floyd-warshall

Hledáme efektivní řešení úloh na grafu

opakování reprezentace grafů, dijkstra, bellman-ford, johnson

opakování reprezentace grafů, dijkstra, bellman-ford, johnson

Grafové algoritmy. Programovací techniky

ORIENTOVANÉ GRAFY, REPREZENTACE GRAFŮ

TGH05 - aplikace DFS, průchod do šířky

Algoritmy a datové struktury

TGH05 - aplikace DFS, průchod do šířky

Řešení: PŘENESVĚŽ (N, A, B, C) = přenes N disků z A na B pomocí C

PROHLEDÁVÁNÍ GRAFŮ. Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky, FIT České vysoké učení technické v Praze

Algoritmizace prostorových úloh

Grafové algoritmy. Programovací techniky

Dynamické datové struktury I.

Matice sousednosti NG

"Agent Hledač" (3. přednáška)

prohled av an ı graf u Karel Hor ak, Petr Ryˇsav y 16. bˇrezna 2016 Katedra poˇ c ıtaˇ c u, FEL, ˇ CVUT

Úvod do teorie grafů

Algoritmy na ohodnoceném grafu

Základy informatiky. 07 Teorie grafů. Kačmařík/Szturcová/Děrgel/Rapant

3. Prohledávání grafů

NEJKRATŠÍ CESTY I. Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky, FIT České vysoké učení technické v Praze

Úloha ve stavovém prostoru SP je <s 0, C>, kde s 0 je počáteční stav C je množina požadovaných cílových stavů

Prohledávání do šířky = algoritmus vlny

Základní datové struktury

Základní datové struktury III: Stromy, haldy

Stromy. Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta a kol.

TGH04 - procházky po grafech

ALG 04. Zásobník Fronta Operace Enqueue, Dequeue, Front, Empty... Cyklická implementace fronty. Průchod stromem do šířky

Dynamické programování

Algoritmus pro hledání nejkratší cesty orientovaným grafem

Stromy, haldy, prioritní fronty

Zdůvodněte, proč funkce n lg(n) roste alespoň stejně rychle nebo rychleji než než funkce lg(n!). Symbolem lg značíme logaritmus o základu 2.

State Space Search Step Run Editace úloh Task1 Task2 Init Clear Node Goal Add Shift Remove Add Node Goal Node Shift Remove, Add Node

Obsah: Problém osmi dam

Datové struktury. alg12 1

ALGORITMIZACE 2010/03 STROMY, BINÁRNÍ STROMY VZTAH STROMŮ A REKURZE ZÁSOBNÍK IMPLEMENTUJE REKURZI PROHLEDÁVÁNÍ S NÁVRATEM (BACKTRACK)

Neinformované metody prohledávání stavového prostoru. Gerstner Laboratory Agent Technology Group, Czech Technical University in Prague

Prohledávání do šířky a do hloubky. Jan Hnilica Počítačové modelování 15

ALGORITMIZACE 2010/03 STROMY, BINÁRNÍ STROMY VZTAH STROMŮ A REKURZE ZÁSOBNÍK IMPLEMENTUJE REKURZI PROHLEDÁVÁNÍ S NÁVRATEM (BACKTRACK)

Spojová implementace lineárních datových struktur

TGH06 - Hledání nejkratší cesty

TGH06 - Hledání nejkratší cesty

Cílem kapitoly je seznámit studenta se seznamem a stromem. Jejich konstrukci, užití a základní vlastnosti.

Ukážeme si lineární algoritmus, který pro pevné k rozhodne, zda vstupní. stromový rozklad. Poznamenejme, že je-li k součástí vstupu, pak rozhodnout

Semestrální práce z KIV/PC. Kolja Matuševský (A14B0310P)

Datové struktury 1: Základní datové struktury

Prioritní fronta, halda

1. Převeďte dané číslo do dvojkové, osmičkové a šestnáctkové soustavy: a) b)

Prohledávání stavového prostoru

Datové struktury. Obsah přednášky: Definice pojmů. Abstraktní datové typy a jejich implementace. Algoritmizace (Y36ALG), Šumperk - 12.

2 Datové struktury. Pole Seznam Zásobník Fronty FIFO Haldy a prioritní fronty Stromy Hash tabulky Slovníky

Binární vyhledávací stromy II

Kostry. 9. týden. Grafy. Marie Demlová (úpravy Matěj Dostál) 16. dubna 2019

TGH09 - Barvení grafů

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Jan Březina. Technical University of Liberec. 30. dubna 2013

Dijkstrův algoritmus

Lineární datové struktury

Metody návrhu algoritmů, příklady. IB111 Programování a algoritmizace

Lineární datové struktury

Základy umělé inteligence

ALGORITMY A DATOVÉ STRUKTURY

2. Mřížky / Záplavové vyplňování

Reprezentace aritmetického výrazu - binární strom reprezentující aritmetický výraz

STROMOVE ALGORITMY Prohledavani do sirky (level-order) Po vodorovnejch carach fronta

Slepé prohledávání do šířky Algoritmus prohledávání do šířky Při tomto způsobu prohledávání máme jistotu, že vždy nalezneme koncový stav, musíme ale p

Jan Březina. Technical University of Liberec. 21. dubna 2015

Diskrétní matematika. DiM /01, zimní semestr 2018/2019

Vzdálenost uzlů v neorientovaném grafu

Abstraktní datové typy

Kolekce, cyklus foreach

Obecná informatika. Matematicko-fyzikální fakulta Univerzity Karlovy v Praze. Podzim 2012

Da D to t v o é v ty t py IB111: Datové typy

Použití dalších heuristik

TGH07 - Chytré stromové datové struktury

6. Tahy / Kostry / Nejkratší cesty

Základy informatiky. Teorie grafů. Zpracoval: Pavel Děrgel Úprava: Daniela Szturcová

Konstruktory a destruktory

Fronta (Queue) Úvod do programování. Fronta implementace. Fronta implementace pomocí pole 1/4. Fronta implementace pomocí pole 3/4

Interaktivní segmentace obrazu s využitím algoritmu pro maximalizaci toku v síti.

Paralelní grafové algoritmy

Předmět: Algoritmizace praktické aplikace

ADT/ADS = abstraktní datové typy / struktury

Maturitní téma: Programovací jazyk JAVA

Abstraktní datový typ

07 Základní pojmy teorie grafů

Neinformované metody prohledávání stavového prostoru Michal Pěchouček, Milan Rollo. Department of Cybernetics Czech Technical University in Prague

Grafy. Obyčejný graf. Orientovaný graf. Ohodnocený graf. Na filmovém festivalu se sešlo šest tisíc lidí, některé

1. Toky, řezy a Fordův-Fulkersonův algoritmus

2. Řešení úloh hraní her Hraní her (Teorie a algoritmy hraní her)

ABSTRAKTNÍ DATOVÉ TYPY (ADT)

Hanojská věž. T2: prohledávání stavového prostoru. zadání [1 1 1] řešení [3 3 3] dva možné první tahy: [1 1 2] [1 1 3]

IV113 Validace a verifikace. Detekce akceptujícího cyklu. Jiří Barnat

Obsah prezentace. Základní pojmy v teorii o grafech Úlohy a prohledávání grafů Hledání nejkratších cest

Seznamy a iterátory. Kolekce obecně. Rozhraní kolekce. Procházení kolekcí

Rekurzivní algoritmy

TGH10 - Maximální toky

Transkript:

bfs, dfs, fronta, zásobník Petr Ryšavý 25. září 2018 Katedra počítačů, FEL, ČVUT

prohledávání grafů

Proč prohledávání grafů Zkontrolovat, zda je sít spojitá. Hledání nejkratší cesty, plánování cest. Prohledávání stavového prostoru, formulování plánu (např. jak vyřešit sudoku). Spočíst komponenty grafu. 2

Požadavky na algoritmus prohledávající graf Algoritmus musí umět nalézt cestu do všech vrcholů, které jsou dosažitelné. Nechceme procházet žádné části grafu vícekrát. Požadujeme lineární čas běhu (O(m + n)). 3

Obecný algoritmus function Generic-Graph-Search(graph, s) Označ s jako navštívené while lze nalézt hranu (u, v), že u bylo navštíveno a v ne do (u, v) libovolná hrana, kde u bylo navštíveno a v ne Označ v jako navštívené end while end function 4

Prohledávání je úplné Tvrzení Na konci je vrchol v navštívený právě tehdy, když G obsahuje cestu z s do v. 5

Důkaz 6

Rozdíly mezi BFS a DFS Algoritmy se odlišují podle toho v jakém pořadí vrcholy prohledávají 7

Rozdíly mezi BFS a DFS Algoritmy se odlišují podle toho v jakém pořadí vrcholy prohledávají BFS (Breadth-First Search, prohledávání do šířky) Vrcholy jsou prohledávány po úrovních. Sousedi jedné úrovně tvoří další úroveň. Může počítat nejkratší cesty a komponenty souvislosti. O(m + n) s frontou. 7

Rozdíly mezi BFS a DFS Algoritmy se odlišují podle toho v jakém pořadí vrcholy prohledávají BFS (Breadth-First Search, prohledávání do šířky) Vrcholy jsou prohledávány po úrovních. Sousedi jedné úrovně tvoří další úroveň. Může počítat nejkratší cesty a komponenty souvislosti. O(m + n) s frontou. DFS (Depth-First Search, prohledávání do hloubky) Prohledáváme stále hlouběji, backtrackujeme jen když musíme. Počítá topologické očíslování a silné komponenty souvislosti. O(m + n) se zásobníkem. 7

Zásobník (anglicky stack) Datová struktura pro uchovávání dat Data přicházejí a odcházejí v pořadí last in first out Data přidáváme i odebíráme z konce Implementace obvykle pomocí pole 8

Fronta (anglicky queue) Datová struktura pro uchovávání dat Data přicházejí a odcházejí v pořadí first in first out Data přidáváme na konec, odebíráme ze začátku Implementace obvykle pomocí kruhového bufferu nebo spojového seznamu 9

Čas na programování Proved te úkoly 1.-5. Popis i implementaci v Javě naleznete na http://introcs.cs.princeton.edu/java/43stack/. Zde je implementace pomocí spojového seznamu. Implementace fronty v C++ naleznete na http://www.programming-techniques.com/2011/11/ queue-is-order-collection-of-items-from.html a zásobníku na http: //www.algolist.net/data_structures/stack/array-based_implementation. Každopádně obě struktury zkuste naimplementovat sami a neinspirujte se referencí. 10

Přestávka 11

bfs

Pseudokód function Breadth-First-Search(graph, s) Q new FIFO queue Add(Q, s) Mark-Visited(s) while Size(Q) 0 do v Remove(Q) for all edges (v, w) do if Unvisited(w) then Mark-Visited(w) Add(Q, w) end if end for end while end function 13

Příklad 14

BFS splňuje požadavky na prohledávací algoritmus Tvrzení Na konci BFS navštíví v v G existuje cesta z s do v. 15

BFS splňuje požadavky na prohledávací algoritmus Tvrzení Na konci BFS navštíví v v G existuje cesta z s do v. Důkaz 15

BFS splňuje požadavky na prohledávací algoritmus Tvrzení Na konci BFS navštíví v v G existuje cesta z s do v. Důkaz Tvrzení Čas běhu BFS je O(m s + n s ). 15

BFS splňuje požadavky na prohledávací algoritmus Tvrzení Na konci BFS navštíví v v G existuje cesta z s do v. Důkaz Tvrzení Čas běhu BFS je O(m s + n s ). Důkaz 15

Aplikace na hledání nejkratších cest Cíl: spočíst dist(v), což je nejmenší počet hran na cestě z s do v. 16

Aplikace na hledání nejkratších cest Cíl: spočíst dist(v), což je nejmenší počet hran na cestě z s do v. function Breadth-First-Search(graph, s) Q new FIFO queue Add(Q, s) Mark-Visited(s) { 0, pro v = s, dist(v) = jinak. while Size(Q) 0 do v Remove(Q) for all edges (v, w) do if Unvisited(w) then Mark-Visited(w) Add(Q, w) dist(w) = dist(v) + 1 end if end for end while 16

Příklad 17

BFS hledá nejkratší cesty Tvrzení Na konci BFS platí dist(v) = i v leží v i-té vrstvě. 18

BFS hledá nejkratší cesty Tvrzení Na konci BFS platí dist(v) = i v leží v i-té vrstvě. Důkaz 18

Programování Proved te úkoly 6.-8. Vzorovou implementaci prohledávání do šířky naleznete na http://www.geeksforgeeks.org/breadth-first-traversal-for-a-graph/. Opět se ale snažte vše naimplementovat a odladit sami. 19

dfs

Příklad DFS prohledává graf více agresivně a vrací se co nejméně. 21

Pseudokód Nahradíme frontu zásobníkem function Depth-First-Search(graph, s) Q new LIFO stack Add(Q, s) Mark-Visited(s) while Size(Q) 0 do v Remove(Q) for all edges (v, w) do if Unvisited(w) then Mark-Visited(w) Add(Q, w) end if end for end while end function 22

Pseudokód, rekurzivně function Depth-First-Search(graph, s) Mark-Visited(s) for all edges (s, v) do if Unvisited(v) then Depth-First-Search(graph, v) end if end for end function 23

DFS splňuje požadavky na prohledávací algoritmus Tvrzení Na konci DFS navštíví v v G existuje cesta z s do v. 24

DFS splňuje požadavky na prohledávací algoritmus Tvrzení Na konci DFS navštíví v v G existuje cesta z s do v. Důkaz 24

DFS splňuje požadavky na prohledávací algoritmus Tvrzení Na konci DFS navštíví v v G existuje cesta z s do v. Důkaz Tvrzení Čas běhu DFS je O(m s + n s ). 24

DFS splňuje požadavky na prohledávací algoritmus Tvrzení Na konci DFS navštíví v v G existuje cesta z s do v. Důkaz Tvrzení Čas běhu DFS je O(m s + n s ). Důkaz 24

Programování Proved te úkoly 9.-11. Tentokrát ale použijte prohledávání do hloubky místo do šířky. Vzorovou implementaci prohledávání do hloubky naleznete na http://www.geeksforgeeks.org/depth-first-traversal-for-a-graph/. Opět se ale snažte vše naimplementovat a odladit sami. 25

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/, namely http://algs4.cs.princeton.edu/44sp/ Halim, S., Halim, F., Skiena, S. S., & Revilla, M. A. (2013). Competitive Programming 3. Lulu Independent Publish. 26

Děkuji za pozornost. Čas na otázky! 27