Rekurze. Princip a použití rekurze. Převod rekurze na iteraci.

Rozměr: px
Začít zobrazení ze stránky:

Download "Rekurze. Princip a použití rekurze. Převod rekurze na iteraci."

Transkript

1 Rekurze. Princip a použití rekurze. Převod rekurze na iteraci. Tomáš Bayer bayertom@natur.cuni.cz Katedra aplikované geoinformatiky a kartografie, Přírodovědecká fakulta UK. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované geoinformatiky Rekurze. a kartografie, Přírodovědecká fakulta UK.) 1 / 86

2 Obsah přednášky 1 Rekurze a její vlastnosti Výpočet faktoriálu a Fibonacciho čísel rekurzí. Nebezpečí rekurze 2 Příklady použití rekurze Hledání maxima rekurzí Převod čísla mezi polyadickými soustavami Binární hledání Úloha Hanojských věží QuickSort Binární stromy Kartografická generalizace Jednoduchá kresba s využitím rekurze Konstrukce Kochovy vločky rekurzí Vhodnost/nevhodnost rekurze 3 Převod rekurze na iteraci Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované geoinformatiky Rekurze. a kartografie, Přírodovědecká fakulta UK.) 2 / 86

3 Rekurze a její vlastnosti 1. Rekurze Sebeopakování, realizováno bez použití cyklu. Datový objekt či struktura definována tak, že definice odkazuje na tuto strukturu nebo strukturu podobného charakteru. Tato definice umožňuje opakované volání sama sebe. Rekurzivní algoritmy: Využívají rekurzivní funkce f, které jsou definovány samy sebou. V průběhu vykonávání programu volají samy sebe nebo podobné funkce. Po každém kroku musí dojít ke zjednodušení problému, jinak je postup neefektivní. Důležité je nalezení vztahu mezi problémy řešenými ve dvou po sobě následujících rekurzivních krocích. Proměnné rekurzivních funkcí: Při každém novém volání funkce f dochází k vytvoření nové sady lokálních proměnných. Za běhu programu existuje několik různých sad lokálních proměnných (HW náročnost). Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované geoinformatiky Rekurze. a kartografie, Přírodovědecká fakulta UK.) 3 / 86

4 2. Vlastnosti rekurze Rekurze a její vlastnosti Podmínka ukončení rekurze: Rekurzivní algoritmus musí obsahovat podmínku, při které dojde k jejímu ukončení, aby nepokračovala do nekonečna. V opačném případě dojde k nekonečné rekurzi!!!. V určitém místě tedy musí dojít k takovému dořešení problému, které nebude rekurzivní. Nevhodná konstrukce podmínky: Nepoužívat složité a nepřehledné podmínky. Vyhnout se kontradikcím a tautologiím (nemění se pravdivostní hodnota výrazu). Dělení rekurze: Přímá rekurze: Funkce opakovaně volá sama sebe: f f. Nepřímá (kruhová) rekurze: Vzájemné cyklické volání několik funkcí: f 1 f 2... f n f 1. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované geoinformatiky Rekurze. a kartografie, Přírodovědecká fakulta UK.) 4 / 86

5 Rekurze a její vlastnosti 3. Vztah rekurze a iterace Iterace: Opakování bloku příkazů za stanovených podmínek. Podmínka opakování bloku přechází (for, while) nebo ho následuje (do while), není součástí bloku. Rekurze: Opakování bloku, podmínka součástí bloku. Rekurze lze využívat pouze společně s dalšími nástroji: procedury, funkce (nikoliv samostatně). Mezi rekurzí a iterací úzký vztah, vzájemná převoditelnost. Rekurze efektivnější než iterace. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované geoinformatiky Rekurze. a kartografie, Přírodovědecká fakulta UK.) 5 / 86

6 Rekurze a její vlastnosti 4. Přímá rekurzivní funkce Obecný tvar rekurzivní funkce. nebo f (n) //Rekurzivni funkce: prima rekurze { C n; //Blok prikazu, fce n, nemeni n if (n == P) //Podminka { D; //Blok prikazu: nerekurzivni doreseni } else f(n - 1); //Rekurzivni volani E n; //Blok prikazu, fce n, nemeni n } f(n) = {C n; n? D n : f(n - 1);E n } nebo F = {C, if P then F } Schéma rekurze: Posloupnost rekurzivních volání funkce F nad množinou N. f(n)->f(n-1)->...f(1); Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované geoinformatiky Rekurze. a kartografie, Přírodovědecká fakulta UK.) 6 / 86

7 Rekurze a její vlastnosti 5. Posloupnost rekurzivních volání Posloupnost rekurzivních volání: //Rekurzivni volanid fn -> C n f(n - 1) C n C n 1 f(n-2) C n C n 1 C n 2 f(n-3)... C n C n 1 C n 2... C 1 f(1) //Konec rek. volani //Nerekurzivni doreseni a zpetny chod C n C n 1 C n 2... C 1 D E 1 C n C n 1 C n 2... C 1 D E 1 E 2... C n C n 1 C n 2... C 1 D E 1 E 2... E n Funkce C, E závislé na n volány n-krát, nerekurzivní dořešení voláno pouze 1x. Možno znázornit i stromem. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované geoinformatiky Rekurze. a kartografie, Přírodovědecká fakulta UK.) 7 / 86

8 Rekurze a její vlastnosti 6. Vztah rekurze a zásobníku Rekurze implementována vnitřně s využitím zásobníku (Stack). Při každém rekurzivním volání funkce dojde k vytvoření tzv. aktivačního záznamu. Obsah aktivačního záznamu. 1 Návratová hodnota 2 Formální parametry funkce. 3 Návratová hodnota. 4 Lokální proměnné funkce. 5 Pomocné proměnné pro mezivýsledky. Při přetečení zásobníku chyba Stack Overflow. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované geoinformatiky Rekurze. a kartografie, Přírodovědecká fakulta UK.) 8 / 86

9 Rekurze a její vlastnosti Výpočet faktoriálu a Fibonacciho čísel rekurzí. 7. Výpočet faktoriálu s použitím rekurze: Faktoriál čísla n označujeme jako n!. Pro n > 0 je definován jako { n(n 1)! pro n > 1 n! = 1 pro n = 1 Rekurzivní popis problému: Funkce f pro výpočet faktoriálu čísla n označena jako f (n). S využitím f (n) lze výpočet faktoriálu přepsat do rekurzivního tvaru: f (n) = n f (n 1) Funkce f rekurzivně volá sama sebe nad menší množinou prvků. Dochází tedy ke zjednodušení problému, což je jedním z předpokladů efektivního použití rekurze. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované geoinformatiky Rekurze. a kartografie, Přírodovědecká fakulta UK.) 9 / 86

10 Rekurze a její vlastnosti Výpočet faktoriálu a Fibonacciho čísel rekurzí. 8. Znázornění průběhu rekurze f (4) =? f (4) = 24 f (4) = 4 f (3) f (4) = 4 6 (funkce vrací 24) (zpětné dosazení) (druhé volání) f (3) = 3 f (2) (třetí volání) f (2) = 2 1 (funkce vrací 2) f (2) = 2 f (1) (čtvrté volání) (zpětné dosazení) f (2) = 2 1 (funkce vrací 2) f (1) = 1 Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované geoinformatiky Rekurze. a kartografie, Přírodovědecká fakulta UK.) 10 / 86

11 9. Znázornění průběhu rekurze Strom rekurzivního volání funkce n! Rekurze a její vlastnosti Výpočet faktoriálu a Fibonacciho čísel rekurzí. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované geoinformatiky Rekurze. a kartografie, Přírodovědecká fakulta UK.) 11 / 86

12 Rekurze a její vlastnosti Výpočet faktoriálu a Fibonacciho čísel rekurzí. 10. Zápis zdrojového kódu v jazyce Java Výpočet faktoriálu s použitím rekurze: int f(int n) { if (n > 1) //Ukoncovaci podminka { return n * f(n-1); } else return 1; //Ukonceni rekurze } Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované geoinformatiky Rekurze. a kartografie, Přírodovědecká fakulta UK.) 12 / 86

13 Rekurze a její vlastnosti 11. Fibonacciho posloupnost Výpočet faktoriálu a Fibonacciho čísel rekurzí. Fibonacciho funkci fib(n) definujeme jako fib(n 1) + fib(n 2) pro n > 1 fib(n) = 1 pro n = 1 1 pro n = 0 (1) Fibonacciho posloupnost: {0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89,..} Pomoc ní se dá modelovat množení králíků :-). Výpočet rekurzí velmi neefektivní. Pro n = 4 je člen fib(1) určován celkem 3x, člen fib(0) celkem 2x. Pro n = 5 zřejmě platí, že člen fib(1) bude určován celkem 5x, člen fib(0) celkem třikrát... Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované geoinformatiky Rekurze. a kartografie, Přírodovědecká fakulta UK.) 13 / 86

14 Rekurze a její vlastnosti 12. Strom rekurzivního volání Výpočet faktoriálu a Fibonacciho čísel rekurzí. Strom rekurzivního volání funkce fib(n). Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované geoinformatiky Rekurze. a kartografie, Přírodovědecká fakulta UK.) 14 / 86

