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

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

Algoritmy na ohodnoceném grafu

TGH07 - Chytré stromové datové struktury

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

TGH07 - Chytré stromové datové struktury

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

Algoritmy a datové struktury

TGH05 - Problém za milion dolarů.

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

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

Dynamické datové struktury III.

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

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

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

Grafové algoritmy. Programovací techniky

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

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

ORIENTOVANÉ GRAFY, REPREZENTACE GRAFŮ

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

Datové struktury Úvod

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

TGH06 - Hledání nejkratší cesty

Grafové algoritmy. Programovací techniky

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

Dynamické datové struktury IV.

TGH06 - Hledání nejkratší cesty

ALGORITMY A DATOVÉ STRUKTURY

TGH08 - Optimální kostry

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í

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

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

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.

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

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

Matice sousednosti NG

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

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

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

Dynamické datové struktury I.

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

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

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

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

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

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

Použití dalších heuristik

Úvod do teorie grafů

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

Předmět: Algoritmizace praktické aplikace

3. Prohledávání grafů

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

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

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

6. Tahy / Kostry / Nejkratší cesty

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

Základy umělé inteligence

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

Binární vyhledávací stromy II

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

Základní datové struktury

Rekurzivní algoritmy

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

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

TGH04 - procházky po grafech

a) b) c) Radek Mařík

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

Vzdálenost uzlů v neorientovaném grafu

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

Maturitní téma: Programovací jazyk JAVA

Datové struktury 2: Rozptylovací tabulky

Dynamické programování

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

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

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

Abstraktní datové typy

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

Dynamické datové struktury II.

07 Základní pojmy teorie grafů

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

Obsah: Problém osmi dam

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

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

Základy algoritmizace c2005, 2007 Michal Krátký, Jiří Dvorský1/39

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

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

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

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

PROGRAMOVÁNÍ. Cílem předmětu Programování je seznámit posluchače se způsoby, jak algoritmizovat základní programátorské techniky.

Prohledávání stavového prostoru

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

Algoritmy a datové struktury

Drsná matematika III 10. demonstrovaná cvičení Kostry grafů

Transkript:

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

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 9

Příklad 10

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. 11

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 11

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 ). 11

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 11

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. 12

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 12

Příklad 13

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

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

dfs

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

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 17

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 18

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. 19

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 19

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 ). 19

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 19

Přestávka 20

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ň. 22

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). 23

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

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. 24

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). 24

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). 24

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. 26

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

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

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} 28

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). 29

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ů. 30

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