Rekurze. IB111 Základy programování Radek Pelánek
|
|
- Jiřina Tomanová
- před 6 lety
- Počet zobrazení:
Transkript
1 Rekurze IB111 Základy programování Radek Pelánek / 72
2 xkcd: Tabletop Roleplaying 2 / 72
3 To iterate is human, to recurse divine. (L. Peter Deutsch) 3 / 72
4 Rekurze použití funkce při její vlastní definici volání sebe sama (s jinými parametry) 4 / 72
5 Sebereference 5 / 72
6 Sebereferenční test 1 Které písmeno není správnou odpovědí na žádnou otázku: (A) A (B) C (C) B 2 Odpověd na 3. otázku je: (A) stejná jako na 1. otázku (B) stejná jako na 2. otázku (C) jiná než odpovědi na 1. a 2. otázku 3 První otázka, na kterou je odpověd A, je otázka: (A) 1 (B) 2 (C) 3 Hlavolamikon 6 / 72
7 Piráti 5 pirátů si děĺı poklad: 100 mincí nejstarší pirát navrhne rozdělení, následuje hlasování alespoň polovina hlasů rozděleno, hotovo jinak navrhující pirát zabit, pokračuje druhý nejstarší (a tak dále) (rekurze!) priority 1 přežít 2 mít co nejvíce mincí 3 zabít co nejvíc ostatních pirátů složitější varianty: 6 pirátů a 1 mince, 300 pirátů a 100 mincí 7 / 72
8 Rekurze a sebereference Rekurze a sebereference kĺıčové myšlenky v informatice některé souvislosti: matematická indukce funkcionální programování rekurzivní datové struktury (např. stromy) gramatiky logika, neúplnost nerozhodnutelnost, diagonalizace 8 / 72
9 Rekurze a sebereference... nejen v informatice M. C. Escher; Drawing Hands, 1948 Gödel, Escher, Bach: An Eternal Golden Braid; Douglas Hofstadter 9 / 72
10 Rekurze a úvodní programování uvedené aplikace rekurze a sebereference často poměrně náročné hodí se pořádně pochopit rekurzi na úrovni jednoduchých programů bezprostřední návaznost Algoritmy a datové struktury 10 / 72
11 Faktoriál f (n) = n! = 1 2 (n 1) n { 1 pokud n = 1 n f (n 1) pokud n > 1 11 / 72
12 Faktoriál iterativně (pomocí cyklu) def fact(n): f = 1 for i in range(1, n+1): f = f * i return f 12 / 72
13 Faktoriál rekurzivně def fact(n): if n == 1: return 1 else: return n * fact(n-1) 13 / 72
14 Faktoriál rekurzivně ilustrace výpočtu fact(4) 24 4 * fact(3) 6 3 * fact(2) 2 2 * fact(1) / 72
15 Příklad: výpis čísel Vymyslete funkci, která: vypíše čísla od 1 do N pomocí rekurze bez použití cyklů for, while 15 / 72
16 Příklad: výpis čísel Vymyslete funkci, která: vypíše čísla od 1 do N pomocí rekurze bez použití cyklů for, while def sequence(n): if n > 1: sequence(n-1) print(n) 16 / 72
17 Co udělá tento program? def test(n): print(n) if n > 1: test(n-1) print(-n) test(5) 17 / 72
18 Ilustrace zanořování test(3) 3 test(2) 2 test(1) / 72
19 Nepřímá rekurze def even(n): print("even", n) odd(n-1) def odd(n): print("odd", n) if n > 1: even(n-1) even(10) 19 / 72
20 Rekurzivní stromeček 20 / 72
21 Rekurzivní stromeček nakreslit stromeček znamená: udělat stonek nakreslit dva menší stromečky (pootočené) vrátit se na původní pozici 21 / 72
22 Stromeček želví grafikou def tree(length): forward(length) if length > 10: left(45) tree(0.6 * length) right(90) tree(0.6 * length) left(45) back(length) 22 / 72
23 Podoby rekurze, odstranění rekurze koncová rekurze (tail recursion) rekurzivní volání je poslední příkaz funkce lze vesměs přímočaře nahradit cyklem plná rekurze zanořující se volání např. stromeček lze přepsat bez použití rekurze za použití zásobníku rekurzivní podoba často výrazně elegantnější 23 / 72
24 Hanojské věže aneb O konci světa video: klášter kdesi vysoko v horách u města Hanoj velká místnost se třemi vyznačenými místy 64 různě velkých zlatých disků podle věštby mají mniši přesouvat disky z prvního na třetí místo a až to dokončí / 72
25 Hanojské věže: pravidla N disků různých velikostí naskládaných na sobě vždy může být jen menší disk položen na větším možnost přesunout jeden horní disk na jiný koĺıček cíl: přesunout vše z prvního na třetí 25 / 72
26 Hanojské věže: řešení A B C A B C A B C A B C A B C A B C A B C A B C 26 / 72
27 Hanojské věže: výstup programu >>> solve(3, "A", "B", "C") A -> B A -> C B -> C A -> B C -> A C -> B A -> B 27 / 72
28 Hanojské věže: rekurzivní řešení def solve(n, start, end, auxiliary): if n == 1: print(start, "->", end) else: solve(n-1, start, auxiliary, end) solve(1, start, end, auxiliary) solve(n-1, auxiliary, end, start) 28 / 72
29 Řešení včetně vypisování stavu * *** ***** *** ***** * ***** *** * * ***** *** * *** ***** * *** ***** / 72
30 Stav úlohy, reprezentace stav úlohy = rozmístění disků na koĺıcích disky na koĺıku A seznam celkový stav: 3 proměnné, v každé seznam nepěkné seznam seznamů, koĺıky interně značíme 0, 1, 2 příklad stavu (6 disků): [[4], [5, 2, 1], [6, 3]] 30 / 72
31 Řešení včetně vypisování stavu def solve(n, start, end, aux, state): if n==1: disc = state[start].pop() state[end].append(disc) print_state(state) else: solve(n-1, start, aux, end, state) solve(1, start, end, aux, state) solve(n-1, aux, end, start, state) def solve_hanoi(n): state = [list(range(n,0,-1)), [], []] print_state(state) solve(n, 0, 2, 1, state) 31 / 72
32 Vypisování stavu jednoduše def print_state(state): print(state) print("--") def print_state(state): for i in range(3): print("peg", chr(ord( A )+i), state[i]) print("--") 32 / 72
33 Vypisování stavu textová grafika def print_state(state): n = sum([len(s) for s in state]) for y in range(n+1): line = "" for peg in range(3): for x in range(-n+1, n): if len(state[peg]) > n-y and abs(x) < state[peg][n-y]: line += "*" else: line += " " line += " " print(line) print("-"*(n*6+1)) 33 / 72
34 Sierpińského fraktál rekurzivně definovaný geometrický útvar 34 / 72
35 Sierpińského fraktál 35 / 72
36 Sierpińského fraktál: kód def sierpinski(n, length): if n == 1: triangle(length) else: for i in range(3): sierpinski(n - 1, length) forward((2 ** (n - 1)) * length) right(120) 36 / 72
37 Další podobné fraktály 37 / 72
38 Robotanik tutor.fi.muni.cz, úloha Robotanik jednoduché grafické programování robota těžší příklady založeny na rekurzi vizualizace průběhu výpočtu, zanořování a vynořování z rekurze 38 / 72
39 Robotanik Kurz počítání rekurze jako pamět 39 / 72
40 Robotanik 40 / 72
41 Pokrývání plochy L kostičkami mřížka 8 8 s chybějícím levým horním polem úkol: pokrýt zbývající poĺıčka pomocí L kostiček rozšíření: rozměr 2 n 2 n chybějící libovolné pole obarvení 3 barvami, aby sousedi byli různí 41 / 72
42 Ukázky řešení 42 / 72
43 Řešení rozdělit na čtvrtiny umístit jednu kostku rekurzivně aplikovat řešení na jednotlivé části 43 / 72
44 Kahoot 44 / 72
45 Kahoot: program A def magic(n): return n + magic(n) 45 / 72
46 Kahoot: program B def test(n): if n > 0: print(n, end="") test(n-1) print(n, end="") test(3) 46 / 72
47 Přemýšlení o funkcích (rekurzivních obzvlášt ) obecně pro funkce: ujasnit vstupně-výstupní chování než začnu psát funkci rekurzivní funkce navíc: při psaní funkce předpokládám, že mám již funkci hotovou problém převedu na řešení menšího problému (který již umím vyřešit) ošetřím koncovou podmínku 47 / 72
48 Otočení řetězce rekurzivně >>> reverse("star wars") sraw rats 48 / 72
49 Otočení řetězce rekurzivně >>> reverse("star wars") sraw rats def reverse(s): if len(s) <= 1: return s return reverse(s[1:]) + s[0] 48 / 72
50 Kontrolní otázka Co dělá následující funkce (vstup je řetězec)? def magic(s): if len(s) <= 1: return s return magic(s[1:]) 49 / 72
51 Seznam vnořených seznamů Seznam čísel a vnořených seznamů čísel (SČAVSČ) je seznam, který obsahuje čísla nebo SČAVSČ. rekurzivní datová struktura scavsc = [[2, 8], 4, [3, [1, 7], 6], [2, 4]] Jak vypočítat součet všech čísel? 50 / 72
52 Součet vnořených seznamů def nested_list_sum(alist): total = 0 for x in alist: if isinstance(x, list): total += nested_list_sum(x) else: total += x return total 51 / 72
53 Příklady použití rekurze v informatice Euclidův algoritmus NSD vyhledávání opakovaným půlením řadicí algoritmy (quicksort, mergesort) generování permutací, kombinací fraktály prohledávání grafu do hloubky gramatiky 52 / 72
54 Euklidův algoritmus rekurzivně def nsd(a,b): if b == 0: return a else: return nsd(b, a % b) 53 / 72
55 Vyhledávání opakovaným půlením hra na 20 otázek hledání v seznamu hledání v binárním stromu 54 / 72
56 Vyhledávání: rekurzivní varianta def binary_search(value, alist, lower, upper): if lower > upper: return False mid = (lower + upper) // 2 if alist[mid] < value: return binary_search(value, alist, mid+1, upper) elif alist[mid] > value: return binary_search(value, alist, lower, mid-1) return True 55 / 72
57 Řadicí algoritmy quicksort vyber pivota rozděl na menší a větší zavolej quicksort na podčásti mergesort rozděl na polovinu každou polovinu seřad pomocí mergesort spoj obě poloviny 56 / 72
58 Generování permutací, kombinací permutace množiny = všechna možná pořadí příklad: permutace množiny {1, 2, 3, 4} jak je vypsat systematicky? jak využít rekurzi? k-prvkové kombinace n-prvkové množiny = všechny možné výběry k prvků příklad: 3-prvkové kombinace množiny {A, B, C, D, E} jak je vypsat systematicky? jak využít rekurzi? 57 / 72
59 Kombinace ( ) n = k ( ) n 1 + k 1 ( ) n 1 k def combinations(alist, k): if k == 0: return [[]] if len(alist) < k: return [] output = [] for comb in combinations(alist[1:], k-1): comb.append(alist[0]) output.append(comb) output.extend(combinations(alist[1:], k)) return output 58 / 72
60 Nevhodné použití rekurze ne každé použití rekurze je efektivní Fibonacciho posloupnost (kráĺıci): f 1 = 1 f 2 = 1 f n = f n 1 + f n 2 1, 1, 2, 3, 5, 8, 13, 21, 34,... Vi Hart: Doodling in Math: Spirals, Fibonacci, and Being a Plant 59 / 72
61 Fibonacciho posloupnost: rekurzivně def fib(n): if n <= 2: return 1 else: return fib(n-1) + fib(n-2) 60 / 72
62 Fibonacciho posloupnost: rekurzivní výpočet fib(5) fib(3) + fib(4) fib(1) + fib(2) fib(2) + fib(3) fib(1) + fib(2) / 72
63 Problém N dam šachovnice N N rozestavit N dam tak, aby se vzájemně neohrožovaly zkuste pro N = 4 pozn. speciální případ problému splnění podmínek 62 / 72
64 Problém N dam řešení 63 / 72
65 Problém N dam algoritmus ilustrace algoritmu backtracking hrubá síla, ale chytře začneme s prázdným plánem, systematicky zkoušíme umist ovat dámy pokud najdeme kolizi, vracíme se a zkoušíme jinou možnost přirozený rekurzivní zápis 64 / 72
66 Problém N dam backtracking řešení 65 / 72
67 Problém N dam reprezentace stavu pro každé pole si pamatujeme, zda na něm je/není dáma dvourozměrný seznam True/False pro každou dámu si pamatujeme její souřadnice seznam dvojic x i, y i pro každý řádek si pamatujeme, v kterém sloupci je dáma seznam čísel x i nejvýhodnější reprezentace 66 / 72
68 Problém N dam řešení def solve_queens(n, state): if len(state) == n: output(state) return True else: for i in range(n): state.append(i) if check_queens(state): if solve_queens(n, state): return True state.pop() return False 67 / 72
69 Kdy se ohrožují dvě dámy? y 1 x 1 x 2 y 2 68 / 72
70 Kdy se ohrožují dvě dámy? x 1 x 2 y 1 y 2 x 1 = x 2 y 1 = y 2 x 1 + y 1 = x 2 + y 2 x 1 y 1 = x 2 y 2 69 / 72
71 Problém N dam řešení def output(state): for y in range(len(state)): for x in range(len(state)): if state[y]==x: print("x", end=" ") else: print(".", end=" ") print() print() def check_queens(state): for y1 in range(len(state)): x1 = state[y1] for y2 in range(y1+1, len(state)): x2 = state[y2] if x1 == x2 or x1-y1 == x2-y2 or\ x1+y1 == x2+y2: return False 70 / 72
72 Backtracking další příklady použití mnoho logických úloh: Sudoku a podobné úlohy algebrogramy (SEND + MORE = MONEY) optimalizační problémy (např. rozvrhování, plánování) obecný problém splnění podmínek 71 / 72
73 Shrnutí rekurze: využití rekurze pro definici sebe sama logické úlohy: Hanojské věže, L kostičky, dámy na šachovnici fraktály aplikace v programování: vyhledávání, řazení, prohledávání grafu kĺıčová myšlenka v informatice nezapomeňte na piráty 72 / 72
Rekurze. IB111 Úvod do programování
Rekurze IB111 Úvod do programování 2016 1 / 69 XKCD: Tabletop Roleplaying https://xkcd.com/244/ 2 / 69 To iterate is human, to recurse divine. (L. Peter Deutsch) 3 / 69 Rekurze použití funkce při její
Rekurze. IB111 Úvod do programování skrze Python
Rekurze IB111 Úvod do programování skrze Python 2015 1 / 64 XKCD: Tabletop Roleplaying https://xkcd.com/244/ 2 / 64 To iterate is human, to recurse divine. (L. Peter Deutsch) 3 / 64 Rekurze použití funkce
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:
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ě
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,
Kombinatorika, výpočty
Kombinatorika, výpočty Radek Pelánek IV122 Styl jednoduché výpočty s čísly vesměs spíše opakování + pár dílčích zajímavostí užitečný trénink programování Kombinace, permutace, variace Daná množina M s
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
IB111 Úvod do programování skrze Python
Vyhledávání, řazení, složitost IB111 Úvod do programování skrze Python 2014 1 / 48 Otrávené studny 8 studen, jedna z nich je otrávená laboratorní rozbor dokáže rozpoznat přítomnost jedu ve vodě je drahý
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
Programy a algoritmy pracující s čísly. IB111 Úvod do programování
Programy a algoritmy pracující s čísly IB111 Úvod do programování 2016 1 / 56 Dnešní přednáška práce s čísly v Pythonu ukázky programů, ilustrace použití základních konstrukcí ukázky jednoduchých algoritmů,
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
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
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
Programy a algoritmy pracující s čísly. IB111 Úvod do programování skrze Python
Programy a algoritmy pracující s čísly IB111 Úvod do programování skrze Python 2013 1 / 60 Připomenutí z minule proměnné, výrazy, operace řízení výpočtu: if, for, while funkce příklady: faktoriál, binární
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
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é
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
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
Programování v Pythonu
ƒeské vysoké u ení technické v Praze FIT Programování v Pythonu Ji í Znamená ek P íprava studijního programu Informatika je podporována projektem nancovaným z Evropského sociálního fondu a rozpo tu hlavního
Rekurze. Jan Hnilica Počítačové modelování 12
Rekurze Jan Hnilica Počítačové modelování 12 1 Rekurzivní charakter úlohy Výpočet faktoriálu faktoriál : n! = n (n - 1) (n - 2)... 2 1 (0! je definován jako 1) můžeme si všimnout, že výpočet n! obsahuje
Ř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
Programy a algoritmy pracující s čísly. IB111 Úvod do programování skrze Python
Programy a algoritmy pracující s čísly IB111 Úvod do programování skrze Python 2015 1 / 66 Rozcvička 1 2 + 2 2 + 3 2 + + 99 2 + 100 2 2 / 66 Připomenutí z minule proměnné, výrazy, operace řízení výpočtu:
IB111 Úvod do programování 1 / 62
Vyhledávání, řazení, složitost IB111 Úvod do programování 2016 1 / 62 Výpočet odmocniny vstup: číslo x výstup: přibližná hodnota x Jak na to? 2 / 62 Výpočet odmocniny vstup: číslo x výstup: přibližná hodnota
Metody návrhu algoritmů, příklady. IB111 Programování a algoritmizace
Metody návrhu algoritmů, příklady IB111 Programování a algoritmizace 2011 Návrhu algoritmů vybrané metody: hladové algoritmy dynamické programování rekurze hrubá síla tato přednáška: především ilustrativní
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
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
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
IB111 Základy programování Radek Pelánek 1 / 61
Vyhledávání, řazení, složitost IB111 Základy programování Radek Pelánek 2017 1 / 61 ... ale nejdřív Praktické rady: čtení chybových hlášek časté chyby 2 / 61 Čtení chybových hlášek Traceback (most recent
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]
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
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
Programování: základní konstrukce. IB111 Úvod do programování
Programování: základní konstrukce IB111 Úvod do programování 2016 Rozcvička 1 2 3 4 5 6 7 8 9 10 2 3 4 5 6 7 8 9 10 11 3 4 5 6 7 8 9 10 11 12 4 5 6 7 8 9 10 11 12 13 5 6 7 8 9 10 11 12 13 14 6 7 8 9 10
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
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
(a kryptografické odbočky) IB111 Úvod do programování skrze Python
Řetězce a seznamy (a kryptografické odbočky) IB111 Úvod do programování skrze Python 2014 1 / 56 Rozcvička: šifry 1 C S A R B V E K T E O A 2 A J L B N O C E 3 C S B U J T M B W B 2 / 56 Transpoziční šifry
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)):
(a kryptografické odbočky) IB111 Úvod do programování skrze Python
Řetězce a seznamy (a kryptografické odbočky) IB111 Úvod do programování skrze Python 2013 1 / 50 Rozcvička: šifry 1 C S A R B V E K T E O A 2 C S B U J T M B W B 3 A J L B N O C E 2 / 50 Transpoziční šifry
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
Programy a algoritmy pracující s čísly
Programy a algoritmy pracující s čísly IB111 Základy programování Radek Pelánek 2018 1 / 69 Rozcvička 1 2 + 2 2 + 3 2 + + 99 2 + 100 2 2 / 69 Dnešní přednáška práce s čísly v Pythonu ukázky programů, ilustrace
Úvod do teorie grafů
Úvod do teorie grafů Neorientovaný graf G = (V,E,I) V množina uzlů (vrcholů) - vertices E množina hran - edges I incidence incidence je zobrazení, buď: funkce: I: E V x V relace: I E V V incidence přiřadí
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
Ú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
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)
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
Programování: základní konstrukce
Programování: základní konstrukce IB111 Základy programování Radek Pelánek 2018 Rozcvička 1 2 3 4 5 6 7 8 9 10 2 3 4 5 6 7 8 9 10 11 3 4 5 6 7 8 9 10 11 12 4 5 6 7 8 9 10 11 12 13 5 6 7 8 9 10 11 12 13
Ú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,
Práce s daty. IB111 Základy programování Radek Pelánek
Práce s daty IB111 Základy programování Radek Pelánek 2017 1 / 76 Práce s daty připomenutí Jaká data budu zpracovávat? Jaká data budu potřebovat k řešení problému? Jaké operace s daty budu chtít provádět?
VISUAL BASIC. Práce se soubory
VISUAL BASIC Práce se soubory Práce se soubory 1/2 2 Vstupní data pro programy bývají uloženy do souborů Vstupy pro výpočet, nastavení vzhledu aplikace Výsledky práce programu je potřeba uchovat uložit
Hanojská věž. T2: prohledávání stavového prostoru. zadání [1 1 1] řešení [3 3 3] dva možné první tahy: [1 1 2] [1 1 3]
Hanojská věž zadání [1 1 1] řešení [3 3 3] dva možné první tahy: [1 1 2] [1 1 3] který tah je lepší? (co je lepší tah?) P. Berka, 2012 1/21 Stavový prostor 1. množina stavů S = {s} 2. množina přechodů
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
Funkce, podmíněný příkaz if-else, příkaz cyklu for
Funkce, podmíněný příkaz if-else, příkaz cyklu for Definice funkce Funkce je pojmenovaná část programu, kterou lze dále zavolat v jiné části programu. V Pythonu je definována klíčovým slovem def. Za tímto
Techniky návrhu algoritmů
Techniky návrhu algoritmů Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta, 2018 Datové struktury a algoritmy, B6B36DSA 01/2018, Lekce 2 https://cw.fel.cvut.cz/wiki/courses/b6b36dsa/start
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
Přednáška 3. Rekurze 1
Paradigmata programování 1 Přednáška 3. Rekurze 1 Michal Krupka KATEDRA INFORMATIKY UNIVERZITA PALACKÉHO V OLOMOUCI Obsah 1 Příklady 2 Rekurzivní procedury a rekurzivní výpočetní proces 3 Další příklady
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ý
Základy algoritmizace 4. Problémy, algoritmy, data
Jiří Vokřínek, 2015 B6B36ZAL - Přednáška 4 1 Základy algoritmizace 4. Problémy, algoritmy, data doc. Ing. Jiří Vokřínek, Ph.D. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze
Programovací jazyk Haskell
Programovací jazyk Haskell Ing. Lumír Návrat katedra informatiky, D 403 59 732 3252 Historie září 1991 Gofer experimentální jazyk Mark P. Jones únor 1995 Hugs Hugs98 téměř úplná implementace jazyka Haskell
Programovací í jazyk Haskell
Historie Programovací í jazyk Haskell doc. Dr. Ing. Miroslav Beneš katedra informatiky, A-1007 59 732 4213 září 1991 Gofer experimentální jazyk Mark P. Jones únor 1995 Hugs Hugs98 téměř úplná implementace
Implementace LL(1) překladů
Překladače, přednáška č. 6 Ústav informatiky, FPF SU Opava sarka.vavreckova@fpf.slu.cz Poslední aktualizace: 30. října 2007 Postup Programujeme syntaktickou analýzu: 1 Navrhneme vhodnou LL(1) gramatiku
Dynamické programování
Dynamické programování Jan Kybic http://cmp.felk.cvut.cz/~kybic kybic@fel.cvut.cz 2016 1 / 26 Memoizace Dynamické programování 2 / 26 Memoizace (Memoization/caching) Pro dlouhotrvající funkce f (x) Jednou
Vysvětlete funkci a popište parametry jednotlivých komponent počítače a periferních zařízení.
1 Struktura osobního počítače Zakreslete základní schéma počítače podle Johna von Neumanna. Popište základní strukturu osobního počítače. Vysvětlete funkci a popište parametry jednotlivých komponent počítače
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
Obecná informatika. Matematicko-fyzikální fakulta Univerzity Karlovy v Praze. Podzim 2012
Obecná informatika Přednášející Putovních přednášek Matematicko-fyzikální fakulta Univerzity Karlovy v Praze Podzim 2012 Přednášející Putovních přednášek (MFF UK) Obecná informatika Podzim 2012 1 / 18
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í
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é
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ů
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
Vyučovací hodina. 1vyučovací hodina: 2vyučovací hodiny: Opakování z minulé hodiny. Procvičení nové látky
Vyučovací hodina 1vyučovací hodina: Opakování z minulé hodiny Nová látka Procvičení nové látky Shrnutí 5 min 20 min 15 min 5 min 2vyučovací hodiny: Opakování z minulé hodiny Nová látka Procvičení nové
Martin Flusser. November 1, 2016
ZPRO cvičení 4 Martin Flusser Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague November 1, 2016 Outline I 1 Outline 2 Cykly 3 Cykly cvičení 4 Rekurze 5 Rekurze
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
Č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á
10. Složitost a výkon
Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 10 1 Základy algoritmizace 10. Složitost a výkon doc. Ing. Jiří Vokřínek, Ph.D. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Jiří
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í
Logo2 operace, rekurze, větvení výpočtu
Operace Logo2 operace, rekurze, větvení výpočtu Je naše vlastní operace, jejím výsledkem je nějaká hodnota. Na určení tohoto výsledku musíme použít základní příkaz jazyka Imagine logo. A tím je výsledek.
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
Dekompozice problému, rekurze
Dekompozice problému, rekurze BI-PA1 Programování a Algoritmizace 1 Ladislav Vagner, Josef Vogel Katedra teoretické informatiky a Katedra softwarového inženýrství Fakulta informačních technologíı České
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á
2 Strukturované datové typy 2 2.1 Pole... 2 2.2 Záznam... 3 2.3 Množina... 4
Obsah Obsah 1 Jednoduché datové typy 1 2 Strukturované datové typy 2 2.1 Pole.................................. 2 2.2 Záznam................................ 3 2.3 Množina................................
VYŠŠÍ ODBORNÁ ŠKOLA a STŘEDNÍ PRŮMYSLOVÁ ŠKOLA Mariánská 1100, 407 47 Varnsdorf PROGRAMOVÁNÍ FUNKCE, REKURZE, CYKLY
Jméno a příjmení: Školní rok: Třída: VYŠŠÍ ODBORNÁ ŠKOLA a STŘEDNÍ PRŮMYSLOVÁ ŠKOLA Mariánská 1100, 407 47 Varnsdorf 2007/2008 VI2 PROGRAMOVÁNÍ FUNKCE, REKURZE, CYKLY Petr VOPALECKÝ Číslo úlohy: Počet
Konečný automat. Jan Kybic.
Konečný automat Jan Kybic http://cmp.felk.cvut.cz/~kybic kybic@fel.cvut.cz 2016 2017 1 / 33 Konečný automat finite state machine Konečný automat = výpočetní model, primitivní počítač Řídící jednotka s
Basic256 - úvod do programování Příklady. ing. petr polách
Basic256 - úvod do programování Příklady ing. petr polách 1 Basic 256 input, print Př.: Vytvořte program pro součet dvou čísel: input "Zadej a: ", a input "Zadej b: ", b print a+b input "Zadej a: ", a
Úvod do Matlabu. Praha & EU: Investujeme do vaší budoucnosti. 1 / 24 Úvod do Matlabu
Vytěžování dat, cvičení 1: Úvod do Matlabu Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti Fakulta elektrotechnická, ČVUT 1 / 24 Úvod do Matlabu Proč proboha Matlab? Matlab je SW pro
Č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
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
R zné algoritmy mají r znou složitost
/ / zné algoritmy mají r znou složitost Dynamické programování / / Definice funkce Otázka Program f(x,y) = (x = ) (y = ) f(x, y-) + f(x-,y) (x > ) && (y > ) f(,) =? int f(int x, int y) { if ( (x == ) (y
Lokální definice (1) plocha-kruhu
Lokální definice (1) syntaxe: (local (seznam definic) výraz) definice jsou dostupné pouze uvnitř příkazu local příklad: (local ( (define Pi 3.1415926) (define (plocha-kruhu r) (* Pi r r)) ) (plocha-kruhu
Optimalizace & soft omezení: algoritmy
Optimalizace & soft omezení: algoritmy Soft propagace Klasická propagace: eliminace nekonzistentních hodnot z domén proměnných Soft propagace: propagace preferencí (cen) nad k-ticemi hodnot proměnných
Zadání semestrálního projektu Algoritmy I. zimní semestr 2018/2019
Zadání semestrálního projektu Algoritmy I. zimní semestr 08/09 doc. Mgr. Jiří Dvorský, Ph.D. Verze zadání. listopadu 08 První verze Obecné pokyny. Celkem jsou k dispozici tři zadání projektů.. Každý student
1 2 3 4 5 6 součet cvičení celkem. známka. Úloha č.: max. bodů: skut. bodů:
Úloha č.: max. bodů: skut. bodů: 1 2 3 4 5 6 součet cvičení celkem 20 12 20 20 14 14 100 známka UPOZORNĚNÍ : a) Písemná zkouška obsahuje 6 úloh, jejichž řešení musí být vepsáno do připraveného formuláře.
Návrh Designu: Radek Mařík
1. 7. Najděte nejdelší rostoucí podposloupnost dané posloupnosti. Použijte metodu dynamického programování, napište tabulku průběžných délek částečných výsledků a tabulku předchůdců. a) 5 8 11 13 9 4 1
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í
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
ALGORITMY A DATOVÉ STRUKTURY
Název tématického celku: Cíl: ALGORITMY A DATOVÉ STRUKTURY Metodický list č. 1 Časová složitost algoritmů Základním cílem tohoto tematického celku je vysvětlení potřebných pojmů a definic nutných k popisu
Vstupní požadavky, doporučení a metodické pokyny
Název modulu: Základy PHP Označení: C9 Stručná charakteristika modulu Modul je orientován na tvorbu dynamických stánek aktualizovaných podle kontextu volání. Jazyk PHP umožňuje velmi jednoduchým způsobem
Programovací jazyk Pascal
Programovací jazyk Pascal Syntaktická pravidla (syntaxe jazyka) přesná pravidla pro zápis příkazů Sémantická pravidla (sémantika jazyka) pravidla, která každému příkazu přiřadí přesný význam Všechny konstrukce
Pascal. Katedra aplikované kybernetiky. Ing. Miroslav Vavroušek. Verze 7
Pascal Katedra aplikované kybernetiky Ing. Miroslav Vavroušek Verze 7 Proměnné Proměnná uchovává nějakou informaci potřebnou pro práci programu. Má ve svém oboru platnosti unikátní jméno. (Připadne, musí
PROGRAMOVÁNÍ V JAZYCE C V PŘÍKLADECH 11 Dynamické datové struktury 11.1 Spojové struktury... 11-1 11.2 Příklad PROG_11-01... 11-2 11.
David Matoušek Programování v jazyce C v pøíkladech Praha 2011 David Matoušek Programování v jazyce C v pøíkladech Bez pøedchozího písemného svolení nakladatelství nesmí být kterákoli èást kopírována nebo
SPJA, cvičení 1. ipython, python, skripty. základy syntaxe: základní datové typy, řetězce. podmínky: if-elif-else, vyhodnocení logických výrazů
SPJA, cvičení 1 ipython, python, skripty základy syntaxe: základní datové typy, řetězce podmínky: if-elif-else, vyhodnocení logických výrazů cykly: for, while kolekce: seznam, n-tice, slovník funkce, list
Ří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í
IB111 Základy programování Radek Pelánek
Proměnné, paměť, soubory IB111 Základy programování Radek Pelánek 2017 1 / 54 Rozcvička I a = [3, 1, 7] print(sorted(a)) print(a) b = [4, 3, 1] print(b.sort()) print(b) 2 / 54 Rozcvička II a = ["magic"]