15 Rekurze a její vlastnosti 13. Výpočet Fibonacciho čísel rekurzí Výpočet faktoriálu a Fibonacciho čísel rekurzí. Zdrojový kód v jazyce Java: int fib(int n) { if (n>1) //Podminka ukonceni rekurze { return fib(n-1)+fib(n-2); } else return 1; //Ukonceni rekurze } Exponenciální růst!!!. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované geoinformatiky Rekurze. a kartografie, Přírodovědecká fakulta UK.) 15 / 86

16 Rekurze a její vlastnosti Výpočet faktoriálu a Fibonacciho čísel rekurzí. 14. Výpočet Fibonacciho čísel bez použití rekurze Zdrojový kód: int fib(int n) { int fi=1; int fii=1; for (int i=0;i<n;i++) { fi = fi + fii; //Vypocet predchoziho clenu fii = fi - fii; //Vypocet nasledujiciho clenu } return fii; } Postup mnohem efektivnější než s použitím rekurze. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované geoinformatiky Rekurze. a kartografie, Přírodovědecká fakulta UK.) 16 / 86

17 15. Růst množiny Rekurze a její vlastnosti Nebezpečí rekurze Následující krok rekurze není zjednodušením předchozího kroku. Důsledkem je růst množiny, nad kterou je výpočet prováděn divergence řešení. Vznik nekonečné rekurze. Pro n > 0 je definována α(n) jako α(n) = Výpočet α(n) s použitím rekurze: { n α(n + 1) pro n > 1 1 pro n = 1 int alfa(int n) { if (n > 1) //Ukoncovaci podminka { return n * alfa(n + 1); //Mnozina roste } else return 1; //Nikdy nedojde k ukonceni rekurze } Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované geoinformatiky Rekurze. a kartografie, Přírodovědecká fakulta UK.) 17 / 86

18 Rekurze a její vlastnosti Nebezpečí rekurze 16. Špatná konstrukce rekurzivní podmínky Špatná konstrukce rekurzivní podmínky může způsobit nekonečný počet rekurzivních volání. Pro n > 0 je definována β(n) jako β(n) = Pro sudé n dojde k nekonečné rekurzi. Výpočet β(n) s použitím rekurze. { n β(n 2) pro n 1 1 pro n = 1 int beta(int n) { if (n!= 1) //Nedojde k ukonceni rekurze pro suda n { return n * beta(n - 2); } else return 1; } Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované geoinformatiky Rekurze. a kartografie, Přírodovědecká fakulta UK.) 18 / 86

19 17. Další ukázky použití rekurze Nalezení maxima z množiny. Binární hledání. Hledání největšího společného dělitele. Převod čísel mezi soustavami. Hanojské věže QuickSort. Kresba vepsaných čtverců, spirály. Fraktály: Kochova vločka. Binární stromy. Digitální kartografie: generalizace Douglas & Peucker. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované geoinformatiky Rekurze. a kartografie, Přírodovědecká fakulta UK.) 19 / 86

20 Hledání maxima rekurzí 18. Nalezení maxima z množiny prvků Dána neuspořádaná posloupnost prvků x = {x i }, i = 1,..., N. Nalezněte hodnotu x max = max(x i ). Varianty: Bez použití rekurze. S použitím rekurze. Nalezení minima bez použití rekurze: hodnotu x max inicializujeme prvním prvkem posloupnosti, tj. x max = x[0]. porovnáme x max s ostatními členy posloupnosti. Pokud x max > x[i], pak x max = x[i]. po provedení porovnání se všemi prvky x max = max(x i ). Složitost algoritmu O(N). Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované geoinformatiky Rekurze. a kartografie, Přírodovědecká fakulta UK.) 20 / 86

21 19. Hledání maxima klasicky Hledání maxima rekurzí Zdrojový kód v Javě: double maximum(double [] x) { double max = x[0]; //Inicializace maxima for (int i = 0; i < c.length; i++) { //Prirazeni nejvetsiho cisla jako maxima if max > x[i] max = x[i]; } return max; } Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované geoinformatiky Rekurze. a kartografie, Přírodovědecká fakulta UK.) 21 / 86

22 20. Hledání maxima rekurzí Hledání maxima rekurzí Hledání maxima z n čísel lze řešit přirozenou rekurzí. Úloha je dekomponovatelná na úlohy stejné třídy: 1 Hledání maxima v posloupnosti n prvků lze převést na dva stejné podproblémy, a to hledání maxima ve dvou posloupnostech tvořených n/2 prvky: {x 0, x 1,..., x n/2 } a {x n/2+1, x n/2+2,..., x n 1 }. 2 Hledání maxima v těchto posloupnostech lze řešit stejným způsobem, a to rozdělením každé z nich na dvojici posloupností s n/4 prvky, atd... 3 Pro n = 2 je funkce maximum volána pro posloupnosti tvořené dvěma za sebou následujícími prvky x i, x i+1. 4 Pro n = 1 vrací funkce přímo hodnotu prvku {x i }. 5 Ukončení rekurzivního volání. 6 Nalezení maxima z dvojice za sebou následujících prvků ve všech posloupnostech a jejich vrácení max = max(x i, x i+1 ). 7 Nalezení maxim z těchto maxim: atd...max = max(max(x i, x i+1 ), max(x i+2, x i+3 )), atd... Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované geoinformatiky Rekurze. a kartografie, Přírodovědecká fakulta UK.) 22 / 86

23 Hledání maxima rekurzí 21. Hledání maxima, rekurzivní dělení intervalu Tomáš Bayer (Katedra aplikované geoinformatiky Rekurze. a kartografie, Přírodovědecká fakulta UK.) 23 / 86

24 23. Hledání maxima rekurzí Hledání maxima rekurzí double maximum(double [] x, int l, int r) { //Maximum z 1-2 prvku umime if (r - l <= 1) return Math.max(x[l],x[r]); int mid =(l + r)/2; //Nalezeni prostredniho prvku double lmax = maximum(x, l, mid); //Rekurze,L interval double rmax = maximum(x, mid + 1, r); //Rekurze, R interval } return Math.max(lmax, rmax); Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované geoinformatiky Rekurze. a kartografie, Přírodovědecká fakulta UK.) 24 / 86

25 Převod čísla mezi polyadickými soustavami 24. Převod čísla mezi polyadickými soustavami (1/2) Celočíselná část čísla v polyadické soustavě o základu z n a = ± b i z i = ±(b nz n + b n 1 z n b 3 z 3 + b 2 z 2 + b 1 z 1 + b 0 z 0 ). i=0 Při převodu čísla hledáme koeficienty b 0,...,b n. a = ±[z(b nz n 1 + b n 1 z n b 3 z 2 + b 2 z 1 + b 1 z 0 ) + b 0 z 0 ], b 0 = a z(b nz n + b n 1 z n 1 + b n 2 z n b 3 z 2 + b 2 z 1 + b 1 z 0 ) = a%z. a/z = ±[b nz n 1 + b n 1 z n b 3 z 2 + b 2 z 1 + b 1 z 0 ], = ±[z(b nz n 2 + b n 1 z n b 3 z 1 + b 2 z 0 ) + b 1 z 0 ], b 1 = a z z(bnzn 2 + b n 1 z n b 3 z 1 + b 2 z 0 ) = a z %z, a/z 2 = ±[b nz n 2 + b n 1 z n b 3 z 1 + b 2 z 0 ], = ±[z(b nz n 3 + b n 1 z n b 3 z 0 ) + b 2 z 0 ] = a z 2 %z, b 2 = a z 2 z(bnzn 3 + b n 1 z n b 3 z 0 ), Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované geoinformatiky Rekurze. a kartografie, Přírodovědecká fakulta UK.) 25 / 86

26 Převod čísla mezi polyadickými soustavami 25. Převod čísla mezi polyadickými soustavami (2/2) a/z 3 = ±[b nz n 3 + b n 1 z n b 3 z 0 ], = ±[z(b nz n 4 + b n 1 z n ) + b 3 z 0 ], b 3 = a z 3 z(bnzn 4 + b n 1 z n ) b n = a z n b n 1z 0 = a z n %z. Postupné odečítání mocnin z k od převáděného čísla dokud zbytek po dělení není roven nule. Odečítání lze nahradit zbytkem po dělení: Postup lze zapsat ve tvaru: b 0 = a%z, b 1 = a z %z b 2 = a a %z... bn = z2 z n %z. b 0 = a%z, a = a/z b 1 = a%z a = a/z... b n = a z n %z. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované geoinformatiky Rekurze. a kartografie, Přírodovědecká fakulta UK.) 26 / 86

27 Převod čísla mezi polyadickými soustavami 26. Ukázka a = (105) 10 = (?) 2. b 0 = a%z = 105%2 = 1, a = a/z = 52, b 1 = a%z = 0, a = a/z = 26. b 2 = a%z = 0, a = a/z = 13. b 3 = a%z = 1, a = a/z = 6. b 4 = a%z = 0, a = a/z = 3. b 5 = a%z = 1, a = a/z = 1. b 6 = a%z = 1, a = a/z = 0. Platí: (a) 2 = = 0. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované geoinformatiky Rekurze. a kartografie, Přírodovědecká fakulta UK.) 27 / 86

28 Převod čísla mezi polyadickými soustavami 27. Algoritmus převodu (nerekurzivní) Opakované hledání b = a%z pro převáděné číslo: public void convertnumber(int a, int z) { while (a > 0) //Opakuj, dokud a>0 { int b = a % z; System.out.println(b); a = a / z; } } Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované geoinformatiky Rekurze. a kartografie, Přírodovědecká fakulta UK.) 28 / 86

29 Převod čísla mezi polyadickými soustavami 28. Algoritmus převodu (rekurzivní) Opakované hledání b = a%z pro převáděné číslo: Iterace realizována rekurzí. public void convertnumber(int a, int z) { if (a == 0) return; else { int b = a % b; System.out.println(b); convertnumber ( a / z, b ); } } Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované geoinformatiky Rekurze. a kartografie, Přírodovědecká fakulta UK.) 29 / 86

30 Převod čísla mezi polyadickými soustavami 29. Prvočíslo (1/2) Číslo d N dělí c N, pokud existuje k N takové, že c = kd. Označení d c. Vlastnosti: 1) Pro všechna c N platí 1 c a c c. 2) Pokud k c a c d pak k d. Číslo c N prvočíslem, pokud pro každá a N a b N platí c (a b) c a c b. Alternativně c : a c b c a = c b = 1 a = 1 b = c. Číslo c N je složené, pokud není prvočíslo. 3) Pro a Z, a > 0, c, a < c 2a. 4) MFV: Pro a Z, c, 0 < a < c, c (a c a). Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované geoinformatiky Rekurze. a kartografie, Přírodovědecká fakulta UK.) 30 / 86

31 Převod čísla mezi polyadickými soustavami 30. Prvočíslo (2/2) Počet prvočísel π(n) na intervalu [2, N] Hustota prvočísel π(10) = 4, π(100) = 25. Složené číslo c = a b ρ(n) = π(n) N N ln N. c : a c b c a 2 b c/2 a c/2 b 2. Pokud a b a = c. Díky komutativitě symetrie: c = ab = ba. Příklad: 36 = 2 * 13 = 4 * 9 = 6 * 6 = 9 *4 = 13 *2. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované geoinformatiky Rekurze. a kartografie, Přírodovědecká fakulta UK.) 31 / 86

32 Převod čísla mezi polyadickými soustavami 31. Největší společný dělitel (1/2) Největší společný dělitel d, d Z, čísel a Z, b Z d = gcd(a, b) : d a d b. Pokud a, b nesoudělná, pak gcd(a, b) = 1. Dělení se zbytkem a beze zbytku b a = r a = kb + r, b a = 0 a = kb. Necht a Z, b Z, pak a = kd, b = ld. Rozdíl čísel je také dělitelný d = a b = d(k l), a = b +, platí gcd(a, b) = gcd(b, ). Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované geoinformatiky Rekurze. a kartografie, Přírodovědecká fakulta UK.) 32 / 86

33 32. Největší společný dělitel (2/2) Převod čísla mezi polyadickými soustavami Výše uvedený princip použit u Eukleidova algoritmu gcd(a b, b) = gcd(a, b), po k krocích gcd(0, b) = gcd(a, b). Předpoklad a > b, opakujeme, dokud a > 0. Výhodou je velmi jednoduchá implementace. do if a < b. swap a b. a a b. while a > 0 d b Rekurzivní verze na cvičení. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované geoinformatiky Rekurze. a kartografie, Přírodovědecká fakulta UK.) 33 / 86

34 33. Vylepšení algoritmu (1/2) Převod čísla mezi polyadickými soustavami Pro velké a, b cyklus může běžet relativně dlouho. Místo a a b použijeme a a mb, m Z. Platí Algoritmus: do if a < b. swap a b. a a%b. while a > 0 d b a mb = a a/b b = a%b. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované geoinformatiky Rekurze. a kartografie, Přírodovědecká fakulta UK.) 34 / 86

35 34. Vylepšení algoritmu (2/2) Převod čísla mezi polyadickými soustavami Nemusíme prohazovat a b. Předpoklad b a%b. Do a přiřadíme max(b, a%b). Do b přiřadíme min(b, a%b). Algoritmus: do a b; b a%b; while b > 0; Upravená testovací podmínka, protože a b. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované geoinformatiky Rekurze. a kartografie, Přírodovědecká fakulta UK.) 35 / 86

36 35. Rekurzivní řešení Převod čísla mezi polyadickými soustavami int gcd (int a, int b) { if (a==0 b== 0 ) return -1; } if ( a%b > 0) return gcd (b, a % b); else return b; Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované geoinformatiky Rekurze. a kartografie, Přírodovědecká fakulta UK.) 36 / 86

