Část I. Rekurze. Část 1 Rekurze. Rekurze. Část 2 Příklady. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze

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

Download "Část I. Rekurze. Část 1 Rekurze. Rekurze. Část 2 Příklady. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze"

Transkript

1 Část Rekurze Rekurze Jan Faigl Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Přednáška 6 A0B6PR Programování Faktoriál Obrácený výpis Karel Hanojské věže Rekurze Fibonacciho posloupnost Jan Faigl, 0 A0B6PR Přednáška 6: Rekurze / 9 Jan Faigl, 0 A0B6PR Přednáška 6: Rekurze / 9 Část Příklady Eratosthenovo síto Rozklad na prvočinitele Část I Rekurze Řazení Jan Faigl, 0 A0B6PR Přednáška 6: Rekurze / 9 Jan Faigl, 0 A0B6PR Přednáška 6: Rekurze / 9

2 Výpočet faktoriálu Příklad výpis posloupnosti / Iterace n! = n(n )(n )... int factoriali(int n) { int f = ; for(; n > ; --n) { f *= n; return f; Rekurze n! = pro n n! = n(n )! pro n > int factorialr(int n) { int f = ; if (n > ) { f = n * factorialr(n-); return f; lec05/demofactorial.java Připomínka Vytvořte program, který přečte posloupnost čísel a vypíše ji v opačném pořadí Rozklad problému: Zavedeme abstraktní příkaz: obrať posloupnost Příkaz rozložíme do tří kroků:. Přečti číslo číslo uložíme pro pozdější obrácený výpis. Pokud není detekován konec posloupnost obrať posloupnost pokračujeme ve čtení čísel. Vypiš číslo vypíšeme uložené číslo Jan Faigl, 0 A0B6PR Přednáška 6: Rekurze 6 / 9 Příklad výpis posloupnosti / void reverse() { int v = scan.nextint(); if (scan.hasnext()) { reverse(); 5 6 System.out.printf("%d ", v); public void start() { 0 System.err.println("Enter a sequence of numbers ( use ctr+d for the end of the the sequence"); reverse(); System.out.println(""); //end of line lec06/demorevertsequence.java Jan Faigl, 0 A0B6PR Přednáška 6: Rekurze 9 / 9 Jan Faigl, 0 A0B6PR Přednáška 6: Rekurze 8 / 9 Příklad výpis posloupnosti / lec06/demorevertsequence.java Vytvoření posloupností./generate_numbers.sh tr \n cat > numbers.txt javac DemoRevertSequence.java java DemoRevertSequence < numbers.txt >/dev/null > numbersr.txt java DemoRevertSequence <numbers-r.txt >/dev/null > numbers -rr.txt Příkaz pro výpis obsahu souborů for i in numbers.txt numbers-r.txt numbers-rr.txt; do echo "$i"; cat $i; echo ""; done Výpis obsahu souborů numbers.txt numbers-r.txt numbers-rr.txt Jan Faigl, 0 A0B6PR Přednáška 6: Rekurze 0 / 9

3 Robot Karel hledání beeperu Robot Karel má za úkol najít beeper v bludišti a vrátit se s ním zpět na výchozí pozici Karel se pohybuje v mřížkovém ortogonálním světě Karel umí: jít rovně o jeden krok otočit se doleva o 90 vzít / položit beeper vypnout se Karel umí zjistit, zda-li: je před ním zeď je na políčku, na kterém stojí, beeper Robot Karel Iterační řešení / Návrh řešení. Jdi podél zdi (po pravé straně) dokud není na políčku beeper a počítej počet kroků;. Seber beeper ;. Otoč se a jdi podél zdi (po levé straně) a udělej stejný počet kroků jako při hledání beeperu ;. Polož beeper a vypni se. Abstraktní příkazy pro nalezení beeperu sledování zdi na pravé straně: Otoč se doprava: turnright Zjisti, zda-li je na pravé straně zeď: iswallonright Jdi podél pravé zdi: gobyrightwall Analogické abstraktní příkazy pro pohyb podél zdi na levé straně: iswallonleft a gobyleftwall Jan Faigl, 0 A0B6PR Přednáška 6: Rekurze / 9 Jan Faigl, 0 A0B6PR Přednáška 6: Rekurze / 9 Robot Karel Iterační řešení / void turnright() { for (int i = 0; i < ; i++) { turnleft(); boolean iswallonright() { 8 turnright(); 9 boolean out = isinfrontofwall(); 0 turnleft(); return out; void gobyrightwall() { 5 while (!isonbeeper()) { 6 if (!wallonright()) { 7 turnright(); 8 9 while (isinfrontofwall()) { 0 turnleft(); step(); Analogicky pro zeď po levé straně Robot Karel Iterační řešení / Počet kroků je inkrementován v proceduře step Při návratu podél levé zdi Karel ujde stejný počet kroků public void execute() { gobyright(); pickbeeper(); turnaround(); 5 6 if (stepstaken > 0) { 7 gobyleft(stepstaken); putbeeper(); turnoff(); Jan Faigl, 0 A0B6PR Přednáška 6: Rekurze / 9 Jan Faigl, 0 A0B6PR Přednáška 6: Rekurze 5 / 9

4 Robot Karel Rekurzivní řešení / Řešení rekurzí založíme na opakovaném volání funkce, která posune robot pouze o jeden krok vpřed a následně jej vrátí zpět ve funkci go:. Pokud jsi na beeperu seber jej a otoč o 80 a ukonči hledání. Zapamatuj si svou orientaci a udělej jeden krok podél pravé zdi. go (opakuj hledání o jeden krok). Udělej jeden krok zpět (vrať se o jeden krok zpět a natoč se do původního směru) Jan Faigl, 0 A0B6PR Přednáška 6: Rekurze 6 / 9 Robot Karel Rekurzivní řešení / Hlavní procedura obsahuje pouze volání funkce go, která vrací robot na výchozí políčko void execute() { go(); putbeeper(); turnoff(); 5 Pro spuštění využijeme knihovnu KarelJRobot.jar a modifikovaný svět maze.klwd javac -cp lib/kareljrobot.jar DemoKarel.java java -cp lib/kareljrobot.jar:. DemoKarel Robot se při zpáteční cestě vrací rychleji, protože již explicitně nekontroluje, zda-li je zeď na levé straně. Uvedený demonstrační program není plným řešení úlohy ze. cvičení lec06/demokarel.java Robot Karel Rekurzivní řešení / void go() { if (isonbeeper()) { pickbeeper(); 5 turnaround(); //turn back return; 6 7 int numberturnright = 0; 8 if (!iswallonright()) { 9 0 turnright(); numberturnright++; while (isinfrontofwall()) { 5 turnleft(); numberturnright--; 6 7 move(); //move forward 8 go(); 9 move(); //move backward 0 numberturnright = (numberturnright + ) % ; for (int i = 0; i < numberturnright; ++i) { turnleft(); //revert the turns 5 Jan Faigl, 0 A0B6PR Přednáška 6: Rekurze 7 / 9 Příklad Hanojské věže Přemístit disky na druhou jehlu s použitím třetí (pomocné) jehly za dodržení pravidel:. V každém kroku můžeme přemístit pouze jeden disk a to vždy z jehly na jehlu Disky nelze odkládat mimo jehly. Položit větší disk na menší není dovoleno Jan Faigl, 0 A0B6PR Přednáška 6: Rekurze 8 / 9 Jan Faigl, 0 A0B6PR Přednáška 6: Rekurze 0 / 9

5 Hanojské věže disk Hanojské věže disk Přesunutý disk z jehly na jehlu. Jan Faigl, 0 A0B6PR Přednáška 6: Rekurze / 9 Hanojské věže disk Jan Faigl, 0 A0B6PR Přednáška 6: Rekurze / 9 Hanojské věže disky Hotovo Jan Faigl, 0 A0B6PR Přednáška 6: Rekurze / 9 Jan Faigl, 0 A0B6PR Přednáška 6: Rekurze / 9

6 Hanojské věže disky Hanojské věže disky Přesunutý disk z jehly na jehlu. Přesunutý disk z jehly na jehlu. Jan Faigl, 0 A0B6PR Přednáška 6: Rekurze 5 / 9 Hanojské věže disky Jan Faigl, 0 A0B6PR Přednáška 6: Rekurze 6 / 9 Hanojské věže disky Hotovo Přesunutý disk z jehly na jehlu. Jan Faigl, 0 A0B6PR Přednáška 6: Rekurze 7 / 9 Jan Faigl, 0 A0B6PR Přednáška 6: Rekurze 8 / 9

7 Hanojské věže disky Hanojské věže disky Přesunutý disk z jehly na jehlu. Jan Faigl, 0 A0B6PR Přednáška 6: Rekurze 9 / 9 Hanojské věže disky Jan Faigl, 0 A0B6PR Přednáška 6: Rekurze 0 / 9 Hanojské věže disky Přesunutý disk z jehly na jehlu. Přesunutý disk z jehly na jehlu. Jan Faigl, 0 A0B6PR Přednáška 6: Rekurze / 9 Jan Faigl, 0 A0B6PR Přednáška 6: Rekurze / 9

8 Hanojské věže disky Hanojské věže disky Přesunutý disk z jehly na jehlu. Přesunutý disk z jehly na jehlu. Jan Faigl, 0 A0B6PR Přednáška 6: Rekurze / 9 Hanojské věže disky Jan Faigl, 0 A0B6PR Přednáška 6: Rekurze / 9 Hanojské věže disky Přesunutý disk z jehly na jehlu. Přesunutý disk z jehly na jehlu. Jan Faigl, 0 A0B6PR Přednáška 6: Rekurze 5 / 9 Jan Faigl, 0 A0B6PR Přednáška 6: Rekurze 6 / 9

9 Hanojské věže disky Hanojské věže disky Hotovo Jan Faigl, 0 A0B6PR Přednáška 6: Rekurze 7 / 9 Hanojské věže disky Jan Faigl, 0 A0B6PR Přednáška 6: Rekurze 8 / 9 Hanojské věže disky Přesunutý disk z jehly na jehlu. Přesunutý disk z jehly na jehlu. Jan Faigl, 0 A0B6PR Přednáška 6: Rekurze 9 / 9 Jan Faigl, 0 A0B6PR Přednáška 6: Rekurze 0 / 9

10 Hanojské věže disky Hanojské věže disky Přesunutý disk z jehly na jehlu. Přesunutý disk z jehly na jehlu. Jan Faigl, 0 A0B6PR Přednáška 6: Rekurze / 9 Hanojské věže disky Jan Faigl, 0 A0B6PR Přednáška 6: Rekurze / 9 Hanojské věže disky Přesunutý disk z jehly na jehlu. Přesunutý disk z jehly na jehlu. Jan Faigl, 0 A0B6PR Přednáška 6: Rekurze / 9 Jan Faigl, 0 A0B6PR Přednáška 6: Rekurze / 9

11 Hanojské věže disky Hanojské věže disky Přesunutý disk z jehly na jehlu. Přesunutý disk z jehly na jehlu. Jan Faigl, 0 A0B6PR Přednáška 6: Rekurze 5 / 9 Hanojské věže disky Jan Faigl, 0 A0B6PR Přednáška 6: Rekurze 6 / 9 Hanojské věže disky Přesunutý disk z jehly na jehlu. Přesunutý disk z jehly na jehlu. Jan Faigl, 0 A0B6PR Přednáška 6: Rekurze 7 / 9 Jan Faigl, 0 A0B6PR Přednáška 6: Rekurze 8 / 9

12 Hanojské věže disky Hanojské věže disky Přesunutý disk z jehly na jehlu. Přesunutý disk z jehly na jehlu. Jan Faigl, 0 A0B6PR Přednáška 6: Rekurze 9 / 9 Hanojské věže disky Jan Faigl, 0 A0B6PR Přednáška 6: Rekurze 50 / 9 Hanojské věže disky Přesunutý disk z jehly na jehlu. Přesunutý disk z jehly na jehlu. Jan Faigl, 0 A0B6PR Přednáška 6: Rekurze 5 / 9 Jan Faigl, 0 A0B6PR Přednáška 6: Rekurze 5 / 9

13 Hanojské věže disky Hanojské věže disky Hotovo Přesunutý disk z jehly na jehlu. Jan Faigl, 0 A0B6PR Přednáška 6: Rekurze 5 / 9 Hanojské věže 5 disků Jan Faigl, 0 A0B6PR Přednáška 6: Rekurze 5 / 9 Návrh řešení 5? 5 Zavedeme abstraktní příkaz movetower(n,,, ) realizující přesun n disků z jehly na jehlu s použitím jehly. Pro n > 0 můžeme příkaz rozložit na tři jednodušší příkazy. movetower(n-,,, ) přesun n disků z jehly na jehlu. přenes disk z jehly na jehlu přesun největšího disku na cílovou pozici abstraktní příkaz. movetower(n-,,, ) přesun n disků na cílovou pozici Jan Faigl, 0 A0B6PR Přednáška 6: Rekurze 55 / 9 Jan Faigl, 0 A0B6PR Přednáška 6: Rekurze 56 / 9

14 Příklad řešení void movetower(int n, int from, int to, int tmp) { if (n > 0) { movetower(n -, from, tmp, to); //move to tmp System.out.println("Move disc from " + from + " to " + to); 5 movetower(n -, tmp, to, from); //move from tmp void start() { 0 int numberofdiscs = 5; movetower(numberofdiscs,,, ); lec06/demotowersofhanoi.java Příklad výpisu lec06/demotowersofhanoi.java java DemoTowersOfHanoi Move disc from to Move disc from to Move disc from to Move disc from to Move disc from to Move disc from to Move disc from to java DemoTowersOfHanoi Move disc from to Move disc from to Move disc from to Move disc from to Move disc from to Move disc from to Move disc from to Move disc from to Move disc from to Move disc from to Move disc from to Move disc from to Move disc from to Move disc from to Move disc from to Jan Faigl, 0 A0B6PR Přednáška 6: Rekurze 57 / 9 Rekurzivní algoritmy Jan Faigl, 0 A0B6PR Přednáška 6: Rekurze 58 / 9 Rekurzivní vs iteračními algoritmy Rekurzivní funkce jsou přímou realizací rekurzivních algoritmů Rekurzivní algoritmus předepisuje výpočet shora dolů v závislosti na velikosti vstupních dat Pro nejmenší (nejjednodušší) vstup je výpočet předepsán přímo Pro obecný vstup je výpočet předepsán s využitím téhož algoritmu pro menší vstup Výhodou rekurzivních funkcí je jednoduchost a přehlednost Nevýhodou rekurzivních algoritmů může být časová náročnost způsobená např. zbytečným opakováním výpočtu Řadu rekurzivních algoritmů lze nahradit iteračními, které počítají výsledek zdola nahoru, tj. od menších (jednodušších) vstupních dat k větším (složitějším). Pokud algoritmus výpočtu zdola nahoru nenajdeme, např. při řešení problému Hanojských věží, lze rekurzivitu odstranit pomocí zásobníku. Např. zásobník využijeme pro uložení stavu řešení problému. Jan Faigl, 0 A0B6PR Přednáška 6: Rekurze 60 / 9 Jan Faigl, 0 A0B6PR Přednáška 6: Rekurze 6 / 9

15 Rekurze Elegance vs obtížnost rekurze To iterate is human, to recurse divine. L. Peter Deutsch I ve often heard people describe understanding recursion as one of those got it moments, when the universe opened its secret stores of knowledge and gifted the mind of a burgeoning developer with a very powerful tool. For me, recursion has always been hard. Each time I m able to peer more into its murky depths, I am humbled to see how little I feel like I really appreciate and understand its power and elegance. Rick Winfrey, 0 to-iterate-is-human-to-recurse-divine Jan Faigl, 0 A0B6PR Přednáška 6: Rekurze 6 / 9 Fibonacciho posloupnost,,,, 5, 8,,,, 55,... F n = F n + F n pro F =, F = Nebo 0,,,,, 5,... Nebo F = 0, F = Nekonečná posloupnost přirozených čísel, kde každé číslo je součtem dvou předchozích. Limita poměru dvou následujících čísel Fibonacciho posloupnosti je rovna zlatému řezu. Sectio aurea ideální poměr mezi různými délkami Rozdělení úsečky na dvě části tak, že poměr větší části ku menší je stejný jako poměr celé úsečky k větší části ϕ = + 5, Jan Faigl, 0 A0B6PR Přednáška 6: Rekurze 6 / 9 Fibonacciho posloupnost historie Indičtí matematici (50 nebo 00 BC) Leonardo Pisano (75 50) popis růstu populace králíků italský matematik známý také jako Fibonacci F n velikost populace po n měsících za předpokladu První měsíc se narodí jediný pár. Narozené páry jsou produktivní od. měsíce svého života. Každý měsíc zplodí každý produktivní pár jeden další pár. Králíci nikdy neumírají, nejsou nemocní atd. Henry E. Dudeney (857 90) popis populace krav Jestliže každá kráva vyprodukuje své první tele (jalovici) za rok a poté každý rok jednu další jalovici, kolik budete mít krav za let, jestliže žádná nezemře a na počátku budete mít jednu krávu? Po let je k dispozici jeden či více býků Jan Faigl, 0 A0B6PR Přednáška 6: Rekurze 65 / 9 Jan Faigl, 0 A0B6PR Přednáška 6: Rekurze 66 / 9

16 Fibonacciho posloupnost rekurzivně Platí: f 0 = f = f n = f n + f n, pro n > int fibonacci(int n) { return n <? : fibonacci(n - ) + fibonacci(n - ); 5 Zápis je elegantní, jak je však takový výpočet efektivní? Fibonacciho posloupnost příklad / Počet operací při výpočtu Fibonacciho čísla n long counter; long fibonnacir(int n) { counter++; 5 return n <? : fibonnacir(n-) + fibonnacir(n-); long fibonnacii(int n) { 9 long fibm = l; 0 long fibm = l; long fib = l; for (int i = ; i <= n; ++i) { fibm = fibm; fibm = fib; 5 fib = fibm + fibm; 6 counter += ; 7 8 return fib; 9 lec06/demofibonacci.java Jan Faigl, 0 A0B6PR Přednáška 6: Rekurze 67 / 9 Fibonacciho posloupnost rekurzivně / public void start(string[] args) { int n = args.length > 0? Integer.parseInt(args[0]) : 5; counter = 0; 5 long fibr = fibonnacir(n); long counter = counter; 6 7 counter = 0; 8 9 long fibi = fibonnacii(n); long countei = counter; 0 System.out.println("Fibonacci number recursive: " + fibr); System.out.println("Fibonacci number iteration: " + fibi); System.out.println("Counter recursive: " + counter); System.out.println("Counter recursive: " + countei); 5 javac DemoFibonacci.java java DemoFibonacci 0 Fibonacci number recursive: 669 Fibonacci number iteration: 669 Counter recursive: 6957 Counter iteration: 8 lec06/demofibonacci.java Jan Faigl, 0 A0B6PR Přednáška 6: Rekurze 69 / 9 Jan Faigl, 0 A0B6PR Přednáška 6: Rekurze 68 / 9 Fibonacciho posloupnost rekurzivně vs iteračně Rekurzivní výpočet Složitost roste exponenciálně s n n Iterační algoritmus Počet operací je proporcionální n n Skutečný počet operací závisí na konkrétní implementaci, programovacím jazyku, překladači a hardware Složitost algoritmů proto vyjadřujeme asymptoticky jako funkci velikosti vstupu Například v tzv. Big O notaci rekurzivní algoritmus výpočtu má složitost O( n ) iterační algoritmus výpočtu má složitost O(n) Efektivní algoritmy mají polynomiální složitost Jan Faigl, 0 A0B6PR Přednáška 6: Rekurze 70 / 9

17 Část II Příklady Pole reprezentující množinu prvočísel Vypsat všechna prvočísla menší nebo rovna zadané hodnotě max Algoritmus:. Vytvoříme množinu obsahující všechna přirozená čísla od do max. Z množiny vypustíme násobky čísla. Najdeme nejbližší číslo k tomu, jehož násobky jsme v předchozím kroku vypustili, a vypustíme všechny násobky tohoto čísla. Opakujeme krok, dokud číslo, jehož násobky jsme vypustili, není větší než odmocnina z max 5. Čísla, která v množině zůstanou, jsou hledaná prvočísla Pro reprezentaci množiny čísel použijeme pole prvků typu boolean, kde prvek pole sieve[i] udává, zda-li je celé číslo i v množině (true) nebo není (false), tj. zda-li je nebo není prvočíslem Jan Faigl, 0 A0B6PR Přednáška 6: Rekurze 7 / 9 Eratosthenovo síto / boolean[] createsieve(int max) { boolean[] sieve = new boolean[max + ]; for (int i = ; i <= max; ++i) { sieve[i] = true; 5 6 int p = ; 7 int pmax = (int)math.sqrt(max); 8 do { 9 for(int i = p + p; i <= max; i += p) { 0 sieve[i] = false; do { p++; while (!sieve[p]); 5 while (p <= pmax); 6 return sieve; 7 lec06/demosieveoferatosthenes.java Jan Faigl, 0 A0B6PR Přednáška 6: Rekurze 7 / 9 Jan Faigl, 0 A0B6PR Přednáška 6: Rekurze 7 / 9 Eratosthenovo síto / void print(boolean[] sieve) { for(int i = ; i < sieve.length; ++i) { if (sieve[i]) { System.out.print(i + " "); void start(int max) { 0 boolean[] sieve = createsieve(max); System.out.print("Prime numbers from to " + max + ": "); print(sieve); System.out.println(""); javac DemoSieveOfEratosthenes.java java DemoSieveOfEratosthenes Prime numbers from to 00: java DemoSieveOfEratosthenes 0 Prime numbers from to 0: lec06/demosieveoferatosthenes.java Jan Faigl, 0 A0B6PR Přednáška 6: Rekurze 75 / 9

18 Rozklad na prvočinitele / Rozklad přirozeného čísla n na součin prvočísel Řešení: Dělit, pak, pak 5 a dalšími prvočísly, až n Každé dělení beze zbytku dodá jednoho prvočinitele Příklad: 60 / 0 / 5 / 5 / 5 60 má prvočinitele,,, 5 Jan Faigl, 0 A0B6PR Přednáška 6: Rekurze 77 / 9 Řazení pole Problém seřadit množinu prvků podle klíče (celého čísla) Posloupnost prvků q = a,..., a n Délka posloupnosti q je q = n Posloupnost q je seřazená, právě tehdy když q < q klíč(a ) klíč(a ) a posloupnost a,... neobsahuje prvek a. Řazení polí je řazením na místě Pro jednoduchost v příkladech třídíme jen celá čísla, prakticky však zpravidla třídíme klíče datových položek. Rozklad na prvočinitele / Iterační algoritmus void getprimesi(int x) { int d = ; while (d < x) { while (d < x && x % d!= 0) { d++; System.out.print(d + " "); x = x / d; void start(int n) { Rekurzivní algoritmus System.out.println("Decomposition of " System.out.print("Iterative algorithm: "); getprimesi(n); System.out.println(""); System.out.print("Recursive algorithm: "); getprimesr(n, ); System.out.println(""); void getprimesr(int x, int d) { if (d < x) { while (d < x && x % d!= 0) { d++; System.out.print(d + " "); getprimesr(x / d, d); + n + " to primies"); lec06/demoprimes.java Jan Faigl, 0 A0B6PR Přednáška 6: Rekurze 78 / 9 Třídění přímým vkládáním Insert Sort / Příklad - Třídění přímým vkládáním Jan Faigl, 0 A0B6PR Přednáška 6: Rekurze 80 / 9 Jan Faigl, 0 A0B6PR Přednáška 6: Rekurze 8 / 9

19 Třídění přímým vkládáním Insert Sort / for i, n vlož a i na patřičné místo mezi a,..., a i Příklad - Algoritmus void insertsort(int[] array) { int x; int j; for (int i = ; i < array.length; i++) { 5 6 x = array[i]; j = i - ; 7 while (j >= 0 && x < array[j]) { 8 9 array[j + ] = array[j]; j--; 0 array[j + ] = x; Řazení přímým výběr Select Sort / for i, n { najdi index k nejmenšího prvku v a i,..., a n, a k = min a i,... a n, zaměň prvky a i, a k Třídění binárním vkládáním - vkládání provádíme do již zatříděného pole a,..., a i. Jan Faigl, 0 A0B6PR Přednáška 6: Rekurze 8 / 9 Řazení přímým výběr Select Sort / Příklad - Řazení přímým výběrem Select Sort Jan Faigl, 0 A0B6PR Přednáška 6: Rekurze 8 / 9 Řazení přímým výběr Select Sort / Příklad implementace void selectsort(int[] array) { for (int i = 0; i < array.length-; ++i) { int minidx = i; for (int j = i + ; j < array.length; ++j) { 5 if (array[minidx] > array[j]) { 6 minidx = j; swap(minidx, i, array); 0 Zde pro jednoduchost třídíme jen celá čísla, prakticky však zpravidla třídíme klíče datových položek. Složitost O(n ), kde n je počet položek Jan Faigl, 0 A0B6PR Přednáška 6: Rekurze 8 / 9 Jan Faigl, 0 A0B6PR Přednáška 6: Rekurze 85 / 9

20 Řazení rozdělováním Quick Sort Nejvýznamnější výměny jsou ty na velké vzdálenosti. Pole rozdělíme nějakým prvkem x (pivot). Nalevo od prvku x umístíme všechny prvky menší než x. Napravo od prvku x umístíme všechny prvky větší než x. Rozdělení opakujeme pro pole tvořené prvky nalevo od x a pro pole napravo od x. Postup opakujeme dokud nerozdělujeme jednoprvkové úseky. Strategie rozděl a panuj. Tuto strategii můžeme implementovat rekurzí Rozdělení pole Příklad - rozdělení Jan Faigl, 0 A0B6PR Přednáška 6: Rekurze 86 / 9 Řazení rozdělením Quick Sort / void qsortpart(int l, int h, int[] array) { int i = l; //lower index int j = h; //higher index int pivot = array[l + (h - l) / ]; 5 while (i <= j) { 6 while(array[i] < pivot) { 7 i++; 8 9 while(array[j] > pivot) { 0 j--; if (i <= j) { swap(i++, j--, array); 5 6 if (l < j) { 7 qsortpart(l, j, array); 8 9 if (i < h) { 0 qsortpart(i, h, array); Jan Faigl, 0 A0B6PR Přednáška 6: Rekurze 88 / 9 Jan Faigl, 0 A0B6PR Přednáška 6: Rekurze 87 / 9 Řazení rozdělením Quick Sort / void quicksort(int[] array) { qsortpart(0, array.length-, array); Složitost pro nejnepříznivější případ je O(n ) Vhodně zvolený pivot výrazně snižuje časovou náročnost Randomizovaná varianta (vstupní pole permutováno a pivot je volen náhodně) O(nlog n) Jan Faigl, 0 A0B6PR Přednáška 6: Rekurze 89 / 9

21 Řazení Select Sort vs Quick Sort Příklad spuštění Select Sort vs Quick Sort javac DemoSort.java && java DemoSort 0 Values: Values Select Sort: Values Quick Sort: java DemoSort 0000 Select Sort required time 5 ms Quick Sort required time 0 ms lec06/demosort.java Jednoduchý test výpočetní náročnosti můžeme udělat porovnáním výpočetních časů Např. využitím System.currentTimeMillis Skutečné výpočetní nároky se mohou lišit podle vstupních dat Zkuste zjistit počet operací pro vstupní pole setříděné sestupně Asymptotická složitost udává očekávané výpočetní nároky pro velké vstupy Reálné testování v tzv. mikro benchmarks může být zvláště v Javě zavádějící (HotSpot) Jan Faigl, 0 A0B6PR Přednáška 6: Rekurze 90 / 9 Diskutovaná témata Zápis algoritmu Quick Sort Implementace Quick Sort v programovacím jazyku Haskell qsort [] = [] qsort (x:xs) = qsort (filter (< x) xs) ++ [x] ++ qsort (filter (>= x) xs) Pro zajímavost Jan Faigl, 0 A0B6PR Přednáška 6: Rekurze 9 / 9 Diskutovaná témata Diskutovaná témata Shrnutí přednášky Rekurze a rekurzivní algoritmy Příklady rekurzivních algoritmů: Výpočet faktoriálu Výpis posloupnosti čísel Hanojské věže Fibonacciho posloupnost Reprezentace množiny polem Příklad implementace v algoritmu Eratosthenovo síto Rozklad na prvočinitele Příklad rekurze v řazení Příště: Objektově orientované programování v Javě Jan Faigl, 0 A0B6PR Přednáška 6: Rekurze 9 / 9 Jan Faigl, 0 A0B6PR Přednáška 6: Rekurze 9 / 9

Rekurze. Jan Faigl. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze. Přednáška 6 A0B36PR1 Programování 1

Rekurze. Jan Faigl. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze. Přednáška 6 A0B36PR1 Programování 1 Rekurze Jan Faigl Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Přednáška 6 A0B36PR1 Programování 1 Jan Faigl, 2015 A0B36PR1 Přednáška 6: Rekurze 1 / 90 Část 1 Rekurze

Více

Rekurze. Jan Faigl. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze. Přednáška 6 A0B36PR1 Programování 1

Rekurze. Jan Faigl. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze. Přednáška 6 A0B36PR1 Programování 1 Rekurze Jan Faigl Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Přednáška 6 A0B36PR1 Programování 1 Jan Faigl, 2015 A0B36PR1 Přednáška 6: Rekurze 1 / 90 Část 1 Rekurze

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

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

2.4.11 Nerovnice s absolutní hodnotou

2.4.11 Nerovnice s absolutní hodnotou .. Nerovnice s absolutní hodnotou Předpoklady: 06, 09, 0 Pedagogická poznámka: Hlavním záměrem hodiny je, aby si studenti uvědomili, že se neučí nic nového. Pouze používají věci, které dávno znají, na

Více

2.8.9 Parametrické rovnice a nerovnice s absolutní hodnotou

2.8.9 Parametrické rovnice a nerovnice s absolutní hodnotou .8.9 Parametrické rovnice a nerovnice s absolutní hodnotou Předpoklady: 0,, 806 Pedagogická poznámka: Opět si napíšeme na začátku hodiny na tabuli jednotlivé kroky postupu při řešení rovnic (nerovnic)

Více

Standardní knihovny C. Rekurze.

Standardní knihovny C. Rekurze. Standardní knihovny C. Rekurze. Jan Faigl Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Přednáška 08 B0B36PRP Procedurální programování Jan Faigl, 2018 B0B36PRP Přednáška

Více

Rozklad problému na podproblémy, rekurze

Rozklad problému na podproblémy, rekurze Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti Rozklad problému na podproblémy, rekurze BI-PA1 Programování a algoritmizace 1 Katedra teoretické informatiky Miroslav Balík Fakulta informačních

Více

Rozklad problému na podproblémy, rekurze

Rozklad problému na podproblémy, rekurze Příprava studijního programu Informatika je podporována projektem financovaným z Evropského sociálního fondu a rozpočtu hlavního města Prahy. Praha & EU: Investujeme do vaší budoucnosti Rozklad problému

Více

Část I. Část 1 Standardní knihovny, čtení/zápis ze souboru. Přehled témat. Standardní knihovny C. Rekurze. Standardní knihovny

Část I. Část 1 Standardní knihovny, čtení/zápis ze souboru. Přehled témat. Standardní knihovny C. Rekurze. Standardní knihovny Přehled témat Standardní knihovny C. Rekurze. Jan Faigl Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Přednáška 08 B0B36PRP Procedurální programování Část 1 Standardní

Více

Standardní knihovny C. Rekurze.

Standardní knihovny C. Rekurze. Standardní knihovny C. Rekurze. Jan Faigl Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Přednáška 08 B0B36PRP Procedurální programování Jan Faigl, 2017 B0B36PRP Přednáška

Více

Kvadratické rovnice pro učební obory

Kvadratické rovnice pro učební obory Variace 1 Kvadratické rovnice pro učební obory Autor: Mgr. Jaromír JUŘEK Kopírování a jkaékoliv další využití výukového materiálu je povoleno pouze s uvedením odkazu na www.jarjurek.cz. 1. Kvadratické

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

{ } 9.1.9 Kombinace II. Předpoklady: 9108. =. Vypiš všechny dvoučlenné kombinace sestavené z těchto pěti prvků. Urči počet kombinací pomocí vzorce.

{ } 9.1.9 Kombinace II. Předpoklady: 9108. =. Vypiš všechny dvoučlenné kombinace sestavené z těchto pěti prvků. Urči počet kombinací pomocí vzorce. 9.1.9 Kombinace II Předpoklady: 9108 Př. 1: Je dána pěti prvková množina: M { a; b; c; d; e} =. Vypiš všechny dvoučlenné kombinace sestavené z těchto pěti prvků. Urči počet kombinací pomocí vzorce. Vypisujeme

Více

Kvantové počítače algoritmy (RSA a faktorizace čísla) http://marble.matfyz.cz

Kvantové počítače algoritmy (RSA a faktorizace čísla) http://marble.matfyz.cz Kvantové počítače algoritmy (RSA a faktorizace čísla) http://marble.matfyz.cz 14. 4. 2004 1. Algoritmus RSA Asymetrické šifrování. Existuje dvojice tajného a veřejného klíče, takže není nutné předat klíč

Více

2.7.2 Mocninné funkce se záporným celým mocnitelem

2.7.2 Mocninné funkce se záporným celým mocnitelem .7. Mocninné funkce se záporným celým mocnitelem Předpoklady: 70 Mocninné funkce se záporným celým mocnitelem: znamená? 3 y = = = = 3 y y y 3 = ; = ; = ;.... Co to Pedagogická poznámka: Nechávám studenty,

Více

Část 1 Standardní knihovny, čtení/zápis ze/do souboru

Část 1 Standardní knihovny, čtení/zápis ze/do souboru C.. Jan Faigl Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Přednáška 08 B0B6PRP Procedurální programování Přehled témat Část, čtení/zápis ze/do souboru Práce se soubory

Více

Programování 4. 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í 4. 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í 4. 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 Stromy Reprezentace Binární vyhledávací

Více

1. Programování, typy programovacích jazyků, historie.

1. Programování, typy programovacích jazyků, historie. 1. Programování, typy programovacích jazyků, historie. třída Console metody Write, WriteLina, ReadLine, ResetColor vlastnosti ForegroundColor, Backgroundcolor třída Form objekt Label vlastnost Text význam

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

Číselné soustavy Ing. M. Kotlíková, Ing. A. Netrvalová Strana 1 (celkem 7) Číselné soustavy

Číselné soustavy Ing. M. Kotlíková, Ing. A. Netrvalová Strana 1 (celkem 7) Číselné soustavy Číselné soustavy Ing. M. Kotlíková, Ing. A. Netrvalová Strana (celkem 7) Polyadické - zobrazené mnohočlenem desítková soustava 3 2 532 = 5 + 3 + 2 + Číselné soustavy Číslice tvořící zápis čísla jsou vlastně

Více

( ) 2.4.4 Kreslení grafů funkcí metodou dělení definičního oboru I. Předpoklady: 2401, 2208

( ) 2.4.4 Kreslení grafů funkcí metodou dělení definičního oboru I. Předpoklady: 2401, 2208 .. Kreslení grafů funkcí metodou dělení definičního oboru I Předpoklady: 01, 08 Opakování: Pokud jsme při řešení nerovnic potřebovali vynásobit nerovnici výrazem, nemohli jsme postupovat pro všechna čísla

Více

Funkce a procedury. Jan Faigl. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze. Přednáška 5 A0B36PR1 Programování 1

Funkce a procedury. Jan Faigl. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze. Přednáška 5 A0B36PR1 Programování 1 Funkce a procedury Jan Faigl Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Přednáška 5 A0B36PR1 Programování 1 Jan Faigl, 2015 A0B36PR1 Přednáška 5: Funkce a procedury

Více

Kvadratické rovnice pro studijní obory

Kvadratické rovnice pro studijní obory Variace 1 Kvadratické rovnice pro studijní obory Autor: Mgr. Jaromír JUŘEK Kopírování a jakékoliv další využití výukového materiálu je povoleno pouze s uvedením odkazu na www.jarjurek.cz. 1. Kvadratické

Více

Dopravní úloha. Jiří Neubauer. Katedra ekonometrie FEM UO Brno

Dopravní úloha. Jiří Neubauer. Katedra ekonometrie FEM UO Brno Přednáška č. 9 Katedra ekonometrie FEM UO Brno Distribuční úlohy Budeme se zabývat 2 typy distribučních úloh dopravní úloha přiřazovací problém Dopravní úloha V dopravním problému se v typickém případě

Více

3.2.4 Podobnost trojúhelníků II

3.2.4 Podobnost trojúhelníků II 3..4 odobnost trojúhelníků II ředpoklady: 33 ř. 1: Na obrázku jsou nakresleny podobné trojúhelníky. Zapiš jejich podobnost (aby bylo zřejmé, který vrchol prvního trojúhelníku odpovídá vrcholu druhého trojúhelníku).

Více

Část 1 Funkce, lokální proměnné a přidělování paměti. Funkce a procedury. Část 2 Cykly a řízení jejich průchodu. Část 3 Příklady

Část 1 Funkce, lokální proměnné a přidělování paměti. Funkce a procedury. Část 2 Cykly a řízení jejich průchodu. Část 3 Příklady Část 1 Funkce, lokální proměnné a přidělování paměti Funkce a procedury Jan Faigl Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Přednáška 5 A0B36PR1 Programování 1 Jména

Více

Paradigmata programování 1

Paradigmata programování 1 Paradigmata programování 1 Akumulace Vilém Vychodil Katedra informatiky, PřF, UP Olomouc Přednáška 7 V. Vychodil (KI, UP Olomouc) Akumulace Přednáška 7 1 / 33 Přednáška 7: Přehled 1 Akumulace pomocí foldr

Více

Algoritmizace a programování

Algoritmizace a programování Algoritmizace a programování Procedurální programování Rekurze Jazyk C České vysoké učení technické Fakulta elektrotechnická Ver.1.10 J. Zděnek 2015 Procedurální programování - zásady Postupný návrh programu

Více

Hledání k-tého nejmenšího prvku

Hledání k-tého nejmenšího prvku ALG 14 Hledání k-tého nejmenšího prvku Randomized select CLRS varianta Partition v Quicksortu 0 Hledání k-tého nejmenšího prvku 1. 2. 3. Seřaď seznam/pole a vyber k-tý nejmenší, složitost (N*log(N)). Nevýhodou

Více

3. Ve zbylé množině hledat prvky, které ve srovnání nikdy nejsou napravo (nevedou do nich šipky). Dát do třetí

3. Ve zbylé množině hledat prvky, které ve srovnání nikdy nejsou napravo (nevedou do nich šipky). Dát do třetí DMA Přednáška Speciální relace Nechť R je relace na nějaké množině A. Řekneme, že R je částečné uspořádání, jestliže je reflexivní, antisymetrická a tranzitivní. V tom případě značíme relaci a řekneme,

Více

Zákonitosti, vztahy a práce s daty

Zákonitosti, vztahy a práce s daty 20mate matematika Jednotlivé kapitoly mají rozsah čtyř stran a každá kapitola je obohacena o rozšiřující učivo. sčítání a odčítání Zákonitosti, vztahy a práce s daty 1 Vyřeš úlohy. a) Součet všech čísel

Více

Př. 3: Dláždíme čtverec 12 x 12. a) dlaždice 2 x 3 12 je dělitelné 2 i 3 čtverec 12 x 12 můžeme vydláždit dlaždicemi 2 x 3.

Př. 3: Dláždíme čtverec 12 x 12. a) dlaždice 2 x 3 12 je dělitelné 2 i 3 čtverec 12 x 12 můžeme vydláždit dlaždicemi 2 x 3. 1..20 Dláždění III Předpoklady: 01019 Př. 1: Najdi n ( 84,96), ( 84,96) D. 84 = 4 21 = 2 2 7 96 = 2 = 4 8 = 2 2 2 2 2 D 84,96 = 2 2 = 12 (společné části rozkladů) ( ) n ( 84,96) = 2 2 2 2 2 7 = 672 (nejmenší

Více

Třídy a objekty -příklady

Třídy a objekty -příklady Třídy a objekty -příklady 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 Příklad 1 Kvadratická rovnice static void

Více

1.3.1 Kruhový pohyb. Předpoklady: 1105

1.3.1 Kruhový pohyb. Předpoklady: 1105 .. Kruhový pohyb Předpoklady: 05 Předměty kolem nás se pohybují různými způsoby. Nejde pouze o přímočaré nebo křivočaré posuvné pohyby. Velmi často se předměty otáčí (a některé se přitom pohybují zároveň

Více

STEREOMETRIE. Vzdálenost bodu od přímky. Mgr. Jakub Němec. VY_32_INOVACE_M3r0113

STEREOMETRIE. Vzdálenost bodu od přímky. Mgr. Jakub Němec. VY_32_INOVACE_M3r0113 STEREOMETRIE Vzdálenost bodu od přímky Mgr. Jakub Němec VY_32_INOVACE_M3r0113 VZDÁLENOST BODU OD PŘÍMKY V PROSTORU Při hledání vzdálenosti bodu od geometrického útvaru v prostoru je nutné si vždy úlohu

Více

= musíme dát pozor na: jmenovatel 2a, zda je a = 0 výraz pod odmocninou, zda je > 0, < 0, = 0 (pak je jediný kořen)

= musíme dát pozor na: jmenovatel 2a, zda je a = 0 výraz pod odmocninou, zda je > 0, < 0, = 0 (pak je jediný kořen) .8.7 Kvadratické rovnice s parametrem Předpoklady: 507, 803 Pedagogická poznámka: Na první pohled asi každého zarazí, že takřka celá hodina je psána jako příklady a studenti by ji měli vypracovat samostatně.

Více

Filtrace snímků ve frekvenční oblasti. Rychlá fourierova transformace

Filtrace snímků ve frekvenční oblasti. Rychlá fourierova transformace Filtrace snímků ve frekvenční oblasti Rychlá fourierova transformace semestrální práce z předmětu KIV/ZVI zpracoval: Jan Bařtipán A03043 bartipan@students.zcu.cz Obsah Úvod....3 Diskrétní Fourierova transformace

Více

Zvyšování kvality výuky technických oborů

Zvyšování kvality výuky technických oborů Zvyšování kvality výuky technických oborů Klíčová aktivita IV. Inovace a zkvalitnění výuky směřující k rozvoji matematické gramotnosti žáků středních škol Téma IV.. Kvadratické funkce, rovnice a nerovnice

Více

Algoritmizace a programování

Algoritmizace a programování Algoritmizace a programování Procedurální programování Rekurze Jazyk C České vysoké učení technické Fakulta elektrotechnická Ver.1.10 J. Zděnek 2015 Procedurální programování - zásady Postupný návrh programu

Více

INŽENÝRSKÁ MATEMATIKA LOKÁLNÍ EXTRÉMY

INŽENÝRSKÁ MATEMATIKA LOKÁLNÍ EXTRÉMY INŽENÝRSKÁ MATEMATIKA LOKÁLNÍ EXTRÉMY FUNKCÍ DVOU PROMĚNNÝCH Robert Mařík 2. října 2009 Obsah z = x 4 +y 4 4xy + 30..................... 3 z = x 2 y 2 x 2 y 2........................ 18 z = y ln(x 2 +y)..........................

Více

Operační systém teoreticky

Operační systém teoreticky Přednášky o výpočetní technice Operační systém teoreticky Adam Dominec 2010 Rozvržení Operační systém Uživatelské účty Správa RAM Plánování procesů Knihovny Okna Správa zařízení Rozvržení Operační systém

Více

16. února 2015, Brno Připravil: David Procházka

16. února 2015, Brno Připravil: David Procházka 16. února 2015, Brno Připravil: David Procházka Skrývání implementace Základy objektového návrhu Připomenutí návrhu použitelných tříd Strana 2 / 17 Obsah přednášky 1 Připomenutí návrhu použitelných tříd

Více

Principy překladačů. Architektury procesorů. Jakub Yaghob

Principy překladačů. Architektury procesorů. Jakub Yaghob Principy překladačů Architektury procesorů Jakub Yaghob Architektury procesorů Architektura procesoru představuje cílový jazyk Platí pro překladače do kódu konkrétního procesoru Ovlivňuje celý backend

Více

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

4.2.7 Voltampérová charakteristika rezistoru a žárovky

4.2.7 Voltampérová charakteristika rezistoru a žárovky 4.2.7 Voltampérová charakteristika rezistoru a žárovky Předpoklady: 4205 Pedagogická poznámka: Tuto hodinu učím jako běžnou jednohodinovku s celou třídou. Některé dvojice stihnou naměřit více odporů. Voltampérová

Více

Intervalové stromy. Představme si, že máme posloupnost celých čísel p 0, p 1,... p N 1, se kterou budeme. 1. Změna jednoho čísla v posloupnosti.

Intervalové stromy. Představme si, že máme posloupnost celých čísel p 0, p 1,... p N 1, se kterou budeme. 1. Změna jednoho čísla v posloupnosti. Intervalové stromy Představme si, že máme posloupnost celých čísel p 0, p 1,... p N 1, se kterou budeme průběžně provádět tyto dvě operace: 1. Změna jednoho čísla v posloupnosti. 2. Zjištění součtu čísel

Více

( ) 2.5.7 Neúplné kvadratické rovnice. Předpoklady: 020501

( ) 2.5.7 Neúplné kvadratické rovnice. Předpoklady: 020501 ..7 Neúplné kvadratické rovnice Předpoklady: Pedagogická poznámka: Tato hodina patří mezi vzácné výjimky, kdy naprostá většina studentů skončí více než pět minut před zvoněním. Nechávám je dělat něco jiného

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

Kalendář je nástroj, který vám pomůže zorganizovat si pracovní čas. Zaznamenáváme do něj události jako schůzky, termíny odevzdání práce a podobně.

Kalendář je nástroj, který vám pomůže zorganizovat si pracovní čas. Zaznamenáváme do něj události jako schůzky, termíny odevzdání práce a podobně. III. je nástroj, který vám pomůže zorganizovat si pracovní čas. Zaznamenáváme do něj události jako schůzky, termíny odevzdání práce a podobně. V levé spodní části okna Outlook si stisknutím tlačítka zobrazíme

Více

Pracovní ukázka vstupního testu DSA 1.

Pracovní ukázka vstupního testu DSA 1. Pracovní ukázka vstupního testu DSA 1. Celkem můžete získat 6 bodů, k úspěšnému vyřešení testu je nutno získat alespoň 4 body. V úloze 1. získáte 1 bod za každou správně určenou hodnotu. V úlohách 2. a

Více

Pingpongový míček. Petr Školník, Michal Menkina. TECHNICKÁ UNIVERZITA V LIBERCI Fakulta mechatroniky, informatiky a mezioborových studií

Pingpongový míček. Petr Školník, Michal Menkina. TECHNICKÁ UNIVERZITA V LIBERCI Fakulta mechatroniky, informatiky a mezioborových studií Petr Školník, Michal Menkina TECHNICKÁ UNIVERZITA V LIBERCI Fakulta mechatroniky, informatiky a mezioborových studií Tento materiál vznikl v rámci projektu ESF CZ.1.7/../7.47, který je spolufinancován

Více

4.6.6 Složený sériový RLC obvod střídavého proudu

4.6.6 Složený sériový RLC obvod střídavého proudu 4.6.6 Složený sériový LC obvod střídavého proudu Předpoklady: 41, 4605 Minulá hodina: odpor i induktance omezují proud ve střídavém obvodu, nemůžeme je však sčítat normálně, ale musíme použít Pythagorovu

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

( ) ( ) ( ) 2 ( ) 2.7.16 Rovnice s neznámou pod odmocninou II. Předpoklady: 2715

( ) ( ) ( ) 2 ( ) 2.7.16 Rovnice s neznámou pod odmocninou II. Předpoklady: 2715 .7.6 Rovnice s neznámou pod odmocninou II Předpoklady: 75 Př. : Vyřeš rovnici y + + y = 4 y + + y = 4 / ( y + + y ) = ( 4) y + + 4 y + y + 4 y = 6 5y + 4 y + y = 8 5y + 4 y + y = 8 - v tomto stavu nemůžeme

Více

Tvorba trendové funkce a extrapolace pro roční časové řady

Tvorba trendové funkce a extrapolace pro roční časové řady Tvorba trendové funkce a extrapolace pro roční časové řady Příklad: Základem pro analýzu je časová řada živě narozených mezi lety 1970 a 2005. Prvním úkolem je vybrat vhodnou trendovou funkci pro vystižení

Více

Matematika a její aplikace. Matematika a její aplikace

Matematika a její aplikace. Matematika a její aplikace Šablona č. 5, sada č. 2 Vzdělávací oblast Vzdělávací obor Tematický okruh Matematika a její aplikace Matematika a její aplikace Početní operace násobení a dělení Téma Násobení a dělení čísly 2, 3, 4, 5

Více

Mobilní aplikace pro ios

Mobilní aplikace pro ios Předběžná zadávací dokumentace k projektu: Mobilní aplikace pro ios Kontaktní osoba: Jan Makovec, makovec@ckstudio.cz Obsah Cíl projektu... 2 Obrazovky aplikace... 2 Základní prostředí aplikace... 2 Intro...

Více

Gymnázium Vysoké Mýto nám. Vaňorného 163, 566 01 Vysoké Mýto

Gymnázium Vysoké Mýto nám. Vaňorného 163, 566 01 Vysoké Mýto Gymnázium Vysoké Mýto nám. Vaňorného 163, 566 01 Vysoké Mýto Registrační číslo projektu Šablona Autor Název materiálu CZ.1.07/1.5.00/34.0951 III/2 INOVACE A ZKVALITNĚNÍ VÝUKY PROSTŘEDNICTVÍM ICT Mgr. Jana

Více

int t1, t2, t3, t4, t5, t6, t7, prumer; t1=sys.readint();... t7=sys.readint(); prume pru r = r = ( 1+t 1+t t3+ t3+ t4 t5+ t5+ +t7 +t7 )/ ;

int t1, t2, t3, t4, t5, t6, t7, prumer; t1=sys.readint();... t7=sys.readint(); prume pru r = r = ( 1+t 1+t t3+ t3+ t4 t5+ t5+ +t7 +t7 )/ ; Pole Příklad: přečíst teploty naměřené v jednotlivých dnech týdnu, vypočítat průměrnou teplotu a pro každý den vypsat odchylku od průměrné teploty Řešení s proměnnými typu int: int t1, t2, t3, t4, t5,

Více

Postup práce s elektronickým podpisem

Postup práce s elektronickým podpisem Obsah 1. Obecné informace o elektronickém podpisu... 2 2. Co je třeba nastavit, abyste mohli používat elektronický podpis v MS2014+... 2 2.1. Microsoft Silverlight... 2 2.2. Zvýšení práv pro MS Silverlight...

Více

Plán předmětu Název předmětu: Školní rok: Ročník: Semestr: Typ předmětu: Rozsah předmětu: Počet kreditů: Přednášející: Cvičící: Cíl předmětu

Plán předmětu Název předmětu: Školní rok: Ročník: Semestr: Typ předmětu: Rozsah předmětu: Počet kreditů: Přednášející: Cvičící: Cíl předmětu Plán předmětu Název předmětu: Algoritmizace a programování (PAAPP) Školní rok: 2009/2010 Ročník: I Semestr: II. (letní) Typ předmětu: povinný Rozsah předmětu: 3 3 z, zk Počet kreditů: 6 Přednášející: RNDr.

Více

Příklady a návody. Databázová vrstva

Příklady a návody. Databázová vrstva Příklady a návody Databázová vrstva Konceptuální datový model Popis dat.struktur pomocí entit, atributů, vazeb a integritních omezení ER-model nebo OO-diagramy (class diagram) ER model zdůrazňuje vztahy

Více

DUM téma: KALK Výrobek sestavy

DUM téma: KALK Výrobek sestavy DUM téma: KALK Výrobek sestavy ze sady: 2 tematický okruh sady: Příprava výroby a ruční programování CNC ze šablony: 6 Příprava a zadání projektu Určeno pro : 3 a 4 ročník vzdělávací obor: 23-41-M/01 Strojírenství

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

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

přirozený algoritmus seřadí prvky 1,3,2,8,9,7 a prvky 4,5,6 nechává Metody řazení se dělí: Metody řazení ve vnitřní a vnější paměti. Algoritmy řazení výběrem, vkládáním a zaměňováním. Heapsort, Shell-sort, Radix-sort, Quicksort. Řazení sekvenčních souborů. Řazení souborů s přímým přístupem.

Více

9.2.5 Sčítání pravděpodobností I

9.2.5 Sčítání pravděpodobností I 9.2.5 Sčítání pravděpodobností I Předpoklady: 9203 Pedagogická poznámka: Následující problém sice zadávám jako příklad, ale minimálně na začátku s žáky počítám na tabuli. I kvůli tomu, aby jejich úprava

Více

1.1.1 Kvadratické rovnice (dosazení do vzorce) I

1.1.1 Kvadratické rovnice (dosazení do vzorce) I .. Kvadratické rovnice (dosazení do vzorce) I Předpoklady: základní početní operace Rovnicí se nazývá vztah rovnosti mezi dvěma výrazy obsahujícími jednu nebo více neznámých. V této kapitole se budeme

Více

Výsledky testování školy. Druhá celoplošná generální zkouška ověřování výsledků žáků na úrovni 5. a 9. ročníků základní školy. Školní rok 2012/2013

Výsledky testování školy. Druhá celoplošná generální zkouška ověřování výsledků žáků na úrovni 5. a 9. ročníků základní školy. Školní rok 2012/2013 Výsledky testování školy Druhá celoplošná generální zkouška ověřování výsledků žáků na úrovni 5. a 9. ročníků základní školy Školní rok 2012/2013 Základní škola Ústí nad Orlicí, Komenského 11 Termín zkoušky:

Více

DSA, První krok: máme dokázat, že pro left = right vrátí volání f(array, elem, left, right)

DSA, První krok: máme dokázat, že pro left = right vrátí volání f(array, elem, left, right) Indukcí dokažte následující výrok: pokud lef t a right jsou parametry funkce f a platí left right, pak volání f(array, left, right) vrátí minimální hodnotu z hodnot všech prvků v poli array na indexech

Více

Střední průmyslová škola strojnická Olomouc, tř.17. listopadu 49

Střední průmyslová škola strojnická Olomouc, tř.17. listopadu 49 Střední průmyslová škola strojnická Olomouc, tř.17. listopadu 49 Výukový materiál zpracovaný v rámci projektu Výuka moderně Registrační číslo projektu: CZ.1.07/1.5.00/34.0205 Šablona: III/2 Informační

Více

Sada 2 - MS Office, Excel

Sada 2 - MS Office, Excel S třední škola stavební Jihlava Sada 2 - MS Office, Excel 20. Excel 2007. Kontingenční tabulka Digitální učební materiál projektu: SŠS Jihlava šablony registrační číslo projektu:cz.1.09/1.5.00/34.0284

Více

JAK PŘIDAT UŽIVATELE PRO ADMINISTRÁTORY

JAK PŘIDAT UŽIVATELE PRO ADMINISTRÁTORY JAK PŘIDAT UŽIVATELE PRO ADMINISTRÁTORY Po vytvoření nové společnosti je potřeba vytvořit nové uživatele. Tato volba je dostupná pouze pro administrátory uživatele TM s administrátorskými právy. Tento

Více

1.2.26 Přepočet přes jednotku - podruhé II

1.2.26 Přepočet přes jednotku - podruhé II 1.2.26 Přepočet přes jednotku - podruhé II Předpoklady: 010225 Pedagogická poznámka: První příklad nechávám řešit žáky, pak diskutujeme důvodech dělení. Př. 1: Za 0,85 hodiny zalévání spotřebovalo zavlažovací

Více

Google Apps. pošta 2. verze 2012

Google Apps. pošta 2. verze 2012 Google Apps pošta verze 0 Obsah Obsah... Úvod... Přečtení emailu... Napsání emailu... Odpověď na email... 6 Úvod V dnešní době chce mít každý své informace po ruce. Díky Internetu a online aplikacím je

Více

Semestrální práce NÁVRH ÚZKOPÁSMOVÉHO ZESILOVAČE. Daniel Tureček zadání číslo 18 cvičení: sudý týden 14:30

Semestrální práce NÁVRH ÚZKOPÁSMOVÉHO ZESILOVAČE. Daniel Tureček zadání číslo 18 cvičení: sudý týden 14:30 Semestrální práce NÁVRH ÚZKOPÁSMOVÉHO ZESILOVAČE Daniel Tureček zadání číslo 18 cvičení: sudý týden 14:30 1. Ověření stability tranzistoru Při návrhu úzkopásmového zesilovače s tranzistorem je potřeba

Více

IMPORT A EXPORT MODULŮ V PROSTŘEDÍ MOODLE

IMPORT A EXPORT MODULŮ V PROSTŘEDÍ MOODLE Nové formy výuky s podporou ICT ve školách Libereckého kraje IMPORT A EXPORT MODULŮ V PROSTŘEDÍ MOODLE Podrobný návod Autor: Mgr. Michal Stehlík IMPORT A EXPORT MODULŮ V PROSTŘEDÍ MOODLE 1 Úvodem Tento

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

Aritmetika s didaktikou I.

Aritmetika s didaktikou I. Katedra matematiky PF UJEP Aritmetika s didaktikou I. KM1 / 0001 Přednáška 03 Operace v množině, vlastnosti binárních operací O čem budeme hovořit: zavedení pojmu operace binární, unární a další operace

Více

Kapitola 7: Integrál. 1/14

Kapitola 7: Integrál. 1/14 Kapitola 7: Integrál. 1/14 Neurčitý integrál. Definice: Necht f je funkce definovaná na intervalu I. Funkci F definovanou na intervalu I, pro kterou platí F (x) = f (x) x I nazýváme primitivní funkcí k

Více

15 s. Analytická geometrie lineárních útvarů

15 s. Analytická geometrie lineárních útvarů 5 s Analytická geometrie lineárních útvarů ) Na přímce: a) Souřadnice bodu na přímce: Bod P nazýváme počátek - jeho souřadnice je P [0] Nalevo od počátku leží čísla záporná, napravo čísla kladná. Každý

Více

2.7.1 Mocninné funkce s přirozeným mocnitelem

2.7.1 Mocninné funkce s přirozeným mocnitelem .7. Mocninné funkce s přirozeným mocnitelem Předpoklad: 0 Pedagogická poznámka: K následujícím třem hodinám je možné přistoupit dvěma způsob. Já osobně doporučuji postupovat podle učebnice. V takovém případě

Více

Na začátku rozdělíme práci a určíme, které podproblémy je potřeba vyřešit. Tyto

Na začátku rozdělíme práci a určíme, které podproblémy je potřeba vyřešit. Tyto Kapitola 1 Rozděl a panuj Rozděl a panuj je programovací metoda. Často se označuje latinsky Divide et Empera nebo anglicky Divide and Conquer. Vychází z toho, že umíme zadaný problém rozložit na menší

Více

Třídění a vyhledávání Searching and sorting

Třídění a vyhledávání Searching and sorting Třídění a vyhledávání Searching and sorting Jan Kybic http://cmp.felk.cvut.cz/~kybic kybic@fel.cvut.cz 2016 1 / 33 Vyhledávání Třídění Třídící algoritmy 2 / 33 Vyhledávání Searching Mějme posloupnost (pole)

Více

Důkazové metody. Teoretická informatika Tomáš Foltýnek

Důkazové metody. Teoretická informatika Tomáš Foltýnek Důkazové metody Teoretická informatika Tomáš Foltýnek foltynek@pef.mendelu.cz Matematický důkaz Jsou dány axiomy a věta (tvrzení, teorém), o níž chceme ukázat, zda platí. Matematický důkaz je nezpochybnitelné

Více

Výsledky testování školy. Druhá celoplošná generální zkouška ověřování výsledků žáků na úrovni 5. a 9. ročníků základní školy. Školní rok 2012/2013

Výsledky testování školy. Druhá celoplošná generální zkouška ověřování výsledků žáků na úrovni 5. a 9. ročníků základní školy. Školní rok 2012/2013 Výsledky testování školy Druhá celoplošná generální zkouška ověřování výsledků žáků na úrovni 5. a 9. ročníků základní školy Školní rok 2012/2013 Gymnázium, Šternberk, Horní náměstí 5 Termín zkoušky: 13.

Více

Používání IS Carsystem

Používání IS Carsystem Používání IS Carsystem Filtrování dat se SW Carsys Jak řadit a filtrovat data v agendách... 1 I. Používání filtrů... 1 II. Uložené filtry... 2 III. Vyvolávání filtrů... 3 Jak zobrazit potřebná data...

Více

Stromy. Základní pojmy

Stromy. Základní pojmy Základní pojmy Strom je matematická abstrakce organizace dynamických množin, kterou v běžném životě používáme (možná nevědomě) velice často. Příkladem může být rodokmen, tedy například struktura z druhé

Více

(a) = (a) = 0. x (a) > 0 a 2 ( pak funkce má v bodě a ostré lokální maximum, resp. ostré lokální minimum. Pokud je. x 2 (a) 2 y (a) f.

(a) = (a) = 0. x (a) > 0 a 2 ( pak funkce má v bodě a ostré lokální maximum, resp. ostré lokální minimum. Pokud je. x 2 (a) 2 y (a) f. I. Funkce dvou a více reálných proměnných 5. Lokální extrémy. Budeme uvažovat funkci f = f(x 1, x 2,..., x n ), která je definovaná v otevřené množině G R n. Řekneme, že funkce f = f(x 1, x 2,..., x n

Více

Tabulky Word 2007 - egon. Tabulky, jejich formátování, úprava, změna velikosti

Tabulky Word 2007 - egon. Tabulky, jejich formátování, úprava, změna velikosti Tabulky Word 2007 - egon Tabulky, jejich formátování, úprava, změna velikosti Jan Málek 26.7.2010 Tabulky Tabulky nám pomáhají v pochopení, jak mezi sebou souvisí určité informace, obohacují vzhled dokumentu

Více

Jméno autora: Mgr. Zdeněk Chalupský Datum vytvoření: 5. 9. 2012 Číslo DUM: VY_32_INOVACE_13_FY_A

Jméno autora: Mgr. Zdeněk Chalupský Datum vytvoření: 5. 9. 2012 Číslo DUM: VY_32_INOVACE_13_FY_A Jméno autora: Mgr. Zdeněk Chalupský Datum vytvoření: 5. 9. 2012 Číslo DUM: VY_32_INOVACE_13_FY_A Ročník: I. Fyzika Vzdělávací oblast: Přírodovědné vzdělávání Vzdělávací obor: Fyzika Tematický okruh: Mechanika

Více

AUTORKA Barbora Sýkorová

AUTORKA Barbora Sýkorová ČÍSLO SADY III/2 AUTORKA Barbora Sýkorová NÁZEV SADY: Číslo a proměnná číselné označení DUM NÁZEV DATUM OVĚŘENÍ DUM TŘÍDA ANOTACE PLNĚNÉ VÝSTUPY KLÍČOVÁ SLOVA FORMÁT (pdf,, ) 1 Pracovní list číselné výrazy

Více

Metodika - Postupy optimálního využití moderních komunikačních kanálů

Metodika - Postupy optimálního využití moderních komunikačních kanálů Informatika v telemedicíně FBMI ČVUT Metodika - Postupy optimálního využití moderních komunikačních kanálů Kolektiv autorů: David Gillar, Jiří Brada, Mikuláš Miček, Miroslav Poledňák, Marie Tichá, Martin

Více

Bubble sort. příklad. Shaker sort

Bubble sort. příklad. Shaker sort Bubble sort pseudokód function bubblesort(array a) for i in 1 -> a.length - 1 do for j in 1 -> a.length - i - 1 do if a[j] < a[j+1] prohoď(a[j], a[j+1]); //razeni od nejvyssiho function bubblesort(int[]

Více

Dualita v úlohách LP Ekonomická interpretace duální úlohy. Jiří Neubauer. Katedra ekonometrie FEM UO Brno

Dualita v úlohách LP Ekonomická interpretace duální úlohy. Jiří Neubauer. Katedra ekonometrie FEM UO Brno Přednáška č. 6 Katedra ekonometrie FEM UO Brno Uvažujme obecnou úlohu lineárního programování, tj. úlohu nalezení takového řešení vlastních omezujících podmínek a 11 x 1 + a 1 x +... + a 1n x n = b 1 a

Více

Svobodná chebská škola, základní škola a gymnázium s.r.o. Zlomky sčítání a odčítání. Dušan Astaloš. samostatná práce, případně skupinová práce

Svobodná chebská škola, základní škola a gymnázium s.r.o. Zlomky sčítání a odčítání. Dušan Astaloš. samostatná práce, případně skupinová práce METODICKÝ LIST DA2 Název tématu: Autor: Předmět: Zlomky sčítání a odčítání Dušan Astaloš Matematika Ročník:. Učebnice: Kapitola, oddíl: Metody výuky: Formy výuky: Cíl výuky: Získané dovednosti: Stručný

Více

PŘÍRUČKA K POUŽÍVÁNÍ APLIKACE HELPDESK

PŘÍRUČKA K POUŽÍVÁNÍ APLIKACE HELPDESK PŘÍRUČKA K POUŽÍVÁNÍ APLIKACE HELPDESK Autor: Josef Fröhlich Verze dokumentu: 1.1 Datum vzniku: 4.4.2006 Datum poslední úpravy: 10.4.2006 Liberecká IS, a.s.;jablonecká 41; 460 01 Liberec V; IČ: 25450131;

Více

PHP formátování řetězců

PHP formátování řetězců PHP formátování řetězců V této části se budeme zabývat relativně podrobně formátováním řetězců v PHP. Kdy se nám může formátování řetězců hodit? Například při generování loginů, jako jednoznačných identifikátorů

Více

Název: VY_32_INOVACE_PG3309 Booleovské objekty ve 3DS Max - sčítání a odčítání objektů

Název: VY_32_INOVACE_PG3309 Booleovské objekty ve 3DS Max - sčítání a odčítání objektů Název: VY_32_INOVCE_PG3309 ooleovské objekty ve 3DS Max - sčítání a odčítání objektů utor: Mgr. Tomáš Javorský Datum vytvoření: 05 / 2012 Ročník: 3 Vzdělávací oblast / téma: 3D grafika, počítačová grafika,

Více