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

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

bfs, dfs, fronta, zásobník

Stromy, haldy, prioritní fronty

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

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

Prioritní fronta, halda

Algoritmy na ohodnoceném grafu

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

TGH07 - Chytré stromové datové struktury

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

TGH07 - Chytré stromové datové struktury

Algoritmy a datové struktury

Grafové algoritmy. Programovací techniky

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

Algoritmizace prostorových úloh

bin arn ı vyhled av an ı a bst Karel Hor ak, Petr Ryˇsav y 23. bˇrezna 2016 Katedra poˇ c ıtaˇ c u, FEL, ˇ CVUT

Dynamické datové struktury III.

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

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

TGH05 - Problém za milion dolarů.

Dynamické datové struktury I.

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

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

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

ORIENTOVANÉ GRAFY, REPREZENTACE GRAFŮ

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

Grafové algoritmy. Programovací techniky

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

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

Datové struktury Úvod

Dynamické datové struktury IV.

Stromy. Jan Hnilica Počítačové modelování 14

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

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

TGH06 - Hledání nejkratší cesty

Základní datové struktury

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

TGH06 - Hledání nejkratší cesty

6. Tahy / Kostry / Nejkratší cesty

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

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

Amortizovaná složitost. Prioritní fronty, haldy (binární, d- regulární, binomiální, Fibonacciho), operace nad nimi a jejich složitost

TGH08 - Optimální kostry

Úvod do teorie grafů

Matice sousednosti NG

ALGORITMY A DATOVÉ STRUKTURY

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

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

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

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.

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

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

Stromy. Strom: souvislý graf bez kružnic využití: počítačová grafika seznam objektů efektivní vyhledávání výpočetní stromy rozhodovací stromy

Vyvažování a rotace v BVS, všude se předpokládá AVL strom

Datový typ prioritní fronta Semestrální práce z předmětu 36PT

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

Select sort: krok 1: krok 2: krok 3: atd. celkem porovnání. výběr nejmenšího klíče z n prvků vyžaduje 1 porovnání

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

DobSort. Úvod do programování. DobSort Implementace 1/3. DobSort Implementace 2/3. DobSort - Příklad. DobSort Implementace 3/3

Programování 3. hodina. RNDr. Jan Lánský, Ph.D. Katedra informatiky a matematiky Fakulta ekonomických studií Vysoká škola finanční a správní 2015

Inovace a zkvalitnění výuky prostřednictvím ICT Základy programování a algoritmizace úloh Třídění dat. Ing. Hodál Jaroslav, Ph.D. VY_32_INOVACE_26 04

a) b) c) Radek Mařík

Základy umělé inteligence

Binární vyhledávací stromy II

3. Prohledávání grafů

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

Dynamické programování

Pokročilé haldy. prof. Ing. Pavel Tvrdík CSc. Fakulta informačních technologií České vysoké učení technické v Praze c Pavel Tvrdík, 2010

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

Ú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ů

Maturitní téma: Programovací jazyk JAVA

ADT prioritní fronta. Haldy. Další operace nad haldou. Binární halda. Binomické stromy. Časová složitost jednotlivých operací.

Použití dalších heuristik

NPRG030 Programování I, 2018/19 1 / :03:07

Abstraktní datové typy

Předmět: Algoritmizace praktické aplikace

Rekurzivní algoritmy

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

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

07 Základní pojmy teorie grafů

Složitosti základních operací B + stromu

TGH04 - procházky po grafech

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

Pokročilá algoritmizace amortizovaná složitost, Fibonacciho halda, počítačová aritmetika

Vzdálenost uzlů v neorientovaném grafu

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

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

Datové struktury 2: Rozptylovací tabulky

Graf. Uzly Lokality, servery Osoby fyzické i právní Informatické objekty... atd. Hrany Cesty, propojení Vztahy Informatické závislosti... atd.

Adresní vyhledávání (přímý přístup, zřetězené a otevřené rozptylování, rozptylovací funkce)

Algoritmizace Dynamické programování. Jiří Vyskočil, Marko Genyg-Berezovskyj 2010

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

Lineární datové struktury

Datové struktury. alg12 1

Prioritní fronta, halda (heap), řazení