37 Binární hledání 36. Binární hledání Předpokladem je uspořádaná vstupní množina (tj. setříděná dle hodnot prvků). Použití při opakovaném hledání nad množinou, jejíž prvky se často nemění. Složitost hledání O(log 2 (N)), setřídění O(N log 2 (N)), celkově O(N log 2 (N)). Princip: V každém kroku rozdělení vstupní množiny na dvě poloviční definované prostřednictvím dvojice krajních indexů. Indexy tvoří posloupnost {N/2, N/4, N/8,..., 1}. Test, ve které z podmnožin hledaný prvek leží. Pro N=1 přímý test, v ostatních případech rekurzivní dělení. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované geoinformatiky Rekurze. a kartografie, Přírodovědecká fakulta UK.) 37 / 86

38 Binární hledání 37. Binární hledání, nerekurzivní řešení int bsearch( int a, int [] x) { int l = 0, r = x.length - 1; while (l <= r){ int m = (l + r)/ 2 //Index prostredniho prvku if (a == x[m]) return m; //Byl prvek nalezen? } if (a > x[m]) l = m + 1; // Inkrementuj levy index else r = m - 1; //Dekrementuj pravy index } return -1; Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované geoinformatiky Rekurze. a kartografie, Přírodovědecká fakulta UK.) 38 / 86

39 Binární hledání 38. Binární hledání, rekurzivní řešení int bsearch( int a, int [] numbers, int l, int r) { if (l > r) return -1; //Prazdny interval int m = (l + r)/2; //Index prostredniho prvku if (a == x[m]) return m; //Cislo nalezeno v mnozine } else if ( a < x[m] ) return bsearch(a, x, i, m - 1); //Leva podmnozina else return bsearch(a, x, m + 1, j ); //Prava podmnozina Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované geoinformatiky Rekurze. a kartografie, Přírodovědecká fakulta UK.) 39 / 86

40 Úloha Hanojských věží 39. Problém Hanojských věží Mniši v Tibetu řeší zajímavý hlavolam tvořený třemi tyčemi. Na první tyči navlečeno 64 kroužků seřazených dle velikosti, největší dole, nejmenší nahoře. Každý den přesunou jeden kroužek z jedné tyče na druhou tak, aby se kroužek o větším průměru nikdy nevyskytl na kroužku o menším průměru. Až přemístí všechny kroužky z první tyče na třetí tak, aby kroužek o menším průměru ležel na kroužku o větším průměru, zanikne svět. Poznámka: Nastane za = dní let (51 biliard let). Plánovaná doba existence sluneční soustavy je miliardkrát kratší. Netřeba mít strach :-). Problém lze řešit rekurzí. Počet kroužků n. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované geoinformatiky Rekurze. a kartografie, Přírodovědecká fakulta UK.) 40 / 86

41 40. Ukázka řešení pro n = 2 Úloha Hanojských věží První kroužek přesuneme z 1. na 2. tyč. Druhý kroužek přesuneme z 1. na 3. tyč. První kroužek přesuneme z 2. na 3. tyč. Celkem přesunů. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované geoinformatiky Rekurze. a kartografie, Přírodovědecká fakulta UK.) 41 / 86

42 41. Ukázka řešení pro n = 3 Úloha Hanojských věží Celkem přesunů. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované geoinformatiky Rekurze. a kartografie, Přírodovědecká fakulta UK.) 42 / 86

43 Úloha Hanojských věží 43. Rozbor problému Tah h s n kroužky z i na j přes k h n (i, j, k). Dva kroužky, n = 2: h 2 (1, 3, 2) = {h 1 (1, 2, 3), h 1 (1, 3, 2), h 1 (2, 3, 1)}. Tři kroužky, n = 3: h 3 (1, 3, 2) = {h 1 (1, 3, 2), h 1 (1, 2, 3), h 1 (3, 2, 1), h 1 (1, 3, 2), h 1 (2, 1, 3), h 1 (2, 3, 1), h 1 (1, 3, 2)}, = {h 2 (1, 2, 3), h 1 (1, 3, 2), h 2 (2, 3, 1)}. Zobecnění h n (1, 3, 2) = {h n 1 (1, 2, 3), h 1 (1, 3, 2), h n 1 (2, 3, 1)}. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované geoinformatiky Rekurze. a kartografie, Přírodovědecká fakulta UK.) 43 / 86

44 Úloha Hanojských věží 44. Řešení rekurze pro n prvků Základní myšlenka rekurzivního přístupu pro n prvků tvořena 3 kroky: přemístíme n 1 kroužků z první tyče (zdrojové) na druhou tyč (pomocnou) -> rekurze. přemístíme 1 kroužek z první tyče (zdrojové) na třetí tyč (cílovou). přemístíme n 1 kroužků z druhé tyče (pomocné) na třetí (cílovou) -> rekurze. Kroky 1) a 3) řeší stejnou úlohu avšak s jinými tyčemi a menším množstvím prvků. Kroky 1) a 3) lze rekurzivně dále rozložit stejným způsobem jako výchozí úlohu Úloha je dekomponovatelná na úlohy stejného typu. V každém kroku se velikost množiny zmenšuje, pro řešení lze využít rekurzi. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované geoinformatiky Rekurze. a kartografie, Přírodovědecká fakulta UK.) 44 / 86

45 45. Zápis zdrojového kódu Úloha Hanojských věží goid hanoi(int n, int o, int k, int p) { } if (n==0) return; //Ukonceni rekurze, neni co presouv hanoi(n-1, o, p, k); //Presun 1-2 System.out.println( Z + o + na + k); hanoi(n-1, p, k, o); //Presun 2-3 Volání: hanoi(3,1,3,2); Počet rekurzivních volání: 2 n 1. Velmi neefektivní, max 20 kroužků. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované geoinformatiky Rekurze. a kartografie, Přírodovědecká fakulta UK.) 45 / 86

46 Úloha Hanojských věží 46. Znázornění stromu rekurzivních volání Tomáš Bayer (Katedra aplikované geoinformatiky Rekurze. a kartografie, Přírodovědecká fakulta UK.) 46 / 86

47 Úloha Hanojských věží 47. Znázornění posloupnosti rekurzivních volání Tomáš Bayer (Katedra aplikované geoinformatiky Rekurze. a kartografie, Přírodovědecká fakulta UK.) 47 / 86

48 48. QuickSort Příklady použití rekurze QuickSort Třídící algoritmus založený na principu rozděl a panuj. Velmi rychlý pro většinu typů vstupních dat, rychlost ovlivňuje prohazování prvků na velké vzdálenosti. Lze řešit prostřednictvím rekurze. Tříděná posloupnost prvků: {x 1,..., x n }. Princip algoritmu QuickSort: 1 V prvním kroku je zvolena střední hodnota x, tzv. pivot (medián, modus, náhodně). 2 Posloupnost je uspořádána rozdělením na dvě části tak, že levá část obsahuje prvky x i < x, pravá část prvky x i > x. 3 Každá z těchto částí je stejným způsobem rekurzivně rozdělena. 4 Počty úseků se s každým dělením zdvojnásobují, délky úseků (tj. počty prvků) snižují na polovinu. 5 Dělení provádíme tak dlouho, dokud délky úseků nejsou rovny jedné. Problém lze opět řešit rekurzí: zmenšování množiny a dekompozice na problémy stejné třídy. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované geoinformatiky Rekurze. a kartografie, Přírodovědecká fakulta UK.) 48 / 86

49 QuickSort 49. Pseudokód algoritmu QuickSort QuickSort(double [] pole, int levy, int pravy) { } int mid =(int)(0.5 * ( l + p ) ); //Prostredni prvek /* Vlastni trideni, probrano pozdeji */ QuickSort(pole, levy, mid -1); //Setrideni leve polovin QuickSort(pole,mid + 1, pravy); //Setrideni prave polov Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované geoinformatiky Rekurze. a kartografie, Přírodovědecká fakulta UK.) 49 / 86

50 QuickSort 50. Ukázka činnosti algoritmu QuickSort Tomáš Bayer (Katedra aplikované geoinformatiky Rekurze. a kartografie, Přírodovědecká fakulta UK.) 50 / 86

51 51. QuickSort, strom pivotů QuickSort Tomáš Bayer (Katedra aplikované geoinformatiky Rekurze. a kartografie, Přírodovědecká fakulta UK.) 51 / 86

52 52. Binární strom Příklady použití rekurze Binární stromy Vlastnosti binárního stromu: Acyklický graf. Uzly stupně n = 2. Každý uzel má dva potomky: levý podstrom a pravý podstrom. Existuje právě jeden uzel, do kterého nevstupuje žádná hrana. Do každého uzlu existuje právě jedna cesta. Využití pro rychlé vyhledávání, indexace, komprese,... Kořen: uzel, do kterého nevstupuje žádná hrana, nemá předchůdce (1). List: uzel, který nemá potomka. Vnitřní uzly: uzly, které nejsou kořenem či potomkem. Každý vnitřní uzel stromu je kořenem podstromu (podmnožina stromu). Operace nad stromem lze dekomponovat na operace stejného typu nad menší množinou lze efektivně řešit prostřednictvím rekurze. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované geoinformatiky Rekurze. a kartografie, Přírodovědecká fakulta UK.) 52 / 86

53 Binární stromy 53. Uzly v binárním stromu uzel A=kořen, uzly B-G=vnitřní uzly, uzly H-N=listy. uzel B= kořen stromu {B,D,E,H,I,J}. uzel E=kořen stromu {E,I,J}. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované geoinformatiky Rekurze. a kartografie, Přírodovědecká fakulta UK.) 53 / 86

54 54. Binární vyhledávací strom Binární stromy Datová struktura, která se používá pro rychlé ukládání a vyhledávání dat. Uspořádání dat ve vyhledávacím stromu: každá hodnota se ve vyhledávacím stromu smí vyskytnout pouze jednou pro každý uzel U platí, že všechny údaje v levém podstromu jsou menší než U a všechny údaje v pravém podstromu větší než U. Operace nad takovým stromem lze realizovat se složitostí O(lg(N)). Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované geoinformatiky Rekurze. a kartografie, Přírodovědecká fakulta UK.) 54 / 86

55 Binární stromy 55. Operace nad binárním vyhledávacím stromem Základní operace nad binárním stromem: Vytvoření prázdného stromu. Přidání uzlu. Procházení uzlu: PREORDER, INORDER, POSTORDER. Nalezení uzlu. Smazání stromu. Smazání uzlu. Implementace rekurzivní datovou strukturou, odkazuje na prvky stejného typu. public class Uzel { int data; Uzel levy; //Odkaz na levy podstrom Uzel pravy; //Odkaz na pravy podstrom } Další podrobnosti a operace podrobně probrány v letním semestru. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované geoinformatiky Rekurze. a kartografie, Přírodovědecká fakulta UK.) 55 / 86

56 Binární stromy 56. Procházení binárního stromu 3 základní metody procházení binární stromu: Přímé zpracování (PREORDER): Nejprve zpracován kořen, poté levý podstrom, nakonec pravý podstrom. Vnitřní zpracování (INORDER): Nejprve zpracován levý podstrom, poté kořen, nakonec pravý podstrom. Zpětné zpracování (POSTORDER): Nejprve zpracován levý podstrom, poté pravý podstrom, nakonec kořen. Ukázka zpracování PREORDER: public void preorder(uzel u) { if (u==null) return; else { System.out.println(u.data); //1. koren preorder(u.levy); //2. levy podstrom preorder(u.pravy); //3. pravy podstrom } } Princip zpracování stejný, liší se však pořadím prováděných operací. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované geoinformatiky Rekurze. a kartografie, Přírodovědecká fakulta UK.) 56 / 86

57 Kartografická generalizace 57. Douglas&Peucker algoritmus Používá se pro generalizaci lomených čar. Na rozdíl od běžných algoritmů neodstraňuje z lomené čáry vrcholy nesplňující geometrickou podmínku, ale přidává do ní vrcholy splňující geometrickou podmínku. Provádí opakované dělení vstupní množiny na menší podmnožiny. V každém kroku dochází ke zjednodušení problému, lze implementovat jako rekurzivní algoritmus. Postup Douglas-Peuckerova algoritmu: Lomená čára L, generalizovaná lomená čára G, parametr generalizačního algoritmu: koridor o šířce h. Přidání počátečního a koncového bodu z L do G. Lomená čára v prvním kroku nahrazena úsečkou. Nalezení bodu Q nejvzdálenějšího od segmentu G takového, který leží vně koridoru o šířce h. Přidání Q do G. Nad každým segmentem G opakuj 2) a 3), dokud existuje nějaký bod vně koridoru. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované geoinformatiky Rekurze. a kartografie, Přírodovědecká fakulta UK.) 57 / 86

