Algoritmizace diskrétních struktur. Petr Kovář
|
|
- Michal Kopecký
- před 6 lety
- Počet zobrazení:
Transkript
1 Algoritmizace diskrétních struktur Petr Kovář
2 Petr Kovář Algoritmizace diskrétních struktur c Petr Kovář, 2016
3 Předmluva Text, který právě čtete, vzniká jako součást přípravy přednášek předmětu Diskrétní matematika a úvod do Teorie grafů (DiM) pro bakalářské studium na technické vysoké škole. Vycházím z osnov předmětu, které byly navrženy pro studenty oborů se zaměřením na informatiku a další technické obory. Čerpal jsem ze skript Diskrétní matematika Petra Hliněného [4], z knihy Discrete Mathematics and Its Applications od Kennetha Rosena [9], z knihy Kapitoly z diskrétní matematiky od Jiřího Matouška a Jaroslava Nešetřila [8], z knihy Introduction to Graph Theory od Douglase B. Westa [10] i dalších učebnic a článků. Tento stručný dokument doplňuje důležité téma jak v programovacích jazycích efektivně pracovat se strukturami zavedenými v první části předmětu. Snažil jsem se, aby text byl jednak přehledný a současně přesný a přitom čtivý a především aby obsahoval dostatek příkladů. Poděkování patří Michalu Kravčenkovi a Matěji Krbečkovi, kteří text pečlivě prošli, upozornili na řadu nepřesností a pomohli vylepšit kvalitu výsledného textu. Pokud máte pocit, že v textu je přesto nějaká nesrovnalost, dejte mi vědět. Budu rád, když mne upozorníte i na méně srozumitelné pasáže, abych je v dalších verzích textu mohl vylepšit. Text byl vysázen pomocí sázecího systému TEX ve formátu pdf L A TEX. V Ostravě Petr Kovář iii
4 Obsah 0 Úvodní část Úvod Datové struktury Pseudokód Cykly Paměťová a výpočetní složitost Implementace diskrétních struktur Posloupnosti Zobrazení Relace Permutace Implementace množin Množiny Charakteristická funkce podmnožiny Seznam prvků množiny Uspořádaný seznam prvků množiny Generování výběrů Výběry s předepsaným počtem prvků Jednoduché procházení dvojic (trojic, atd... ) Permutace n prvků Výběry s libovolným počtem prvků Procházení všech k-prvkových variací Procházení všech k-prvkových variací bez opakování Procházení všech k-prvkových kombinací (bez opakování) z n prvků Generátory náhodných čísel Využití generátorů náhodných čísel Typy náhodných generátorů iv
5 5 Kombinatorická exploze Co je kombinatorická exploze Až budou lepší počítače? Rejstřík 28 Literatura 29 v
6 vi
7 1 Kapitola 0 Úvodní část Průvodce studiem Z S V Rozkvět diskrétní matematiky jde ruku v ruce s rozvojem výpočetní techniky. V tomto stručném textu se budeme věnovat algoritmizaci diskrétních struktur. Nejprve však uvedeme stručný přehled pojmů, které budou využity v dalších kapitolách. J Cíle Po prostudování celého textu kapitoly budete schopni: vysvětlit pojem složitosti algoritmu, číst algoritmy v pseudokódu, pracovat s pointery, jednorozměrnými poli a základními datovými typy. 0.1 Úvod V tomto textu předpokládáme znalost základních datových struktur i základy programování. Dále předpokládáme, že čtenář zná a umí používat základní datové typy a jednoduché strukturované datové typy jako jsou uspořádané dvojice, jednorozměrná pole, dvou a více-rozměrná pole. Umí přistupovat k prvkům pole pomocí indexů i pracovat s prolinkovanými datovými strukturami. V této sekci přehledně shrneme datové typy a postupy, které se objeví v navazující části textu. 0.2 Datové struktury Předpokládáme základní znalost práce s pointery (ukazateli).
8 2 Úvodní část 0.3 Pseudokód Předpokládáme, že čtenář je zběhlý ve čtení pseudokódů s cykly a rozhodovacími bloky, s rekurzivním voláním funkcí, předáváním parametrů a návratových hodnot. Na několika místech využijeme ternární operátor?: 0.4 Cykly V algoritmech pracujeme jak s cykly řízenými podmínkou, tak s cykly s řídící proměnnou. Často využijeme direktivy break a continue. 0.5 Paměťová a výpočetní složitost Klíčovou vlastností algoritmu je jejich paměťová a výpočetní složitost. Symbolem O(g(n)) rozumíme takovou množinu funkcí f(n), pro které existují kladné konstanty c a n 0 tak, n > n 0 platí 0 f(n) c g(n). Pomocí symbolu O(g(n)) budeme zapisovat složitost algoritmů.
9 3 Kapitola 1 Implementace diskrétních struktur Průvodce studiem Z S V V rámci prvního tématického celku o diskrétních strukturách si povíme něco o jejich implementaci do programovacích jazyků. Některé probírané struktury a postupy lze naprogramovat snadno, jiné obtížně. Často existuje řada přístupů, které se liší v nároku na paměť a/nebo strojový čas. Obecný přístup bývá na úkor rychlosti. Rychlejších kódů dosáhneme implementací datových typů nebo algoritmů připravenými na míru konkrétního problému, ale ne vždy musí být obecný přístup řádově pomalejší. Tato kapitola je věnována vybraným implementacím. J Cíle Po prostudování této kapitoly budete schopni: navrhnout vhodnou implementaci posloupností, zobrazení, relací a permutací, efektivně ověřit základní vlastnosti konkrétní relace, využít v algoritmech skládání zobrazení, vypsat permutaci pomocí cyklů. 1.1 Posloupnosti Připomeňme, že posloupností rozumíme množinu čísel, která je uspořádaná: tj. uspořádání určuje první, druhý, třetí člen posloupnosti atd. V analýze jsme posloupnost definovali jako funkci N R. Takto definovaná posloupnost má nekonečně mnoho členů. Každou konečnou posloupnost můžeme vždy přidáním nulových členů doplnit na nekonečnou posloupnost Poznámka 1.1 (O indexování polí). V tomto textu jsme se rozhodli indexovat prvky polí od nuly. První prvek jednorozměrného pole a s n prvky je a[0], poslední
10 4 Implementace diskrétních struktur prvek tohoto pole je a[n-1]. Velká část programovacích jazyků indexuje pole právě od nuly. Věta 1.2. (Konečnou) posloupnost (a 0, a 1,..., a n 1 ) implementujeme jako jednorozměrné pole a[ ], kde a[i] = a i. Příklad 1.3. Máme dánu (konečnou) posloupnost (7, 5, 5, 7, 5, 6, 8). Uložíme ji do pole p = [ ]. První prvek posloupnosti je p[0] s hodnotou 7, poslední (sedmý) prvek je p[6] s hodnotou 8. S konečnými posloupnostmi obvykle neprovádíme složité manipulace, nalezení největšího a nejmenšího prvku zajistí následující klasický kód. Algoritmus 1.1 (Nalezení indexu největšího a nejmenšího prvku). // posloupnost je uložena v poli a[ ] // počet prvků značíme n if (n<1) return PRAZDNA_POSLOUPNOST; max=min=0; // inicializace indexu extrémů for (i=1; i<n; i++) { if (a[i] > a[max]) { max=i; // našli jsme větší elseif (a[i] < a[min]) { min=i; // našli jsme menší // výsledek výstup: nejmenší prvek je a[min], největší prvek je a[max] Složitost uvedeného algoritmu je O(n), kde n udává počet prvků posloupnosti. 1.2 Zobrazení Z kapitoly o relacích v Úvodu do diskrétní matematiky [7] už víme, že zobrazení f : A B je speciálním případem relace mezi množinami A a B, kdy ke každému prvku a z množiny A existuje právě jeden prvek b z množiny B tak, aby dvojice (a, b) patřila do této relace. Proto můžeme psát b = f(a).
11 1.2 Zobrazení 5 Mějme konečné množiny A = {a 0, a 1..., a n 1 a B = {b 0, b 1,..., b m 1. Zobrazení f : A B implementujeme stejně jako posloupnost: jako jednorozměrné pole f[ ], ve kterém f[i]=j vyjadřuje f(a i ) = b j. Všimněte si, že proměnná i nabývá hodnot indexu prvků v A, zatímco prvky j pole f[ ] jsou indexy prvků v množině B. Výhodou je, že taková implementace funkce nezávisí na konkrétním datovém typu prvků množin A, B. Nevýhodou je, že při výpisu prvků musíme překládat prvky na jejich indexy, což je snadné a rychlé. Potřebujeme-li vypsat prvek s příslušným indexem, tak prvek snadno najdeme v poli strukturovaných proměnných či pointerů. Jestliže ale známe prvek a potřebujeme určit jeho index, musíme uložené prvky prohledávat, což je náročné na strojový čas, nebo využijeme datové typy jako hašovací tabulky. Příklad 1.4. Máme dáno zobrazení f : [0, 5] [0, 5], kde f(0) = 4, f(1) = 5, f(2) = 3, f(3) = 3, f(4) = 2, f(5) = 2. Zobrazení uložíme do pole f = [ ]. Test zobrazení Pozor: ne každé jednorozměrné pole nutně odpovídá nějaké funkci f : A B ve smyslu, jak byla zavedena v předchozím odstavci. Je-li B množina s m prvky, tak prvky pole f[ ] musí být indexy z intervalu [0, m 1]. To lze snadno ověřit algoritmem se složitostí O(n), kde n je počet prvků pole f[ ]. Algoritmus 1.2 (Test, zda v poli f[ ] je funkce). for (i=0; i<n; i++) if (f[i]<0 f[i]>m-1) { // index mimo rozsah obrazů? % return NENÍ_FUNKCE; return JE_FUNKCE; Příklad 1.5. Pole g = [ ] neobsahuje funkci g : [1, 3] [1, 10], protože f(3) = 10, ale 10 je index mimo rozsah indexů 0 až 9 pravé množiny [1, 10]. Vlastnosti zobrazení Zobrazení mohou být injektivní, surjektivní, nebo bijektivní. Máme-li zobrazení implementováno pomocí jednorozměrných polí obsahujících indexy, tak pomocí následujícího kódu můžeme ověřit, zda zobrazení f : A B je injektivní. Předpokládáme, že A = n, B = m. V algoritmu počítáme, kolikrát je který prvek množiny B obrazem nějakého prvku z A. Oba následující algoritmy spoléhají na to, že v poli f jsou funkční hodnoty uloženy pomoci indexů prvků b 1, b 2,..., b m, tj. v poli jsou uložena čísla z intervalu [0, m 1]. Pokud by tomu uložená data neodpovídala, algoritmy nebudou fungovat správně.
12 6 Implementace diskrétních struktur Algoritmus 1.3 (Test, zda v poli f[ ] je injektivní funkce). for (i=0; i<m; i++) u[i] = 0; // pomocné pole for (i=0; i<n; i++) ++u[f[i]]; // je použit for (i=0; i<m; i++) if (u[i]>1) { return NENÍ_INJEKTIVNÍ_FUNKCE; return JE_INJEKTIVNÍ_FUNKCE; Složitost uvedeného algoritmu je O(n). Surjektivita funkce se ověří podobně, stačí jen zkontrolovat, zda každý prvek množiny B je obrazem nějakého prvku z A. Algoritmus 1.4 (Test, zda v poli f[ ] je surjektivní funkce). for (i=0; i<m; i++) u[i] = 0; // pomocné pole for (i=0; i<n; i++) u[f[i]] = 1; // je použit for (i=0; i<m; i++) if (u[i]!=1) { return NENÍ_SURJEKTIVNÍ_FUNKCE; return JE_SURJEKTIVNÍ_FUNKCE; Složitost uvedeného algoritmu je opět O(n). Protože injektivní zobrazení f : A B je pro dvě množiny stejné velikosti současně surjektivní, tak pro ověření bijektivity stačí porovnat velikosti množin: A, B a ověřit jen kteroukoliv z obou vlastností jedním ze dvou předchozích algoritmů. 1.3 Relace Připomeňme, že binární relace R na množině A je podmnožina kartézské mocniny A 2, tj. R A A. Pro malé konečné množiny A = {a 0, a 1,..., a n 1 implementujeme obecnou relaci dvourozměrným polem r[ ][ ], ve kterém je { 0 pokud (a i, a j ) R a r[i][j] = 1 pokud (a i, a j ) R. Pro velké množiny s miliony prvků by se však taková matice nevešla do paměti. Konkrétní implementace je pak obvykle připravena na míru řešené úloze. V dalším textu budeme opět pro jednoduchost předpokládat, že pracujeme s množinami malých celých čísel [0, n], které odpovídají indexům prvků.
13 1.3 Relace 7 Příklad 1.6. Mějme relaci R [0, 4] 2, kde (0, 0) R, (0, 4) R, (1, 3) R, (2, 2) R a (4, 0) R. Relaci R uložíme do dvojrozměrného pole, kde řádkový index dvojice (i, j) odpovídá prvnímu prvku a sloupcový index druhému prvku uspořádané dvojice R = Vlastnosti relací Předpokládejme, že máme binární relaci R na množině {0, 1,..., n 1 reprezentovanou dvourozměrným polem r[ ][ ]. Při ověřování, zda se jedná o relaci ekvivalence nebo relaci částečného uspořádání, musíme ověřit, zda relace má některé pěkné vlastnosti: ověřuje se reflexivita, symetrie, antisymetrie a tranzitivita. Máme-li například v relační databázi uloženou informaci o vztazích mezi objekty, tak znázornit tuto strukturu pomocí hasseovského diagramu má smysl pouze v případě, že není porušena vlastnost antisymetrie a tranzitivity. Jinak diagram nemůže být správně a nemůže odpovídat údajům v databázi. V dalším textu předpokládáme, že relace r na množině [0, n 1] je uložena v dvojrozměrném poli r[ ][ ]. Algoritmus 1.5 (Test, zda relace r je reflexivní). for (i=0; i<n; i++) if (!r[i][i]) { // jsou jedničky? return NENÍ_REFLEXIVNÍ_RELACE; return JE_REFLEXIVNÍ_RELACE; Algoritmus má složitost O(n). Je-li relace reflexivní, musíme tuto vlastnost ověřit pro každý prvek množiny [0, n 1]. Jestliže je vlastnost porušena byť u jediného prvku, můžeme prohledávání okamžitě ukončit. Podobně můžeme ověřit, zda relace uložená v dvojrozměrném poli r[ ][ ] je symetrická. Algoritmus 1.6 (Test, zda relace r je symetrická). for (i=0; i<n; i++) for (j=i+1; j<n; j++) if (r[i][j]!=r[j][i]) { // je symetrická matice? return NENÍ_SYMETRICKÁ_RELACE; return JE_SYMETRICKÁ_RELACE;
14 8 Implementace diskrétních struktur Protože vlastnost symetrie je nutno ověřit pro každou dvojici prvků, je složitost algoritmu O(n 2 ). Ovšem v případě, že najdeme dvojici, pro kterou je r[i][j] r[j][i], můžeme prohledávání okamžitě ukončit, neboť relace symetrická není. Analogicky můžeme ověřit, zda některá dvojice prvků pole neporuší vlastnost antisymetrie. Algoritmus 1.7 (Test, zda relace r je antisymetrická). for (i=0; i<n; i++) for (j=i+1; j<n; j++) if (r[i][j]+r[j][i]==2) { // je antisymetrická matice? return NENÍ_ANTISYMETRICKÁ_RELACE; return JE_ANTISYMETRICKÁ_RELACE; Test, zda je relace uložená v poli r[ ][ ] tranzitivní, znamená ověřit i, j, k : r[i][j] r[j][k] r[i][k]. Můžeme využít například následující kód. Algoritmus 1.8 (Test, zda relace r tranzitivní). for (i=0; i<n; i++) for (j=0; j<n; j++) { if (!r[i][j]) continue; // může for (k=0; k<n; k++) { if (!r[j][k]) continue; // může if (r[i][k]) continue; // musí být! return NENÍ_TRANZITIVNÍ_RELACE; return JE_TRANZITIVNÍ_RELACE; Všimněte si, že vlastnost ověřujeme pro každou uspořádanou(!) trojici prvků, tj. pracujeme s každou trojicí indexů i, j, k. Proto složitost uvedeného algoritmu je O(n 3 ) a pro obecnou relaci nelze počet testů zredukovat, neboť všechny trojice musí být prověřeny. Pro úplnost přidáme algoritmus, který prověří, zda relace uložená v dvojrozměrném poli r[ ][ ] je úplná. Algoritmus 1.9 (Test, zda relace r je úplná). for (i=0; i<n; i++) for (j=i; j<n; j++) if (r[i][j]+r[j][i]==0) { // je úplná matice? return NENÍ_ÚPLNÁ_RELACE; return JE_ÚPLNÁ_RELACE;
15 1.4 Permutace 9 Uvedený algoritmus má složitost O(n 2 ). Všimněte si, že relace, která není reflexivní, nemůže být úplná. 1.4 Permutace Připomeňme, že permutace konečné množiny [0, n 1] jsme v Základech diskrétní matematiky [7] zavedli jako bijektivní zobrazení p : [0, n 1] [0, n 1]. A protože na straně 4 jsme zobrazení ukládali do jednorozměrného pole, budeme i permutaci p implementovat, jako jednorozměrné pole p[ ]. Dříve, než budeme s permutacemi v nějakém algoritmu pracovat, měli bychom si být jisti, že data jsou ve správném formátu. Později uvedeme algoritmy pro skládání permutací, nebo zápis permutací pomocí cyklů, které spoléhají na to, že data uložená v poli p[ ] odpovídají definici permutace, tj. pole obsahuje právě čísla z množiny [0, n 1] každé právě jednou. Jestliže by data v poli p[ ] neodpovídaly permutaci, uvedené algoritmy by nefungovaly správně. Jak poznáme, že v poli je uložena permutace? Stačí ověřit zda je zobrazení uložené v poli p[ ] na (neboli surjektivní). Algoritmus 1.10 (Test, zda p[ ] je permutace). for (i=0; i<n; i++) u[i] = 0; // pomocné pole for (i=0; i<n; i++) u[p[i]] = 1; // 1 = je použit for (i=0; i<n; i++) if (u[i]!=1) { return NENÍ_PERMUTACE; return JE_PERMUTACE; Všimněte si, že algoritmus má složitost O(n). Uvedené tři cykly nejsou vnořené. ( ) Příklad 1.7. Mějme permutaci π = Permutaci π uložíme do pole pi = [ ] Nejčastěji diskutovanou operací bylo skládání permutací. Jestliže hledáme permutaci r = q p a premutace p a q máme uloženy v polích p[ ] a q[ ], tak složenou permutaci r uložíme do jednorozměrného pole r[ ] například pomocí následujícího algoritmu. Algoritmus 1.11 (Složení permutací p[ ] a q[ ] je permutace r[ ]). for (i=0; i<n; i++) r[i] = q[p[i]]; Je-li v poli p[ ] uložena permutace, tak její zápis pomocí disjunktních cyklů získáme například kódem:
16 10 Implementace diskrétních struktur Algoritmus 1.12 (Výpis všech cyklů n-prvkové permutace p[ ]). for (i=0; i<n; i++) u[i] = 0; // pomocné pole for (i=0; i<n; i++) if (u[i]==0) { // ještě nepoužit printf("(%d",i); u[i] = 1; // začátek cyklu for (j=p[i]; j!=i; j=p[j]) { // další v cyklu printf(",%d",j); u[j] = 1; printf(")"); // konec cyklu Příklad 1.8. Mějme například permutaci ( ) π = uloženou v jednorozměrném poli pi = [ ]. Předchozí algoritmus vypíše (0,4)(1,2)(3)(5)
17 11 Kapitola 2 Implementace množin Průvodce studiem Z S V V této kapitole ukážeme několik implementací konečných množin. Ukážeme jejich přednosti a slabé stránky tak, aby jsme při implementaci konkrétního algoritmu uměli zvolit nejvhodnější variantu. J Cíle Po prostudování této kapitoly budete schopni: implementovat konečné množiny několika způsoby, porovnat výhody a nevýhody jednotlivých implementací, zvolit vhodnou implementaci pro konkrétní úlohu. 2.1 Množiny Množinou rozumíme soubor několika různých prvků. Množin mohou být konečné i nekonečné, zde se zaměříme na (malé) konečné množiny. Mezi nejběžnější operace, které s množinami provádíme, patří: zjištění, zda se daný prvek x nachází v množině A, přidání prvku x do množiny A, odebrání prvku x a množiny A. Každá z těchto operací má jiné nároky na složitost nebo na paměť. Vhodná implementace zohlední, které operace budeme provádět často. Množiny se implementují obtížně. Problémem je jednak fakt, že se prvky v množině nesmí opakovat a jednak neuspořádanost množin, neboť nemusí být stanoveno, kam v paměti který prvek uložit. Existuje několik klasických způsobů ukládání množin, které nyní uvedeme.
18 12 Implementace množin Charakteristická funkce podmnožiny Jestliže známe celé univerzum U = {u 1, u 2,..., u n, ze kterého vybíráme prvky, a toto univerzum je relativně malé, tak podmnožinu A U můžeme implementovat jako pole a[ ], kde { 1 pro u i X a[i] = 0 jinak. Výhodou charakteristické funkce podmnožiny je, že se snadno hledají prvky množiny, sjednocení je funkcí OR, průnik funkcí AN D. Nevýhodou je, že charakteristické funkce podmnožiny lze sestavit jen pro poměrně malá univerza U! každá podmnožina (i prázdná) totiž potřebuje alokovat nejméně U bitů Seznam prvků množiny V dalším textu budeme předpkládat, že množina A má k prvků a množina B má l prvků. Množinu A můžeme také implementovat pomocí seznamu všech prvků. Seznam k prvků množiny A je uložen v poli a[ ] a můžeme psát A = {a[1], a[2],..., a[k] pro pole a[ ] délky k. Místo pole lze použít dynamický spojový seznam prvků, pak lze snadno přidávat a vynechávat prvky v seznamu. Seznam prvků je vhodný i pro velká a předem neurčená univerza. Nevýhodou je, že vyhledání prvku množiny (jedna z nejčastěji požadovaných operací) je zdlouhavá abychom ukázali, že prvek v množině není, musíme projít celý seznam. Algoritmus 2.1 (Nachází se prvek x v množině uložené v a[ ]?). for (i=0; i<k; i++) if (x==a[i]) { printf("x patří do a[ ]"); // nalezeno break; if (i<k) printf("x nepatří do a[ ]"); // nenalezeno Složitost uvedeného jednoduchého algoritmu je O(k). Abychom do pole c[ ] uložili sjednocení množin uložených v polích a[ ] a b[ ], můžeme využít následující kód.
19 2.1 Množiny 13 Algoritmus 2.2 (Sjednocení dvou množin z a[ ],b[ ] do pole c[ ]). for (i=0; i<k; i++) c[i]=a[i]; // z a[ ] všech k prvků for (i=0,m=k; i<l; i++) { // z b[ ] dalších až l prvků for (j=0; j<k; j++) if (b[i]==a[j]) break; // je-li b[i] v a[ ] if (j<k) continue; // přeskoč ho c[m++] = b[i]; // jinak ho přidej Složitost uvedeného algoritmu je O(kl). Průnik množin uložených v polích a[ ] a b[ ], můžeme určit následujícím algoritmem. Algoritmus 2.3 (Průnik dvou množin z a[ ],b[ ] do pole c[ ]). for (i=0, m=0; i<k; i++) { for (j=0; j<l; j++) // všechny dvojice z a[ ] a b[ ] if (a[i]==b[j]) // je společný? c[m++] = a[i]; // patří do průniku Složitost uvedeného algoritmu je O(kl) Uspořádaný seznam prvků množiny V jednorozměrných polí automaticky rozlišujeme první, druhý nebo poslední prvek, což neodpovídá neuspořádanosti množin. Nicméně při výčtu prvků množin obvykle intuitivně prvky seřazujeme podle nějakého klíče, například od nejmenšího po největší, což usnadní hledání prvků v množině. Toto uspořádání může využít i při uložení množiny do pole. Prvky v seznamu navíc (lineárně) uspořádáme podle předem daného klíče (dle velikosti v případě čísel, dle abecedy u jmen, a pod.) Výhodné pak je, že při hledání prvků v množině můžeme použít binární vyhledávání prvků v poli metodou půlení intervalu v seznamu (viz příklad). Algoritmus 2.4 (Binární vyhledání čísla x v uspořádaném poli p[ ]). int a = 0; b = n-1; // p[ ] má n prvků while (a<b && p[a]!=k) { // našli? c = floor((a+b)/2); if (p[c]<x) a = c+1; // ne, bude větší else b = c; // ne, bude menší if (p[a]!=x) printf("číslo x není v seznamu.");
20 14 Implementace množin Pro určení, zda se prvek x v poli nachází, stačí jen log 2 n vyhledávacích kroků. Musíme však uvážit, že seřazení prvků pole podle nějakého klíče vyžaduje strojový čas, navíc při každé modifikaci pole je zpravidla nutné pole přeuspořádat. Pokud by ale množina byla uložena v dynamickém spojovaném seznamu, tak binární vyhledávání použít nelze, protože pro každý prvek známe pouze předchozí a následující člen, ale neumíme bez procházení seznamu určit prostřední člen seznamu. Algoritmus 2.5 (Sjednocení dvou seřazených množin a[ ], b[ ]). int i=0, j=0, k, l=0; for (k=0; k<m+n; k++) { if (i>=m) { c[l++]=b[j++]; continue; if (j>=n) { c[l++]=a[i++]; continue; if (a[i]==b[j]) { j++; continue; // je-li a[ ] vyčerpáno (má m prvků) // je-li b[ ] vyčerpáno (má n prvků) // průnik jen jednou c[l++]=(a[i]<b[j])? a[i++] : b[j++]; Složitost uvedeného algoritmu je O(m + n). Analogicky je možno sestavit sjednocení dvou množin uložených v seřazených dynamických spojových seznamech. Pro sestavení průniku dvou množin uložených v jednorozměrných polích lze využít následující kód.
21 2.1 Množiny 15 Algoritmus 2.6 (Průnik dvou seřazených množin a[ ], b[ ]). int i=0, j=0, k, l=0; for (k=0; k<m+n; k++) { if (i>=m) break; // je-li a[ ] vyčerpáno (má m prvků) if (j>=n) break; // je-li b[ ] vyčerpáno (má n prvků) if (a[i]<b[j]) { i++; // není v průniku continue; if (a[i]= b[j]) c[l++]=a[i++]; // je v průniku j++; Složitost uvedeného algoritmu je O(m + n).
22 16 Kapitola 3 Generování výběrů Z S J V Průvodce studiem Je snadné spočítat, že ve sportce existuje ( 49 6 ) = možností, jak vylosovat šest čísel z 49. Jak sestavit algoritmus, který všechny tyto šestice systematicky vypíše, každou právě jedenkrát? V této kapitole ukážeme, jak vygenerovat (nebo projít) některé základní typy výběrů. Výhodou výpočetní techniky je její rychlost, která umožňuje prověřit velké množství případů v krátké době. V informatice mezi důležitou třídu úloh patří hledání řešení výrokové formule, která je sestavena z výroků spojených logickými operátory negace, konjunkce a disjunkce. Při hledání řešení hrubou silou musíme prověřit velké množství variací hodnot výrokových formulí. Ukážeme, jak tyto variace systematicky a efektivně probrat. Cíle Po prostudování této kapitoly budete schopni: efektivně vygenerovat základní typy výběrů s pevně zvoleným počtem prvků efektivně vygenerovat základní typy výběrů s libovolným počtem prvků 3.1 Výběry s předepsaným počtem prvků Nejprve se budeme věnovat generování výběrů s předepsaným počtem prvků, tj. výběrům k prvků z nějaké n-prvkové množiny, přičemž k bude (malé) pevně zvolené číslo. Například při sestavování výběrů sportky nás mohou zajímat pouze vylosované šestice. Ukážeme algoritmy, které pomocí pevně předepsaného počtu vnořených cyklů proberou všechny různé výběry zvoleného typu: všechna různá zobrazení (variace s opakováním), všechna různá seřazení (variace bez opakování),
23 3.1 Výběry s předepsaným počtem prvků 17 všechny různé podmnožiny předepsané velikosti: kombinace bez opakování Jednoduché procházení dvojic (trojic, atd... ) Pro jednoduchost začneme pocházením uspořádaných a neuspořádaných dvojic: dvouprvkových variací a kombinací s i bez opakování. Všechny uspořádané dvojice indexů (i, j) projdeme dvojicí vnořených cyklů s řídícími proměnnými i,j Algoritmus 3.1 (Dvouprvkové variace s opakováním z n prvků). for (i=0; i<n; i++) // dvakrát vnořený cyklus for (j=0; j<n; j++) { // zpracujeme uspořádanou dvojici (i,j) Složitost uvedeného algoritmu je O(n 2 ). Řádek zpracujeme uspořádanou dvojici (i,j) nahradíme například výpisem nebo voláním funkce, která bude pro každou uspořádanou dvojici zavolána právě jednou. Všechny uspořádané dvojice různých indexů (i, j) pro i j projdeme například následujícím jednoduchým kódem. Algoritmus 3.2 (Dvouprvkové variace bez opakování z n prvků). for (i=0; i<n; i++) // dvakrát vnořený cyklus for (j=0; j<n; j++) { if (i<>j) // zpracujeme uspořádanou dvojici (i,j) Avšak pro tří- nebo čtyř-prvkové variace bez opakování by takový postup byl zbytečně komplikovaný, neboť bychom mnohokrát testovali, které hodnoty se opakují. Později ukážeme elegantnější řešení pro sestavení všech n! permutací n-prvkové množiny. Všechny neuspořádané dvojice indexů {i, j projdeme podobně. Všimneme si, že neuspořádané výběry můžeme vždy chápat jako výběr, kdy každý další prvek není menší, než prvek předchozí. Při procházení dvouprvkových kombinací je řídící proměnná j vnořeného cyklu vždy větší než řídící proměnná vnějšího cyklu i. Algoritmus 3.3 (Dvouprvkové kombinace z n prvků). for (i=0; i<n-1; i++) // jen "nad diagonálou" for (j=i+1; j<n; j++) { // zpracujeme neuspořádanou dvojici {i,j Řádek zpracujeme neuspořádanou dvojici (i,j) opět nahradíme kódem, který bude pro každou neuspořádanou dvojici zavolán právě jednou.
24 18 Generování výběrů Při procházení dvouprvkových kombinací s opakováním dovolíme, aby řídící proměnná j vnořeného cyklu byla rovna řídící proměnné vnějšího cyklu i. Algoritmus 3.4 (Dvouprvkové kombinace s opakováním z n prvků). for (i=0; i<n; i++) // ne "pod diagonálou" for (j=i; j<n; j++) { // zpracujeme dvojici {i,j Pro systematické procházení trojic potřebujeme tři vnořené cykly: Algoritmus 3.5 (Tříprvkové variace s opakováním z n prvků). for (i=0; i<n; i++) // tři vnořené cykly for (j=0; j<n; j++) for (k=0; k<n; k++) { // zpracujeme uspořádanou trojici (i,j,k) Podobně pro k-prvkové variace nebo kombinace využijeme k vnořených cyklů. Příklad 3.1. Pro sestavení všech možných šestic losovaných ve sportce můžeme využít následující kód. Všimněte si, že nejmenší tažené číslo nemůže být větší než 44, což jsme využili pro zrychlení kódu, který by jinak procházel i nepřípustné hodnoty prvních řídících proměnných, přičemž ke zpracování takových šestic by nedošlo, protože by nebyla splněna podmínka nejvíce vnořených cyklů. Algoritmus 3.6 (Šestiprvkové kombinace z 49 prvků 1, 2,..., 49). for (i=1; i<=44; i++) // šest vnořených cyklů for (j=i+1; j<=45; j++) for (k=j+1; k<=46; k++) for (l=k+1; l<=47; l++) for (m=l+1; m<=48; m++) for (n=m+1; n<=49; m++) { // zpracujeme šestici {i,j,k,l,m,n 3.2 Permutace n prvků Mějme množinu A s n prvky, které jsou uloženy do jednorozměrného pole a[ ]. Všech n! permutací prvků množiny A můžeme systematicky projít pomocí následujícího rekurzivního algoritmu, který navrhl B. R. Heap v roce 1963.
25 3.3 Výběry s libovolným počtem prvků 19 Algoritmus 3.7 (Heapův algoritmus). int i, a[ ]; permutace(n, a[ ]) { if (n==1) // zpracujeme permutaci v a[ ] else for (i=0; i < n-1; i++) { permutace(n-1, a[ ]); if (n je sudé) swap(a[i], a[n-1]); else swap(a[0], a[n-1]); permutace(n-1, a[ ]); Řádek // zpracujeme permutaci v a[ ] můžeme nahradit kódem, který bude zavolán právě jednou pro každou z n! různých permutací prvků, které budou postupně uloženy v poli a[ ]. Funkce swap(x,y) jednoduše prohodí obsah proměnných x a y. Algoritmus 3.8 (Prohození obsahu proměnných). swap(x,y) { int temp; temp=x, x=y, y=temp; Permutace s opakováním mají předepsaný počet opakování jednotlivých prvků. Jejich systematickému procházení se v tomto textu nevěnujeme. 3.3 Výběry s libovolným počtem prvků Nevýhodou postupů popsaných v sekci 3.1 je, že musíme dopředu znát velikost výběru, tj. počet vnořených cyklů je pevně určen. Pro systematické procházení trojic nebo čtveřic potřebujeme jiný kód, než pro procházení dvoji atd. Následující kód takové omezení nemá. Místo k vnořených cyklů s pevným počtem opakování pracuje s řídící proměnnou i, jejíž hodnota se v průběhu algoritmu mění v závislosti na parametrech n a k Procházení všech k-prvkových variací Víme, že všechny uspořádané k-tice z n prvků odpovídají všem různým n k zobrazením k-prvkové do n-prvkové množiny. Pro názornost tak postupně uložíme každou
26 20 Generování výběrů k-prvkovou variaci s oakováním do jednorozměrného pole map[ ] s k prvky vybranými z množiny prvků 0, 1,...,n-1. map : {0, 1,..., k 1 {0, 1,..., n 1 Každou k-prvkovou variaci s opakováním z n prvků jednoduše zpracujeme na řádku // zpracujeme zobrazení (map[0],..., map[k-1]). Algoritmus 3.9 (k-prvkové variace s opakováním z n prvků). int i, map[k]; map[i=0]=-1; while (i>=0) { if (++map[i]>=n) // zvyš o 1 { i--; continue; if (++i<k) // nuluj další prvky { map[i]=-1; continue; // zpracujeme zobrazení (map[0],..., map[k-1]) i--; Všimněte si, že nemusíme sestavovat k vnořených cyklů! Pro každou hodnotu vkládanou do pole testujeme: zda už překročila rozsah n, pak se vracíme na předchozí prvek pole, zda už byl zpracován poslední prvek pole (obraz k-tého prvku), jinak přistoupíme ke zpracování následujícího prvku pole Procházení všech k-prvkových variací bez opakování Procházení všech k-prvkových variací (bez opakování) z n prvků odpovídá seřazení k různých prvků n-prvkové množiny. Pro názornost tak postupně uložíme každou k-prvkovou variaci bez oakování do jednorozměrného pole arrange[ ] s k prvky vybranými z množiny prvků 0, 1,...,n-1. arrange : {0, 1,..., k 1 {0, 1,..., n 1 Každou variaci zpracujeme na řádku // zpracujeme zobrazení (arrange[0],..., arrange[k-1]).
27 3.3 Výběry s libovolným počtem prvků 21 Algoritmus 3.10 (k-prvkové variace bez opakování z n prvků). int i, j, arrange[k]; arrange[i=0]=-1; while (i>=0) { if (++arrange[i]>=n) // zvyš o 1 { i--; continue; for (j=0; j<i; j++) // opakuje se? if (arrange[i]==arrange[j]) break; if (j<i) continue; // opakované vynech if (++i<k) // nuluj další prvky { arrange[i]=-1; continue; // zpracujeme variaci (arrange[0],...,arrange[k-1]) i--; Pro každou hodnotu vkládanou do pole testujeme: zda už překročila rozsah n, pak se vracíme na předchozí prvek pole, zda se prvek v poli už nevyskytuje, jinak výběr přeskočíme, zda už byl zařazen poslední prvek, jinak přistoupíme ke zpracování dalšího prvku pole Procházení všech k-prvkových kombinací (bez opakování) z n prvků Všechny k-prvkové kombinace (bez opakování) z n prvků odpovídají výběru k-prvkové podmnožiny z n prvkové množiny. Je šikovné si uvědomit, že prvky výběru můžeme vždy jednoznačně seřadit, například od nejmenšího po největší. Budeme-li sestavovat výběry, kde každý další prvek je větší než předchozí, dostaneme právě hledané kombinace každou kombinaci právě jednou. Nemusíme proto ani kontrolovat, zda se nově přidané prvky v poli již nevyskytly, protože víme, že každý prvek je větší než předchozí prvky. Kombinace uložíme do pole select[ ] s k prvky. Každou kombinaci pak zpracujeme na řádku //zpracujeme zobrazení (select[0],..., select[k-1]).
28 22 Generování výběrů Algoritmus 3.11 (k-prvkové kombinace (bez opakování) z n prvků). int i, select[k]; select[i=0]=-1; while (i>=0) { if (++select[i]>=n) // zvyš o 1 { i--; continue; if (++i<k) { select[i]=select[i-1]; // jen seřazené! continue; // zpracujeme kombinaci (select[0],...,select[k-1]) i--; Příklad 3.2. Pro sestavení všech možných šestic losovaných ve sportce můžeme využít také následující kód, který nepotřebuje šest vnořených cyklů. Algoritmus 3.12 (Šestiprvkové kombinace z 49 prvků 1, 2,..., 49). int n=49, k=6; int i, select[k]; select[i=0]=-1; while (i>=0) { if (++select[i]>=n) // zvyš o 1 { i--; continue; if (++i<k) { select[i]=select[i-1]; // jen seřazené! continue; // zpracujeme šestici (select[0],...,select[k-1]) i--;
29 23 Kapitola 4 Generátory náhodných čísel Průvodce studiem Z S V Použití náhodných čísel v počítači považujeme za samozřejmé. Málokdo si však uvědomuje, že náhodná čísla zpravidla ve skutečnosti náhodná nejsou. Vždyť po inicializaci náhodného generátoru na pevně zvolenou hodnotu, dostáváme vždy stejnou posloupnost hodnot! Přitom náhodná čísla jsou z bezpečnostního a praktického hlediska nezastupitelná. Následuje několik poznámek o generátorech náhodných čísel. J Cíle Po prostudování této kapitoly budete schopni: vysvětlit význam náhodných čísel, vyjmenovat základní typy generátorů náhodných čísel. 4.1 Využití generátorů náhodných čísel Generátorem náhodných čísel rozumíme náhodnou posloupnost bitů v počítači. Kde všude potřebujeme používat náhodná čísla/bity? Například: Při vytváření náhodných (velkých) privátních klíčů (v SSL certifikátech). Použití náhodného hesla při šifrování SSL přenosu. Heslo (klíč) musí být skutečně náhodné, jinak by mohlo být uhodnuto nebo vypočteno!). Kolize paketů na Ethernetu řešena náhodně dlouhým čekáním před příštím vysíláním. Využití při pravděpodobnostních algoritmech, využívají náhodného promíchání vstupního souboru dat pro výrazné statistické urychlení běhu výpočtu. Při statistické analýze algoritmů a reálných procesů metodou Monte-Carlo, při modelování chaotických fyzikálních dějů, kdy místo prozkoumání všech
30 24 Generátory náhodných čísel možných řešení volíme dostatečně velký soubor náhodných vzorků, kterými aproximujeme přesné řešení, atd. 4.2 Typy náhodných generátorů Primitivní pseudonáhodné generátory Využívají aritmetické vzorce typu x := (A x + B) mod C. Hodnotu x opakovaně iterujeme a výsledné hodnoty (bity) x vytvářejí hledanou náhodnou posloupnost. Nevýhodou tohoto postupu je, že bity mají velkou závislost na předchozích iteracích. Jestliže je znám algoritmus výpočtu a máme dostatečně velký vzorek předchozích dat, tak hrozí snadná předvídatelnost dalších náhodných čísel. Pseudonáhodné generátory s vnějším vstupem Tyto generátory využívají jednak podobné vzorce jako předchozí typ, ale navíc přidávají iniciační klíč vstup nebo vstupy z vnějších fyzických procesů jako jsou prodlevy stisků kláves, zpoždění operací disku, statistiku síťových paketů, atd. Takový generátor může opět být problematický, neboť závisí na vnějších podmínkách, které teoreticky lze při znalosti algoritmu generování ovlivnit. Navíc s vyhodnocováním vnějších vstupů je spojena velká cena každého bitu, což je nešikovné, pokud je náhodné číslo používáno často. Hardwarové náhodné generátory Založeny na různých kvantových šumech (třeba přechodové stavy polovodičů jako teplotní šum, rádiový šum, radioaktivní rozpad a pod.). Problematický je převod šumu na posloupnost uniformních bitů, kdy 1 má stejnou pravděpodobnost výskytu jako 0. Navíc princip je obvykle založen na důvěře v neurčitost popsanou zákony kvantové mechaniky. Nicméně kvantová mechanika je pouze teoretickým modelem, přičemž nelze vyloučit možnost, že jiná teorie přijde s deterministickým výkladem principu fyzikálních dějů.
31 25 Kapitola 5 Kombinatorická exploze Průvodce studiem Z S V Tato kapitola je věnována fenoménu kombinatorické exploze. Čtenáře seznámíme s tímto pojmem a upozorníme na související úskalí současné výpočetní techniky. J Cíle Po prostudování této kapitoly budete schopni: vysvětlit pojem kombinatorické exploze. kriticky posoudit vhodnost řešení hrubou silou procházením velkého počtu možností. 5.1 Co je kombinatorická exploze Při programátorském řešení problémů spjatých s problém, při jejichž řešení se uplatní pojmy diskrétní matematiky, se často používají algoritmy typu: Projdi všechny možnosti a podle nich rozhodni. Bohužel tak často narazíme na fenomén zvaný exponenciální kombinatorická exploze, kdy počet prohledávaných možností roste mnohem rychleji, že velikost vstupu. Je-li růst exponenciální, tak i při zvětšení vstupu o velikost 1 se potřebný čas výpočtu zmnohonásobí. Příklad 5.1. Počet různých permutací konečné množiny je dán vztahem n!. Jestliže se velikost vstupu zvětší o 1, tak počet prováděných operací bude n-násobný. Příklad 5.2. Dáme-li na první políčko šachovnice 1 zrnko rýže, na druhé dvě, na třetí čtyři a na každé další dvojnásobek počtu zrnek na předchozím políčku, tak na celou šachovnici by bylo potřeba více zrnek rýže, než je její celosvětová produkce.
32 26 Kombinatorická exploze Stává se, že výpočet pro vstup o velikosti 10 zvládne stroj s procesorem 386, ale vstup o velikosti 15 nelze spočítat ani na nejvýkonnějších superpočítačích. Mějte tento fenomén na paměti, až budete programovat procházení možností hrubou silou! Vhodnou volbou algoritmu, datové struktury či omezujících podmínek, které zohledňují konkrétní úlohu, můžeme dosáhnout výrazného zrychlení výpočtu. 5.2 Až budou lepší počítače? Třebaže se podle Moorova zákona hustota tranzistorů každé dva roky přibližně zdvojnásobí, nemůžeme čekat, že jejich výkon poroste libovolně. Vždyť hmota je složena z atomů, které mají konečnou velikost a jakmile hustota tranzistorů dosáhne stavu, kdy velikost jednoho tranzistoru bude srovnatelná s velikostí atomu, už nebude možno hustotu zvyšovat. Nemůžeme proto čekat, že úlohy, jejichž řešení je mimo dosah dnešní výpočetní techniky bude možné za pár let snadno vyřešit. Uvědomme si, že počet atomů na Zemi (v celém obejmu zeměkoule) se odhaduje na Pokud bychom chtěli například projít nebo dokonce vypsat všechny možné relace dvacetiprvkové množiny, tak to nebude možné nikdy, neboť takových relací existuje 2 202, tj. více než Zkrátka není možné relace vypsat, ani projít, protože jejich počet překračuje odhadovaný počet atomů ve Vesmíru!
33 5.2 Až budou lepší počítače? 27 Autorská práva Při sestavování textu jsem se snažil důsledně dodržovat autorská práva. Většinu obrázků grafů jsem připravil sám v METAFONTU nebo v METAPOSTU. Oba programy jsou volně šiřitelné součásti řady distribucí operačního systému Linux. Všechny fotografie, které jsem stáhnul z internetu (většinou z Wikipedie), buď mají na Wikipedii výslovně uvedeno, že jsou jejich autory volně dány k dispozici, nebo se jedná o reprodukce děl staších než 70 let. Novější fotografie budov, plaket a míst je možno použít ve smyslu 33 odst. 1 autorského zákona, který říká Do práva autorského nezasahuje ten, kdo kresbou, malbou nebo grafikou, fotografií nebo filmem nebo jinak zaznamená nebo vyjádří dílo, které je trvale umístěno na náměstí, ulici, v parku, na veřejných cestách nebo na jiném veřejném prostranství; do autorského práva nezasahuje ani ten, kdo takto vyjádřené, zachycené nebo zaznamenané dílo dále užije. Je-li to možné, je nutno uvést jméno autora, nejde-li o dílo anonymní, nebo jméno osoby, pod jejímž jménem se dílo uvádí na veřejnost, a dále název díla a umístění. Následuje seznam fotografií a obrázků i s uvedením zdrojů, ze kterých jsem čerpal. Seznam v době vzniku této pracovní verze textu není úplný.
34 28 Rejstřík úplná relace, 8 algoritmus Heapův, 18 antisymetrická relace, 8 binární relace, 6 binární vyhledávání, 13 cykly permutace, 9 diagram hasseovský, 7 dvojice, 17 dynamický spojový seznam, 12 generátory náhodných čísel, 23 hasseovský diagram, 7 Heapů algoritmus, 18 injektivní zobrazení, 5 kombinace, 17, 18, 21, 22 s opakováním, 18 kombinatorická exploze, 25 množina, 11 nejmenší prvek, 4 největší prvek, 4 náhodné číslo, 23 náhodný generátor, 24 permutace, 9, 18 cykly, 9 skládání, 9 pointer, 1 pole, 1 posloupnost, 3 průnik množin, 13, 14 pseudkód, 2 pseudonáhodný generátor, 24 reflexivní relace, 7 relace, 4 úplná, 8 antisymetrická, 8 binární, 6 reflexivní, 7 symetrická, 7 tranzitivní, 8 sjednocení množin, 12 skládání permutací, 9 složitost, 2 surjktivní zobrazení, 6 symetrická relace, 7 ternární operátor, 2 tranzitivní relace, 8 ukazatel, 1 univerzum, 12 uspořádaný seznam prvků, 13 variace, 17, 18, 20 zobrazení, 4 injektivní, 5 surjektivní, 6
35 29 Literatura [1] J. Černý, Základní grafové algoritmy, MFF UK, [online] (2010) [cit ]. [2] J. Demel, Grafy, SNTL, Praha, (1989). [3] D. Fronček, Úvod do teorie grafů, Slezská univerzita Opava, (1999), ISBN [4] P. Hliněný, Diskrétní matematika, VŠB TU Ostrava, skriptum (2006). [5] P. Kovář, Teorie grafů, VŠB TU Ostrava, skriptum (2012). [6] P. Kovář, Úvod do teorie grafů, VŠB TU Ostrava, skriptum (2012). [7] M. Kubesa, Základy diskrétní matematiky, VŠB TU Ostrava, skriptum (2012). [8] J. Matoušek, J. Nešetřil, Kapitoly z diskrétní matematiky, Karolinum Praha, (2000), ISBN [9] K.H. Rosen, Discrete Mathematics and Its Applications 6th ed., McGraw-Hill, New York NY, (2007), ISBN [10] D.B. West, Introduction to graph theory 2nd ed., Prentice-Hall, Upper Saddle River NJ, (2001), ISBN
36 Přehled použitých symbolů x A A B A B A B A B A B A B A B A B A B A B A B prázdná množina prvek x množiny A podmnožina A množiny B vlastní podmnožina A množiny B průnik množin A a B sjednocení množin A a B rozdíl množin A a B symetrická diference množin A a B kartézský součin množin A a B relace ekvivalence logická konjunkce ( A a současně B ) logická disjunkce ( A nebo B ) implikace ( jestliže platí A, tak platí B ) ekvivalence ( A platí právě, když B )
Diskrétní matematika. DiM /01, zimní semestr 2017/2018
Diskrétní matematika Petr Kovář petr.kovar@vsb.cz Vysoká škola báňská Technická univerzita Ostrava DiM 470-2301/01, zimní semestr 2017/2018 O tomto souboru Tento soubor je zamýšlen především jako pomůcka
Diskrétní matematika. DiM /01, zimní semestr 2017/2018
Diskrétní matematika Petr Kovář petr.kovar@vsb.cz Vysoká škola báňská Technická univerzita Ostrava DiM 470-2301/01, zimní semestr 2017/2018 O tomto souboru Tento soubor je zamýšlen především jako pomůcka
Úvod do informatiky. Miroslav Kolařík
Úvod do informatiky přednáška pátá Miroslav Kolařík Zpracováno dle učebního textu R. Bělohlávka: Úvod do informatiky, KMI UPOL, Olomouc 2008 a dle učebního textu R. Bělohlávka a V. Vychodila: Diskrétní
Diskrétní matematika. DiM /01, zimní semestr 2018/2019
Diskrétní matematika Petr Kovář petr.kovar@vsb.cz Vysoká škola báňská Technická univerzita Ostrava DiM 470-2301/01, zimní semestr 2018/2019 O tomto souboru Tento soubor je zamýšlen především jako pomůcka
Diskrétní matematika. DiM /01, zimní semestr 2016/2017
Diskrétní matematika Petr Kovář petr.kovar@vsb.cz Vysoká škola báňská Technická univerzita Ostrava DiM 470-2301/01, zimní semestr 2016/2017 O tomto souboru Tento soubor je zamýšlen především jako pomůcka
Úvod do informatiky. Miroslav Kolařík. Zpracováno dle učebního textu R. Bělohlávka: Úvod do informatiky, KMI UPOL, Olomouc 2008.
Úvod do informatiky přednáška čtvrtá Miroslav Kolařík Zpracováno dle učebního textu R. Bělohlávka: Úvod do informatiky, KMI UPOL, Olomouc 2008. Obsah 1 Pojem relace 2 Vztahy a operace s (binárními) relacemi
Teorie množin. Čekají nás základní množinové operace kartézské součiny, relace zobrazení, operace. Teoretické základy informatiky.
Teorie množin V matematice je všechno množina I čísla jsou definována pomocí množin Informatika stojí na matematice Znalosti Teorie množin využijeme v databázových systémech v informačních systémech při
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
Pojem binární relace patří mezi nejzákladnější matematické pojmy. Binární relace
RELACE Pojem binární relace patří mezi nejzákladnější matematické pojmy. Binární relace slouží k vyjádření vztahů mezi prvky nějakých množin. Vztahy mohou být různé povahy. Patří sem vztah býti potomkem,
Matematická analýza 1
Matematická analýza 1 ZS 2019-20 Miroslav Zelený 1. Logika, množiny a základní číselné obory 2. Limita posloupnosti 3. Limita a spojitost funkce 4. Elementární funkce 5. Derivace 6. Taylorův polynom Návod
INVESTICE DO ROZVOJE VZDĚLÁVÁNÍ. Modernizace studijního programu Matematika na PřF Univerzity Palackého v Olomouci CZ.1.07/2.2.00/28.
INVESTICE DO ROZVOJE VZDĚLÁVÁNÍ Modernizace studijního programu Matematika na PřF Univerzity Palackého v Olomouci CZ.1.07/2.2.00/28.0141 Relace, zobrazení, algebraické struktury Michal Botur Přednáška
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á??
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
RELACE, OPERACE. Relace
RELACE, OPERACE Relace Užití: 1. K popisu (evidenci) nějaké množiny objektů či jevů, které lze charakterizovat pomocí jejich vlastnostmi. Entita je popsána pomocí atributů. Ty se vybírají z domén. Různé
Diskrétní matematika. DiM /01, zimní semestr 2018/2019
Diskrétní matematika Petr Kovář petr.kovar@vsb.cz Vysoká škola báňská Technická univerzita Ostrava DiM 470-2301/01, zimní semestr 2018/2019 O tomto souboru Tento soubor je zamýšlen především jako pomůcka
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
Množiny, základní číselné množiny, množinové operace
2 Množiny, základní číselné množiny, množinové operace Pokud kliknete na některý odkaz uvnitř textu kromě prezentace, zobrazí se odpovídající příklad nebo tabulka. Levý Alt+šipka doleva nebo ikona Vás
Princip rozšíření a operace s fuzzy čísly
Center for Machine Perception presents Princip rozšíření a operace s fuzzy čísly Mirko Navara Center for Machine Perception Faculty of Electrical Engineering Czech Technical University Praha, Czech Republic
Zadání semestrálního projektu Algoritmy II. letní semestr 2017/2018
Zadání semestrálního projektu Algoritmy II. letní semestr 2017/2018 doc. Mgr. Jiří Dvorský, Ph.D. Verze zadání 6. dubna 2018 První verze Obecné pokyny 1. Celkem jsou k dispozici tři zadání příkladů. 2.
Kapitola 1. Relace. podle definice podmnožinou každé množiny. 1 Neříkáme už ale, co to je objekt. V tom právě spočívá intuitivnost našeho přístupu.
Kapitola 1 Relace Úvodní kapitola je věnována důležitému pojmu relace. Protože relace popisují vztahy mezi prvky množin a navíc jsou samy množinami, bude vhodné množiny nejprve krátce připomenout. 1.1
Výhody a nevýhody jednotlivých reprezentací jsou shrnuty na konci kapitoly.
Kapitola Reprezentace grafu V kapitole?? jsme se dozvěděli, co to jsou grafy a k čemu jsou dobré. rzo budeme chtít napsat nějaký program, který s grafy pracuje. le jak si takový graf uložit do počítače?
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
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ů
Zadání a řešení testu z matematiky a zpráva o výsledcích přijímacího řízení do magisterského navazujícího studia od jara 2016
Zadání a řešení testu z matematiky a zpráva o výsledcích přijímacího řízení do magisterského navazujícího studia od jara 206 Zpráva o výsledcích přijímacího řízení do magisterského navazujícího studia
[1] Determinant. det A = 0 pro singulární matici, det A 0 pro regulární matici
[1] Determinant je číslo jistým způsobem charakterizující čtvercovou matici det A = 0 pro singulární matici, det A 0 pro regulární matici používá se při řešení lineárních soustav... a v mnoha dalších aplikacích
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
3 Množiny, Relace a Funkce
3 Množiny, Relace a Funkce V přehledu matematických formalismů informatiky se v této lekci zaměříme na základní datové typy matematiky, tj. na množiny, relace a funkce. O množinách jste sice zajisté slyšeli
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
V předchozí kapitole jsme podstatným způsobem rozšířili naši představu o tom, co je to číslo. Nadále jsou pro nás důležité především vlastnosti
Kapitola 5 Vektorové prostory V předchozí kapitole jsme podstatným způsobem rozšířili naši představu o tom, co je to číslo. Nadále jsou pro nás důležité především vlastnosti operací sčítání a násobení
B i n á r n í r e l a c e. Patrik Kavecký, Radomír Hamřík
B i n á r n í r e l a c e Patrik Kavecký, Radomír Hamřík Obsah 1 Kartézský součin dvou množin... 3 2 Binární relace... 6 3 Inverzní relace... 8 4 Klasifikace binární relací... 9 5 Ekvivalence... 12 2 1
Zadání a řešení testu z matematiky a zpráva o výsledcích přijímacího řízení do magisterského navazujícího studia od podzimu 2016
Zadání a řešení testu z matematiky a zpráva o výsledcích přijímacího řízení do magisterského navazujícího studia od podzimu 2016 Zpráva o výsledcích přijímacího řízení do magisterského navazujícího studia
Časová složitost algoritmů
Časová složitost algoritmů Důležitou vlastností algoritmu je časová náročnost výpočtů provedené podle daného algoritmu Ta se nezískává měřením doby výpočtu pro různá data, ale analýzou algoritmu, jejímž
Booleovská algebra. Booleovské binární a unární funkce. Základní zákony.
Booleovská algebra. Booleovské binární a unární funkce. Základní zákony. Tomáš Bayer bayertom@natur.cuni.cz Katedra aplikované geoinformatiky a kartografie, Přírodovědecká fakulta UK. Tomáš Bayer bayertom@natur.cuni.cz
Programování v jazyce C pro chemiky (C2160) 3. Příkaz switch, příkaz cyklu for, operátory ++ a --, pole
Programování v jazyce C pro chemiky (C2160) 3. Příkaz switch, příkaz cyklu for, operátory ++ a --, pole Příkaz switch Příkaz switch provede příslušnou skupinu příkazů na základě hodnoty proměnné (celočíselné
TEORIE GRAFŮ. Petr Kovář
TEORIE GRAFŮ Petr Kovář Text byl vytvořen v rámci realizace projektu Matematika pro inženýry 21. století (reg. č. CZ.1.07/2.2.00/07.0332), na kterém se společně podílela Vysoká škola báňská Technická univerzita
Matematická logika. Miroslav Kolařík
Matematická logika přednáška šestá Miroslav Kolařík Zpracováno dle textu R. Bělohlávka: Matematická logika poznámky k přednáškám, 2004. a dle učebního textu R. Bělohlávka a V. Vychodila: Diskrétní matematika
for (i = 0, j = 5; i < 10; i++) { // tělo cyklu }
5. Operátor čárka, - slouží k jistému určení pořadí vykonání dvou příkazů - oddělím-li čárkou dva příkazy, je jisté, že ten první bude vykonán dříve než příkaz druhý. Např.: i = 5; j = 8; - po překladu
Fuzzy množiny, Fuzzy inference system. Libor Žák
Fuzzy množiny, Fuzzy inference system Proč právě fuzzy množiny V řadě případů jsou parametry, které vstupují a ovlivňují vlastnosti procesu, popsané pomocí přibližných nebo zjednodušených pojmů. Tedy
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)
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
Vektory a matice. Obsah. Aplikovaná matematika I. Carl Friedrich Gauss. Základní pojmy a operace
Vektory a matice Aplikovaná matematika I Dana Říhová Mendelu Brno Obsah 1 Vektory Základní pojmy a operace Lineární závislost a nezávislost vektorů 2 Matice Základní pojmy, druhy matic Operace s maticemi
Algoritmizace a programování
Algoritmizace a programování Vyhledávání, vkládání, odstraňování Vyhledání hodnoty v nesetříděném poli Vyhledání hodnoty v setříděném poli Odstranění hodnoty z pole Vkládání hodnoty do pole Verze pro akademický
Algoritmus pro generování normálních magických čtverců
1.1 Úvod Algoritmus pro generování normálních magických čtverců Naprogramoval jsem v Matlabu funkci, která dokáže vypočítat magický čtverec libovolného přípustného rozměru. Za pomocí tří algoritmů, které
Poslední nenulová číslice faktoriálu
Poslední nenulová číslice faktoriálu Kateřina Bambušková BAM015, I206 Abstrakt V tomto článku je popsán a vyřešen problém s určením poslední nenulové číslice faktoriálu přirozeného čísla N. Celý princip
Pojem relace patří mezi pojmy, které prostupují všemi částmi matematiky.
Relace. Pojem relace patří mezi pojmy, které prostupují všemi částmi matematiky. Definice. Mějme množiny A a B. Binární relace R z množiny A do množiny B je každá množina uspořádaných dvojic (a, b), kde
1 Linearní prostory nad komplexními čísly
1 Linearní prostory nad komplexními čísly V této přednášce budeme hledat kořeny polynomů, které se dále budou moci vyskytovat jako složky vektorů nebo matic Vzhledem k tomu, že kořeny polynomu (i reálného)
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
Pro zvládnutí této kapitoly budete potřebovat 4-5 hodin studia.
Úvod (Proč se zabývat statistikou?) Statistika je metoda analýzy dat, která nachází široké uplatnění v celé řadě ekonomických, technických, přírodovědných a humanitních disciplín. Její význam v poslední
PŘEDNÁŠKA 7 Kongruence svazů
PŘEDNÁŠKA 7 Kongruence svazů PAVEL RŮŽIČKA Abstrakt. Definujeme svazové kongruence a ukážeme jak pro vhodné binární relace svazu ověřit, že se jedná o svazové kongruence. Popíšeme svaz Con(A) kongruencí
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;
Komplexní čísla, Kombinatorika, pravděpodobnost a statistika, Posloupnosti a řady
Předmět: Náplň: Třída: Počet hodin: Pomůcky: Matematika Komplexní čísla, Kombinatorika, pravděpodobnost a statistika, Posloupnosti a řady 4. ročník a oktáva 3 hodiny týdně PC a dataprojektor, učebnice
Množiny, relace, zobrazení
Množiny, relace, zobrazení Množiny Množinou rozumíme každý soubor určitých objektů shrnutých v jeden celek. Zmíněné objekty pak nazýváme prvky dané množiny. Pojem množina je tedy synonymem pojmů typu soubor,
Zadání a řešení testu z matematiky a zpráva o výsledcích přijímacího řízení do magisterského navazujícího studia od jara 2017
Zadání a řešení testu z matematiky a zpráva o výsledcích přijímacího řízení do magisterského navazujícího studia od jara 207 Zpráva o výsledcích přijímacího řízení do magisterského navazujícího studia
Maticí typu (m, n), kde m, n jsou přirozená čísla, se rozumí soubor mn veličin a jk zapsaných do m řádků a n sloupců tvaru:
3 Maticový počet 3.1 Zavedení pojmu matice Maticí typu (m, n, kde m, n jsou přirozená čísla, se rozumí soubor mn veličin a jk zapsaných do m řádků a n sloupců tvaru: a 11 a 12... a 1k... a 1n a 21 a 22...
IB112 Základy matematiky
IB112 Základy matematiky Základy kombinatoriky a kombinatorická pravděpodobnost Jan Strejček Obsah IB112 Základy matematiky: Základy kombinatoriky a kombinatorická pravděpodobnost 2/57 Výběry prvků bez
Základní pojmy teorie množin Vektorové prostory
Základní pojmy teorie množin Přednáška MATEMATIKA č. 1 Katedra ekonometrie FEM UO Brno kancelář 69a, tel. 973 442029 email:jiri.neubauer@unob.cz 7. 10. 2010 Základní pojmy teorie množin Základní pojmy
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
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
Úvod do informatiky. Miroslav Kolařík. Zpracováno dle učebního textu prof. Bělohlávka: Úvod do informatiky, KMI UPOL, Olomouc 2008.
Úvod do informatiky přednáška třetí Miroslav Kolařík Zpracováno dle učebního textu prof. Bělohlávka: Úvod do informatiky, KMI UPOL, Olomouc 2008. Množiny, relace a funkce úvod Množiny, relace a funkce
0. ÚVOD - matematické symboly, značení,
0. ÚVOD - matematické symboly, značení, číselné množiny Výroky Výrok je každé sdělení, u kterého lze jednoznačně rozhodnout, zda je či není pravdivé. Každému výroku lze proto přiřadit jedinou pravdivostní
Da D to t v o é v ty t py IB111: Datové typy
Datové typy IB111: Datové typy Data a algoritmizace jaká data potřebuji pro vyřešení problému? jak budu data reprezentovat? jaké operaci s nimi potřebuji provádět? Navržení práce s daty je velice důležité
Zadání a řešení testu z matematiky a zpráva o výsledcích přijímacího řízení do magisterského navazujícího studia od podzimu 2015
Zadání a řešení testu z matematiky a zpráva o výsledcích přijímacího řízení do magisterského navazujícího studia od podzimu 05 Zpráva o výsledcích přijímacího řízení do magisterského navazujícího studia
Cílem kapitoly je opakování a rozšíření středoškolských znalostí v oblasti teorie množin.
1.2. Cíle Cílem kapitoly je opakování a rozšíření středoškolských znalostí v oblasti teorie množin. Průvodce studiem Množina je jedním ze základních pojmů moderní matematiky. Teorii množin je možno budovat
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
NP-ÚPLNÉ PROBLÉMY. Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky, FIT České vysoké učení technické v Praze
NP-ÚPLNÉ PROBLÉMY Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky, FIT České vysoké učení technické v Praze BI-GRA, LS 2010/2011, Lekce 13 Evropský sociální fond Praha & EU: Investujeme do
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
Úvod do logiky (presentace 2) Naivní teorie množin, relace a funkce
Úvod do logiky (presentace 2) Naivní teorie množin, relace a funkce Marie Duží marie.duzi@vsb.cz 1 Úvod do teoretické informatiky (logika) Naivní teorie množin Co je to množina? Množina je soubor prvků
Moderní technologie ve studiu aplikované fyziky CZ.1.07/2.2.00/ Množiny, funkce
Moderní technologie ve studiu aplikované fyziky CZ.1.07/2.2.00/07.0018 2. Množiny, funkce MNOŽIN, ZÁKLDNÍ POJMY Pojem množiny patří v matematice ke stěžejním. Nelze jej zavést ve formě definice pomocí
1 Řešení soustav lineárních rovnic
1 Řešení soustav lineárních rovnic 1.1 Lineární rovnice Lineární rovnicí o n neznámých x 1,x 2,..., x n s reálnými koeficienty rozumíme rovnici ve tvaru a 1 x 1 + a 2 x 2 +... + a n x n = b, (1) kde koeficienty
Diskrétní matematika. DiM /01, zimní semestr 2018/2019
Diskrétní matematika Petr Kovář petr.kovar@vsb.cz Vysoká škola báňská Technická univerzita Ostrava DiM 470-2301/01, zimní semestr 2018/2019 O tomto souboru Tento soubor je zamýšlen především jako pomůcka
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 Algoritmus Daniela Szturcová Tento
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
Maturitní otázky z předmětu PROGRAMOVÁNÍ
Wichterlovo gymnázium, Ostrava-Poruba, příspěvková organizace Maturitní otázky z předmětu PROGRAMOVÁNÍ 1. Algoritmus a jeho vlastnosti algoritmus a jeho vlastnosti, formy zápisu algoritmu ověřování správnosti
Algoritmizace řazení Bubble Sort
Algoritmizace řazení Bubble Sort Cílem této kapitoly je seznámit studenta s třídícím algoritmem Bubble Sort, popíšeme zde tuto metodu a porovnáme s jinými algoritmy. Klíčové pojmy: Třídění, Bubble Sort,
Modely Herbrandovské interpretace
Modely Herbrandovské interpretace Petr Štěpánek S využitím materialu Krysztofa R. Apta 2006 Logické programování 8 1 Uvedli jsme termové interpretace a termové modely pro logické programy a také nejmenší
Algoritmizace diskrétních. Ing. Michal Dorda, Ph.D.
Algoritmizace diskrétních simulačních modelů Ing. Michal Dorda, Ph.D. 1 Úvodní poznámky Při programování simulačních modelů lze hlavní dílčí problémy shrnout do následujících bodů: 1) Zachycení statických
ORIENTOVANÉ GRAFY, REPREZENTACE GRAFŮ
ORIENTOVANÉ GRAFY, REPREZENTACE GRAFŮ Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky, FIT České vysoké učení technické v Praze BI-GRA, LS 2/2, Lekce Evropský sociální fond Praha & EU: Investujeme
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
0.1 Úvod do lineární algebry
Matematika KMI/PMATE 1 01 Úvod do lineární algebry 011 Lineární rovnice o 2 neznámých Definice 011 Lineární rovnice o dvou neznámých x, y je rovnice, která může být vyjádřena ve tvaru ax + by = c, kde
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ří
Základy algoritmizace. Hašování
Základy algoritmizace Hašování Problematika hašování Hašování - nástroj na jednoduchý způsob "zakódování vstupních dat. Vstupní data jsou zpracována hašovací funkcí jsou jistým způsobem komprimována. Relativně
NP-úplnost problému SAT
Problém SAT je definován následovně: SAT(splnitelnost booleovských formulí) Vstup: Booleovská formule ϕ. Otázka: Je ϕ splnitelná? Příklad: Formule ϕ 1 =x 1 ( x 2 x 3 )jesplnitelná: např.přiohodnocení ν,kde[x
Matice. a m1 a m2... a mn
Matice Nechť (R, +, ) je okruh a nechť m, n jsou přirozená čísla Matice typu m/n nad okruhem (R, +, ) vznikne, když libovolných m n prvků z R naskládáme do obdélníkového schematu o m řádcích a n sloupcích
Matematika B101MA1, B101MA2
Matematika B101MA1, B101MA2 Zařazení předmětu: povinný předmět 1.ročníku bc studia 2 semestry Rozsah předmětu: prezenční studium 2 + 2 kombinované studium 16 + 0 / semestr Zakončení předmětu: ZS zápočet
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
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é
Třídy složitosti P a NP, NP-úplnost
Třídy složitosti P a NP, NP-úplnost Cíle přednášky: 1. Definovat, za jakých okolností můžeme problém považovat za efektivně algoritmicky řešitelný. 2. Charakterizovat určitou skupinu úloh, pro které není
Náplň. v.0.03 16.02.2014. - Jednoduché příklady na práci s poli v C - Vlastnosti třídění - Způsoby (algoritmy) třídění
Náplň v.0.03 16.02.2014 - Jednoduché příklady na práci s poli v C - Vlastnosti třídění - Způsoby (algoritmy) třídění Spojení dvou samostatně setříděných polí void Spoj(double apole1[], int adelka1, double
ŘÍKÁME, ŽE FUNKCE JE ČÁSTEČNĚ SPRÁVNÁ (PARTIALLY CORRECT), POKUD KDYŽ JE SPLNĚNA PRECONDITION
ŘÍKÁME, ŽE FUNKCE JE ČÁSTEČNĚ SPRÁVNÁ (PARTIALLY CORRECT), POKUD KDYŽ JE SPLNĚNA PRECONDITION FUNKCE PŘI JEJÍM ZAVOLÁNÍ, JEJÍ POSTCONDITION JE SPLNĚNA PŘI NÁVRATU Z FUNKCE (POKUD NASTANE) OBECNĚ FUNKCE
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]
FP - SEMINÁŘ Z NUMERICKÉ MATEMATIKY. Katedra matematiky a didaktiky matematiky Technická univerzita v Liberci
FP - SEMINÁŘ Z NUMERICKÉ MATEMATIKY Dana Černá http://www.fp.tul.cz/kmd/ Katedra matematiky a didaktiky matematiky Technická univerzita v Liberci OBSAH A CÍLE SEMINÁŘE: Opakování a procvičení vybraných
Formální systém výrokové logiky
Formální systém výrokové logiky 1.Jazyk výrokové logiky Nechť P = {p,q,r, } je neprázdná množina symbolů, které nazýváme prvotní formule. Symboly jazyka L P výrokové logiky jsou : a) prvky množiny P, b)
Přijímací zkouška - matematika
Přijímací zkouška - matematika Jméno a příjmení pište do okénka Číslo přihlášky Číslo zadání 1 Grafy 1 Pro který z následujících problémů není znám žádný algoritmus s polynomiální časovou složitostí? Problém,
Matematická logika. Miroslav Kolařík
Matematická logika přednáška třetí Miroslav Kolařík Zpracováno dle textu R. Bělohlávka: Matematická logika poznámky k přednáškám, 2004. a dle učebního textu R. Bělohlávka a V. Vychodila: Diskrétní matematika
[1] samoopravné kódy: terminologie, princip
[1] Úvod do kódování samoopravné kódy: terminologie, princip blokové lineární kódy Hammingův kód Samoopravné kódy, k čemu to je [2] Data jsou uložena (nebo posílána do linky) kodérem podle určitého pravidla
Informatika navazující magisterské studium Přijímací zkouška z informatiky 2018 varianta A
Informatika navazující magisterské studium Přijímací zkouška z informatiky 2018 varianta A Každá úloha je hodnocena maximálně 25 body. Všechny své odpovědi zdůvodněte! 1. Postavte na stůl do řady vedle
Zadání a řešení testu z matematiky a zpráva o výsledcích přijímacího řízení do magisterského navazujícího studia od podzimu 2014
Zadání a řešení testu z matematiky a zpráva o výsledcích přijímacího řízení do magisterského navazujícího studia od podzimu 204 Zpráva o výsledcích přijímacího řízení do magisterského navazujícího studia
Grafy. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 13.
Grafy doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava Prezentace ke dni 13. března 2017 Jiří Dvorský (VŠB TUO) Grafy 104 / 309 Osnova přednášky Grafy
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ě
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í