ALGORITMIZACE A DATOV STRUKTURY 14 ASD 13 cvien
- Slides: 49
ALGORITMIZACE A DATOVÉ STRUKTURY (14 ASD) 13. cvičení
Pokročilé programování • rekurze • backtracking • hladový algoritmus • rozděl a panuj • dynamické programování https: //ksp. mff. cuni. cz/kucharky/zakladni-algoritmy/
REKURZE
Rekurze • programovací technika, kdy se uvnitř algoritmu volá tentýž algoritmus • přímá rekurze - algoritmus A přímo volá algoritmus A • nepravá neboli nepřímá rekurze - algoritmus A volá algoritmus B a algoritmus B volá algoritmus A • rekurze musí někdy skončit!!!
Algoritmus Dojdi. Ke. Zdi - Karel rovně dojde ke zdi
Algoritmus Dojdi. Ke. Zdi – pomocí rekurze
Příklad – výchozí stav
Příklad – konečný stav
Algoritmus Dojdi. Ke. Zdi_Vrat. Se. Do. Pulky – robot Karel dojde ke zdi a vrátí se do půlky cesty • Úvaha: dopředu udělá dva kroky, při cestě zpět na dva kroky připadne krok pouze jeden.
Algoritmus Dojdi. Ke. Zdi_Vrat. Se. Do. Pulky – robot Karel dojde ke zdi a vrátí se do půlky cesty
Příklad – počáteční stav
Příklad – stav před 1. rekurzivním voláním
Příklad – stav po 1. rekurzivním voláním
Příklad – konečný stav
Příklad rekurze – Fibonacciho číslo • f 0=0 • f 1=1 • # deklarace funkce fib v jazyce Python • fn=fn-1+fn-2 • f 2=f 1+f 0 • f 3=f 2+f 1 • f 4=f 3+f 2 • f 5=f 4+f 3 • atd. # volání funkce fib hodnota = fib(20)
HLADOVÝ ALGORITMUS
Hladový algoritmus hledá řešení celé úlohy po jednotlivých krocích a splňuje následující dvě podmínky: • v každém kroku se zvolí lokálně nejlepší řešení • provedené rozhodnutí se již nikdy neodvolává
Příklad na hladový algoritmus • Automat na jídlo by měl vracet peníze nazpět tak, aby vrátil daný obnos v co možná nejmenším počtu mincí. Pro náš měnový systém (máme mince hodnot 1, 2, 5, 10, 20 a 50 Kč) lze tuto úlohu řešit hladovým algoritmem – v každém kroku algoritmu vrátíme tu největší minci, kterou můžeme.
Příklad na hladový algoritmus • Automat na jídlo by měl vracet peníze nazpět tak, aby vrátil daný obnos v co možná nejmenším počtu mincí. Pro náš měnový systém (máme mince hodnot 1, 2, 5, 10, 20 a 50 Kč) lze tuto úlohu řešit hladovým algoritmem – v každém kroku algoritmu vrátíme tu největší minci, kterou můžeme.
Příklad na hladový algoritmus • Automat na jídlo by měl vracet peníze nazpět tak, aby vrátil daný obnos v co možná nejmenším počtu mincí. Pro náš měnový systém (máme mince hodnot 1, 2, 5, 10, 20 a 50 Kč) lze tuto úlohu řešit hladovým algoritmem – v každém kroku algoritmu vrátíme tu největší minci, kterou můžeme. pokud bychom měli jen mince hodnoty 20, 10 a 4 Kč
BACKTRACKING
Backtracking • „metoda pokusu a omylu“ • postupně se zkouší všechny možnosti, jak vyřešit nějaký problém
Příklad na Backtracking • hledání rozkladu zadané částky na mince o hodnotách 5 Kč a 3 Kč • tzn. částka = 3*x + 5*y • např. 7 Kč nejde složit z mincí o hodnotě 5 Kč a 3 Kč • např. 21 = 3*2 + 5*3
Řešení příkladu na Backtracking • V každém kroku zkusíme nejdříve použít pětikorunovou minci a zavoláme stejnou funkci na zbylou částku, a když náš rozklad nevyjde, zkusíme v tomto kroku použít ještě tříkorunu. Takto se rozhodujeme v každém kroku rekurze a případně se vracíme z neúspěšných větví výpočtu a zkoušíme další možnosti. • Je využita rekurze
Příklad na Backtracking
ROZDĚL A PANUJ
Rozděl a panuj 1. rozděl - rozdělí úlohu na a (nezávislých) podúloh stejné velikosti n/a 2. vyřeš - vyřeší podúlohy a to buď přímo pro dostatečně malé, nebo rekurzivně pro větší 3. sjednoť - sjednotí řešení podúloh do řešení původní úlohy velikosti n
Merge sort • řadicí algoritmus 1. Rozdělí neseřazenou množinu dat na dvě podmnožiny o přibližně stejné velikosti. 2. Seřadí obě podmnožiny. 3. Spojí seřazené podmnožiny do jedné seřazené množiny.
https: //upload. wikimedia. org/wikipedia/commons/thumb/e/e 6/Merge_sort_algorithm_di agram. svg/1200 px-Merge_sort_algorithm_diagram. svg. png
Vyhledávání binárním půlením Algoritmus je aplikovatelný pouze na neklesající posloupnost prvků (pole), případně po modifikaci na nerostoucí posloupnost prvků. Rekurzivně se opakuje porovnání hledaného prvku X s prvkem uprostřed pole a[i] (i=n/2 nebo i=(n+1)/2). Pokud se hodnota obou prvků shoduje pak je prvek nalezen. Pokud X<a[i], algoritmus se aplikuje na polovinu menších prvků, jinak na polovinu větších prvků. http: //www. algoritmy. net/article/21/Binarni-vyhledavani
Hledá se číslo 3 1 2 3 4 5 6 7 1 2 3 4 5 9 10
Hledá se číslo 40 1 2 3 4 5 6 7 8 9 10 11 12 1 5 7 13 14 22 23 24 35 49 55 99 Hledané číslo nenalezeno.
DYNAMICKÉ PROGRAMOVÁNÍ
Dynamické programování • dynamicky se (za běhu programu) postupně staví řešení jednodušších problémů, která jsou následně použita pro řešení složitějších • hlavní podstatou je ukládání a opětovné použití již jednou vypočtených údajů • Hodí se na úlohy, které se dají dělit na podúlohy, které jsou si podobné a mohou se opakovat. Výsledky takovýchto podúloh si poté ukládáme a při dotazu na stejnou podúlohu vrátíme jen uložený výsledek a výpočet již neprovádíme.
Příklad – Fibonacciho číslo • f 0=0 • f 1=1 • fn=fn-1+fn-2
Řešení • ukládat si výsledky vypočtených Fibonacciho čísel a již jednou vypočtená čísla znovu nepočítat
bez použití pole s použitím pole
- Cvien
- Cvien
- Cvien
- Cvien
- Przyrost naturalny wzór
- Struktura wyrobu definicja
- Struktury bílkovin
- Struktura smukła
- Struktury onz
- Grażyna gilewska
- Struktura organizacyjna smukła
- Struktury nato
- Struktury rynkowe tabela
- Komenda w radomiu
- Podstawowe stopy nbp
- Jakub radoszewski
- Organizacja paktu północnoatlantyckiego
- Kraniak
- Struktury bílkovin
- Struktury bílkovin
- Algorytmy i struktury danych
- Onz członkowie
- Asd crystel b
- Asd 3000l
- Wide fixed split s2 in asd
- Vidyo status
- Dvd technology
- Secundum asd
- Asd metodologia agil
- Asd herford
- Uzvr
- Asdaha
- Fixed split s2 causes
- Big asd fans
- Asd levels
- Asd vs pulmonary stenosis murmur
- Lrfd asd
- Asd
- Asd bmw
- Asd simplified technical english
- Atec checklist
- Bmi spectrum
- Wake tech admissions
- Asd holzminden
- Asd
- Asd torrent
- Asd
- Asd
- Ava asd