Volné stromy. Úvod do programování. Kořenové stromy a seřazené stromy. Volné stromy

Obsah: Problém osmi dam

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 21.

Informatika navazující magisterské studium Přijímací zkouška z informatiky 2018 varianta A

Binární vyhledávací strom pomocí směrníků Miroslav Hostaša L06620

Transkript:

bfs, dfs, fronta, zásobník, prioritní fronta, halda Petr Ryšavý 19. září 2017 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

Přestávka 26

halda

Prioritní fronta (anglicky priority queue) Kontejner na objekty, které jsou identifikovány kĺıčem Osoby, odkazy v internetu, události s časy, atd. insert- přidej nový objekt do prioritní fronty extract-min- odeber z haldy objekt s nejmenším kĺıčem (pflichta se řeší libovolně) 1 1 Někdy prioritní fronta místo extract-min nabízí operaci extract-max. Nikdy ale obě zároveň. 28

Halda (anglicky heap) Podporuje obě operace v O(log n). Nejčastější implementace prioritní fronty. Navíc operace heapify- inicializace haldy v lineárním čase delete- odstranění libovolného prvku z haldy O(log n). 29

Užití haldy Pokud objevíme v algoritmu opakované počítání minima. Např. rozdíl mezi selection-sort a heap-sort. 30

Užití haldy Pokud objevíme v algoritmu opakované počítání minima. Např. rozdíl mezi selection-sort a heap-sort. Plánovač úloh Například události s časovým kĺıčem, např. ve hře. 30

Užití haldy Pokud objevíme v algoritmu opakované počítání minima. Např. rozdíl mezi selection-sort a heap-sort. Plánovač úloh Například události s časovým kĺıčem, např. ve hře. Median Maintenance sekvence x 1, x 2,..., x n, dodáváme prvky jeden po druhém, v každém kroku je třeba říci medián z čísel x 1, x 2,..., x i, podmínkou je, že to stíháme v O(log n). 30

Užití haldy Pokud objevíme v algoritmu opakované počítání minima. Např. rozdíl mezi selection-sort a heap-sort. Plánovač úloh Například události s časovým kĺıčem, např. ve hře. Median Maintenance sekvence x 1, x 2,..., x n, dodáváme prvky jeden po druhém, v každém kroku je třeba říci medián z čísel x 1, x 2,..., x i, podmínkou je, že to stíháme v O(log n). zrychlení Dijkstrova algoritmu Naivně O(mn), s haldou O(m log n). 30

Programování - halda uživatelsky Proved te úkoly 12.-15. 31

Přestávka 32

implementace haldy

Definice haldy 2 pohledy - jako strom a jako pole Halda je kořenový, binární strom, který je co nejvíce vyvážený. Poslední úroveň je zaplňována zleva. Je splněná vlastnost haldy: x : key[x] kĺıče potomků uzlu x. 34

Důsledek V každé haldě je minimální prvek uložen v kořeni. 35

Implementace v poli Očíslujme uzly podle úrovní Efektivnější na pamět (nepotřebujeme žádné ukazatele navíc) Efektivní vzorce pro výpočet adres rodiče a potomků 36

Implementace v poli Očíslujme uzly podle úrovní Efektivnější na pamět (nepotřebujeme žádné ukazatele navíc) Efektivní vzorce pro výpočet adres rodiče a potomků { i 2 i sudé, parent(i) = i 2 i liché, children(i) = {2i, 2i + 1} 36

insert a probublávání nahoru Vložíme nový kĺıč na konec haldy. Probubláváme ho nahoru tak dlouho, odkud není vlastnost haldy splněna. Čas běhu je log(n). 37

extract-min a probublávání nahoru Odebereme kořen. Nahradíme ho posledním uzlem. Probubláváme nový kořen dolů. Vždy prohazujeme s menším z potomků. 38

Programování - vlastní implementace haldy Proved te úkol 16. Pokud neprogramujete v Javě, ale v C++, zkuste dodržet strukturu třídy. Vlastní implementaci haldy budeme potřebovat zítra v Dijkstrově algoritmu, dejte si tedy záležet. Popis a implementaci lze opět nalézt na http://algs4.cs.princeton.edu/24pq/. 39

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