58 Kartografická generalizace 58. Ukázka Douglas-Peuckerova algoritmu Tomáš Bayer (Katedra aplikované geoinformatiky Rekurze. a kartografie, Přírodovědecká fakulta UK.) 58 / 86

59 Kartografická generalizace 59. Implementace Douglas-Peuckerova algoritmu void dp(double corridor, Polyline input, Polyline output, int start, int end) { if ( end = start + 1 ) return; //Zadny mezilehly bod int index_max = start + 1; //Inicializace double d_max = distance(input[start],input[end], input[start + 1]); } for (int i = start + 2; i < end, i++ ) { //Hledani nejvzdalenejsiho bodu double di=distance(input[start],input[end], input[start + 1]); if (di > d_max) { index_max = i; d_max = di; } } if (d_max >= corridor) { //Rekurze nad obema segmenty dp(corridor, input, start, index_max); dp(corridor, input, index_max, end); output polyline.add(input[index_max]); //Pridani bodu do seznamu } Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované geoinformatiky Rekurze. a kartografie, Přírodovědecká fakulta UK.) 59 / 86

60 Kartografická generalizace 60. Strom rekurzivního volání Douglas-Peuckerova algoritmu Znázornění situace ze str. 57. Lomená čára tvořená posloupností bodů {P 1,..., P 14 }. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované geoinformatiky Rekurze. a kartografie, Přírodovědecká fakulta UK.) 60 / 86

61 Jednoduchá kresba s využitím rekurze 61. Kresba vepsaných čtverců rekurzí Nakreslete posloupnost vepsaných čtverců s použitím rekurze. Délku počáteční hrany označme d. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované geoinformatiky Rekurze. a kartografie, Přírodovědecká fakulta UK.) 61 / 86

62 Jednoduchá kresba s využitím rekurze 62. Rozbor problému Lze problém řešit prostřednictvím rekurze? Úloha je dekomponovatelná na úlohy stejné třídy: kresba čtverců daných vrcholy. V dalším kroku rekurze nedochází k zesložitění problému. Lze snadno stanovit podmínku ukončení rekurze: velikost strany menší než ε. Existuje několik variant řešení problému: Konstrukce po čtvercích: v jednom kroku zkonstruován jeden čtverec. Konstrukce po dvojicích čtverců: v jednom kroku zkonstruována dvojice čtverců. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované geoinformatiky Rekurze. a kartografie, Přírodovědecká fakulta UK.) 62 / 86

63 63. Znázornění konstrukce Jednoduchá kresba s využitím rekurze Vlevo konstrukce po čtvercích, vpravo konstrukce po dvojicích čtverců. Čtverce konstruované v jednom kroku znázorněny stejnou barvou. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované geoinformatiky Rekurze. a kartografie, Přírodovědecká fakulta UK.) 63 / 86

64 64. Konstrukce po čtvercích Jednoduchá kresba s využitím rekurze Vrcholy čtverce v i-tém rekurzivním kroku: P (i) 1, P(i) 2, P(i) 3, P(i) 4. P (i) 1 = [x (i) 1, y (i) 1 ], P(i) 2 = [x (i) 2, y (i) 2 ], P(i) 3 = [x (i) 3, y (i) 3 ], P(i) 4 = [x (i) 4, y (i) 4 ]. Vrcholy čtverce v i + 1-tém rekurzivním kroku: P (i+1) 1, P (i+1) 2, P (i+1) 3, P (i+1) 4. P (i+1) 1 = [x (i+1) 1, y (i+1) 1 ], P (i+1) 2 = [x (i+1) 2, y (i+1) 2 ], P (i+1) 3 = [x (i+1) 3, y (i+1) 3 ], P (i+1) 4 = [x (i+1) 4, y (i+1) 4 ]. Jaký je vztah mezi souřadnicemi vrcholů dvou čtverců v různých úrovních rekurze i a i + 1: P (i+1) 1 x (i+1) P (i+1) 2 x (i+1) P (i+1) 3 x (i+1) P (i+1) 4 x (i+1) 1 = x(i) 1 +x(i) 2 y (i+1) 2 1 = y(i) 1 +y(i) = x(i) 2 +x(i) 3 y (i+1) 2 2 = y(i) 2 +y(i) = x(i) 3 +x(i) 4 y (i+1) 2 3 = y(i) 3 +y(i) = x(i) 4 +x(i) 1 y (i+1) 2 4 = y(i) 4 +y(i) 1 2 Podmínka ukončením rekurze: délka strany nenatočenéjo čtverce menší než ε. Tomáš Bayer bayertom@natur.cuni.cz (Katedra(i) aplikované (i) geoinformatiky Rekurze. (i) a kartografie, (i) Přírodovědecká fakulta UK.) 64 / 86

65 65. Zápis zdrojového kódu Jednoduchá kresba s využitím rekurze void ctverec (int x1,int y1,int x2,int y2,int x3,int y3,int x4, int y4) { } //Podminka ukonceni rekurze if ((x2-x1>0) (y2-y1>0)) //Pouze pro cela cisla { } Volání funkce: //Kresba ctverce MoveTo(x1,y1); //Presun pero LineTo(x2,y2); //Nakresli usecku LineTo(x3,y3); //Nakresli usecku LineTo(x4,y4); //Nakresli usecku LineTo(x1,y1); //Nakresli usecku //Kresli dalsi ctverec ctverec((x1+x2)/2,(y1+y2)/2,(x2+x3)/2, (y2+y3)/2, (x3+x4)/2,(y3+y4)/2,(x4+x1)/2,(y4+y1)/2); ctverec (0,0,d,0,d,d,0,d); Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované geoinformatiky Rekurze. a kartografie, Přírodovědecká fakulta UK.) 65 / 86

66 66. Konstrukce po dvojicích čtverců Jednoduchá kresba s využitím rekurze Vztah mezi vrcholy čtverců z kroků (i) a (i + 1). Počátek souřadnicového sytému v P 1. Orientace os: x P 1, P 2, y P 1, P 4. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované geoinformatiky Rekurze. a kartografie, Přírodovědecká fakulta UK.) 66 / 86

67 67. Konstrukce po dvojicích čtverců Jednoduchá kresba s využitím rekurze Vrcholy čtverců v i-tém rekurzivním kroku: P (i) 1, P(i) 2, P(i) 3, P(i) 4 (vnější čtverec) a P (i) 5, P(i) 6, P(i) 7, P(i) 8 (vnitřní čtverec): P (i) 1 x (i) y (i) P (i) 5 x (i) + d 2 y (i) P (i) 2 x (i) + d y (i) P (i) 6 x (i) + d y (i) + d 2 P (i) 3 x (i) + d y (i) + d P (i) 7 x (i) + d 2 y (i) + d P (i) 4 x (i) y (i) + d P (i) 8 x (i) y (i) + d 2 Vrcholy čtverců v i + 1-tém rekurzivním kroku posunuty o hodnotu ± d, velikost strany 4 se zmenší na polovinu d (i+1) = d(i). 2 P (i+1) 1 x (i) 1 + d y (i) d P (i+1) 4 5 x (i+1) 1 + d 2 y (i+1) 1 P (i+1) 2 x (i) 2 d 4 y (i) 2 + d 4 P (i+1) 6 x (i+1) 1 + d y (i+1) 1 + d 2 P (i+1) 3 x (i) 3 d 4 y (i) 3 d 4 P (i+1) 7 x (i+1) 1 + d 2 y (i+1) 1 + d P (i+1) 4 x (i) 4 + d 4 y (i) 4 d 4 P (i+1) 8 x (i+1) 1 y (i+1) 1 + d 2 Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované geoinformatiky Rekurze. a kartografie, Přírodovědecká fakulta UK.) 67 / 86

68 68. Zápis zdrojového kódu Jednoduchá kresba s využitím rekurze void ctverec (int x,int y,int d) { } if(d>0) { } //Podminka ukonceni rekurze //Kresba ctverce 1 MoveTo(x,y); //Presun pero LineTo(x+d,y); //Nakresli usecku LineTo(x+d,y+d); //Nakresli usecku LineTo(x,y+d); //Nakresli usecku LineTo(x,y); //Nakresli usecku //Kresba ctverce 2 MoveTo(x+d/2,y); //Presun pero LineTo(x+d,y+d/2); //Nakresli usecku LineTo(x+d/2,y+d); //Nakresli usecku LineTo(x,y+d/2); //Nakresli usecku LineTo(x+d/2,y); //Nakresli usecku //Rekurzivni volani funkce ctverec(x+d/4,y+d/4, d/2) Volání funkce: Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované geoinformatiky Rekurze. a kartografie, Přírodovědecká fakulta UK.) 68 / 86

69 69. Konstrukce spirály rekurzí Zkonstruujte za použití rekurze spirálu. Délka spirály d, zkrácení spirály d. Jednoduchá kresba s využitím rekurze Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované geoinformatiky Rekurze. a kartografie, Přírodovědecká fakulta UK.) 69 / 86

70 Jednoduchá kresba s využitím rekurze 70. Rozbor problému Lze problém řešit prostřednictvím rekurze? Úloha je dekomponovatelná na úlohy stejné třídy: opakovaná konstrukce jednoho závitu spirály tvořeného 4 úsečkami. V dalším kroku rekurze nedochází k zesložitění problému. Podmínka ukončení rekurze: d d <= 0. Možné řešení problému: Zkonstruujeme jeden závit spirály tvořený 4 segmenty. Délky prvního a druhého segmentu d, délka třetího a čtvrtého segmentu d d. Stejným způsobem rekurzí zkonstruujeme další závity. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované geoinformatiky Rekurze. a kartografie, Přírodovědecká fakulta UK.) 70 / 86

71 71. Znázornění spirály Jednoduchá kresba s využitím rekurze Vztah mezi závity z i-tého a i + 1 kroku. Počátek souřadnicového sytému v P 1. Orientace os: x P 1, P 2, y P 1, P 4. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované geoinformatiky Rekurze. a kartografie, Přírodovědecká fakulta UK.) 71 / 86

72 72. Konstrukce spirály Jednoduchá kresba s využitím rekurze Vrcholy závitu v i-tém rekurzivním kroku: P (i) 1, P(i) 2, P(i) 3, P(i) 4. Délka d (i). P (i) 1 x (i) 1 + d (i) y (i) 1 P (i) 2 x (i) 2 + d (i) y (i) 2 + d (i) P (i) 3 x (i) 3 + d (i) y (i) 3 + d (i) P (i) 4 x (i) 4 + d y (i) 4 + d (i) Nová poloha vrcholu P (i+1) 1 = P 1 + d. Změna délky segmentu závitu d (i+1) = d (i) 2 d. Vrcholy závitu v i-tém rekurzivním kroku: P (i+1) 1, P (i+1) 2, P (i+1) 3, P (i+1) 4. P (i+1) 1 x (i) 1 + d (i) y P (i+1) 2 x (i) 2 d (i) y P (i+1) 3 x (i) 3 P (i+1) 4 x (i) d 2 + d d (i) y 3 d + d (i) y 4 d Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované geoinformatiky Rekurze. a kartografie, Přírodovědecká fakulta UK.) 72 / 86

