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

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

Binární soubory (datové, typované)

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

Dynamické programování

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

Úvod do teorie grafů

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

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

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

Úvod do programování 10. hodina

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

ALGORITMY A DATOVÉ STRUKTURY

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

Cvičení 5 - Průchod stromem a grafem

NMIN101 Programování 1 2/2 Z --- NMIN102 Programování /2 Z, Zk

Rekurze. Pavel Töpfer, 2017 Programování 1-8 1

Základy umělé inteligence

Test prvočíselnosti. Úkol: otestovat dané číslo N, zda je prvočíslem

NMIN101 Programování 1 2/2 Z --- NMIN102 Programování /2 Z, Zk

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

Základy umělé inteligence

Náplň. v Jednoduché příklady na práci s poli v C - Vlastnosti třídění - Způsoby (algoritmy) třídění

Časová a prostorová složitost algoritmů

Rozklad problému na podproblémy

3. Prohledávání grafů

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

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

Grafové algoritmy. Programovací techniky

Grafové algoritmy. Programovací techniky

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

8. Rekurze. doc. Ing. Jiří Vokřínek, Ph.D. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze

přirozený algoritmus seřadí prvky 1,3,2,8,9,7 a prvky 4,5,6 nechává Metody řazení se dělí:

Dynamické datové struktury III.

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

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

Algoritmizace prostorových úloh

4. Rekurze. BI-EP1 Efektivní programování Martin Kačer

Logo2 operace, rekurze, větvení výpočtu

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

Datové struktury 2: Rozptylovací tabulky

Stromy, haldy, prioritní fronty

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

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

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

Úvod do informatiky. Miroslav Kolařík

Základy algoritmizace a programování

5. přednáška - Rozklad problému na podproblémy

Tato tematika je zpracována v Záznamy přednášek: str

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

NPRG030 Programování I 3/2 Z --- NPRG031 Programování II --- 2/2 Z, Zk

Vzdálenost uzlů v neorientovaném grafu

Rekurzivní algoritmy

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]

Obsah Techniky návrhu algoritmů Rekurze, algoritmy prohledávání s návratem, dynamické programování Rekurze... 5

Rekurze. Jan Hnilica Počítačové modelování 12

OPTIMALIZACE. (přehled metod)

Prioritní fronta, halda

Algoritmy a datové struktury

Implementace LL(1) překladů

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

A4B33ALG 2010/05 ALG 07. Selection sort (Select sort) Insertion sort (Insert sort) Bubble sort deprecated. Quicksort.

07 Základní pojmy teorie grafů

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

bfs, dfs, fronta, zásobník

Návrh Designu: Radek Mařík

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

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

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

Algoritmizace prostorových úloh

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

13. Třídící algoritmy a násobení matic

Maturitní téma: Programovací jazyk JAVA

IB111 Úvod do programování skrze Python

5. Dynamické programování

popel, glum & nepil 16/28

IB015 Neimperativní programování. Časová složitost, Typové třídy, Moduly. Jiří Barnat Libor Škarvada

Dynamické datové struktury IV.

Rekurze. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 12.

Vyučovací hodina. 1vyučovací hodina: 2vyučovací hodiny: Opakování z minulé hodiny. Procvičení nové látky

2. úkol MI-PAA. Jan Jůna (junajan)

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

Výhody a nevýhody jednotlivých reprezentací jsou shrnuty na konci kapitoly.

Algoritmizace diskrétních. Ing. Michal Dorda, Ph.D.

Úvod do mobilní robotiky AIL028

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

Elegantní algoritmus pro konstrukci sufixových polí

Hranová konzistence. Arc consistency AC. Nejprve se zabýváme binárními CSP. podmínka odpovídá hraně v grafu podmínek

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

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

Anotace. Dámy na šachovnici dominance a nezávislost. Aritmetické výrazy, notace a převody mezi nimi, nejdelší rostoucí podposloupnost.

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

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

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

= - rovnost dvou výrazů, za x můžeme dosazovat různá čísla, tím měníme

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

Voronoiův diagram. RNDr. Petra Surynková, Ph.D. Univerzita Karlova v Praze Matematicko-fyzikální fakulta

