IB002 Algoritmy a datové struktury I
|
|
- Vladimír Ovčačík
- před 8 lety
- Počet zobrazení:
Transkript
1 IB002 Algoritmy a datové struktury I Ivana Černá Fakulta informatiky, Masarykova univerzita Jaro 2016 IB002 Algoritmy a datové struktury I () Jaro / 88
2 Informace o předmětu vyučující předmětu Ivana Černá (přednášky) Vojtěch Řehák (cvičení) Nikola Beneš, Jan Obdržálek, Jaromír Plhák, Kristína Zákopčanová, František Blahoudek, Henrich Lauko, Peter Bezděk, Filip Opálený, Tomáš Zábojník, Jan Ježek, Kristýna Pavĺıčková, Tomáš Novotný, Jan Koniarik, Peter Benčík interaktivní osnova předmětu - kompletní informace is.muni.cz/auth/el/1433/jaro2016/ib002/index.qwarp organizace výuky (přednášky, cvičení, domácí úkoly, konzultace) hodnocení předmětu (odpovědníky, praktický test, zkouška) studijní materiály (slajdy, skripta, zadání úkolů, rozcestníky) diskusní fórum předmětu v IS MU IB002 Algoritmy a datové struktury I () Jaro / 88
3 Literatura T. Cormen, Ch. Leiserson, R. Rivest, C. Stein:Introduction to Algorithms. Third Edition. MIT Press, 2009 J. Kleinberg, and E. Tardos:Algorithm Design. Addison-Wesley, 2006 S. Dasgupta, Ch. Papadimitriou, U. Vazirani:Algorithms. McGraw Hill, T. Cormen:Algorithms Unlocked. MIT Press, 2013 J. Bentley: Programming Pearls (2nd Edition). Addison-Wesley, Wikipedie (eng) online materiály a video přednášky (doporučuji MIT Intro to Algorithms ) obrázky použité v prezentacích jsou částečné převzaty z uvedených monografií IB002 Algoritmy a datové struktury I () Jaro / 88
4 Obsah algoritmus způsob řešení problému datová struktura způsob uložení informací techniky návrhu a analýzy algoritmů důkaz korektnosti algoritmu, analýza složitosti algoritmu, asymptotická notace, technika rozděl & panuj a rekurze datové struktury halda, prioritní fronta, vyhledávací stromy, červeno-černé stromy, B-stromy, hašovací tabulky algoritmy řazení rozdělováním, slučováním, haldou, v lineárním čase grafové algoritmy prohledávání grafu, souvislost, cesty IB002 Algoritmy a datové struktury I () Jaro / 88
5 Motivace r es it jinak ner es itelne proble my... Chicago road networks, IB002 Algoritmy a datove struktury I () Jaro / 88
6 Motivace naučit se něco nového... An algorithm must be seen to be believed, and the best way to learn about what an algorithm is all about is to try it. Donald Knuth, The Art of Computer Programming Algorithms: a common language for nature, human, and computer. Avi Wigderson IB002 Algoritmy a datové struktury I () Jaro / 88
7 Motivace stát se dobrým programátorem... I will, in fact, claim that the difference between a bad programmer and a good one is whether he considers his code or his data structures more important. Bad programmers worry about the code. Good programmers worry about data structures and their relationships. Linus Torvalds (creator of Linux) Progress is possible only if we train ourselves to think about programs without thinking of them as pieces of executable code. Edsger W. Dijkstra Algorithms + Data Structures = Programs. Niklaus Wirth IB002 Algoritmy a datové struktury I () Jaro / 88
8 Motivace široké uplatnění... návrh počítačů logické obvody, systém souborů, překladače Internet vyhledávání, distribuované sdílení, cloud computing, packet routing počítačová grafika virtuální realita, video, hry multimédia mp3, jpg, rozpoznávání obrazu bezpečnost šifrování, hlasování, e-obchod sociální sítě doporučení a predikce, reklama fyzika simulace biologie projekt lidského genomu, simulace IB002 Algoritmy a datové struktury I () Jaro / 88
9 Motivace pro zábavu a zisk... IB002 Algoritmy a datové struktury I () Jaro / 88
10 Složitost a korektnost algoritmů Návrh a analýza algoritmů 1 Složitost a korektnost algoritmů Motivace Analýza složitosti Korektnost algoritmů Asymptotická notace 2 Rozděl a panuj Maximální a minimální prvek Složitost rekurzivních algoritmů Jak nepoužívat rekurzi Problém maximální podposloupnosti Lokální maximum IB002 Algoritmy a datové struktury I () Jaro / 88
11 Složitost a korektnost algoritmů Motivace Motivace najdi nejkratší cestu pro rozvoz čerstvé pizzy ALGORITMUS??? IB002 Algoritmy a datové struktury I () Jaro / 88
12 Složitost a korektnost algoritmů Motivace Řešení 1 vyber počáteční vrchol v 0, i 0 while existuje nenavštívený vrchol do i i + 1 necht p i je nenavštívený vrchol nejblíž k p i 1 navštiv p i od return vrat cestu z p 0 do p i IB002 Algoritmy a datové struktury I () Jaro / 88
13 Složitost a korektnost algoritmů Motivace Řešení 1 vyber počáteční vrchol v 0, i 0 while existuje nenavštívený vrchol do i i + 1 necht p i je nenavštívený vrchol nejblíž k p i 1 navštiv p i od return vrat cestu z p 0 do p i IB002 Algoritmy a datové struktury I () Jaro / 88
14 Složitost a korektnost algoritmů Motivace Řešení 2 necht n je počet vrcholů for i = 1 to n 1 do d for každou dvojici (x, y) koncových bodů částečných cest do if dist(x, y) d then x i x, y i y, d dist(x, y) fi od spoj vrcholy x i, y i hranou od spoj hranou koncové vrcholy cesty IB002 Algoritmy a datové struktury I () Jaro / 88
15 Složitost a korektnost algoritmů Motivace Řešení 2 necht n je počet vrcholů for i = 1 to n 1 do d for každou dvojici (x, y) koncových bodů částečných cest do if dist(x, y) d then x i x, y i y, d dist(x, y) fi od spoj vrcholy x i, y i hranou od spoj hranou koncové vrcholy cesty IB002 Algoritmy a datové struktury I () Jaro / 88
16 Složitost a korektnost algoritmů Motivace Korektní algoritmus d for každou z n! permutací Π i vrcholů do if cost(π i ) d cost(π i )je cena cesty určené permutací Π i then d cost(π i ) P min Π i fi od return P min korektnost algoritmus prověří všech n! možných způsobů projití grafu IB002 Algoritmy a datové struktury I () Jaro / 88
17 Složitost a korektnost algoritmů Motivace Korektní algoritmus d for každou z n! permutací Π i vrcholů do if cost(π i ) d cost(π i )je cena cesty určené permutací Π i then d cost(π i ) P min Π i fi od return P min korektnost algoritmus prověří všech n! možných způsobů projití grafu složitost algoritmus je nepoužitelný již pro velmi malé grafy??? existuje efektivnější algoritmus??? IB002 Algoritmy a datové struktury I () Jaro / 88
18 Složitost a korektnost algoritmů Analýza složitosti Vyhledávání prvku v posloupnosti Vstup posloupnost prvků A[1... n] a prvek x Výstup index i takový, že A[i] = x, resp. hodnota No jestliže prvek x se v posloupnosti nevyskytuje Procedure Linear Search 1 answer No 2 for i = 1 to n do 3 if A[i] = x then answer i fi 4 od 5 return answer IB002 Algoritmy a datové struktury I () Jaro / 88
19 Složitost a korektnost algoritmů Analýza složitosti Vyhledávání prvku v posloupnosti optimalizace I Procedure Better Linear Search 1 for i = 1 to n do 2 if A[i] = x then return i fi 3 od 4 return No první výskyt x ukončí prohledávání každý průchod cyklem znamená 2 testy: v řádku 1 testujeme rovnost i n, v řádku 2 testujeme rovnost A[i] = x stačí 1 test? IB002 Algoritmy a datové struktury I () Jaro / 88
20 Složitost a korektnost algoritmů Analýza složitosti Vyhledávání prvku v posloupnosti optimalizace II Procedure Sentinel Linear Search 1 last A[n] 2 A[n] x 3 i 1 4 while A[i] x do i i + 1 od 5 A[n] last 6 if i < n A[n] = x 7 then return i 8 else return No fi první výskyt x ukončí prohledávání sentinel (zarážka) pro případ, že pole neobsahuje prvek x každý průchod cyklem znamená 1 test 2 testy na závěr (řádek 6) IB002 Algoritmy a datové struktury I () Jaro / 88
21 Složitost a korektnost algoritmů Analýza složitosti Složitost Charles Babage, 1864 As soon as an Analytic Engine exists, it will necessarily guide the future course of the science. Whenever any resul is sought by its aid, the question will arise - By what course of calculation can these results be arrived at by the machine in the shortest time? kolikrát musíme zatočit klikou? IB002 Algoritmy a datové struktury I () Jaro / 88
22 Složitost a korektnost algoritmů Analýza složitosti Časová složitost časová složitost výpočtu = součet (cena operace počet opakování) časová složitost algoritmu je funkce délky vstupu složitost v nejhorším případě maximální délka výpočtu na vstupu délky n složitost v nejlepším případě minimální délka výpočtu na vstupu délky n průměrnásložitost průměr složitostí výpočtů na všech vstupech délky n složitost = časová složitost v nejhorším případě IB002 Algoritmy a datové struktury I () Jaro / 88
23 Složitost a korektnost algoritmů Analýza složitosti Časová složitost Linear Search 1 answer No 2 for i = 1 to n do 3 if A[i] = x 4 then answer i fi od 5 return answer označme t i cenu operace na řádku i operace z řádků 1 a 5 se vykonají jednou řádek 2 se vykoná n + 1 krát řádek 3 se vykoná n krát přiřazení v řádku 4 se vykoná úměrně počtu výskytů x v poli časová složitost v nejlepším případě časová složitost v nejhorším případě t 1 + t 2 (n + 1) + t 3 n + t t 5 t 1 + t 2 (n + 1) + t 3 n + t 4 n + t 5 složitost je tvaru c n + d, kde c a d jsou konstanty nezávislé na n složitost je lineární vzhledem k délce vstupu n IB002 Algoritmy a datové struktury I () Jaro / 88
24 Složitost a korektnost algoritmů Analýza složitosti Časová složitost optimalizovaných algoritmů Better Linear Search 1 for i = 1 to n do if A[i] = x then return i fi od 2 return No časová složitost v nejhorším případě je lineární časová složitost v nejlepším případě je konstantní Sentinel Linear Search 1 last A[n], A[n] x, i 1 2 while A[i] x do i i + 1 od 3 A[n] last 4 if i < n A[n] = x then return i else return No fi časová složitost v nejhorším případě je lineární časová složitost v nejlepším případě je konstantní rozdíl je v konstantních faktorech IB002 Algoritmy a datové struktury I () Jaro / 88
25 Složitost a korektnost algoritmů Korektnost algoritmů Korektnost algoritmu vstupní podmínka ze všech možných vstupů pro daný algoritmus vymezuje ty, pro které je algoritmus definován výstupní podmínka pro každý vstup daného algoritmu splňující vstupní podmínku určuje, jak má vypadat výsledek odpovídající danému vstupu algoritmus je (totálně) korektní jestliže pro každý vstup splňující vstupní podmínku výpočet skončí a výsledek splňuje výstupní podmínku úplnost (konvergence) pro každý vstup splňující vstupní podmínku výpočet skončí částečná (parciální) korektnost pro každý vstup, který splňuje vstupní podmínku a výpočet na něm skončí, výstup splňuje výstupní podmínku IB002 Algoritmy a datové struktury I () Jaro / 88
26 Složitost a korektnost algoritmů Korektnost algoritmů Korektnost iterativního algoritmu analyzujeme efekt jednotlivých operací analýza efektu cyklu u vnořených cyklů začínáme od cyklu nejhlubší úrovně pro každý cyklus určíme jeho invariant invariantem cyklu je takové tvrzení, které platí před vykonáním a po vykonání každé iterace cyklu dokážeme, že invariant cyklu je pravdivý využitím invariantu dokážeme konečnost výpočtu cyklu dokážeme efekt cyklu IB002 Algoritmy a datové struktury I () Jaro / 88
27 Složitost a korektnost algoritmů Korektnost algoritmů Invariant cyklu Inicializace invariant je platný před začátkem vykonávání cyklu Iterace jestliže invariant platí před iterací cyklu, zůstává v platnosti i po vykonání iterace Ukončení cyklus skončí a po jeho ukončení platný invariant garantuje požadovaný efekt cyklu IB002 Algoritmy a datové struktury I () Jaro / 88
28 Složitost a korektnost algoritmů Korektnost algoritmů Korektnost Better Linear Search 1 for i = 1 to n do if A[i] = x then return i fi od 2 return No Invariant cyklu Na začátku každé iterace cyklu platí, že jestliže prvek x se nalézá v A, tak se nalézá v části mezi pozicemi i a n. Inicializace Na začátku je i = 1 a proto tvrzení platí. Iterace Předpokládejme platnost tvrzení na začátku iterace. Jestliže iterace nevrátí výslední hodnotu, tak A[i] x. Proto x musí být na některé z pozic i + 1 až n a invariant zůstává v platnosti i po ukončení iterace (tj. před následující iterací). Jestliže iterace vrátí hodnotu i, platnost tvrzení po ukončení iterace je zřejmá. Ukončení Cyklus skončí bud proto, že je nalezena hodnota x anebo proto, že i > n. V obou případech z platnosti tvrzení po ukončení iterace cyklu plyne korektnost vypočítaného výsledku. IB002 Algoritmy a datové struktury I () Jaro / 88
29 Složitost a korektnost algoritmů Řazení vkládáním Problém řazení Vstup posloupnost n čísel (a 1, a 2,..., a n ) Výstup permutace (přeuspořádání) (a 1, a 2,..., a n) vstupní posloupnosti taková, že a 1 a 2... a n IB002 Algoritmy a datové struktury I () Jaro / 88
30 Složitost a korektnost algoritmů Řazení vkládáním Princip řazení vkládáním (a) (b) (c) (d) (e) (f) IB002 Algoritmy a datové struktury I () Jaro / 88
31 Složitost a korektnost algoritmů Řazení vkládáním Algoritmus Insert Sort(A) 1 for j = 2 to A.length do 2 key A[j] 3 // Vlož A[j] do seřazené postupnosti A[1... j 1] 4 i j 1 5 while i > 0 A[i] > key do 6 A[i + 1] A[i] 7 i i 1 od 8 A[i + 1] key od IB002 Algoritmy a datové struktury I () Jaro / 88
32 Složitost a korektnost algoritmů Řazení vkládáním Korektnost řazení vkládáním Invariant cyklu Na začátku každé iterace for cyklu obsahuje pole A[1... j 1] stejné prvky jako na začátku výpočtu, ale seřazené od nejmenšího po největší. Inicializace Před první iterací je j = 2 a tvrzení platí. Iterace Předpokládejme že tvrzení platí před iterací j, tj. prvky v A[1... j 1] jsou seřazeny. Jestliže A[j] < A[j 1], tak v těle cyklu se prvky A[j 1], A[j 2], A[j 3],... posouvají o jednu pozici doprava tak dlouho, až se najde vhodná pozice pro prvek A[j] (ř. 5-7). Pole A[1... j] proto na konci iterace cyklu obsahuje stejné prvky jako na začátku, ale seřazené. Po navýšení hodnoty j zůstává tvrzení v platnosti. Ukončení Cyklus skončí když j > A.length = n. Protože v každé iteraci se hodnota j navyšuje o 1, musí platit j = n + 1. Z platnosti invariantu cyklu plyne, že A[1... n] obsahuje stejné prvky jako na začátku výpočtu, ale seřazené. IB002 Algoritmy a datové struktury I () Jaro / 88
33 Složitost a korektnost algoritmů Řazení vkládáním Složitost řazení vkládáním Insertion Sort(A) cena počet 1 for j = 2 to A.length do c 1 n 2 key A[j] c 2 n 1 3 i j 1 c 3 n 1 4 while i > 0 A[i] > key do c 4 n j=2 t j 5 A[i + 1] A[i] c 5 n j=2 (t j 1) 6 i i 1 od c 6 n j=2 (t j 1) 7 A[i + 1] key od c 7 n 1 t j označuje počet opakování while cyklu pro danou hodnotu j počet testů v hlavičce cyklu je o 1 vyšší než počet iterací cyklu IB002 Algoritmy a datové struktury I () Jaro / 88
34 Složitost a korektnost algoritmů Řazení vkládáním Složitost řazení vkládáním -nejlepší případ Insertion Sort(A) cena počet 1 for j = 2 to A.length do c 1 n 2 key A[j] c 2 n 1 3 i j 1 c 3 n 1 4 while i > 0 A[i] > key do c 4 n j=2 t j t j = 1 5 A[i + 1] A[i] c 5 n j=2 (t j 1) 6 i i 1 od c 6 n j=2 (t j 1) 7 A[i + 1] key od c 7 n 1 T (n) = c 1 n + c 2 (n 1) + c 3 (n 1) + c 4 n + c 6 (t j 1) + c 7 (n 1) j=2 n j=2 t j + c 5 n j=2 (t j 1) = c 1 n + c 2 (n 1) + c 4 (n 1) + c 4 (n 1) + c 7 (n 1) = an + b lineární složitost IB002 Algoritmy a datové struktury I () Jaro / 88
35 Složitost a korektnost algoritmů Řazení vkládáním Složitost řazení vkládáním -nejhorší případ Insertion Sort(A) cena počet 1 for j = 2 to A.length do c 1 n 2 key A[j] c 2 n 1 3 i j 1 c 3 n 1 4 while i > 0 A[i] > key do c 4 n j=2 t j t j = j 5 A[i + 1] A[i] c 5 n j=2 (t j 1) 6 i i 1 od c 6 n j=2 (t j 1) 7 A[i + 1] key od c 7 n 1 (n(n + 1) T (n) = c 1 n + c 2 (n 1) + c 3 (n 1) + c 4 1 ) 2 (n(n 1) ) (n(n 1) ) + c 5 + c6 + c7 (n 1) 2 2 = an 2 + bn + c kvadratická složitost IB002 Algoritmy a datové struktury I () Jaro / 88
36 Složitost a korektnost algoritmů Asymptotická notace Asymptotická notace asymptotickou notaci využíváme při popisu složitosti algoritmů umožňuje abstrahovat od detailů / zdůraznit podstatné příklad (n(n + 1) T (n) = c 1 n + c 2 (n 1) + c 3 (n 1) + c 4 1 ) 2 (n(n + 1) ) (n(n + 1) ) + c 5 + c6 + c7 (n 1) 2 2 = ( c c c 6 2 )n2 + (c 1 + c 2 + c 3 + c 4 2 c 5 2 c c 7)n (c 2 + c 3 + c 4 + c 7 ) = an 2 + bn + c = Θ(n 2 ) IB002 Algoritmy a datové struktury I () Jaro / 88
37 Složitost a korektnost algoritmů Asymptotická notace Typy notací f(n) = O(g(n)) znamená, že C g(n) je horní hranicí pro f(n) f(n) = Ω(g(n)) znamená, že C g(n) je dolní hranicí pro f(n) f(n) = Θ(g(n)) znamená, že C 1 g(n) je horní hranicí pro f(n) a C 2 g(n) je dolní hranicí pro f(n) f, g jsou funkce, f, g : N N C, C 1, C 2 jsou konstanty nezávislé na n IB002 Algoritmy a datové struktury I () Jaro / 88
38 Složitost a korektnost algoritmů Asymptotická notace O notace Definice f(n) = O(g(n)) právě když existují kladné konstanty n 0 a c takové, že pro všechna n n 0 platí f(n) cg(n) cg(n) f(n) n 0 f(n) = O(g(n)) zápis f(n) O(g(n)) vs zápis f(n) = O(g(n)) (historické důvody) funkce g(n) roste asymptoticky rychleji než funkce f(n) alternativní definice f(n) = O(g(n)) právě když lim sup n f(n) g(n) < IB002 Algoritmy a datové struktury I () Jaro / 88
39 Složitost a korektnost algoritmů Asymptotická notace O notace - příklady 8n 2 88n = O(n 2 ) protože 8n 2 88n < 8n 2 pro všechna n 11 8n 2 88n = O(n 3 ) protože 8n 2 88n + 8 < 1n 3 pro všechna n 10 8n 2 88n O(n) protože cn < 8n 2 88n pro n > c IB002 Algoritmy a datové struktury I () Jaro / 88
40 Složitost a korektnost algoritmů Asymptotická notace Ω notace Definice f(n) = Ω(g(n)) právě když existují kladné konstanty n 0 a c takové, že pro všechna n n 0 platí f(n) cg(n) f(n) cg(n) n 0 f(n) = Ω(g(n)) funkce g(n) roste asymptoticky pomaleji než funkce f(n) IB002 Algoritmy a datové struktury I () Jaro / 88
41 Složitost a korektnost algoritmů Asymptotická notace Ω notace - příklady 8n 2 88n + 8 = Ω(n 2 ) protože 8n 2 88n + 8 > n 2 pro n > 13 8n 2 88n + 8 Ω(n 3 ) protože 8n 2 88n + 8 < cn 3 pro n > 8 c 8n 2 88n + 8 = Ω(n) protože 8n 2 88n + 8 > n pro n > 11 IB002 Algoritmy a datové struktury I () Jaro / 88
42 Složitost a korektnost algoritmů Asymptotická notace Θ notace Definice f(n) = Θ(g(n)) právě když existují kladné konstanty n 0, c 1 a c 1 takové, že pro všechna n n 0 platí c 1 g(n) f(n) c 2 g(n) c 2 g(n) f(n) c 1 g(n) n 0 f(n) = Θ(g(n)) funkce f(n) a g(n) rostou stejně rychle Donald E. Knuth: Big Omicron and big Omega and big Theta. ACM SIGACT, Volume 8 Issue 2, April-June 1976, pp IB002 Algoritmy a datové struktury I () Jaro / 88
43 Složitost a korektnost algoritmů Asymptotická notace Θ notace - příklady 8n 2 88n + 8 = Θ(n 2 ) protože 8n 2 88n + 8 = O(n 2 ) a současně 8n 2 88n + 8 = Ω(n 2 ) 8n 2 88n + 8 Θ(n 3 ) protože 8n 2 88n + 8 Ω(n 3 ) 8n 2 88n + 8 Θ(n) protože 8n 2 88n + 8 O(n) IB002 Algoritmy a datové struktury I () Jaro / 88
44 Složitost a korektnost algoritmů Asymptotická notace Θ notace - příklad 1 2 n2 3n = Θ(n 2 ) musíme najít kladné konstanty c 1, c 2 a n 0 takové, že c 1 n n2 3n c 2 n 2 platí pro všechna n n 0 po úpravě dostáváme c n c 2 pravá nerovnost platí pro každé n 1 jestliže zvoĺıme c 2 1/2 levá nerovnost platí pro každé n 7 jestliže zvoĺıme c 1 1/14 volba c 1 = 1/14, c 2 = 1/2 a n 0 = 7 dokazuje platnost vztahu 1 2 n2 3n = Θ(n 2 ) IB002 Algoritmy a datové struktury I () Jaro / 88
45 Složitost a korektnost algoritmů Asymptotická notace Asymptotická notace - vlastnosti tranzitivita f(n) = Θ(g(n)) a g(n) = Θ(h(n)) implikuje f(n) = Θ(h(n)) f(n) = O(g(n)) a g(n) = O(h(n)) implikuje f(n) = O(h(n)) f(n) = Ω(g(n)) a g(n) = Ω(h(n)) implikuje f(n) = Ω(h(n)) reflexivita f(n) = Θ(f(n)) podobně pro O a Ω symetrie f(n) = Θ(g(n)) právě když g(n) = Θ(f(n)) transpozice f(n) = O(g(n)) právě když g(n) = Ω(f(n)) poznámka: ne každá dvojice funkcí je asymptoticky srovnatelná IB002 Algoritmy a datové struktury I () Jaro / 88
46 Rozděl a panuj Návrh a analýza algoritmů 1 Složitost a korektnost algoritmů Motivace Analýza složitosti Korektnost algoritmů Asymptotická notace 2 Rozděl a panuj Maximální a minimální prvek Složitost rekurzivních algoritmů Jak nepoužívat rekurzi Problém maximální podposloupnosti Lokální maximum IB002 Algoritmy a datové struktury I () Jaro / 88
47 Rozděl a panuj Návrh algoritmů ideální svět návod (algoritmus) jak konstruovat algoritmy realita osvědčené postupy iterativní přístup rekurzivní přístup (rozděl a panuj, divide et impera, divide and conquer) dynamické programování hladové techniky heuristiky náhodnostní techniky aproximativní techniky parametrizované techniky IB002 Algoritmy a datové struktury I () Jaro / 88
48 Rozděl a panuj Rozděl a panuj - principy Nothing is particularly hard if you divide it into small jobs Henry Ford Rozděl [divide] problém na podproblémy, které mají menší velikost než původní problém. Vyřeš [conquer] podproblémy stejným postupem(rekurzívně). Jestliže velikost podproblému je malá, použij přímé řešení. Kombinuj [combine] řešení podproblémů a vyřeš původní problém. IB002 Algoritmy a datové struktury I () Jaro / 88
49 Rozděl a panuj Maximální a minimální prvek Maximální a minimální prvek problém nalezení maximálního a minimálního prvku posloupnosti S[1... n] složitostní kritérium - počet porovnání prvků MaxMin Iterative(S) 1 max S[1] 2 min S[1] 3 for i = 2 to n do 4 if S[i] > max then max S[i] fi 5 if S[i] < min then min S[i] fi 6 od celkem 2(n 1) porovnání IB002 Algoritmy a datové struktury I () Jaro / 88
50 Rozděl a panuj Maximální a minimální prvek Přístup Rozděl a panuj 1 posloupnost rozděl na dvě (stejně velké) podposloupnosti 2 najdi minimální a maximální prvek v obou podposloupnostech 3 kombinuj řešení podproblémů: maximálním prvek posloupnosti je větší z maximálních prvků podposloupností minimálním prvek posloupnosti je menší z minimálních prvků podposloupností MaxMin(S, l, r) 1 if r = l then return (S[l], S[r]) fi 2 if r = l + 1 then return (max(s[l], S[r]), min(s[l], S[r])) fi 3 if r > l + 1 then (A, B) MaxMin(S, l, (l + r)/2 ) 4 (C, D) MaxMin(S, (l + r)/2 + 1, r) 5 return (max(a, C), min(b, D)) fi iniciální volání MaxMin(S, 1, n) IB002 Algoritmy a datové struktury I () Jaro / 88
51 Rozděl a panuj Maximální a minimální prvek Korektnost konečnost výpočtu plyne z faktu, že každé rekurzivní volání se provede pro postupnost menší délky správnost vypočítaného výsledku dokážeme indukcí vzhledem k délce vstupní posloupnosti n = 1, n = 2 provedou se příkazy v řádku 1, resp. v řádku 2 indukční předpoklad algoritmus vypočítá korektní hodnoty pro všechny posloupnosti délky nejvýše n 1 (n > 1) platnost tvrzení pro n dle indukčního předpokladu jsou čísla A a B maximálním a minimálním prvkem posloupnosti S[1,..., (1 + n)/2 ], stejně tak čísla C a D jsou maximálním a minimálním prvkem posloupnosti S[ (1 + n)/2 + 1,..., n] větší z čísel A, C je pak maximálním prvkem posloupnost A[1,..., n] a menší z čísel B, D jejím minimem IB002 Algoritmy a datové struktury I () Jaro / 88
52 Rozděl a panuj Maximální a minimální prvek Složitost rozděl problém na podproblémy menší velikosti vyřeš podproblémy kombinuj řešení podproblémů a vyřeš původní problém n je délka vstupu, podproblémy mají velikosti n 1, n 2,..., n k T ( ) je časová složitost výpočtu na vstupu délky n T (n) = složitost rozdělení+ T (n 1 ) + T (n 2 ) +... T (n k )+ + složitost kombinace konkrétně pro algoritmus MAxMin, složitost je počet porovnání prvků posloupnosti 0 + T ( n/2 ) + T ( n/2 ) + 2 pro n > 2 T (n) = 1 pro n = 2 0 pro n = 1 IB002 Algoritmy a datové struktury I () Jaro / 88
53 Rozděl a panuj Maximální a minimální prvek Složitost T ( n/2 ) + T ( n/2 ) + 2 pro n > 2 T (n) = 1 pro n = 2 0 pro n = 1 indukcí vzhledem k n ověříme, že pro n > 1 platí T (n) 5 3 n 2 indukční základ n = 2 T (2) = 1 < indukční předpoklad nerovnost platí pro všechny hodnoty i, 2 i < n platnost pro n T (n) = T ( n/2 ) + T ( n/2 ) + 2 využijeme indukční předpoklad 5 3 n/ n/ = 5 3 n 2 IB002 Algoritmy a datové struktury I () Jaro / 88
54 Rozděl a panuj Maximální a minimální prvek Kdo je nejrychlejší??? Min1(S, l, r) minimum S[l] for i = l + 1 to r do if minimum > S[i] then minimum S[i] fi od return minimum Min2(S, l, r) if r = l then return S[r] fi if r > l then A Min2(S, l, (l + r)/2 ) B Min2(S, (l + r)/2 + 1, r) return min(a, B) fi Min3(S, l, r) if r = l then return S[r] fi if r > l then A Min3(S, l, r 1) return min(a, S[r]) fi IB002 Algoritmy a datové struktury I () Jaro / 88
55 Rozděl a panuj Složitost rekurzivních algoritmů Složitost rekurzivních algoritmů složitost obvykle zapíšeme pomocí rekurentní rovnice, která vyjadřuje složitost výpočtu na vstupu velikosti n pomocí složitosti výpočtů na menších vstupech označme T (n) časovou složitost výpočtu na vstupu délky n pro dostatečně malý vstup (n c) si přímé řešení vyžaduje konstantní čas velký vstup rozděĺıme na a podproblémů z nichž každý má velikost 1/b velikosti původního vstupu řešení každého podproblému si vyžádá čas T (n/b) označme D(n) čas potřebný na konstrukci podproblémů a C(n) čas potřebný na kombinaci řešení podproblémů a nalezení řešení původního problému T (n) = { Θ(1) at (n/b) + D(n) + C(n) pro n c jinak jak najít řešení 1 rekurentní rovnice??? 1 nerekurzivní popis funkce, která splňuje podmínky rovnice IB002 Algoritmy a datové struktury I () Jaro / 88
56 Rozděl a panuj Složitost rekurzivních algoritmů Řešení rekurentních rovnic substituční metoda uhodneme řešení a dokážeme jeho správnost matematickou indukcí metoda rekurzivního stromu konstruujeme strom, jehož vrcholy vyjadřují složitost jednotlivých rekurzivních volání; výslednou složitost vypočítáme jako sumu ohodnocení vrcholů stromu kuchařková věta (master method) vzorec pro řešení rekurentní rovnice tvaru T (n) = at (n/b)+ f(n) IB002 Algoritmy a datové struktury I () Jaro / 88
57 Rozděl a panuj Složitost rekurzivních algoritmů Substituční metoda 1 uhodni řešení 2 matematickou indukcí dokaž jeho korektnost Příklad T (n) = { 1 pro n = 1 2T ( n/2 ) + n jinak 1 T (n) = O(n log n) 2 indukcí dokážeme, že T (n) cn log n pro dostatečně velké n a vhodně zvolenou konstantu c IB002 Algoritmy a datové struktury I () Jaro / 88
58 Rozděl a panuj Složitost rekurzivních algoritmů dokazujeme T (n) = O(n log n) pro rovnici T (n) = { 1 pro n = 1 2T ( n/2 ) + n jinak Indukční krok předpokládejme, že tvrzení platí pro všechna m < n, tj. speciálně pro m = n/2 platí T ( n/2 ) c n/2 log( n/2 ) využitím indukčního předpokladu dokážeme platnost tvrzení pro n T (n) 2(c n/2 log( n/2 )) + n cn log(n/2) + n = cn log n cn log 2 + n = cn log n cn + n cnlogn IB002 Algoritmy a datové struktury I () Jaro / 88
59 Rozděl a panuj Složitost rekurzivních algoritmů dokazujeme T (n) = O(n log n) pro rovnici T (n) = { 1 pro n = 1 2T ( n/2 ) + n jinak jako indukční základ nemůžeme použít případ n = 1, protože neplatí T (1) cn log n = c1 log 1 = 0 využijeme, že dokazujeme asymptotický vztah a proto stačí, aby nerovnost platila pro všechna dostatečně velká n tvrzení dokážeme pro n 2 základem indukce bude platnost vztahu pro n = 2 a n = 3 pro n > 3 závisí hodnota T (n) jenom od T (2) a T (3) Indukční základ n = 2 a n = 3 dosazením do rovnice zjistíme, že T (2) = 4 a T (3) = 5 zvoĺıme konstantu c 1 tak, aby pro n = 2 a n = 3 platilo T (n) cn log n dobrá volba je c 2, protože platí T (2) c 2 log 2 i T (3) c 3 log 3 IB002 Algoritmy a datové struktury I () Jaro / 88
60 Rozděl a panuj Složitost rekurzivních algoritmů Metoda rekurzivního stromu rozbalování rekurze přehledný zápis pomocí stromu, jehož vrcholy vyjadřují složitost jednotlivých rekurzivních volání vrchol stromu je ohodnocen složitostí dekompozice a kompozice synové vrcholu odpovídají jednotlivým rekurzivním voláním výslednou složitost vypočítáme jako sumu ohodnocení vrcholů, obvykle sečítáme po jednotlivých úrovních stromu metodu můžeme použít pro nalezení přesného řešení (je nutné přesné počítání) pro získání odhadu na řešení rekurentní rovnice; pro důkaz řešení se pak použije substituční metoda IB002 Algoritmy a datové struktury I () Jaro / 88
61 Rozděl a panuj Složitost rekurzivních algoritmů Metoda rekurzivního stromu - příklad T (n) = { 1 pro n = 1 3T ( n/4 ) + cn 2 jinak metodu použijeme pro získání odhadu řešení, můžeme proto předpokládat, že n je mocninou 4 T (n) = cn 2 ( ) T n4 ( ) T n4 ( ) T n4 IB002 Algoritmy a datové struktury I () Jaro / 88
62 T (n) = Rozděl a panuj Složitost rekurzivních algoritmů { 1 pro n = 1 3T ( n/4 ) + cn 2 jinak cn 2 cn 2 = ( ) T n4 ( ) T n4 ( ) T n4 ( ) c n4 2 ( ) c n4 2 ( ) c n4 2 ( ) T n16 ( ) T n16 ( ) T n16 ( ) T n16 ( ) T n16 ( ) T n16 ( ) T n16 ( ) T n16 ( ) T n16 IB002 Algoritmy a datové struktury I () Jaro / 88
63 Rozděl a panuj Složitost rekurzivních algoritmů cn 2 cn 2 ( ) c n4 2 ( ) c n4 2 ( ) c n cn2 log 4 n ( ) ( ) c n16 2 c n16 2 ( ) ( ) ( ) ( ) c n16 2 c n16 2 c n16 2 ( ) ( ) c n16 2 c n16 2 c n16 2 ( ) c n16 2 ( 3 ) 2 cn T (1) T (1) T (1) T (1) T (1) T (1) T (1) T (1) T (1) T (1)... T (1) T (1) T (1) n log 4 3 (d) Θ(n log 4 3 ) Total: O(n 2 ) IB002 Algoritmy a datové struktury I () Jaro / 88
64 Rozděl a panuj Složitost rekurzivních algoritmů kořen má hloubku 0 (vnitřní) vrchol v hloubce i je označen složitostí c(n/4 i ) 2 počet vrcholů s hloubkou i je 3 i součet složitostí vrcholů v hloubce i je 3 i c(n/4 i ) 2 = (3/16) i cn 2 list je označen složitostí 1 (základ rekurentní rovnice) a má hloubku i = log 4 n (protože n/4 log 4 n = 1) počet listů je 3 log 4 n = n log 4 3 sumací přes všechny úrovně dostáváme T (n) = cn cn2 + + ( 3 ) log4 n 1 cn 2 + n log IB002 Algoritmy a datové struktury I () Jaro / 88
65 Rozděl a panuj Složitost rekurzivních algoritmů T (n) = cn cn2 + + ( 3 ) log4 n 1 cn 2 + Θ(n log 4 3) 16 = < = log 4 n 1 i=0 i=0 ( 3 ) icn 2 + Θ(n log 4 3 ) 16 ( 3 ) icn 2 + Θ(n log 4 3 ) (3/16) cn2 + Θ(n log 4 3 ) = cn2 + n log 4 3 = O(n 2 ) hodnotu T (n) = O(n 2 ) použijeme jako odhad pro substituční metodu IB002 Algoritmy a datové struktury I () Jaro / 88
66 Rozděl a panuj Složitost rekurzivních algoritmů Kuchařková věta (Master method) Necht a 1 a b > 1 jsou konstanty, f(n) je polynomiální funkce, a necht T (n) je definována na nezáporných číslech rekurentní rovnicí Potom platí T (n) = at (n/b) + f(n) Θ(f(n)) když af(n/b) = κf(n) pro nějakou konstantu κ < 1 T (n) = Θ(n log b a ) když af(n/b) = Kf(n) pro nějakou konstantu K > 1 Θ(f(n) log b n) když af(n/b) = f(n) IB002 Algoritmy a datové struktury I () Jaro / 88
67 Rozděl a panuj Složitost rekurzivních algoritmů Kuchařková věta - alternativní varianta Necht a 1, b > 1 a d 0 jsou konstanty a necht T (n) je definována na nezáporných číslech rekurentní rovnicí T (n) = at (n/b) + Θ(n c ) Potom platí Θ(n c ) když a < b c případ 1 T (n) = Θ(n c log n) když a = b c případ 2 Θ(n log b a ) když a > b c případ 3 věta platí i ve variantě pro O a Ω IB002 Algoritmy a datové struktury I () Jaro / 88
68 Rozděl a panuj Složitost rekurzivních algoritmů Příklady použití kuchařkové věty I T (n) = 4T (n/2) + 1 = T (n) = Θ(n 2 ) případ 3, a = 4, b = 2, c = 0, 4 > 2 0 T (n) = 4T (n/2) + n = T (n) = Θ(n 2 ) případ 3, a = 4, b = 2, c = 1, 4 > 2 1 T (n) = 4T (n/2) + n 2 = T (n) = Θ(n 2 log n) případ 2, a = 4, b = 2, c = 2, 4 = 2 2 T (n) = 4T (n/2) + n 3 = T (n) = Θ(n 3 ) případ 1, a = 4, b = 2, c = 3, 4 < 2 3 IB002 Algoritmy a datové struktury I () Jaro / 88
69 Rozděl a panuj Složitost rekurzivních algoritmů Příklady použití kuchařkové věty II T (n) = 2T (n/2) + 1 = T (n) = Θ(n) případ 3, a = 2, b = 2, c = 0, 2 > 2 0 T (n) = 2T (n/2) + n = T (n) = Θ(n log n) případ 2, a = 2, b = 2, c = 1, 2 = 2 1 T (n) = 2T (n/2) + n 2 = T (n) = Θ(n 2 ) případ 1, a = 2, b = 2, c = 2, 2 < 2 2 T (n) = 2T (n/2) + n 3 = T (n) = Θ(n 3 ) případ 1, a = 2, b = 2, c = 3, 2 < 2 3 IB002 Algoritmy a datové struktury I () Jaro / 88
70 Rozděl a panuj Složitost rekurzivních algoritmů Příklady Hanojské věže T (n) = 2T (n 1) + 1, základní případ T (0) = 0 T (n) = 2 n 1 MergeSort T (n) 2T (n/2) + Θ(n) T (n) = Θ(n log n) násobení celých čísel T (n) = 4T (n/2) + O(n) T (n) = O(n 2 ) Strassenův algoritmus pro násobení celých čísel T (n) = 7T (n/2) + O(n 2 ) T (n) = O(n log b a ) = O(n log 2 7 ) = O(n 2.81 ) IB002 Algoritmy a datové struktury I () Jaro / 88
71 Rozděl a panuj Jak nepoužívat rekurzi Jak nepoužívat rekurzi - nedefinovaný výpočet Bad Factorial(n) return n Bad Factorial(n 1) chybí základ rekurze IB002 Algoritmy a datové struktury I () Jaro / 88
72 Rozděl a panuj Jak nepoužívat rekurzi Jak nepoužívat rekurzi - nekonečný výpočet Awful Factorial(n) if n = 0 then return 1 else return 1 n+1awful Factorial(n + 1) fi Beta(n) if n = 1 then return 1 else return n(n 1)Beta(n 2) fi IB002 Algoritmy a datové struktury I () Jaro / 88
73 Rozděl a panuj Jak nepoužívat rekurzi Jak nepoužívat rekurzi - složitost Fibonacciho posloupnost F 0 = 0, F 1 = 1, F n = F n 1 + F n 2 RecFibo(n) if n < 2 then return n else return RecFibo(n 1) + RecFibo(n 2) fi časová složitost algoritmu T (0) = 1, T (1) = 1, T (n) = T (n 1) + T (n 2) + 1 T (n) = Θ(φ n ), φ = ( 5 + 1)/2 IB002 Algoritmy a datové struktury I () Jaro / 88
74 Rozděl a panuj Jak nepoužívat rekurzi Jak nepoužívat rekurzi - složitost Fibonacciho posloupnost F 0 = 0, F 1 = 1, F n = F n 1 + F n 2 IterFibo(n) F [0] 0 F [1] 1 for i = 1 to n do F [i] F [i 1] + F [i 2] od return F [n] časová složitost algoritmu T (n) = Θ(n) IB002 Algoritmy a datové struktury I () Jaro / 88
75 Rozděl a panuj Problém maximální podposloupnosti Jak používat rekurzi - význam definice podproblémů problém maximální podposloupnosti dané je pole celých čísel A[1..n] cílem je najít takové indexy 1 i j n, pro které je suma A[i] + + A[j] maximální 13, -3, -25, 20-3, -16, -23, 18, 20, -7, 12, -5, -22, 15, -4, 7 řešením je 18, 20, -7, 12 řešení hrubou sílou - prozkoumat všechny dvojice indexů i, j kvadratická složitost existuje lepší řešení rozděl a panuj? IB002 Algoritmy a datové struktury I () Jaro / 88
76 Rozděl a panuj Problém maximální podposloupnosti Rozděl a panuj daná je posloupnost A[low... high] a hodnota mid hledané řešení A[i... j] (A) je podposloupností A[low... mid] (low i j mid) (B) je podposloupností A[mid high] (mid + 1 i j high) (C) zasahuje do obou podposloupností (low i mid < j high) (A) a (B) jsou problémy stejného typu jako původní problém (C)???? IB002 Algoritmy a datové struktury I () Jaro / 88
77 Rozděl a panuj Problém maximální podposloupnosti Rozděl a panuj daná je posloupnost A[low... high] a hodnota mid hledané řešení A[i... j] (A) je podposloupností A[low... mid] (low i j mid) (B) je podposloupností A[mid high] (mid + 1 i j high) (C) zasahuje do obou podposloupností (low i mid < j high) (A) a (B) jsou problémy stejného typu jako původní problém (C)???? pro řešení (C) stačí poznat podposloupnosti tvaru A[i... mid] a A[mid j] s maximální sumou IB002 Algoritmy a datové struktury I () Jaro / 88
78 Rozděl a panuj Problém maximální podposloupnosti Případ C Find Max Crossing Subarray F M C S(A, low, mid, high) 1 leftsum 2 sum 0 3 for i = mid downto low do 4 sum sum + A[i] 5 if sum > leftsum then leftsum sum 6 maxleft i fi od 7 rightsum 8 sum 0 9 for j = mid + 1 to high do 10 sum sum + A[j] 11 if sum > rightsum then rightsum sum 12 maxright j fi od 13 return (maxlef t, maxright, lef tsum + rightsum) IB002 Algoritmy a datové struktury I () Jaro / 88
79 Rozděl a panuj Problém maximální podposloupnosti Algoritmus Find Maximum Subarray F M S(A, low, high) 1 if high = low 2 then return (low, high, A[low]) 3 else mid = (low + high)/2 4 (leftlow, lefthigh, leftsum) F M S(A, low, mid) 5 (rightlow, righthigh, righttsum) F M S(A, mid + 1, high) 6 (crosslow, crosshigh, crosssum) F M C S(A, low, mid, high) fi 7 if leftsum rightsum leftsum crosssum 8 then return (leftlow, lefthigh, leftsum) fi 9 if leftsum rightsum rightsum crosssum 10 then return (rightlow, righthigh, rightsum) 11 else return (crosslow, crosshigh, crosssum) fi IB002 Algoritmy a datové struktury I () Jaro / 88
80 Rozděl a panuj Problém maximální podposloupnosti Složitost procedura Find Max Crossing Subarray(A, low, mid, high) označme n = high low + 1 jedna iterace obou cyklů má konstantní složitost počet iterací cyklu pro levou část posloupnosti je mid low + 1 počet iterací cyklu pro pravou část posloupnosti je high mid celková složitost je Θ(n) algoritmus Find Maximum Subarray dekompozice a kompozice v konstantním čase, řešení problému (C) v čase Θ(n) { Θ(1) pro n = 1 T (n) = 2T (n/2) + Θ(n) jinak T (n) = Θ(n log n) IB002 Algoritmy a datové struktury I () Jaro / 88
81 Rozděl a panuj Lokální maximum Lokální maximum dané pole A[1... n] celých čísel úkolem je najít lokální maximum v A, tj. takový index i, pro který platí A[i] A[i + 1] a současně A[i] A[i 1] krajní prvek je lokálním maximem právě když A[1] A[2] resp. A[n] A[n 1] Algoritmus 1 hrubá síla otestuj, zda A[1], A[2],..., A[n] jsou lokálním maximem každý test složitosti Θ(1) = složitost O(n) Algoritmus 2 najdi maximální prvek v A složitost Θ(n) IB002 Algoritmy a datové struktury I () Jaro / 88
82 Rozděl a panuj Lokální maximum Lokální maximum Algoritmus 3 - rozděl a panuj zkontroluj prvek na pozici i jestliže A[i] je lokálním maximem, hotovo v opačném případě má A[i] většího souseda jestliže A[i 1] > A[i], tak lokální maximum je vlevo jestliže A[i + 1] > A[i], tak lokální maximum je vpravo pokračuj s posloupností A[: i 1] resp. A[i + 1 :] v nejhorším případě rekurze s max{i 1, n i} prvky balance: i 1 = n i, tj. i = (n 1)/2 T (n) = T (n/2) + Θ(1) T (n) = Θ(logn) IB002 Algoritmy a datové struktury I () Jaro / 88
83 Rozděl a panuj Lokální maximum Lokální maximum - dvourozměrné daná n n matice vzájemně různých celých čísel lokálním maximem je prvek M[i, j], který je větší než všichni jeho sousedé, tj. prvky M[i + 1, j], M[i 1, j], M[i, j + 1] a M[i, j 1] prvek na hranici matice je lokálním maximem právě když je větší než jeho sousedé v matici Algoritmus 1 hrubá síla otestuj všech n 2 prvků matice složitost Θ(n 2 ) Algoritmus 2 redukce na problém lokálního maxima v poli najdi maximální prvek v každém sloupci v posloupnosti maximálních prvků najdi lokální maximum složitost Θ(n 2 ) (složitost hledání maximálních prvků v sloupcích!!!) IB002 Algoritmy a datové struktury I () Jaro / 88
84 Rozděl a panuj Lokální maximum Lokální maximum - dvourozměrné daná n n matice vzájemně různých celých čísel lokálním maximem je prvek M[i, j], který je větší než všichni jeho sousedé, tj. prvky M[i + 1, j], M[i 1, j], M[i, j + 1] a M[i, j 1] prvek na hranici matice je lokálním maximem právě když je větší než jeho sousedé v matici Algoritmus 3 redukce na problém lokálního maxima v poli v posloupnosti maximálních prvků najdi lokálním maximum maximální prvek v sloupci hledej až když ho potřebuješ složitost Θ(n log n) existuje efektivnější řešení??? je možné najít lokálním maximum v n n matici v čase Θ(n)??? IB002 Algoritmy a datové struktury I () Jaro / 88
85 Rozděl a panuj Lokální maximum Lokální maximum - rozděl a panuj okno - n n matice rám okna - první, prostřední a poslední řádek okna, první, prostřední a poslední sloupec okna najdi maximální prvek g mezi 6n 6 prvkami rámu jestliže g je větší než jeho sousedé, hotovo v opačném případě má g většího souseda, který určitě nepatří do rámu pokračuj s podoknem, do kterého patří větší soused prvku g IB002 Algoritmy a datové struktury I () Jaro / 88
86 Rozděl a panuj Lokální maximum Korektnost 1. zvolené podokno obsahuje lokální maximum necht max je maximální prvek podokna max soused prvku g > g,, tj. všichni sousedé prvku max jsou menší a max je lokálním maximem 2. konečnost v případě, že lokální maximum není prvkem rámu podokna, algoritmus rekurzívně hledá maximum v jeho podokně rekurze se zastaví když rám okna pokrývá celé okno (tj. počet řádků / sloupců je nejvýše 3), v takovém případě algoritmus prověří každý prvek okna a podle tvrzení 1 musí toto okno obsahovat lokální maximum 3. prvek, který najde algoritmus ve zvoleném podokně, je lokálním maximem necht m je maximální prvek rámu zvoleného podokna, platí m g když algoritmus vrátí m, tak m je určitě větší než všichni jeho sousedé v podokně a současně je i větší než jeho sousedé obklopující podokno (všichni jsou menší než g) v opačném případě algoritmus vrátí prvek, který nepatří do rámu podokna, je větší než všichni jeho sousedé v podokně a tedy je lokálním maximem IB002 Algoritmy a datové struktury I () Jaro / 88
87 Rozděl a panuj Lokální maximum Složitost vstupem problému je matice rozměrů n n, jako velikost problému uvažujeme hodnotu n T (n) = T (n/2) + Θ(n) T (n) = Θ(n) IB002 Algoritmy a datové struktury I () Jaro / 88
88 Rozděl a panuj Rekurzivní vs iterativní přístup Rekurzivní vs iterativní přístup pro intuitivní, jednoduchý návrh důkaz korektnosti využitím matematické indukce analýza složitosti využitím rekurentní rovnice efektivní řešení proti neefektivní implementace ne vždy podpora ze strany programovacího jazyka neefektivní řešení každý rekurzivní algoritmus lze převést na iterativní simulace zásobníku volání (resp. dynamické programování) jednoduchý přepis v případě tail rekurze IB002 Algoritmy a datové struktury I () Jaro / 88
89 Rozděl a panuj Rekurzivní vs iterativní přístup Rekurzivní vs iterativní přístup tail rekurze -speciální případ rekurze, kde se po rekurzivním volání nedělá žádný výpočet ANO F(x, y) if y = 0 then return x else F (x y + x, y 1) fi NE G(x) if y = 0 then return x else y G(x 1) fi return x y IB002 Algoritmy a datové struktury I () Jaro / 88
90 Rozděl a panuj Rekurzivní vs iterativní přístup Rekurzivní vs iterativní přístup F(x, y) if y = 0 then return x else F (x y + x, y 1) fi F(x, y) label : if y = 0 then return x else x x y + x y y 1 goto label fi F(x, y) ret x for y = 1 to y do ret ret y + ret od return ret IB002 Algoritmy a datové struktury I () Jaro / 88
91 Rozděl a panuj Rekurzivní vs iterativní přístup Rekurzivní vs iterativní přístup Bin Search(x, A, left, right) if right = left then return A[left] == x fi if right < left then mid = (left + right)/2 if A[mid] = x then return true fi if A[mid] < x then left mid + 1 else right mid fi Bin Search(x, A, left, right) fi Bin Search(x, A, left, right) while right < left do mid = (left + right)/2 if A[mid] = x then return true fi if A[mid] < x then left mid + 1 else right mid fi od IB002 Algoritmy a datové struktury I () Jaro / 88
92 Rozděl a panuj Rekurzivní vs iterativní přístup Domácí úkol Vstup: pole A[1... n] celých čísel CoToDela(n) if n = 1 then write A else for i = 1 to n do CoToDela(n 1) if n je liché then swap A[1] a A[n] else swap A[i] a A[n] fi od fi co je výstupem algoritmu? jaká je složitost výpočtu? IB002 Algoritmy a datové struktury I () Jaro / 88
Algoritmizace složitost rekurzivních algoritmů. Jiří Vyskočil, Marko Genyg-Berezovskyj 2010
složitost rekurzivních algoritmů Jiří Vyskočil, Marko Genyg-Berezovskyj 2010 Vyjádřen ení složitosti rekurzivního algoritmu rekurentním m tvarem Příklad vyjádření složitosti rekurzivního algoritmu rekurencí:
Binární vyhledávací stromy pokročilé partie
Binární vyhledávací stromy pokročilé partie KMI/ALS lekce Jan Konečný 30.9.204 Literatura Cormen Thomas H., Introduction to Algorithms, 2nd edition MIT Press, 200. ISBN 0-262-5396-8 6, 3, A Knuth Donald
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
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
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í
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
Základy řazení. Karel Richta a kol.
Základy řazení Karel Richta a kol. Přednášky byly připraveny s pomocí materiálů, které vyrobili Marko Berezovský, Petr Felkel, Josef Kolář, Michal Píše a Pavel Tvrdík Katedra počítačů Fakulta elektrotechnická
Algoritmy I, složitost
A0B36PRI - PROGRAMOVÁNÍ Algoritmy I, složitost České vysoké učení technické Fakulta elektrotechnická v 1.01 Rychlost... Jeden algoritmus (program, postup, metoda ) je rychlejší než druhý. Co ta věta znamená??
Časová složitost / Time complexity
Časová složitost / Time complexity Jan Kybic http://cmp.felk.cvut.cz/~kybic kybic@fel.cvut.cz 2016 2018 1 / 24 Složitost algoritmů Algorithm complexity Časová a paměťová složitost Trvání výpočtu v závislosti
Složitost algoritmů. Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta a kol.
Složitost algoritmů Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta a kol., 2017 Datové struktury a algoritmy, B6B36DSA 02/2017, Lekce 3
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
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á
Rekurentní rovnice, strukturální indukce
Rekurentní rovnice, strukturální indukce Jiří Velebil: A7B01MCS 26. září 2011: 1/20 Příklad (Parketáž triminy z minulé přednášky) P(n) = počet parket k vyparketování místnosti rozměru n 1 P(1) = 1. 2 P(n
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ě
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
Michal Krátký. Úvod do programování. Cíl kurzu. Podmínky získání zápočtu III/III
Michal Krátký Ú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 tel.: +420 596 993 239 místnost: A1004 mail: michal.kratky@vsb.cz
Jarníkův algoritmus. Obsah. Popis
1 z 6 28/05/2015 11:44 Jarníkův algoritmus Z Wikipedie, otevřené encyklopedie Jarníkův algoritmus (v zahraničí známý jako Primův algoritmus) je v teorii grafů algoritmus hledající minimální kostru ohodnoceného
TGH05 - Problém za milion dolarů.
TGH05 - Problém za milion dolarů. Jan Březina Technical University of Liberec 20. března 2012 Časová složitost algoritmu Závislost doby běhu programu T na velikosti vstupních dat n. O(n) notace, standardní
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
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)
ÚVODNÍ ZNALOSTI. datové struktury. správnost programů. analýza algoritmů
ÚVODNÍ ZNALOSTI datové struktury správnost programů analýza algoritmů Datové struktury základní, primitivní, jednoduché datové typy: int, char,... hodnoty: celá čísla, znaky, jednoduché proměnné: int i;
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
Digitální učební materiál
Digitální učební materiál Číslo projektu: CZ.1.07/1.5.00/34.0548 Název školy: Gymnázium, Trutnov, Jiráskovo náměstí 325 Název materiálu: VY_32_INOVACE_146_IVT Autor: Ing. Pavel Bezděk Tematický okruh:
Rekurentní rovnice, strukturální indukce
, strukturální indukce Jiří Velebil: Y01DMA 23. února 2010: Strukturální indukce 1/19 Backusova-Naurova forma Například syntaxe formuĺı výrokové logiky kde a At. Poznámky 1 Relaxace BNF. ϕ ::= a tt (ϕ
Zpracoval: hypspave@fel.cvut.cz 7. Matematická indukce a rekurse. Řešení rekurentních (diferenčních) rovnic s konstantními koeficienty.
Zpracoval: hypspave@fel.cvut.cz 7. Matematická indukce a rekurse. Řešení rekurentních (diferenčních) rovnic s konstantními koeficienty. (A7B01MCS) I. Matematická indukce a rekurse. Indukční principy patří
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é
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
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é
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
Mimo samotné správnosti výsledku vypočteného zapsaným algoritmem je ještě jedno
12 Délka výpočtu algoritmu Mimo samotné správnosti výsledku vypočteného zapsaným algoritmem je ještě jedno neméně důležité hledisko k posouzení vhodnosti algoritmu k řešení zadané úlohy. Jedná se o čas,
Principy indukce a rekursivní algoritmy
Principy indukce a rekursivní algoritmy Jiří Velebil: A7B01MCS 19. září 2011: Indukce 1/20 Příklad Místností rozměru n budeme rozumět šachovnici rozměru 2 n 2 n, ze které je jedno (libovolné) pole vyjmuto.
Algoritmus pro hledání nejkratší cesty orientovaným grafem
1.1 Úvod Algoritmus pro hledání nejkratší cesty orientovaným grafem Naprogramoval jsem v Matlabu funkci, která dokáže určit nejkratší cestu v orientovaném grafu mezi libovolnými dvěma vrcholy. Nastudoval
PŘEDNÁŠKA 2 POSLOUPNOSTI
PŘEDNÁŠKA 2 POSLOUPNOSTI 2.1 Zobrazení 2 Definice 1. Uvažujme libovolné neprázdné množiny A, B. Zobrazení množiny A do množiny B je definováno jako množina F uspořádaných dvojic (x, y A B, kde ke každému
opakování reprezentace grafů, dijkstra, bellman-ford, johnson
opakování reprezentace grafů, dijkstra, bellman-ford, johnson Petr Ryšavý 19. září 2016 Katedra počítačů, FEL, ČVUT opakování reprezentace grafů Graf Definice (Graf) Graf G je uspořádaná dvojice G = (V,
Algoritmická matematika 3 Mgr. Petr Osička, Ph.D. ZS 2014. Rozděl a panuj
Algoritmická matematika 3 KMI/ALM3 Mgr. Petr Osička, Ph.D. ZS 2014 1 Základní princip Rozděl a panuj Technika rozděl a panuj je založená na následující myšlence. Z dané vstupní instance I vygenerujeme
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ří
Č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á
Algoritmizace. Jiří Vyskočil, Marko Genyg-Berezovskyj 2010
Jiří Vyskočil, Marko Genyg-Berezovskyj 2010 Úvod stránky předmětu: https://cw.felk.cvut.cz/doku.php/courses/a4b33alg/start cíle předmětu Cílem je schopnost samostatné implementace různých variant základních
Databáze, sítě a techniky programování X33DSP
Databáze, sítě a techniky programování X33DSP Anotace: Náplní předmětu jsou některé techniky a metody používané ve výpočetních systémech zaměřených na biomedicínské inženýrství. Cílem je položit jednotný
Různé algoritmy mají různou složitost
/ 1 Různé algoritmy mají různou složitost 1/ 1 Rychlost... Jeden algoritmus (program, postup, metoda ) je rychlejší než druhý. Co ta věta znamená?? 2/ 1 Asymptotická složitost y y x x Každému algoritmu
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
Obsah přednášky. Analýza algoritmu Algoritmická složitost Návrhy algoritmů Urychlování algoritmů 1/41
Obsah přednášky Analýza algoritmu Algoritmická složitost Návrhy algoritmů Urychlování algoritmů 1/41 Analýza algoritmu Proč vůbec dělat analýzu? pro většinu problémů existuje několik různých přístupů aby
Dijkstrův algoritmus
Dijkstrův algoritmus Hledání nejkratší cesty v nezáporně hranově ohodnoceném grafu Necht je dán orientovaný graf G = (V, H) a funkce, která každé hraně h = (u, v) H přiřadí nezáporné reálné číslo označované
Složitost algoritmů. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava
Složitost algoritmů doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava Prezentace ke dni 27. prosince 2015 Jiří Dvorský (VŠB TUO) Složitost algoritmů
Časová složitost algoritmů, řazení a vyhledávání
Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti Časová složitost algoritmů, řazení a vyhledávání BI-PA1 Programování a algoritmizace 1 Katedra teoretické informatiky Miroslav Balík Fakulta
Úvod do problematiky
Úvod do problematiky Karel Richta a kol. Přednášky byly připraveny i s pomocí materiálů, které vyrobili Marko Berezovský, Petr Felkel, Josef Kolář, Michal Píše a Pavel Tvrdík Katedra počítačů Fakulta elektrotechnická
Úvod do programování 10. hodina
Úvod do programování 10. hodina RNDr. Jan Lánský, Ph.D. Katedra informatiky a matematiky Fakulta ekonomických studií Vysoká škola finanční a správní 2015 Umíme z minulé hodiny Syntax Dvojrozměrné pole
V každém kroku se a + b zmenší o min(a, b), tedy vždy alespoň o 1. Jestliže jsme na začátku dostali 2
Euklidův algoritmus Doprovodný materiál pro cvičení Programování I. NPRM044 Autor: Markéta Popelová Datum: 31.10.2010 Euklidův algoritmus verze 1.0 Zadání: Určete největšího společného dělitele dvou zadaných
TGH06 - Hledání nejkratší cesty
TGH06 - Hledání nejkratší cesty Jan Březina Technical University of Liberec 26. března 2013 Motivační problémy Silniční sít reprezentovaná grafem. Najdi nejkratší/nejrychlejší cestu z místa A do místa
Vzdálenost uzlů v neorientovaném grafu
Vzdálenosti a grafy Vzdálenost uzlů v neorientovaném grafu Je dán neorientovaný neohodnocený graf G = (V,E,I) vzdálenost uzlů u a v v neorientovaném souvislém grafu G je délka nejkratší cesty spojující
Vyvažování a rotace v BVS, všude se předpokládá AVL strom
Vyvažování a rotace v BVS, všude se předpokládá AVL strom 1. Jednoduchá levá rotace v uzlu u má operační složitost a) závislou na výšce levého podstromu uzlu u b) mezi O(1) a Θ(n) c) závislou na hloubce
Základy algoritmizace a programování
Základy algoritmizace a programování Složitost algoritmů. Třídění Přednáška 8 16. listopadu 2009 Který algoritmus je "lepší"? Různé algoritmy, které řeší stejnou úlohu zbytek = p % i; zbytek = p - p/i*i;
Numerická matematika 1
Numerická matematika 1 Obsah 1 Řešení nelineárních rovnic 3 1.1 Metoda půlení intervalu....................... 3 1.2 Metoda jednoduché iterace..................... 4 1.3 Newtonova metoda..........................
Algoritmizace prostorových úloh
INOVACE BAKALÁŘSKÝCH A MAGISTERSKÝCH STUDIJNÍCH OBORŮ NA HORNICKO-GEOLOGICKÉ FAKULTĚ VYSOKÉ ŠKOLY BÁŇSKÉ - TECHNICKÉ UNIVERZITY OSTRAVA Algoritmizace prostorových úloh Grafové úlohy Daniela Szturcová Tento
Doba běhu daného algoritmu/programu. 1. Který fragment programu z následujících dvou proběhne rychleji?
1 Doba běhu daného algoritmu/programu 1. Který fragment programu z následujících dvou proběhne rychleji? int n = 100; int sum = 0; for (i = 0; i < n; i++) for (j = 0; j < i; j++) sum += i+j; int n = 75;
TGH06 - Hledání nejkratší cesty
TGH06 - Hledání nejkratší cesty Jan Březina Technical University of Liberec 31. března 2015 Motivační problémy Silniční sít reprezentovaná grafem. Ohodnocené hrany - délky silnic. Najdi nejkratší/nejrychlejší
Asymptotická složitost algoritmů
Semestrální projekt 1 Y14TED Asymptotická složitost algoritmů Autor: Antonín DANĚK Osnova Slide 2 Co je to složitost algoritmu? Jak se počítá složitost algoritmu? Smysl přesného výpočtu složitosti algoritmu
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),
TGH05 - aplikace DFS, průchod do šířky
TGH05 - aplikace DFS, průchod do šířky Jan Březina Technical University of Liberec 31. března 2015 Grafová formulace CPM (critical path method) Orientovaný acyklický graf (DAG) je orientovaný graf neobsahující
Dynamické programování
Algoritmická matematika 3 KMI/ALM3 Mgr. Petr Osička, Ph.D ZS 2014 1 Základní princip Dynamické programování Princip dynamického programování je založen na podobné myšlence jako rozděl a panuj. Vstupní
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
Stromové rozklady. Definice 1. Stromový rozklad grafu G je dvojice (T, β) taková, že T je strom,
Stromové rozklady Zdeněk Dvořák 25. října 2017 Definice 1. Stromový rozklad grafu G je dvojice (T, β) taková, že T je strom, β je funkce přiřazující každému vrcholu T podmnožinu vrcholů v G, pro každé
Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague
1 / 40 regula Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague regula 1 2 3 4 5 regula 6 7 8 2 / 40 2 / 40 regula Iterační pro nelineární e Bud f reálná funkce
bfs, dfs, fronta, zásobník, prioritní fronta, halda
bfs, dfs, fronta, zásobník, prioritní fronta, halda Petr Ryšavý 19. září 2017 Katedra počítačů, FEL, ČVUT prohledávání grafů Proč prohledávání grafů Zkontrolovat, zda je sít spojitá. Hledání nejkratší
opakování reprezentace grafů, dijkstra, bellman-ford, johnson
opakování reprezentace grafů, dijkstra, bellman-ford, johnson Petr Ryšavý 18. září 2017 Katedra počítačů, FEL, ČVUT opakování reprezentace grafů Graf Definice (Graf) Graf G je uspořádaná dvojice G = (V,
NMIN101 Programování 1 2/2 Z --- NMIN102 Programování /2 Z, Zk
NMIN101 Programování 1 2/2 Z --- NMIN102 Programování 2 --- 2/2 Z, Zk Pavel Töpfer Katedra software a výuky informatiky MFF UK MFF Malostranské nám., 4. patro, pracovna 404 pavel.topfer@mff.cuni.cz http://ksvi.mff.cuni.cz/~topfer
Grafové algoritmy. Programovací techniky
Grafové algoritmy Programovací techniky Grafy Úvod - Terminologie Graf je datová struktura, skládá se z množiny vrcholů V a množiny hran mezi vrcholy E Počet vrcholů a hran musí být konečný a nesmí být
TGH05 - aplikace DFS, průchod do šířky
TGH05 - aplikace DFS, průchod do šířky Jan Březina Technical University of Liberec 28. března 2017 Grafová formulace CPM (critical path method) Orientovaný acyklický graf (DAG) je orientovaný graf neobsahující
Tato tematika je zpracována v Záznamy přednášek: str
Obsah 10. přednášky: Souvislosti Složitost - úvod Výpočet časové složitosti Odhad složitosti - příklady Posuzování složitosti Asymptotická složitost - odhad Přehled technik návrhů algoritmů Tato tematika
Dynamické programování
ALG 0 Dynamické programování zkratka: DP Zdroje, přehledy, ukázky viz https://cw.fel.cvut.cz/wiki/courses/a4balg/literatura_odkazy 0 Dynamické programování Charakteristika Neřeší jeden konkrétní typ úlohy,
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ý
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í
Zdůvodněte, proč funkce n lg(n) roste alespoň stejně rychle nebo rychleji než než funkce lg(n!). Symbolem lg značíme logaritmus o základu 2.
1 3 4 5 6 7 8 9 10 11 1 13 14 15 16 17 18 19 0 1 3 4 5 6 7 8 9 30 31 3 Zdůvodněte, proč funkce f(n) = n log(n) 1 n 1/ roste rychleji než funkce g(n) = n. Zdůvodněte, proč funkce f(n) = n 3/ log(n) roste
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
Příklad 1/23. Pro rostoucí spojité fukce f(x), g(x) platí f(x) Ω(g(x)). Z toho plyne, že: a) f(x) Ο(g(x)) b) f(x) Θ(g(x)) d) g(x) Ω(f(x))
Příklad 1/23 Pro rostoucí spojité fukce f(x), g(x) platí f(x) Ω(g(x)). Z toho plyne, že: a) f(x) Ο(g(x)) b) f(x) Θ(g(x)) c) g(x) Θ(f(x)) d) g(x) Ω(f(x)) e) g(x) Ο(f(x)) 1 Příklad 2/23 Pro rostoucí spojité
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
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í
bfs, dfs, fronta, zásobník, prioritní fronta, halda
bfs, dfs, fronta, zásobník, prioritní fronta, halda Petr Ryšavý 20. září 2016 Katedra počítačů, FEL, ČVUT prohledávání grafů Proč prohledávání grafů Zkontrolovat, zda je sít spojitá. Hledání nejkratší
Digitální učební materiál
Digitální učební materiál Číslo projektu: CZ.1.07/1.5.00/34.0548 Název školy: Gymnázium, Trutnov, Jiráskovo náměstí 325 Název materiálu: VY_32_INOVACE_145_IVT Autor: Ing. Pavel Bezděk Tematický okruh:
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.
Algoritmy vyhledávání a řazení. Zatím nad lineární datovou strukturou (polem)
Algoritmy vyhledávání a řazení Zatím nad lineární datovou strukturou (polem) Vyhledávací problém Vyhledávání je dáno Universum (množina prvků) U je dána konečná množina prvků X U (vyhledávací prostor)
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ý
Matematická indukce a správnost programů. Základy diskrétní matematiky, BI-ZDM ZS 2011/12, Lekce 13
Matematická indukce a správnost programů doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky FIT České vysoké učení technické v Praze c Josef Kolar, 2011 Základy diskrétní matematiky, BI-ZDM ZS
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
Algoritmy a datové struktury
Algoritmy a datové struktury Slajdy pro výuku na KS Ondřej Čepek Sylabus 1. Prostředky pro popis složitosti algoritmů a operací nad datovými strukturami (asymptotická notace), příklady použití asymptotické
Lineární algebra : Násobení matic a inverzní matice
Lineární algebra : Násobení matic a inverzní matice (8. přednáška) František Štampach, Karel Klouda frantisek.stampach@fit.cvut.cz, karel.klouda@fit.cvut.cz Katedra aplikované matematiky Fakulta informačních
COMPLEXITY
Níže uvedené úlohy představují přehled otázek, které se vyskytly v tomto nebo v minulých semestrech ve cvičení nebo v minulých semestrech u zkoušky. Mezi otázkami semestrovými a zkouškovými není žádný
Grafové algoritmy. Programovací techniky
Grafové algoritmy Programovací techniky Grafy Úvod - Terminologie Graf je datová struktura, skládá se z množiny vrcholů V a množiny hran mezi vrcholy E Počet vrcholů a hran musí být konečný a nesmí být
Algoritmy na ohodnoceném grafu
Algoritmy na ohodnoceném grafu Dvě základní optimalizační úlohy: Jak najít nejkratší cestu mezi dvěma vrcholy? Dijkstrův algoritmus s t Jak najít minimální kostru grafu? Jarníkův a Kruskalův algoritmus
NEJKRATŠÍ CESTY I. Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky, FIT České vysoké učení technické v Praze
NEJKRATŠÍ CESTY I Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky, FIT České vysoké učení technické v Praze BI-GRA, LS 2010/2011, Lekce 7 Evropský sociální fond Praha & EU: Investujeme do vaší
Dynamické programování. Optimální binární vyhledávací strom
The complexity of different algorithms varies: O(n), Ω(n ), Θ(n log (n)), Dynamické programování Optimální binární vyhledávací strom Různé algoritmy mají různou složitost: O(n), Ω(n ), Θ(n log (n)), The
Lineární algebra : Násobení matic a inverzní matice
Lineární algebra : Násobení matic a inverzní matice (8. přednáška) František Štampach, Karel Klouda LS 2013/2014 vytvořeno: 17. března 2014, 12:42 1 2 0.1 Násobení matic Definice 1. Buďte m, n, p N, A
Paralelní grafové algoritmy
Paralelní grafové algoritmy Značení Minimální kostra grafu Nejkratší cesta z jednoho uzlu Nejkratší cesta mezi všemi dvojicemi uzlů Použité značení Definition Bud G = (V, E) graf. Pro libovolný uzel u
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
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]
12. Globální metody MI-PAA
Jan Schmidt 2011 Katedra číslicového návrhu Fakulta informačních technologií České vysoké učení technické v Praze Zimní semestr 2011/12 MI-PAA EVROPSKÝ SOCIÁLNÍ FOND PRAHA & EU: INVESTUJENE DO VAŠÍ BUDOUCNOSTI
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)):
Seminář z IVT Algoritmizace. Slovanské gymnázium Olomouc Tomáš Kühr
Seminář z IVT Algoritmizace Slovanské gymnázium Olomouc Tomáš Kühr Algoritmizace - o čem to je? Zatím jsme se zabývali především tím, jak určitý postup zapsat v konkrétním programovacím jazyce (např. C#)
Složitost 1.1 Opera ní a pam ová složitost 1.2 Opera ní složitost v pr rném, nejhorším a nejlepším p ípad 1.3 Asymptotická složitost
1 Složitost 1.1 Operační a paměťová složitost Nezávislé určení na konkrétní implementaci Několik typů operací = sčítání T+, logické T L, přiřazení T A(assign), porovnání T C(compare), výpočet adresy pole
DMA Přednáška Rekurentní rovnice. takovou, že po dosazení odpovídajících členů do dané rovnice dostáváme pro všechna n n 0 + m pravdivý výrok.
DMA Přednáška Rekurentní rovnice Rekurentní rovnice či rekurzivní rovnice pro posloupnost {a n } je vztah a n+1 = G(a n, a n 1,..., a n m ), n n 0 + m, kde G je nějaká funkce m + 1 proměnných. Jejím řešením