73 73. Zápis zdrojového kódu Jednoduchá kresba s využitím rekurze void spirala(int x, int y, int d, int diff) { //Test ukonceni rekurze? if (d-diff>0) { LineTo(x,y); LineTo(x+d,y); LineTo(x+d,y+d); LineTo(x+diff,y+d); } } Volání funkce: //Rekurzivni volani spiraly spirala(x+diff,y+diff, d-2*diff,diff) spirala(0,0,200,5); Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované geoinformatiky Rekurze. a kartografie, Přírodovědecká fakulta UK.) 73 / 86

74 74. Kochova vločka Příklady použití rekurze Konstrukce Kochovy vločky rekurzí Autorem Niels Fabian Helge von Koch. Patří mezi první objevené fraktální křivky. Geometrický útvar vzniklý opakovaným rekurzivním dělením rovnostranného trojúhelníku. Princip konstrukce: Každá ze stran trojúhelníku rozdělena na třetiny. Nad prostřední stranou vytvořen nový rovnostranný trojúhelník, jehož vrchol leží vně původního trojúhelníku. Z nového rovnostranného trojúhelníku odstraněna základna a pokračuje se bodem 1. Kochova vločka vznikne opakováním tohoto postupu n krát. Délka d Kochovy vločky se s každým krokem prodlouží o 1, celková délka Kochovy 3 vločky Pro n dělení platí d = ( 4 3 )n. lim (d) =. n Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované geoinformatiky Rekurze. a kartografie, Přírodovědecká fakulta UK.) 74 / 86

75 75. Kochova vločka Příklady použití rekurze Konstrukce Kochovy vločky rekurzí Kochova vločka pro n = 1, n = 2, n = 3, n = 4. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované geoinformatiky Rekurze. a kartografie, Přírodovědecká fakulta UK.) 75 / 86

76 Konstrukce Kochovy vločky rekurzí 76. Postup konstrukce Kochovy vločky Rekurzivní dělení prováděno nad každou ze tří stran trojúhelníku. Známy souřadnice koncových bodů P 1 = [x 1, y 1 ], P 2 = [x 2, y 2 ] strany trojúhelníku. Určujeme souřadnice bodů P 3, P 4, P 5 tvořící koncové body nových segmentů. V každém kroku vznikají čtyři nové segmenty, výsledkem strom čtvrtého stupně. Směrový vektor u, normálový vektor n, n u. ( ) ( ) x2 x u = 1 n y2 y = 1 y 2 y 1 x 1 x 2 Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované geoinformatiky Rekurze. a kartografie, Přírodovědecká fakulta UK.) 76 / 86

77 77. Výpočet souřadnic vrcholů Konstrukce Kochovy vločky rekurzí Souřadnice bodů P 1, P 2, P 3 ( x3 ) y 5 ( 3 x5 ) y 4 ( x4 ) = = = ( ) x1 + 1 ( ) x2 x 1 y 1 3 y 2 y 1 ( ) x1 + 2 ( ) x2 x 1 y 1 3 y 2 y 1 ( ) ( ) 1 x1 + x 2 y2 y + α 1, kde α (0, 1). 2 y 1 + y 2 x 1 x 2 Výška h v P 4, P 5, Q Parametr α Bod P 4 h = d 2 α = h n 9 d2 36 = d 2 3. = d 2 3d = ( ) [( ) x4 1 x1 + x = ( )] y2 y 1. y 4 2 y 1 + y 2 3 x 1 x 2 Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované geoinformatiky Rekurze. a kartografie, Přírodovědecká fakulta UK.) 77 / 86

78 Konstrukce Kochovy vločky rekurzí 78. Zápis zdrojového kódu void koch(double x1,double y1, double x2,double y2, int n) { if (n>1) { } else //Podminka ukonceni rekurze //Strana 1 koch(x1,y1,x1+(x2-x1)/3,y1+(y2-y1)/3,n-1); //Strana2 koch(x1+(x2-x1)/3,y1+(y2-y1)/3,(x1+x2)/2+2*sqrt(3)* (y2-y1),(y1+y2)/2+2*sqrt(3)*(x1-x2),n-1); //Strana 3 koch((x1+x2)/2+2*sqrt(3)*(y2-y1),(y1+y2)/2+2* sqrt(3)*(x1-x2),x1+2*(x2-x1)/3,y1+2*(y2-y1)/3,n-1); //Strana 4 koch(x1+2*(x2-x1)/3,y1+2*(y2-y1)/3,n-1); { //Kresba usecky MoveTo(x1,y1); LineTo(x2,y2); } Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované geoinformatiky Rekurze. a kartografie, Přírodovědecká fakulta UK.) 78 / 86

79 79. Vhodnost/nevhodnost rekurze Vhodnost/nevhodnost rekurze Při práci s rozsáhlými daty jsou rekurzivní algoritmy neefektivní, značné nároky na pamět. Lze ji použít, pokud počet rekurzivních volání roste lineárně: funkce by měla obsahovat pouze jedno rekurzivní volání sama sebe. Pro každé rekurzivní volání vytvoření nové sady lokálních proměnných, jejich uložení do zásobníku a následné vyjmutí (značná hw. režie). Nevhodná změna hodnoty proměnné ovlivňující ukončení rekurze způsobí nekonečnou rekurzi. Pro rozsáhlé datové soubory může dojít pamět dříve, než nalezeno řešení. Stručný, ale nepříliš přehledný kód, někdy není jasné, co algoritmus dělá. Používá se u řešení problémů, kde není známo nerekurzivní řešení. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované geoinformatiky Rekurze. a kartografie, Přírodovědecká fakulta UK.) 79 / 86

80 Převod rekurze na iteraci 80. Převod rekurze na iteraci Cílem zefektivnění algoritmu, zejména snížení nároků na pamět. Každý rekurzivní algoritmus lze přepsat na iterační. U některých jazyků jediná možnost k provádění iterace představuje rekurze (nepoužívají cykly). Možnosti převodu rekurze na iteraci: Jednoduchá rekurze Náhrada jedním cyklem (preference) či využití zásobníku popř. kombinace. Vícenásobná rekurze Každé rekurzivní volání reprezentováno samostatným vnořeným cyklem nebo využití zásobníku. Zásobník zpravidla používán pro složitější problémy, kde použití pouze cyklů nepřehledné. Pro běžné typy problémů řešených rekurzí existují tzv. rekurzivní schémata: řešení problémů bez rekurze. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované geoinformatiky Rekurze. a kartografie, Přírodovědecká fakulta UK.) 80 / 86

81 Převod rekurze na iteraci 81. Odstranění jednoduché rekurze zásobníkem Kombinace zásobníku (Stacku) + cyklu. Dva kroky: Převod lokálních proměnných na globální. Lokální proměnné procedury/funkce převedeny na globální vzhledem k rekurzivní funkci. Převod rekurze bez lokálních proměnných na iteraci. Rekurzivní podmínka převedena na řídící podmínku cyklu Proměnné a mezivýsledky přidávány do zásobníku a následně dopočítávány jako při zpětné rekurzi. Nevýhodou velká režie spojená se zásobníkem, hardwarově náročné. Preferujeme cykly, pokud je to možné. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované geoinformatiky Rekurze. a kartografie, Přírodovědecká fakulta UK.) 81 / 86

82 Převod rekurze na iteraci 82. Jednoduchá rekurzivní funkce & Stack f (n) //Rekurzivni funkce: prima rekurze { Stack S; S.push(D(n)); //Hodnota D pro n i = n; //Ridici promenna cyklu while (i == podminka) { C i ; //Blok prikazu, fce n sestupne res_old = S.pop(); //Vyjme predchozireseni res = D(i,res_old) //Aktualizace reseni S.push(res) //Pridani noveho reseni E n i ; //Blok prikazu, fce n vzestupne i--; //Dekrementace i } } Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované geoinformatiky Rekurze. a kartografie, Přírodovědecká fakulta UK.) 82 / 86