Teorie grafů. Kostra grafu. Obsah. Radim Farana Podklady pro výuku pro akademický rok 2013/2014

1. Implementace funkce počet vrcholů. Předmět: Algoritmizace praktické aplikace (3ALGA)

. je zlomkem. Ten je smysluplný pro jakýkoli jmenovatel různý od nuly. Musí tedy platit = 0

Lineární datové struktury

Transkript:

Prohledávání do šířky = algoritmus vlny - souběžně zkoušet všechny možné varianty pokračování výpočtu, dokud nenajdeme řešení úlohy průchod stromem všech možných cest výpočtu do šířky, po vrstvách (v každé vrstvě zkouší všechny možnosti zleva doprava) - je nutné pamatovat si všechny situace v jedné vrstvě stromu při větší hloubce je to paměťově velmi náročné (exponenciálně), až nepoužitelné - použijeme, máme-li nalézt jedno (nejkratší) řešení vždy najde nejkratší možné řešení co do počtu kroků Pavel Töpfer, 2016 Programování 1-10 1

- výhodné, existují-li v rozsáhlém prohledávacím stromě nějaká řešení vzdálená od startu jen na málo kroků prohledá se jen několik horních vrstev stromu (významná časová úspora oproti prohledávání do hloubky) - nevhodné při úloze nalézt všechna řešení musí se projít celý strom, a to je při stejné časové složitosti výhodnější provádět do hloubky (paměťově mnohem méně náročné) - v některých úlohách je nutné prohledávat do hloubky (prohledávání do šířky by se paměťově nezvládlo), v některých je nutné prohledávat do šířky (prohledávání do hloubky by se časově nezvládlo), v některých je to jedno (obě varianty prohledávání jsou paměťově i časově stejně náročné) Pavel Töpfer, 2016 Programování 1-10 2

Realizace prohledávání do hloubky a do šířky Prohledávání do hloubky se zpravidla realizuje rekurzivní procedurou, totéž lze naprogramovat pomocí zásobníku: vlož do zásobníku výchozí stav dokud (není zásobník prázdný) a (není nalezeno řešení) opakuj vyjmi ze zásobníku vrchní stav a zpracuj ho vlož do zásobníku jeho všechna možná pokračování Prohledávání do šířky se realizuje velmi podobně pomocí fronty: vlož do fronty výchozí stav dokud (není fronta prázdná) a (není nalezeno řešení) opakuj vyjmi z fronty první stav a zpracuj ho vlož do fronty jeho všechna možná pokračování Pavel Töpfer, 2016 Programování 1-10 3

Příklady: Proskákání celé šachovnice koněm (bylo) - každé možné řešení úlohy má délku 63 kroků, použití prohledávání do šířky je paměťově nereálné Nejkratší cesta koněm na šachovnici - dána výchozí a cílová pozice, dojít šachovým koněm co nejmenším počtem tahů z výchozího na cílové pole - použití prohledávání do hloubky je velmi nevhodné backtracking do hloubky až 63, zatímco vždy existuje řešení délky maximálně 6 - postupujeme do šířky: sousední pole k výchozímu označíme 1, jejich sousedy 2, jejich sousedy 3, atd., dokud nedojdeme na cílové pole (číslo = délka nejkratší cesty ze startu) - k nalezení vlastní cesty je nutný ještě zpětný chod (cíl sousední pole s hodnotou o 1 menší start) Pavel Töpfer, 2016 Programování 1-10 4

Možnosti realizace: 1. Pole z předchozího kroku vlny (tzn. pole s číslem o 1 menším) nevyhledávat vždy procházením celé šachovnice, ale ukládat si jejich souřadnice navíc do fronty je třeba paměť navíc, ale urychlí to výpočet při vlně 2. U každého pole na šachovnici si pamatovat nejen minimální počet kroků, které na něj vedou, ale i souřadnice předchozího pole snadné nalezení předchůdce při zpětném chodu (ale zase je to paměťově i časově náročnější při provádění vlny ) Pavel Töpfer, 2016 Programování 1-10 5

Procházení grafu (např. pro určení souvislosti) - v obyčejném neorientovaném grafu projít ze zvoleného výchozího vrcholu všechny dostupné vrcholy - označujeme všechny již navštívené vrcholy, abychom někam nešli dvakrát (abychom nezačali v grafu chodit v cyklu) - můžeme rovnocenně použít průchod do hloubky nebo do šířky, liší se pořadím návštěvy jednotlivých vrcholů, ale oba najdou stejné řešení se stejnou (kvadratickou) časovou i paměťovou složitostí Možnosti realizace: 1. rekurzivní procedura realizující průchod do hloubky 2. zásobník nebo fronta pro řízení průchodu do hloubky resp. do šířky představují seznam dluhů = čísla těch vrcholů, do nichž jsme při prohledávání už přišli, ale z nichž jsme nezkoušeli jít dál 3. seznam dluhů dokonce nemusí být realizován ani jako zásobník nebo fronta, můžeme z něj vybírat vrchol ke zpracování libovolně (pak průchod grafem neprobíhá do hloubky ani do šířky) Pavel Töpfer, 2016 Programování 1-10 6

Rozděl a panuj - metoda rekurzivního návrhu algoritmu (programu) Problém se rozdělí na dva (příp. více) podproblémy stejného typu, ale menší velikosti, z jejich řešení se pak snadno sestaví řešení původního problému. Každý podproblém je buď už triviální a vyřeší se přímo, nebo se k jeho řešení použije stejný rekurzivní postup. Realizace: rekurzivní procedurou Podmínka rozumné (tj. efektivní) použitelnosti metody: podproblémy vznikající rozkladem jsou na sobě nezávislé (nevyužívají stejné dílčí podúlohy a jejich řešení) Protipříklad: Fibonacciho čísla rekurzivně - řešení úlohy se sice skládalo z řešení podobných menších podúloh, ale ty nebyly na sobě nezávislé opakované výpočty, velmi neefektivní řešení (exponenciální časová složitost) Pavel Töpfer, 2016 Programování 1-10 7

Hanojské věže - 3 kolíky A, B, C - na A je N disků různé velikosti, seřazené od největšího (dole) k nejmenšímu (nahoře) - kolíky B a C jsou prázdné - úkol: přenést všechny disky z A na B, mohou se odkládat na C - podmínka: nikdy nesmí ležet větší disk na menším Řešení: PŘENESVĚŽ (N, A, B, C) = přenes N disků z A na B pomocí C provedeme jedině takto: 1. PŘENESVĚŽ (N-1, A, C, B) - rekurze 2. přenes disk z A na B - triviální akce 3. PŘENESVĚŽ (N-1, C, B, A) - rekurze Časová složitost: O(2 N ) dána charakterem problému, k vyřešení úkolu je nutné provést tolik přesunů. Pavel Töpfer, 2016 Programování 1-10 8

Vyhodnocení aritmetického výrazu metodou Rozděl a panuj Postup: 1. ve výrazu nalézt znaménko, které se vyhodnotí až jako poslední (zcela mimo závorky, nejnižší priority, z nich co nejvíce vpravo) 2. výraz rozdělit na dva podvýrazy vlevo a vpravo od znaménka 3. oba podvýrazy vyhodnotit 4. s výsledky obou podvýrazů vykonat poslední operaci určenou znaménkem Realizace: 1. lineární průchod výrazem zleva doprava (pokud znaménko mimo závorky neexistuje, odstranit z výrazu vnější závorky a zopakovat) 3. buď je podvýraz triviální (konstanta), nebo se vyhodnotí rekurzivním voláním téhož algoritmu 2. a 4. triviální akce (konstantní složitosti) Pavel Töpfer, 2016 Programování 1-10 9

Příklad: 5 * ( 3 + 4 * 6 8 ) 95 5 ( 3 + 4 * 6 8 ) 3 + 4 * 6 8 19 3 + 4 * 6 8 27 3 4 * 6 24 4 6 Časová složitost: N délka výrazu (počet znamének) složitost jako u quicksortu záleží na struktuře výrazu - v nejhorším případě O(N 2 ) - v nejlepším a průměrném případě O(N.log N) Pavel Töpfer, 2016 Programování 1-10 10