83 Převod rekurze na iteraci 83. Fibonacciho čísla zásobníkem fib (n) { Stack s; S.push (0); S.push (1); while (n > 1) { int fi = S.pop(); //i-ty clen int fi_1= S.pop(); //i-1 clen int fii = fi + fi_1; //i+1 clen S.push(fi); //Pridani jako i-1 clenu S.push(fii); //Pridani jako i clenu n--; } Opět neefektivní, v každé iteraci dvojí přidávání a výběr ze zásobníku. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované geoinformatiky Rekurze. a kartografie, Přírodovědecká fakulta UK.) 83 / 86

84 Převod rekurze na iteraci 84. Rekurzivní schémata Řada návrhů algoritmů vede k jejich rekurzivní implementaci. Základní rekurzivní implementace většiny algoritmů jsou podobné, vedou ke vzniku rekurzivních schémat. Nejčastější rekurzivní schémata: schéma if-else: F = {G, if P then F } schéma while-do: F = {G, while P do F } V obou případech nemá smysl rekurzi používat, lze ji snadno nahradit iterací. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované geoinformatiky Rekurze. a kartografie, Přírodovědecká fakulta UK.) 84 / 86

85 Převod rekurze na iteraci 85. Rekurzivní schéma if-else Často používané rekurzivní schéma s jedním voláním. Náhrada úplné podmínky dvojicí cyklů. Nejprve vyřešena kladná část podmínky, v samostatném cyklu větev else. C () C() { { if (podminka(x)) int n = 0; { while (podminka(x)) A(x); { C(); A(x); B(x); n++; } } else D(x) D(x); } while (n--!=0) B(x); Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované geoinformatiky Rekurze. a kartografie, Přírodovědecká fakulta UK.) 85 / 86

86 Převod rekurze na iteraci 86. Rekurzivní schéma while-do Rekurzivní schéma s jedním voláním opakováno v cyklu, dokud splněna podmínka. Náhrada rekurze dvojicí cyklů + záměna cyklu while za do-while. C () C() { { while (podminka(x)) int n = 0; { do A(x); { C(); while (podminka(x)) B(x); { } A(x); D(x) n++; } } D(x); if (n==0) return; n--; B(x); } while (n!=0); Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované geoinformatiky Rekurze. a kartografie, Přírodovědecká fakulta UK.) 86 / 86

Dynamické datové struktury III.

Dynamické datové struktury III. Dynamické datové struktury III. Halda. Tomáš Bayer bayertom@natur.cuni.cz Katedra aplikované geoinformatiky a kartografie, Přírodovědecká fakulta UK. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované

Více

Dynamické datové struktury IV.

Dynamické datové struktury IV. Dynamické datové struktury IV. Prioritní fronta. Tomáš Bayer bayertom@natur.cuni.cz Katedra aplikované geoinformatiky a kartografie, Přírodovědecká fakulta UK. Tomáš Bayer bayertom@natur.cuni.cz (Katedra

Více

Úvod do programování 10. hodina

Úvod do programování 10. hodina Úvod do programování 10. hodina RNDr. Jan Lánský, Ph.D. Katedra informatiky a matematiky Fakulta ekonomických studií Vysoká škola finanční a správní 2015 Umíme z minulé hodiny Syntax Dvojrozměrné pole

Více

Rekurzivní algoritmy

Rekurzivní algoritmy Rekurzivní algoritmy prof. Ing. Pavel Tvrdík CSc. Katedra počítačových systémů Fakulta informačních technologií České vysoké učení technické v Praze c Pavel Tvrdík, 2010 Efektivní algoritmy (BI-EFA) ZS

Více

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

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 Stromy úvod 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 Neorientovaný strom Orientovaný strom Kořenový orientovaný

Více

Třídící algoritmy. Insert Sort. Bubble Sort. Select Sort. Shell Sort. Quick Sort. Merge Sort. Heap Sort.

Třídící algoritmy. Insert Sort. Bubble Sort. Select Sort. Shell Sort. Quick Sort. Merge Sort. Heap Sort. Třídící algoritmy. Insert Sort. Bubble Sort. Select Sort. Shell Sort. Quick Sort. Merge Sort. Heap Sort. Tomáš Bayer bayertom@natur.cuni.cz Katedra aplikované geoinformatiky a kartografie, Přírodovědecká

Více

Dynamické datové struktury I.

Dynamické datové struktury I. Dynamické datové struktury I. Seznam. Fronta. Zásobník. Tomáš Bayer bayertom@natur.cuni.cz Katedra aplikované geoinformatiky a kartografie, Přírodovědecká fakulta UK. Tomáš Bayer bayertom@natur.cuni.cz

Více

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

Rekurze. Pavel Töpfer, 2017 Programování 1-8 1 Rekurze V programování ve dvou hladinách: - rekurzivní algoritmus (řešení úlohy je definováno pomocí řešení podúloh stejného charakteru) - rekurzivní volání procedury nebo funkce (volá sama sebe přímo

Více

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

Prohledávání do šířky = algoritmus vlny 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é

Více

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

4. Rekurze. BI-EP1 Efektivní programování Martin Kačer 4. Rekurze BI-EP1 Efektivní programování 1 ZS 2011/2012 Ing. Martin Kačer, Ph.D. 2010-11 Martin Kačer Katedra teoretické informatiky Fakulta informačních technologií České vysoké učení technické v Praze

Více

5 Rekurze a zásobník. Rekurzivní volání metody

5 Rekurze a zásobník. Rekurzivní volání metody 5 Rekurze a zásobník Při volání metody z metody main() se do zásobníku uloží aktivační záznam obsahující - parametry - návratovou adresu, tedy adresu, kde bude program pokračovat v metodě main () po skončení

Více

Algoritmy a datové struktury

Algoritmy a datové struktury Algoritmy a datové struktury Stromy 1 / 32 Obsah přednášky Pole a seznamy Stromy Procházení stromů Binární stromy Procházení BS Binární vyhledávací stromy 2 / 32 Pole Hledání v poli metodou půlení intervalu

Více

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

DobSort. Úvod do programování. DobSort Implementace 1/3. DobSort Implementace 2/3. DobSort - Příklad. DobSort Implementace 3/3 DobSort Úvod do programování Michal Krátký 1,Jiří Dvorský 1 1 Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programování, 2004/2005 V roce 1980 navrhl Dobosiewicz variantu (tzv. DobSort),

Více

Dynamické datové struktury II.

Dynamické datové struktury II. Dynamické datové struktury II. Stromy. Binární vyhledávací strom. DFS. BFS. Tomáš Bayer bayertom@natur.cuni.cz Katedra aplikované geoinformatiky a kartografie, Přírodovědecká fakulta UK. Tomáš Bayer bayertom@natur.cuni.cz

Více

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

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 21. Vyhledávání doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava Prezentace ke dni 21. září 2018 Jiří Dvorský (VŠB TUO) Vyhledávání 242 / 433 Osnova přednášky

Více

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

Rekurze. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 12. Rekurze doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava Prezentace ke dni 12. září 2016 Jiří Dvorský (VŠB TUO) Rekurze 161 / 344 Osnova přednášky

Více

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

Řešení: PŘENESVĚŽ (N, A, B, C) = přenes N disků z A na B pomocí C 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

Více

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

8. Rekurze. doc. Ing. Jiří Vokřínek, Ph.D. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 8 1 Základy algoritmizace 8. Rekurze doc. Ing. Jiří Vokřínek, Ph.D. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Jiří Vokřínek,

Více

Úvod do informatiky. Miroslav Kolařík

Úvod do informatiky. Miroslav Kolařík Úvod do informatiky přednáška desátá Miroslav Kolařík Zpracováno dle R. Bělohlávek, V. Vychodil: Diskrétní matematika 2, http://phoenix.inf.upol.cz/esf/ucebni/dm2.pdf P. Martinek: Základy teoretické informatiky,

Více

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

Stromy. Jan Hnilica Počítačové modelování 14 Stromy Jan Hnilica Počítačové modelování 14 1 Základní pojmy strom = dynamická datová struktura, složená z vrcholů (uzlů, prvků) propojených hranami hrany chápeme jako orientované, tzn. vedou z uzlu A

Více

Struktura programu v době běhu

Struktura programu v době běhu Struktura programu v době běhu Miroslav Beneš Dušan Kolář Struktura programu v době běhu Vztah mezi zdrojovým programem a činností přeloženého programu reprezentace dat správa paměti aktivace podprogramů

Více

Stromy, haldy, prioritní fronty

Stromy, haldy, prioritní fronty Stromy, haldy, prioritní fronty prof. Ing. Pavel Tvrdík CSc. Katedra počítačů FEL České vysoké učení technické DSA, ZS 2008/9, Přednáška 6 http://service.felk.cvut.cz/courses/x36dsa/ prof. Pavel Tvrdík

Více

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

Reprezentace aritmetického výrazu - binární strom reprezentující aritmetický výraz Reprezentace aritmetického výrazu - binární strom reprezentující aritmetický výraz (2 + 5) * (13-4) * + - 2 5 13 4 - listy stromu obsahují operandy (čísla) - vnitřní uzly obsahují operátory (znaménka)

Více

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

1. Převeďte dané číslo do dvojkové, osmičkové a šestnáctkové soustavy: a) 759 10 b) 2578 10 Úlohy- 2.cvičení 1. Převeďte dané číslo do dvojkové, osmičkové a šestnáctkové soustavy: a) 759 10 b) 2578 10 2. Převeďte dané desetinné číslo do dvojkové soustavy (DEC -> BIN): a) 0,8125 10 b) 0,35 10

Více

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

5. přednáška - Rozklad problému na podproblémy 5. přednáška - Rozklad problému na podproblémy Obsah přednášky: Rozklad problému na podproblémy. Rekurze. Algoritmizace (Y36ALG), Šumperk - 5. přednáška 1 Rozklad problému na podproblémy Postupný návrh

Více

Rozklad problému na podproblémy

Rozklad problému na podproblémy Rozklad problému na podproblémy Postupný návrh programu rozkladem problému na podproblémy zadaný problém rozložíme na podproblémy pro řešení podproblémů zavedeme abstraktní příkazy s pomocí abstraktních

Více

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

A4B33ALG 2010/05 ALG 07. Selection sort (Select sort) Insertion sort (Insert sort) Bubble sort deprecated. Quicksort. A4B33ALG 2010/05 ALG 07 Selection sort (Select sort) Insertion sort (Insert sort) Bubble sort deprecated Quicksort Stabilita řazení 1 Selection sort Neseřazeno Seřazeno Start T O U B J R M A K D Z E min

Více

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

Náplň. v.0.03 16.02.2014. - Jednoduché příklady na práci s poli v C - Vlastnosti třídění - Způsoby (algoritmy) třídění Náplň v.0.03 16.02.2014 - Jednoduché příklady na práci s poli v C - Vlastnosti třídění - Způsoby (algoritmy) třídění Spojení dvou samostatně setříděných polí void Spoj(double apole1[], int adelka1, double

Více

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

NPRG030 Programování I, 2018/19 1 / :03:07 NPRG030 Programování I, 2018/19 1 / 20 3. 12. 2018 09:03:07 Vnitřní třídění Zadání: Uspořádejte pole délky N podle hodnot prvků Měřítko efektivity: * počet porovnání * počet přesunů NPRG030 Programování

Více

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

Základní datové struktury III: Stromy, haldy Základní datové struktury III: Stromy, haldy prof. Ing. Pavel Tvrdík CSc. Katedra počítačových systémů Fakulta informačních technologií České vysoké učení technické v Praze c Pavel Tvrdík, 2010 Efektivní

Více

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

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 12. Vyhledávání doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava Prezentace ke dni 12. září 2016 Jiří Dvorský (VŠB TUO) Vyhledávání 201 / 344 Osnova přednášky

Více

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

Stromy. Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta a kol. Stromy Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta a kol., 2018, B6B36DSA 01/2018, Lekce 9 https://cw.fel.cvut.cz/wiki/courses/b6b36dsa/start

Více

Časová a prostorová složitost algoritmů

Časová a prostorová složitost algoritmů .. Časová a prostorová složitost algoritmů Programovací techniky doc. Ing. Jiří Rybička, Dr. ústav informatiky PEF MENDELU v Brně rybicka@mendelu.cz Hodnocení algoritmů Programovací techniky Časová a prostorová

Více

Booleovská algebra. Booleovské binární a unární funkce. Základní zákony.

Booleovská algebra. Booleovské binární a unární funkce. Základní zákony. Booleovská algebra. Booleovské binární a unární funkce. Základní zákony. Tomáš Bayer bayertom@natur.cuni.cz Katedra aplikované geoinformatiky a kartografie, Přírodovědecká fakulta UK. Tomáš Bayer bayertom@natur.cuni.cz

Více

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

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 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 Umíme z minulé hodiny Implementace zásobníku a fronty pomocí

Více

Dynamicky vázané metody. Pozdní vazba, virtuální metody

Dynamicky vázané metody. Pozdní vazba, virtuální metody Dynamicky vázané metody Pozdní vazba, virtuální metody Motivace... class TBod protected: float x,y; public: int vrat_pocet_bodu() return 1; ; od třídy TBod odvodíme: class TUsecka: public TBod protected:

Více

Základní stavební prvky algoritmu

Základní stavební prvky algoritmu Základní stavební prvky algoritmu Podmínka. Cyklus for, while, do-while. Funkce, metody. Přetěžování. Tomáš Bayer bayertom@natur.cuni.cz Katedra aplikované geoinformatiky a kartografie, Přírodovědecká

Více

Rekurze a zásobník. Jak se vypočítá rekurzivní program? volání metody. vyšší adresy. main(){... fa(); //push ret1... } ret1

Rekurze a zásobník. Jak se vypočítá rekurzivní program? volání metody. vyšší adresy. main(){... fa(); //push ret1... } ret1 Rekurze a zásobník Jak se vypočítá rekurzivní program? volání metody vyšší adresy ret1 main(){... fa(); //push ret1... PC ret2 void fa(){... fb(); //push ret2... return //pop void fb(){... return //pop

Více

Prioritní fronta, halda

Prioritní fronta, halda Prioritní fronta, halda Priority queue, heap Jan Kybic http://cmp.felk.cvut.cz/~kybic kybic@fel.cvut.cz 2016 2018 1 / 26 Prioritní fronta Halda Heap sort 2 / 26 Prioritní fronta (priority queue) Podporuje

Více

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

Binární soubory (datové, typované) Binární soubory (datové, typované) - na rozdíl od textových souborů data uložena binárně (ve vnitřním tvaru jako v proměnných programu) není čitelné pro člověka - všechny záznamy téhož typu (může být i

Více

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

Základy algoritmizace c2005, 2007 Michal Krátký, Jiří Dvorský1/39 Základy algoritmizace Michal Krátký 1, Jiří Dvorský 1 1 Katedra informatiky VŠB Technická univerzita Ostrava Základy algoritmizace, 2006/2007 Základy algoritmizace c2005, 2007 Michal Krátký, Jiří Dvorský1/39

Více

ÚLOHY S POLYGONEM. Polygon řetězec úseček, poslední bod je totožný s prvním. 6 bodů: X1, Y1 až X6,Y6 Y1=X6, Y1=Y6 STANOVENÍ PLOCHY JEDNOHO POLYGONU

ÚLOHY S POLYGONEM. Polygon řetězec úseček, poslední bod je totožný s prvním. 6 bodů: X1, Y1 až X6,Y6 Y1=X6, Y1=Y6 STANOVENÍ PLOCHY JEDNOHO POLYGONU ÚLOHY S POLYGONEM Polygon řetězec úseček, poslední bod je totožný s prvním 6 bodů: X1, Y1 až X6,Y6 Y1=X6, Y1=Y6 STANOVENÍ PLOCHY JEDNOHO POLYGONU 3 úsečky (segmenty) v horní části 2 úsečky ve spodní části

Více

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu. Informatika 10. 9. 2013 Jméno a příjmení Rodné číslo 1) Napište algoritmus pro rychlé třídění (quicksort). 2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus

Více

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

STROMOVE ALGORITMY Prohledavani do sirky (level-order) Po vodorovnejch carach fronta STROMOVE ALGORITMY Prohledavani do sirky (level-order) Po vodorovnejch carach vlož do fronty kořen opakuj, dokud není fronta prázdná 1. vyber uzel z fronty a zpracuj jej 2. vlož do fronty levého následníka

Více

Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu:

Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu: Čtvrtek 8 prosince Pascal - opakování základů Struktura programu: 1 hlavička obsahuje název programu, použité programové jednotky (knihovny), definice konstant, deklarace proměnných, všechny použité procedury

Více

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

2 Datové struktury. Pole Seznam Zásobník Fronty FIFO Haldy a prioritní fronty Stromy Hash tabulky Slovníky Pole Seznam Zásobník Fronty FIFO Haldy a prioritní fronty Stromy Hash tabulky Slovníky 25 Pole Datová struktura kolekce elementů (hodnot či proměnných), identifikovaných jedním nebo více indexy, ze kterých

Více

Algoritmizace prostorových úloh

Algoritmizace prostorových úloh INOVACE BAKALÁŘSKÝCH A MAGISTERSKÝCH STUDIJNÍCH OBORŮ NA HORNICKO-GEOLOGICKÉ FAKULTĚ VYSOKÉ ŠKOLY BÁŇSKÉ - TECHNICKÉ UNIVERZITY OSTRAVA Algoritmizace prostorových úloh Třídění, vyhledávání Daniela Szturcová

Více

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

Test prvočíselnosti. Úkol: otestovat dané číslo N, zda je prvočíslem Test prvočíselnosti Úkol: otestovat dané číslo N, zda je prvočíslem 1. zkusit všechny dělitele od 2 do N-1 časová složitost O(N) cca N testů 2. stačí zkoušet všechny dělitele od 2 do N/2 (větší dělitel

Více

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

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 Hanojská věž Stavový prostor 1. množina stavů S = {s} 2. množina přechodů mezi stavy (operátorů) Φ = {φ} s k = φ ki (s i ) zadání [1 1 1] řešení [3 3 3] dva možné první tahy: [1 1 2] [1 1 3] který tah

Více

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

Algoritmizace Dynamické programování. Jiří Vyskočil, Marko Genyg-Berezovskyj 2010 Dynamické programování Jiří Vyskočil, Marko Genyg-Berezovskyj 2010 Rozděl a panuj (divide-and-conquer) Rozděl (Divide): Rozděl problém na několik podproblémů tak, aby tyto podproblémy odpovídaly původnímu

Více

Datové struktury 2: Rozptylovací tabulky

Datové struktury 2: Rozptylovací tabulky Datové struktury 2: Rozptylovací tabulky prof. Ing. Pavel Tvrdík CSc. Katedra počítačových systémů Fakulta informačních technologií České vysoké učení technické v Praze c Pavel Tvrdík, 2010 Efektivní algoritmy

Více

Základní pojmy. Úvod do programování. Základní pojmy. Zápis algoritmu. Výraz. Základní pojmy

Základní pojmy. Úvod do programování. Základní pojmy. Zápis algoritmu. Výraz. Základní pojmy Úvod do programování Michal Krátký 1,Jiří Dvorský 1 1 Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programování, 2004/2005 Procesor Procesorem je objekt, který vykonává algoritmem popisovanou

Více

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

Adresní vyhledávání (přímý přístup, zřetězené a otevřené rozptylování, rozptylovací funkce) 13. Metody vyhledávání. Adresní vyhledávání (přímý přístup, zřetězené a otevřené rozptylování, rozptylovací funkce). Asociativní vyhledávání (sekvenční, binárním půlením, interpolační, binární vyhledávací

Více

Lekce 01 Úvod do algoritmizace

Lekce 01 Úvod do algoritmizace Počítačové laboratoře bez tajemství aneb naučme se učit algoritmizaci a programování s využitím robotů Lekce 01 Úvod do algoritmizace Tento projekt CZ.1.07/1.3.12/04.0006 je spolufinancován Evropským sociálním

Více

Vzdálenost uzlů v neorientovaném grafu

Vzdálenost uzlů v neorientovaném grafu Vzdálenosti a grafy Vzdálenost uzlů v neorientovaném grafu Je dán neorientovaný neohodnocený graf G = (V,E,I) vzdálenost uzlů u a v v neorientovaném souvislém grafu G je délka nejkratší cesty spojující

Více

Binární vyhledávací stromy pokročilé partie

Binární vyhledávací stromy pokročilé partie Binární vyhledávací stromy pokročilé partie KMI/ALS lekce Jan Konečný 30.9.204 Literatura Cormen Thomas H., Introduction to Algorithms, 2nd edition MIT Press, 200. ISBN 0-262-5396-8 6, 3, A Knuth Donald

Více

Dynamické programování

Dynamické programování Dynamické programování prof. Ing. Pavel Tvrdík CSc. Katedra počítačových systémů Fakulta informačních technologií České vysoké učení technické v Praze c Pavel Tvrdík, 2010 Efektivní algoritmy (BI-EFA)

Více

Stromy. Příklady. Rekurzivní datové struktury. Základní pojmy

Stromy. Příklady. Rekurzivní datové struktury. Základní pojmy Základní pojmy Stromy doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 / 597 324 213 http://www.cs.vsb.cz/benes Miroslav.Benes@vsb.cz Graf uzly hrany orientované / neorientované Souvislý

Více

Programování: základní konstrukce, příklady, aplikace. IB111 Programování a algoritmizace

Programování: základní konstrukce, příklady, aplikace. IB111 Programování a algoritmizace Programování: základní konstrukce, příklady, aplikace IB111 Programování a algoritmizace 2011 Připomenutí z minule, ze cvičení proměnné, výrazy, operace řízení výpočtu: if, for, while funkce příklady:

Více

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

Volné stromy. Úvod do programování. Kořenové stromy a seřazené stromy. Volné stromy Volné stromy Úvod do programování Souvislý, acyklický, neorientovaný graf nazýváme volným stromem (free tree). Často vynecháváme adjektivum volný, a říkáme jen, že daný graf je strom. Michal Krátký 1,Jiří

Více

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í

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í Select sort: krok 1: výběr klíče z n prvků vyžaduje 1 porovnání krok 2: výběr klíče z 1 prvků vyžaduje 2 porovnání krok 3: výběr klíče z 2 prvků vyžaduje 3 porovnání atd. celkem porovnání Zlepšení = použít

Více

Konvexní obálka množiny bodů.

Konvexní obálka množiny bodů. Konvexní obálka množiny bodů. Graham Scan. Jarvis Scan. Quick Hull. Inkrementální metoda. Divide and Conquer. Rotating Calipers. Tomáš Bayer bayertom@natur.cuni.cz Katedra aplikované geoinformatiky a kartografie.

Více

Algoritmy výpočetní geometrie

Algoritmy výpočetní geometrie Algoritmy výpočetní geometrie prof. Ing. Pavel Tvrdík CSc. Katedra počítačových systémů Fakulta informačních technologií České vysoké učení technické v Praze c Pavel Tvrdík, 2010 Efektivní algoritmy (BI-EFA)

Více

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

bfs, dfs, fronta, zásobník, prioritní fronta, halda 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ší

Více

Zákony hromadění chyb.

Zákony hromadění chyb. Zákony hromadění chyb. Zákon hromadění skutečných chyb. Zákon hromadění středních chyb. Tomáš Bayer bayertom@natur.cuni.cz Přírodovědecká fakulta Univerzity Karlovy v Praze, Katedra aplikované geoinformatiky

Více

IB111 Úvod do programování skrze Python

IB111 Úvod do programování skrze Python Vyhledávání, řazení, složitost IB111 Úvod do programování skrze Python 2012 Otrávené studny 8 studen, jedna z nich je otrávená laboratorní rozbor dokáže rozpoznat přítomnost jedu ve vodě je drahý (je časově

Více

5. Dynamické programování

5. Dynamické programování 5. Dynamické programování BI-EP1 Efektivní programování 1 ZS 2011/2012 Ing. Martin Kačer, Ph.D. 2010-11 Martin Kačer Katedra teoretické informatiky Fakulta informačních technologií České vysoké učení technické

Více

Čísla a číselné soustavy.

Čísla a číselné soustavy. Čísla a číselné soustavy. Polyadické soustavy. Převody mezi soustavami. Reprezentace čísel. Tomáš Bayer bayertom@natur.cuni.cz Katedra aplikované geoinformatiky a kartografie, Přírodovědecká fakulta UK.

Více

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

ALGORITMIZACE 2010/03 STROMY, BINÁRNÍ STROMY VZTAH STROMŮ A REKURZE ZÁSOBNÍK IMPLEMENTUJE REKURZI PROHLEDÁVÁNÍ S NÁVRATEM (BACKTRACK) ALGORITMIZACE 2010/03 STROMY, BINÁRNÍ STROMY VZTAH STROMŮ A REKURZE ZÁSOBNÍK IMPLEMENTUJE REKURZI PROHLEDÁVÁNÍ S NÁVRATEM (BACKTRACK) Strom / tree uzel, vrchol / node, vertex hrana / edge vnitřní uzel

Více

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

TGH05 - aplikace DFS, průchod do šířky TGH05 - aplikace DFS, průchod do šířky Jan Březina Technical University of Liberec 31. března 2015 Grafová formulace CPM (critical path method) Orientovaný acyklický graf (DAG) je orientovaný graf neobsahující

Více

Programování v C++ 1, 16. cvičení

Programování v C++ 1, 16. cvičení Programování v C++ 1, 16. cvičení binární vyhledávací strom 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled 1 2 Shrnutí minule procvičené

Více

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

Vyvažování a rotace v BVS, všude se předpokládá AVL strom Vyvažování a rotace v BVS, všude se předpokládá AVL strom 1. Jednoduchá levá rotace v uzlu u má operační složitost a) závislou na výšce levého podstromu uzlu u b) mezi O(1) a Θ(n) c) závislou na hloubce

Více

Booleovská algebra. Pravdivostní tabulka. Karnaughova mapa. Booleovské n-krychle. Základní zákony. Unární a binární funkce. Podmínky.

Booleovská algebra. Pravdivostní tabulka. Karnaughova mapa. Booleovské n-krychle. Základní zákony. Unární a binární funkce. Podmínky. Booleovská algebra. Pravdivostní tabulka. Karnaughova mapa. Booleovské n-krychle. Základní zákony. Unární a binární funkce. Podmínky. Tomáš Bayer bayertom@natur.cuni.cz Katedra aplikované geoinformatiky

Více

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

Binární vyhledávací strom pomocí směrníků Miroslav Hostaša L06620 Binární vyhledávací strom pomocí směrníků Miroslav Hostaša L06620 1. Vymezení pojmů Strom: Strom je takové uspořádání prvků - vrcholů, ve kterém lze rozeznat předchůdce - rodiče a následovníky - syny.

Více

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

bfs, dfs, fronta, zásobník, prioritní fronta, halda 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ší

Více

IB108 Sada 1, Příklad 1 Vypracovali: Tomáš Krajča (255676), Martin Milata (256615)

IB108 Sada 1, Příklad 1 Vypracovali: Tomáš Krajča (255676), Martin Milata (256615) IB108 Sada 1, Příklad 1 ( ) Složitost třídícího algoritmu 1/-Sort je v O n log O (n.71 ). Necht n = j i (velikost pole, které je vstupním parametrem funkce 1/-Sort). Lehce spočítáme, že velikost pole předávaná

Více

int ii char [16] double dd název adresa / proměnná N = nevyužito xxx xxx xxx N xxx xxx N xxx N

int ii char [16] double dd název adresa / proměnná N = nevyužito xxx xxx xxx N xxx xxx N xxx N Struktura (union) - struktura a union jsou složené typy, které "v sobě" mohou obsahovat více proměnných - struktura obsahuje v každém okamžiku všechny své proměnné, union obsahuje (=je "aktivní") pouze

Více

MATURITNÍ TÉMATA Z MATEMATIKY

MATURITNÍ TÉMATA Z MATEMATIKY MATURITNÍ TÉMATA Z MATEMATIKY 1. Základní poznatky z logiky a teorie množin Pojem konstanty a proměnné. Obor proměnné. Pojem výroku a jeho pravdivostní hodnota. Operace s výroky, složené výroky, logické

Více

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.

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. 1 3 4 5 6 7 8 9 10 11 1 13 14 15 16 17 18 19 0 1 3 4 5 6 7 8 9 30 31 3 Zdůvodněte, proč funkce f(n) = n log(n) 1 n 1/ roste rychleji než funkce g(n) = n. Zdůvodněte, proč funkce f(n) = n 3/ log(n) roste

Více

Rekurze a rychlé třídění

Rekurze a rychlé třídění Rekurze a rychlé třídění Jan Kybic http://cmp.felk.cvut.cz/~kybic kybic@fel.cvut.cz 2016 2017 1 / 54 Rekurze Rychlé třídění 2 / 54 Rekurze Recursion Rekurze = odkaz na sama sebe, definice za pomoci sebe

Více

Poslední nenulová číslice faktoriálu

Poslední nenulová číslice faktoriálu Poslední nenulová číslice faktoriálu Kateřina Bambušková BAM015, I206 Abstrakt V tomto článku je popsán a vyřešen problém s určením poslední nenulové číslice faktoriálu přirozeného čísla N. Celý princip

Více

Markov Chain Monte Carlo. Jan Kracík.

Markov Chain Monte Carlo. Jan Kracík. Markov Chain Monte Carlo Jan Kracík jan.kracik@vsb.cz Princip Monte Carlo integrace Cílem je (přibližný) výpočet integrálu I(g) = E f [g(x)] = g(x)f (x)dx. (1) Umíme-li generovat nezávislé vzorky x (1),

Více

ČESKÉ VYSOKÉ UČENÍ TECHNICKÉ V PRAZE

ČESKÉ VYSOKÉ UČENÍ TECHNICKÉ V PRAZE ČESKÉ VYSOKÉ UČENÍ TECHNICKÉ V PRAZE FAKULTA STAVEBNÍ OBOR GEODÉZIE A KARTOGRAFIE KATEDRA VYŠŠÍ GEODÉZIE název předmětu úloha/zadání název úlohy Základy fyzikální geodézie 3/19 Legendreovy přidružené funkce

Více

Základy algoritmizace a programování

Základy algoritmizace a programování Základy algoritmizace a programování Složitost algoritmů. Třídění Přednáška 8 16. listopadu 2009 Který algoritmus je "lepší"? Různé algoritmy, které řeší stejnou úlohu zbytek = p % i; zbytek = p - p/i*i;

Více

Funkce pokročilé možnosti. Úvod do programování 2 Tomáš Kühr

Funkce pokročilé možnosti. Úvod do programování 2 Tomáš Kühr Funkce pokročilé možnosti Úvod do programování 2 Tomáš Kühr Funkce co už víme u Nebo alespoň máme vědět... J u Co je to funkce? u Co jsou to parametry funkce? u Co je to deklarace a definice funkce? K

Více

Mgr. Tomáš Kotler. I. Cvičný test 2 II. Autorské řešení 6 III. Klíč 15 IV. Záznamový list 17

Mgr. Tomáš Kotler. I. Cvičný test 2 II. Autorské řešení 6 III. Klíč 15 IV. Záznamový list 17 Mgr. Tomáš Kotler I. Cvičný test 2 II. Autorské řešení 6 III. Klíč 15 IV. Záznamový list 17 1 bod 1 Určete průsečík P[x, y] grafů funkcí f: y = x + 2 a g: y = x 1 2, které jsou definovány na množině reálných

Více

B3B33ALP - Algoritmy a programování - Zkouška z předmětu B3B33ALP. Marek Boháč bohacm11

B3B33ALP - Algoritmy a programování - Zkouška z předmětu B3B33ALP. Marek Boháč bohacm11 333LP - lgoritmy a programování - Zkouška z předmětu 333LP Jméno Příjmení Už. jméno Marek oháč bohacm11 Zkouškový test Otázka 1 Jaká je hodnota proměnné count po vykonání následujícího kódu: data=[4,4,5,5,6,6,6,7,7,7,7,8,8]

Více

Triangulace. Význam triangulace. trojúhelník je základní grafický element aproximace ploch předzpracování pro jiné algoritmy. příklad triangulace

Triangulace. Význam triangulace. trojúhelník je základní grafický element aproximace ploch předzpracování pro jiné algoritmy. příklad triangulace Význam triangulace trojúhelník je základní grafický element aproximace ploch předzpracování pro jiné algoritmy příklad triangulace Definice Triangulace nad množinou bodů v rovině představuje takové planární

Více

Algoritmizace I. Ak. rok 2015/2016 vbp 1. ze 132

Algoritmizace I. Ak. rok 2015/2016 vbp 1. ze 132 Ak. rok 2015/2016 vbp 1. ze 132 Ing. Vladimír Beneš, Ph.D. vedoucí katedry Petrovický K101 katedra informatiky a kvantitativních metod E-mail: vbenes@bivs.cz Telefon: 251 114 534, 731 425 276 Konzultační

Více

Řídicí struktury. alg3 1

Řídicí struktury. alg3 1 Řídicí struktury Řídicí struktura je programová konstrukce, která se skládá z dílčích příkazů a předepisuje pro ně způsob provedení Tři druhy řídicích struktur: posloupnost, předepisující postupné provedení

Více

CVIČNÝ TEST 41. OBSAH I. Cvičný test 2. Mgr. Tomáš Kotler. II. Autorské řešení 7 III. Klíč 15 IV. Záznamový list 17

CVIČNÝ TEST 41. OBSAH I. Cvičný test 2. Mgr. Tomáš Kotler. II. Autorské řešení 7 III. Klíč 15 IV. Záznamový list 17 CVIČNÝ TEST 41 Mgr. Tomáš Kotler OBSAH I. Cvičný test 2 II. Autorské řešení 7 III. Klíč 15 IV. Záznamový list 17 I. CVIČNÝ TEST VÝCHOZÍ TEXT A OBRÁZEK K ÚLOZE 1 Je dán magický čtverec, pro nějž platí,

Více

B3B33ALP - Algoritmy a programování - Zkouška z předmětu B3B33ALP. Marek Boháč bohacm11

B3B33ALP - Algoritmy a programování - Zkouška z předmětu B3B33ALP. Marek Boháč bohacm11 Jméno Příjmení Už. jméno Marek oháč bohacm11 Zkouškový test Otázka 1 Jaká je hodnota proměnné count po vykonání následujícího kódu: data=[4,4,5,5,6,6,6,7,7,7,7,8,8] count=0 for i in range(1,len(data)):

Více

Algoritmizace řazení Bubble Sort

Algoritmizace řazení Bubble Sort Algoritmizace řazení Bubble Sort Cílem této kapitoly je seznámit studenta s třídícím algoritmem Bubble Sort, popíšeme zde tuto metodu a porovnáme s jinými algoritmy. Klíčové pojmy: Třídění, Bubble Sort,

Více

Iterační výpočty Projekt č. 2

Iterační výpočty Projekt č. 2 Dokumentace k projektu pro předměty IUS & IZP Iterační výpočty Projekt č. 2 Autor: Jan Kaláb (xkalab00@stud.fit.vutbr.cz) Úvod Úkolem bylo napsat v jazyce C program sloužící k výpočtům matematických funkcí

Více

REGRESNÍ ANALÝZA V PROSTŘEDÍ MATLAB

REGRESNÍ ANALÝZA V PROSTŘEDÍ MATLAB 62 REGRESNÍ ANALÝZA V PROSTŘEDÍ MATLAB BEZOUŠKA VLADISLAV Abstrakt: Text se zabývá jednoduchým řešením metody nejmenších čtverců v prostředí Matlab pro obecné víceparametrové aproximační funkce. Celý postup

Více

ZŠ ÚnO, Bratří Čapků 1332

ZŠ ÚnO, Bratří Čapků 1332 Úvodní obrazovka Menu (vlevo nahoře) Návrat na hlavní stránku Obsah Výsledky Poznámky Záložky edunet Konec Matematika 1 (pro 12-16 let) LangMaster Obsah (střední část) výběr tématu - dvojklikem v seznamu

Více

3. přednáška. Obsah: Řídící struktury sekvence, if-else, switch, for, while, do-while. Zpracování posloupnosti

3. přednáška. Obsah: Řídící struktury sekvence, if-else, switch, for, while, do-while. Zpracování posloupnosti Obsah: Řídící struktury sekvence, if-else, switch, for, while, do-while. Zpracování posloupnosti 3. přednáška nalezení největšího prvku, druhého nejvyššího prvku, algoritmus shozeného praporku. Algoritmizace

Více

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

ALGORITMIZACE 2010/03 STROMY, BINÁRNÍ STROMY VZTAH STROMŮ A REKURZE ZÁSOBNÍK IMPLEMENTUJE REKURZI PROHLEDÁVÁNÍ S NÁVRATEM (BACKTRACK) ALGORITMIZACE 2010/03 STROMY, BINÁRNÍ STROMY VZTAH STROMŮ A REKURZE ZÁSOBNÍK IMPLEMENTUJE REKURZI PROHLEDÁVÁNÍ S NÁVRATEM (BACKTRACK) Strom / tree uzel, vrchol / node, vertex hrana / edge vnitřní uzel

Více

Algoritmizace a programování

Algoritmizace a programování Algoritmizace a programování Řídicí struktury jazyka Java Struktura programu Příkazy jazyka Blok příkazů Logické příkazy Ternární logický operátor Verze pro akademický rok 2012/2013 1 Struktura programu

Více

Universita Pardubice Fakulta elektrotechniky a informatiky. Mikroprocesorová technika. Semestrální práce

Universita Pardubice Fakulta elektrotechniky a informatiky. Mikroprocesorová technika. Semestrální práce Universita Pardubice Fakulta elektrotechniky a informatiky Mikroprocesorová technika Semestrální práce Jméno: Chmelař Pavel Datum: 14. 5. 2008 Úkol: Příklad č. 1 V paměti dat je uložen blok 8 b čísel se

Více