Státnicové otázky. Teoretické základy informatiky a matematika.

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

Download "Státnicové otázky. Teoretické základy informatiky a matematika."

Transkript

1 Státnicové otázky Teoretické základy informatiky a matematika

2 Navigace Množiny, relace, zobrazení, čísla Logika Lineární algebra a geometrie Pravděpodobnost a statistika Matematická analýza Grafy Formální jazyky Automaty Korektnost a složitost Datové struktury Algoritmy Paradigmata programovacích jazyků Detailní obsah 1

3 Množiny, relace, zobrazení, čísla Základní množinové operace, množinový kalkul, potenční množina, kartézský součin. Relace a jejich vlastnosti - ekvivalence a rozklady, uspořádání a uspořádané množiny. Skládání relací, zobrazení (injekce, surjekce, bijekce). Elementární teorie čísel (dělitelnost, Euklidův algoritmus, modulární operace). 2

4 Množiny Množina je soubor prvků a je svými prvky plně určena. Naivní pohled uvažuje jen konečné množiny. Množiny ale mohou být i prvky jiných množin. Množiny mohou pochopitelně mít i nekonečně mnoho prvků. M = {a, b} = {b, a} = {a, b, a}; N = {{a}, {b, c, d, e}} a M; a N; {a} M; {a} N { }; Russelův paradox Není pravda, že každý soubor prvku lze považovat za množinu. Nechť X = {M M je množina taková, že M M}. Platí X X? Ano. Tj. X X. Pak ale X splňuje X X. Ne. Pak X splňuje vlastnost X X, tedy X je prvkem X, tj., X X. Obě možné odpovědi vedou ke sporu. X tedy nelze prohlásit za množinu. Právě tento a další paradoxy vedly na začátku 20. století ke vzniku axiomatické teorie množin (později ke vzniku více axiomatických teorií). V takových axiomatizovaných teoriích množin obvykle nesmí množina obsahovat jiné prvky než zase jenom množiny a nic jiného. Základní pojmy Počet prvkov (mohutnosť) množiny A zapisujeme A. = 0, { } = 1, {a, b, c} = 3, {{a, b}, c} = 2 Množina A je podmnožinou množiny B, právě když každý prvek A je prvkem B. Píšeme A B nebo obráceně B A. Říkáme také, že se jedná o inkluzi. Zapisujeme A B xεa: xεa xεb. Množina A je vlastní podmnožinou množiny B, právě když A je podmnožinou B a zároveň A B. Dvě množiny jsou si rovny A = B právě když A B a B A. Množinové operace sjednocení: A B = {x x A x B} průnik: A B = {x x A x B} rozdíl: = { } symetrický rozdíl: = ( ) ( ) doplněk: nechť. Doplněk A vzhledem k M je množina =. {a, b, c} {a, b, c} {a, d} = {a, b, c, d} {a, d} = {a} {a, b, c} {a, b, d} = {c} {a, b, c} {a, b, d} = {c, d} De Morganovy zákony De Morganovy zákony určují vztah mezi sjednocením, průnikem a doplňkem množiny. ( ) = ( ) = 3

5 Potenční množina Potenční množina množiny A, neboli množina všech podmnožin, je definovaná vztahem 2 {a,b} = {, {a}, {b}, {a, b}} 2 = { } 2 {,{ }} = {, { }, {{ }}, {, { }}} 2 {a} {a,b} = {, {(a, a)}, {(a, b)}, {(a, a), (a, b)}} Počet prvků potenční množiny splňuje 2 A = 2 A. 2 A = {B B A} Kartézský součin Uspořádaná dvojice (a, b) je zadaná množinou {{a}, {a, b}}. Kartézský součin dvou množin A, B definujeme jako množinu všech uspořádaných dvojic ze složek z A a B. Platí X = = X pro každou množinu X. A B = {(a, b) a A, b B} {a, b} {a} = {(a, a), (b, a)} {c, d} {a, b} = {(c, a), (c, b), (d, a), (d, b)} Relace Relace mezi množinami A 1,, A k pro k N, je libovolná podmnožina kartézského součinu R A 1 A k. Pokud A 1 = = A k = A, hovoříme o k-ární relaci R na. Speciálně tak mluvíme třeba o binární (k = 2), ternární (k = 3) nebo unární (k = 1) relaci. {(1, a), (2, a), (2, b)} je relace mezi {1,2,3} a {a, b}. {(i, 2 i) i N} je binární relace na N. {(i, j, i + j) i, j N} je ternární relace na N. {3 i i N} je unární relace na N. Vlastnosti binárních relací Nech R M M. Binární relace R je reflexivní, právě když po každé a M platí (a, a) R; ireflexivní, právě když po každé a M platí (a, a) R; symetrická, právě když pro každé a, b M platí, že jestliže (a, b) R, pak také (b, a) R; antisymetrická, právě když pro každé a, b M platí, že jestliže (a, b), (b, a) R, pak a = b; tranzitivní, právě když pro každé a, b, c M platí, že jestliže (a, b), (b, c) R, pak také (a, c) R. Relace může být symetrická i antisymetrická zároveň. 4

6 Ekvivalence a rozklady Binární relace R M M je ekvivalence, právě když je R reflexivní, symetrická a tranzitivní. (x, y) R právě když x má stejnou výšku jako y; (x, y) R právě když x má stejnou barvu vlasů jako y; (x, y) R právě když x, y mají stejnou výšku a stejnou barvu vlasů; (x, y) R právě když x, y mají stejnou výšku nebo stejnou barvu vlasů nejedná se o relaci ekvivalence (není splněna tranzitivita); (x, y) R právě když x a y mají stejné rodné číslo je symetrická aj antisymetrická zároveň (je to tedy ekvivalence i uspořádaní). Nech M je množina. Rozklad (na) je množina N 2 M taková, že platí: N (tj. každý prvek N je neprázdná podmnožina M); pokud A, B N, pak buď A = B nebo A B = ; A N A = M. Prvkům N se také říká třídy rozkladu. M = {1,2,3,4,5,6,7,8,9} N = {{1,4}, {2,7,8,9}, {3}, {5,6}}; O = {{1,4}, {2,7,8,9}, {3,4}, {5,6}} N je rozklad na M, ale O rozklad na M není (nemůže být rozkladem ani na žádné jiné množině viz 2. podmínka pro rozklad). Každý rozklad N na M jednoznačně určuje jistou ekvivalenci R N na M: Nech M je množina a N rozklad na M. Nechť R N M M je relace na M definovaná takto (x, y) R N právě když existuje A N taková, že x, y A. Pak R N je ekvivalence na M. M = {1,2,3,4}; N = {{1,3,4}, {2}} R N = {(1,1), (1,3), (1,4), (3,3), (3,1), (3,4), (4,4), (4,1), (4,3), (2,2)} Každá ekvivalence R na M naopak jednoznačně určuje jistý rozklad M R na M: Nechť M je množina a R ekvivalence na M. Pro každé x M definujeme množinu [x] = {y M (x, y) R} Pak {[x] x M} je rozklad na M, který značíme R a čteme rozklad M podle R. M = {1,2,3,4}; Nechť R = {(1,1), (1,2), (2,1), (2,2), (3,3), (4,4)} je ekvivalence na M. Potom: M R = {{1,2}, {3}, {4}} 5

7 Uspořádání a uspořádané množiny Relace R M M je (částečné) uspořádání právě když R je reflexivní, antisymetrická a tranzitivní. (x, y) R právě když x má alespoň takovou výšku jako y; (x, y) R právě když y má alespoň takovou výšku jako x; (x, y) R právě když x a y mají stejné rodné číslo. Relace R M M je předuspořádaní (také kvaziuspořádaní, nebo polouspořádaní) právě když R je reflexivní a tranzitivní. Uspořádaná množina je dvojice (M, ), kde M je množina a je (částečné) uspořádaní na M. Uspořádaní na M je lineární (nebo také úplné), pokud každé dva prvky M jsou v srovnatelné. (N, ) - lineárně uspořádaná množina, kde má obvyklý význam (N, ), kde je relace dělitelnosti, je uspořádaná množina. Toto uspořádání není lineární. Uspořádání po bodech Nechť M je množina a (A, ) uspořádáná množina. Nechť F = {f f M A}. Definujme binární relaci na F předpisem f g x M f(x) g(x) Potom (F, ) je uspořádaná množina. Toto uspořádání se nazýva po bodech. Uspořádání po složkách Nechť (A, A ) a (B, B ) jsou uspořádané množiny. Definujme binární relaci na A B předpisem (a, b) (a, b ) právě když a A a a b B b. Pak (A B, ) je uspořádaná množina. Toto uspořádání se nazývá po složkách. Lexikografické uspořádání. Nechť (A, A ) a (B, B ) jsou uspořádané množiny. Definujme binární relaci na A B předpisem (a, b) (a, b ) právě když buď a A a a a a, nebo a = a a b B b. Pak (A B, ) je uspořádaná množina. Navíc pokud A i B jsou lineární, je i lineární. Toto uspořádání se nazývá lexikografické. Nechť (M, ) je uspořádaná množina. x M je nejmenší právě když pro každé y M platí, že x y. x M je minimální y M y x x y. x M je největší y M y x. x M je maximální y M x y y x. x M pokrýva y M právě když x y,y x a neexistuje žádné M takové, že x y a y x. x M je dolní závora (mez) množiny A M právě když x y pro každé y A. x M je horní závora (mez) množiny A M právě když y x pro každé y A. x M je infimum množiny A M právě když x je největší dolní závora množiny A. x M je supremum množiny A M právě když x je nejmenší horní závora množiny A. A M je řetězec v uspořádání právě když (A, ) je lineárně uspořádaná množina. 6

8 Nejmenší (největší) prvok, jestli existuje, je jediný a zároveň minimální (maximální). Minimálních (maximálních) prvku může být více, potom ale neexistuje nejmenší (největší) prvek. Svazy Svaz je uspořádaná množina (X, ), ve které existuje supremum i infimum pro libovolnou dvojici prvků. Ve svazu můžeme na supremum a infimum pohlížet jako na binární operace (protože je zaručeno, že jejich hodnoty jsou definovány pro každou dvojici). Nechť (A,, ) je svaz a B je neprázdná podmnožina A. Pak B se nazývá podsvazem svazu A, platí-li, že B je uzavřená vzhledem ke svazovým operacím a, tedy pro a, b B: a b B, a b B ((a b) zde značí supremum prvků a,b, (a b) jejich infimum). Uspořádaná množina A se nazývá úplný svaz, jestli její libovolná podmnožina má supremum a infimum. Z předcházejících definic vyplývají následující důsledky: Jestli je (A, ) svaz, pak každá neprázdná konečná podmnožina v A má supremum a infimum. Jestli A je konečná (a neprázdná), pojmy svaz a úplný svaz splývají. Každý úplný svaz je taky svaz. Každý úplný svaz (A, ) má nejmenší a největší prvek, kterým je inf A a sup A. Každá lineárně uspořádaná množina je svaz. (N, ), (Z, ), (Q, ), (R, ) sú svazy (žádný z nich není úplný svaz (neexistuje supn, supz), pokud se na uspořádání na daných množinách díváme tak, jak je obvyklé, ovšem tyto množiny lze přeuspořádat tak, aby již byly úplným svazem). (N, ) je svaz každá dvouprvková množina {a,b} má supremum (nejmenší společný násobek a,b) a infimum (největší společný dělitel a,b). Uspořádaná množina (N 0, ) je úplný svaz. (Záleží tedy i na tom, jak si definujeme relaci. Například nechť, ). Uspořádaná množina (P(A), ) je úplný svaz. 7

9 Příklad svazu sup(g,h) = j (pretože g a h sú neporovnateľné) sup(f,d) = f inf(b,c) = a inf(f,d) = d Hasseovské diagramy Uspořádané množiny můžeme přehledně zobrazit pomocí tzv. Hasseovských diagramů. Prvek a 1 je minimální a nejmenší, prvky a 3, a 4 jsou maximální. Prvok b 1 je minimální a nejmenší, prvok b 2 maximální a největší. Pomocí Hasseovských diagramů můžeme znázornit uspořádané množiny (B A, ), kde je uspořádaní po složkách a (B A, ), kde je lexikografické uspořádaní. 8

10 Zobrazení a funkce Funkcím se také říká zobrazení. (Totální) funkce z množiny A do množiny B je relace f mezi A a B taková, že pro každé x A existuje právě jedno y B takové, že (x, y) f. Množina A se nazývá definiční obor a množina B obor hodnot funkce f. Pozn. (x, y) f je ekvivalentní zápisu f(x) = y. V (totální) funkci je každé vstupní hodnotě x přirazena jednoznačně výstupní hodnota y. Definujeme funkci f N N předpisem f(x) = x + 8. Pak f = {(x, x + 8) x N}. Definujeme funkci plus N N N předpisem plus(i, j) = i + j. Pak plus = {(i, j, i + j) i, j N}. Parciální funkce z množiny A do množiny B je relace f mezi A a B taková, že pro každé x A existuje nejvýše jedno y B takové, že (x, y) f. V parciální funkci nemusí byť pro některé vstupní hodnoty x funkční hodnota definovaná. 9

11 Pro nedefinovanou hodnotu používáme znak. Definujeme parciální funkci f Z N předpisem Tj. f = {(x, 3 + x) x N}. 3 + x, x 0, f(x) = {, jinak. Funkce f R R daná běžným analytickým předpisem f(x) = log x je jen parciální není definovaná pro x 0. Vlastnosti funkcí Funkce (případně parciální funkce) f A B je injektivní (nebo také prostá) právě když pro každé x, y A, x y platí f(x) f(y); surjektivní (nebo také na ) právě když pro každé y B existuje x A takové, že f(x) = y; bijektivní (vzájemně jednoznačná) právě když je injektivní a současně surjektivní. Tyto vlastnosti funkcí lze využít pro porovnávání velikostí jednotlivých množin a to i nekonečných: A B pokud existuje injekce A B. A = B pokud existuje bijekce A B. Např. N, Q a Z jsou stejně velké (tzv. spočetně nekonečné) A B pokud existuje injekce A B ale neexistuje bijekce A B. Např. R je striktně větší než libovolná spočetná množina. Skládaní relací a zobrazení Nechť R A B je binární relace mezi A a B. Inverzní relace k relaci R se značí R 1 a je definovaná takto: R 1 = {(b, a) (a, b) R} 10

12 R 1 je tedy relace mezi B a A. Nechť R A B a S B C jsou binární relace. Složení relací R a S (v tomto pořadí!) je relace S R A C definovaná takto: S R = {(a, c) existuje b B takové, že (a, b) R, (b, c) S} Složení relací čteme R složeno s S nebo (pozor na pořadí!) S po R. Mějme zobrazení (funkce) f A B a g B C. Pak jejich složením coby relací v tomto pořadí vznikne zobrazení (g f) A C definované (g f)(x) = g(f(x)). A = {a, b}, B = {1,2}, C = {X, Y}, pak složením vznikne relace R = {(a, 1), (b, 1), (b, 2)}, S = {(1, X)}, S R = {(a, X), (b, X)}. Složením funkcí h(x) = x 2 a f(x) = x + 1 na R vznikne funkce (f h)(x) = f(h(x)) = x Složením těch jistých funkcí naopak ale vznikne funkce (h f)(x) = h(f(x)) = (x + 1) 2. 11

13 Čísla Dělitelnost Nechť a, b Z. Řekneme, že celé číslo a dělí celé číslo b, píseme a b, jestliže existuje k Z tak, že b = a k. S dělitelností souvisí věta o dělení celých čísel se zbytkem: Věta (O dělení celých čísel se zbytkem). Nechť a, b Z. Potom existují q, r Z taková, že a = b q + r, kde 0 r b. Nechť a, b Z. Řekneme, že celé číslo d je největším společným dělitelem čísel a, b, píšeme d = (a, b), jestliže platí dvě podmínky: 1. d a, d b 2. Pokud existuje celé číslo c takové, že c a, c b, potom c d. Euklidův algoritmus Největší společný dělitel se určuje Euklidovým algoritmem. Mějme dána dvě přirozená čísla, uložená v proměnných u a v (u>v). Dokud v není nulové, opakuj: Do r ulož zbytek po dělení čísla u číslem v Do u ulož v Do v ulož r Konec algoritmu, v u je uložen největší společný dělitel původních čísel. S největším společným dělitelem úzce souvisí Bezoutova identita: Věta (Bezoutova). Nechť a, b Z. Potom existují celá čísla m, n taková, že am + bn = (a, b). Nechť a, b Z. Řekneme, že celé číslo n je nejmenším společným násobkem čísel a, b, píšeme n = [a, b], jestliže platí dvě podmínky: 1. a n, b n 1. Pokud existuje celé číslo m takové, že a m, b m, potom n m. Modulární operace Definice kongruence. Nechť a, b Z, m N. Řekneme, že a b (mod m), jestliže a i b dávají stejný zbytek po dělení m. S definicí kongruence je možné se setkat v několika různých podobách, jak nám říká následující věta. Nechť a, b Z, m N. Potom následující podmínky jsou spolu ekvivalentní: 1. a b (mod m) 2. m (a b) 3. Existuje celé číslo k takové, že a = k m + b. 12

14 Čínská zbytková věta. Nechť m 1,.., m k N jsou po dvou nesoudělná, a 1,.., a k Z. Pak soustava má jediné řešení modulo m 1 m 2 m k. x a 1 (mod m 1 ) x a k (mod m k ) Čínská zbytková věta nám umožňuje při předepsání libovolných zbytků podle zvolených (po dvou nesoudělných) modulů garantovat, že existuje číslo s těmito předepsanými zbytky. Nechť n N. Eulerova funkce φ: N N udává počet čísel nepřevyšujících n s číslem n nesoudělných. φ(n) = {a N 0 a n, (a, n) = 1}. Eulerova věta. Pro libovolné m N a každé a Z splňující (a,m) = 1 platí a φ(m) 1 (mod m). Malá Fermatova věta. Buď p prvočíslo a nechť a je celé číslo, které není násobkem p. Potom a p 1 1 (mod p). Důsledek věty : a p a (mod p). Všechny tři výše uvedené věty mají své uplatnění v kryptografii. Příklad : šifrování v RSA každý účastník A potřebuje dvojici klíčů veřejný V A a soukromý S A generování klíčů : zvolí dvě velká prvočísla p, q, vypočte, n = pq, φ(n) = (p 1)(q 1) (n je veřejné, ale φ(n) nelze snadno spočítat) zvolí veřejný klíč e a ověří, že (e, (n)) = 1. např. pomocí Euklidova algoritmu spočítá tajný klíč d tak, aby e. d 1 (mod φ(n)) zašifrování numerického kódu zprávy M: C = C (M) M (mod n) dešifrování šifry C: O = (C) C (mod n) 13

15 Logika Výroková a predikátová logika, operace, kvantifikátory, syntax. Sémantika, pravdivost, splnitelnost. Dokazatelnost, důkazové metody a systémy. Normální formy (konjunktivní a disjunktivní, prenexní). 14

16 Logika Logika se zabývá problematikou správnosti usuzování (vztah vyplývání). Na usuzování však logiku zajímá pouze vybrané aspekty. Usuzování chápeme jako určitý myšlenkový proces. Psychologické aspekty tohoto procesu však logika zcela opomíjí, stejně jako jeho obsahovou stránku. Zabývá se především analýzou formální stavby úsudků jako základních jednotek usuzování. Úsudkem rozumíme takový myšlenkový postup, kterým dospíváme od nějakých tvrzení, které nazýváme předpoklady (premisy), k jinému tvrzení, které nazýváme závěr (důsledek). Při studiu úsudků logiku zajímá pouze jejich forma, nikoliv konkrétní obsah. Proto úsudkem je z hlediska logiky schéma tvaru: A 1, A 2,, A n /B, kde výrazy A 1, A 2,, A n reprezentují nějaká tvrzení a výraz B tvrzení, které je závěrem. Je-li úsudek daného tvaru platný (z pravdivých premis vždy získáme pravdivý závěr), říkáme, že závěr B vyplývá z premis A 1, A 2,, A n (A 1, A 2,, A n implikuje B). Logika je schopna (svými prostředky) kontrolovat správnost pouze u deduktivních (dedukce: ) úsudků. Příklad Všichni lidé jsou smrtelní, Sokrates je člověk => Sokrates je smrtelný - Toto je běžný příklad deduktivního úsudku, který je považován za platný. Slunce doposud vyšlo každý den => (nejpravděpodobněji) vyjde i zítra - Toto je považováno za deduktivně neplatný => je to pravděpodobnostní úsudek Rozdíl mezi deduktivním a pravděpodobnostním úsudkem je například: - U deduktivního úsudku je pravdivost závěru zaručena pravdivostí premis - U pravděpodobnostního úsudku pravdivost premis nezaručuje pravdivost závěru, ale pouze jeho pravděpodobnost Logika poskytuje nástroj pro budování (vědeckých) teorií (teorie grup, modální logiky). Například výpočtová logika umožňuje automatizaci důkazů a programování v jazyce PROLOG. Klasifikace logik 1. Formální logika = to, co je poznané a definované, metody odvozování - Rozlišujeme dvouhodnotovou a vícehodnotovou logiku podle toho, zda připouštíme k hodnocení tvrzení právě dvě pravděpodobnostní hodnoty, tj. pravda a nepravda, nebo více než dvě pravděpodobnostní hodnoty 2. Logika extenzionální a intensionální - Rozlišujeme podle toho, jakých spojek je použito pro vytvoření složených tvrzení. Extensionální pravdivost formule závisí jen na pravdivosti jejich složek (na, a, nebo). U intensionální (možná, věřím, ) Logika, která je dvouhodnotová a extenzionální se nazývá klasická logika. Klasickou logiku dělíme na výrokovou a predikátovou, podle detailnosti analýzy. Metajazyk Žádný jazyk nelze systematicky vybudovat pouze pomocí jeho vlastních výrazových prostředků. K tomuto účelu vždy potřebujeme další jazyk (vyšší expresní úroveň), v němž pak také můžeme formulovat výpovědi o 15

17 výrazech tohoto nového jazyka. Jazyk, který budujeme, nazveme objektový jazyk a jazyk, ve kterém hovoříme o objektovém jazyce, nazveme metajazyk. Nerozlišování objektového jazyka a metajazyka vede ke vzniku sémantických paradoxů => Paradox lháře: Tato věta je nepravdivá Výroková a predikátová logika, operace, kvantifikátory Výroková logika Výroková logika je teorií logických spojek chápaných jako pravdivostní funkce. Zabývá se způsoby tvoření výroků pomocí spojek a vztahy mezi pravdivostí různých výroků. Nezabývá se smyslem výroků, jelikož má extenzionální ( ) charakter. Výroková logika zkoumá uvedené jevy prostřednictvím umělého jazyka používajícího výrokových symbolů, logických spojek a závorek. Jelikož sémantika tohoto jazyka je extenzionální, lze si představit, že výroková logika uznává pouze dva výroky: 1. Výrok, který reprezentuje všechny pravdivé výroky 2. Výrok, který reprezentuje nepravdivé výroky Syntaxe Výroková logika rozlišuje na syntaktické úrovni dva typy výroků: jednoduché a složené: - Výrok je tvrzení nebo jazykový výraz, a jehož pravdivosti (nepravdivosti) lze uvažovat - Jednoduchý výrok je výrok, který neobsahuje žádnou logickou spojku - Složený výrok je výrok, který obsahuje alespoň jednu logickou spojku Příklady výroků: - Je pět hodin = 5 - Pokud si neuklidíš, nepůjdeme do kina Příklady, které nejsou výroky: - Kolik je hodin? Ukliď Pravdivostní spojky (funkce) Pravdivostní hodnota složeného výroku je jednoznačně určena pravdivostními hodnotami složek. Uvažujeme-li n-ární spojku, pak spojka je funkcí, která přiřazuje n-tici pravdivostních hodnot určitou pravdivostní hodnotu. Počet pravdivostních hodnot je konečný, jsou dvě (pravda, nepravda). Každou n-ární spojku (jako pravdivostní funkci) lze zadat tabulkou o 2 n řádcích, tzv. pravdivostní tabulkou. Počet vzájemně různých n-árních spojek je 2 2n. Nulární výrokové spojky nulární pravdivostní funkce (nezávisí na žádném argumentu) jsou konstanty odpovídající pravdivostním hodnotám 0, 1. F 1 unárním verum p F 1 F 2 F 3 F

18 F 2 unární projekce p F 3 negace p, jediná netriviální funkce F 4 unární falsum Binární výrokové spojky p q v ʌ F F F v disjunkce (alternativa; a nebo; OR) ʌ - konjunkce (a zároveň; AND) - implikace (jestliže p, pak q; předpoklad závěr) - ekvivalence (právě tehdy když, if and only if) F Shefferova funkce (negace konjunkce NAND; je neslučitelné s ) F nonekvivalence (spojka nebo ve vylučovacím smyslu; buď, anebo ; XOR = exlusive OR) F Nicodova (Pierceova) funcke (negace disjunkce; NOR; ani, ani ) Spojky v, ʌ, jsou komutativní (hodnota funkce nezávisí na pořadí argumentů) a je nekomutativní. Nejběžněji je používaný infixový ( ) zápis. Symbolický jazyk výrokové logiky 1. Abeceda: - Výrokové symboly: p, q, r, s, popřípadě: p 1, p 2, - Symboly pro spojky: v, ʌ,,, - Pomocné symboly oddělené, : (, ), [, ], {, } 2. Gramatika a) Každý výrokový symbol je správně utvořenou formulí výrokové logiky (zkratka: SUFVL) tzv. atomická formule b) Je-li výraz A SUFVL, pak A je SUFVL c) Jsou-li výrazy A a B SUFVL, pak výrazy A B, A B, A B, A B jsou SUFVL d) Jen výrazy utvořené podle výše uvedených bodů a, b, c jsou SUFVL Symboly A a B v bodech b, c této definice jsou výrazy metajazyka. Nepatří tedy do jazyka výrokové logiky, ale označují jeho libovolné výrazy (správně utvořené formule). Závorky lze vynechat, pokud nedojde k nejednoznačnosti. Reprezentace výroků v přirozeném jazyce: Věta: Pokud rychle napíšeš úkoly a venku bude hezky, půjdeme na procházku nebo pojedeme na koupaliště p rychle napíšeš úkoly; r venku bude hezky; s půjdeme na procházku; t pojedeme na koupaliště Výsledná reprezentace: (p r) (s t) Převod z přirozeného jazyka do symbolického jazyka nemusí být vždy jednoznačný!!! 17

19 Sémantika Pravdivostní ohodnocení (interpretace) je funkce přiřazující všem atomickým formulím dané úvahy pravdivostní hodnoty (tj. každému výrokovému symbolu přiřadí 1 nebo 0). Valuace je rozšíření interpretace z atomických na všechny formule dle tabulky pro výrokové spojky. Interpretace I splňuje formuli A (formule je pravdivá v I, respektive odpovídající valuace I (A) =1), pokud: - A je výrokový symbol a (A) = 1 - A je B a nesplňuje B, resp. (B) = 0 - A je ve tvaru B C a splňuje B i C, resp. (B) = (C) = 1 - A je ve tvaru B C a splňuje B nebo C, resp. (B) = 0 nebo (C) = 0 - A je ve tvaru B C a nesplňuje B nebo splňuje C, resp. (B) = 0 nebo (C) = 1 - A je ve tvaru B C a nesplňuje B i C, nebo splňuje B i C, resp. (B) = (C) Formule se nazývá tautologie, je-li splňována každou interpretací: např. p p. Formule se nazývá kontradikce, jestliže není splňována žádnou interpretací: např. p p. Říkáme, že formule A je splnitelná, je-li splňována aspoň jednou interpretací, kterou pak nazýváme model formule A. Množina formulí je splnitelná, jestliže existuje ohodnocení takové, že každá formule A je splňována. Tuto interpretaci pak nazýváme množiny. Říkáme, že formule A logicky vyplývá (na základě logiky) z množiny a tutu skutečnost označíme A, jestliže pro každý model množiny je formule A interpretací splňována. p q (p q) (p q) Tautologií je nekonečně mnoho. Ke zjištění pravdivosti formulí pro všechny možné interpretace používáme tabulkovou metodu. Zásady: Vyhodnocení probíhá po složkách (podformulích) dané formule (výrokové symboly, negace, celá formule). Zápis pravdivostní hodnoty provedeme v řádku s příslušnou interpretací pod vyhodnocovanou spojkou. Normální výrokové formy - Literál je výrokový symbol nebo jeho negace - Elementární konjunkce (EK) je konjunkce literálů. - Elementární disjunkce (ED) je disjunkce literálů - Úplná EK (ÚEK) dané množiny výrokových symbolů je EK, ve které z dané množiny vyskytuje právě jednou (prostý nebo negovaný) - Úplná ED (ÚED) dané množiny výrokových symbolů je ED, ve které se každý symbol z dané množiny vyskytuje právě jednou (prostý nebo negovaný) - Disjunktivní Normální Forma (DNF) dané formule je formule ekvivalentní s danou formulí a mající tvar disjunkce EK. - Konjunktivní Normálová Forma (KNF) dané formule je formule ekvivalentní s danou formulí a mající tvar konjunkce ED - Formule je v DNF, pokud má tvar: 1 n, a zároveň = A 1 A, kde A je výroková proměnná nebo její negace 18

20 - Formule je v KNF, pokud má tvar: 1 n, a zároveň = A 1 A, kde A je výroková proměnná nebo její negace - Některé formule mohou být zároveň v KNF a DNF: c; a b c - Příklady na převody do normální formy: Odvozovací systém výrokové logiky Formální systém výrokové logiky na rozdíl od vyhodnocování (valuace) logických formulí na základě atomických formulí (výrokových symbolů) klademe na formální systém výrokové logiky požadavek na dokazování výrokových formulí. Tj. zjištění jestli pravdivost dané formule vyplývá z pravdivostí jiných formulí. Formálním systémem výrokové logiky se rozumí jazyk výrokové logiky a deduktivní soustava, která je tvořena odvozovacími pravidly a případně axiomy ( Za axiomy volíme vhodná schémata tautologií, odvozovací pravidlo chápeme jako operace na formulích umožňující konstrukce důkazů a stačí jediné pravidlo Modus Ponens (MP). Po pravidle MP požadujeme korektnost tj. aby z pravdivých premis byl odvozen pravdivý závěr. Formální systémy jsou postaveny výhradně na syntaktické bázi, jazyk logiky neinterpretujeme, ale provádíme pouze syntaktické manipulace => důkazy. Formální systémy lze rozdělit na: - Axiomatické méně pravidel - Předpokladové méně axiomů Požadované vlastnosti formálních systémů: - Korektnost, bezesporost, úplnost, připojením neodvoditelné věty k úplnému systému se systém stane sporným není vždy vyžadováno Rozhodnutelnost existence algoritmu pro ověření dokazatelnosti libovolné formule - Nezávislost axiomů nezávislý axiom nelze odvodit z ostatních axiomů Modus Ponens (MP) - MP je základní a nejdůležitější odvozovací pravidlo. A, A B - Tvar MP: B - MP říká, že pokud máme formule A a A B, pak vyplývá platnost B - Pravdivost a dokazatelnost logických formulí Pravdivost logické formule je dána sémantikou této formule. Kdežto dokazatelnost (odvoditelnost) logické formule je posuzována syntaxí. Říkáme, že formule je dokazatelná, pokud k této formuli existuje důkaz. Těchto důkazů je nekonečně mnoho. Rezoluce Rezoluce je formální systém výrokové logiky vhodný pro strojové dokazování (Prolog) a je založena na vyvracení dokazujeme nesplnitelnost formulí. Rezoluce pracuje s formulemi v KNF. Notace Rezoluce: - Klauzule je konečná množina literálů (chápeme ji jako jejich disjunkce). Je pravdivá, pokud alespoň jeden prvek je pravdivý. Prázdná klauzule je vždy nepravdivá tj. neobsahuje žádný pravdivý prvek. Příklad klauzule {p, q, r} dříve značeno: (p q r) 19

21 - Formule je (ne nutně konečná) množina klauzulí (chápána jako jejich konjunkce, tedy KNF). Je pravdivá, je-li každý její prvek pravdivý. Prázdná formule je vždy pravdivá - - neobsahuje žádný nepravdivý prvek. Příklad formule: {{ p}, { p, q}} dříve značeno q ( p q). - Rezoluční pravidlo: nechť C 1 = {p} C 2 jsou klauzule, jejich rezolventou je C = C 1 C 2. Rezoluční pravidlo zachovává splnitelnost, tj. libovolná valuace splňující C 1 a C 2 splňuje i C. - Rezoluční důkaz klauzule C z formule S je konečná posloupnost klauzulí C 1, C 2,., C n, kde C n = C a každé C je buď prvkem S, nebo rezolventou klauzulí C, C k pro j, k i. Existuje-li tento důkaz, je C rezolučně dokazatelná z S (píšeme S C). Odvození z S je vyvrácením S. Přehlednější reprezentací rezolučních důkazů jsou stromy. Strom rezolučního důkazu C z S je binární strom s vlastnostmi: - Kořenem je C - Listy jsou prvky S - Libovolný vnitřní uzel C s bezprostředními následníky C, C k je rezolventou C, C k Příklad: strom důkazu C = { q} S = {{p, r}, { q, r}, { p}} Obecná schémata důkazu, formule A je logickým důsledkem množiny formulí : vytvoříme konjunkci všech prvků z, formuli A převedeme do KNF a ukážeme KNF A. Výhody pro strojové zpracování: systematické hledání důkazů, práce s jednoduchou datovou strukturou a jediné odvozovací pravidlo. Problém: Strategie generování rezolvent prohledávaný prostor může být příliš veliký. Omezení prohledávacího prostoru zjemnění rezoluce: ukončením prohledávání neperspektivních cest a určením pořadí při procházení alternativních cest. Lineární rezoluce odvození C S je posloupnost dvojic C 0, B 0 >,, C n, B n > taková, že C = C n+1 a 1) C 0 a všechna B jsou z S nebo nějaké C, kde j i 2) Každé C +1, i n, je rezolventou C a B - Lineární rezoluce je korektní a úplná - Příklad lineární rezoluce 20

22 Lineární vstupní rezoluce (LI) množiny S = p klauzulemi jsou jen klauzule z P. {G} je lineární vyvrácení S, které začíná klauzulí G, a bočními - Je úplná jen pro Hornovy klauzule (klauzule s nejvýše jediným pozitivním literálem) LD rezoluce už máme uspořádané klauzule (P {G}) a při rezoluci vkládáme dovnitř. LD rezoluční vyvrácení P {G} je posloupnost G 0, C 0 >,, G n, C n > uspořádaných klauzulí taková, že G 0 = G, G n+1 =, C P a každé G, 1 i n, je rezolventou uspořádaných klauzulí G 1 a C 1. Dále máme SLD-rezoluci, což je lineární vstupní rezoluce se selekčním pravidlem. Příklad SLD: (str. 24) Predikátová logika Predikátová logika plně přejímá výsledky výrokové logiky. Zabývá se navíc strukturou jednotlivých jednoduchých výroků na základě této analýzy lze odvodit platnost některých výroků, které ve výrokové logice platné nejsou. Syntax 1) Predikát - Značíme velkým písmenem např. predikáty P, Q, R, P 1, - Predikát je n-ární relace - Vyjadřuje vlastnosti objektů a vztahy mezi objekty - Unární predikáty vyjadřují vlastnosti - Binární, ternární,, n-ární vyjadřují vztahy mezi dvojicemi, trojicemi,, n-ticemi objektů - Nulární predikáty (sentence) představují původní výroky ve výrokové logice (bez vypuštěných výrazů) 2) Konstanty - Značíme a, b, c, a 1, - reprezentují jména objektů - jedná se o prvky předem specifikované množiny hodnot D (Domény) 3) Proměnné - Značíme x, y, z, x 1, - Zastupují jména objektů - Mohou nabývat libovolných hodnot z dané domény D 4) Funkce 21

23 - Značíme f, g, h, f 1, - Reprezentují složená jména objektů - f: n - Příklad: Nechť funkce f(x, y) reprezentuje sčítání. Pak f(1, 2), f(0, 3), f(2, 1), f(3, 0) jsou možná složená jména pro konstantu 3 5) Termy - Jsou výrazy složené pouze z funkčních symbolů, konstant a proměnných - Každá proměnná a každá konstanta je term!!! - Je-li f n-ární funkční symbol a t 1,, t n jsou termy, pak f(t 1,, t n ) je term - Nic jiného není temr - Příklad: f(x, g(y, h(x, y), 1), ) 6) Kvantifikátory - Univerzální (obecný) kvantifikátor : xp(x) pro každý prvek x domény P(x) - Existenční kvantifikátor : xp(x) existuje alespoň jeden prvek x, pro který platí P(x) 7) Atomické formule - Je-li P n-ární predikátový symbol t 1,, t n jsou termy, pak P(t 1,, t n ) je atomická formule - Jsou-li t 1, t 2 termy, pak t 1 = t 2 je atomická formule - Nic jiného není atomická formule - Je to tedy také predikát, ale často se uvádí zvlášť 8) Formule - Jsou výrazy složené z funkčních symbolů, konstant a proměnných - Každá atomická formule je formule - Je-li A formule, pak A je formule - Jsou-li A, B formule, pak (A B), (A B), (A B), (A B) jsou formule - Je-li x proměnná a A formule, pak ( xa) a ( xa) jsou formule - Nic jiného není formule 9) Podformule - Podformule formule A je libovolná spojitá podčást A, která je sama formulí - Příklad: Formule A = x (( yp( )) R(x, y)) má kromě sebe samé následují podformule: ( yp( )) R(x, y), yp( ), R(x, y), P(x) 10) Vázaný/volný výskyt - Výskyt proměnné x ve formuli A je vázaný, pokud existuje podformule B a formule A, která obsahuje tento výskyt x a začíná x, respektive x - Výskyt proměnné je volný, není-li vázaný - Proměnná x se volně vyskytuje v A, má-li tam alespoň jeden volný výskyt - Příklad: ( yp( )) R(x, y), yp( ), R(x, y), P(x), kde y, jsou volné a A je vázaný (hledanou podformulí je celá A) 11) Sentence (uzavřená formule) - Formule bez volných výskytů proměnných (všechny výskyty všech proměnných jsou vázané) 12) Otevřená formule - Formule bez kvantifikátorů 13) Substituce - Substituoval lze pouze volné proměnné! - Term t je substituovaný za proměnnou x ve formuli A, pokud pro každou proměnnou y obsaženou v t neobsahuje žádná podformule A tvaru yb, yb volný výskyt proměnné x 22

24 - Je-li t substituovaný za x v A, označíme A(x/t) výraz, který vznikne z A nahrazením každého volného výskytu x term t - Příklad: ve formuli A = xp(x, y) je možné provést například následující substituci: A(y/ ) = xp(x, ), A ( 2 ) = xp(x, 2), A(y f(, )) = xp(x, f(, )). Není však možné substituovat A(y f(x, x) ) = xp(x, f(x, x)),protože by došlo k nežádoucí vazbě proměnných. Sémantika 1) Interpretace (realizace) jazyka predikátové logiky je struktura složené z: - Libovolné neprázdné množiny D (domény, oboru interpretace) - Zobrazení (f): n pro každý n-ární funkční symbol f, n 1 Příklad: = Z (celá čísla) - (a) = 0, (a 1 ) = 1, - nulární funkce, (b 1 ) = 1 - (f) = + funkce zadaná pomocí rovnosti funkcí: zobrazení (f) definujeme jako sčítání dvou celých čísel, pak např. (f)(4, 2) = 2 - (P) = > Relace zadaná pomocí rovnosti relací (P), definujeme jako relaci větší než pro celá čísla, pak například ( 2,1) (P) - Neformálně řečeno: Interpretace je přiřazení konkrétních významů všem konstantám, funkcím a predikátovým symbolům. 2) Valuace - Interpretace volných proměnných spočívá v jejich hodnocení, což je libovolné zobrazení (valuace) z množiny všech proměnných do (domény). - Neformálně řečeno: Přiřazení konkrétních hodnot proměnným. - [x/d] značí ohodnocení, které přiřazuje proměnné x prvek d a na ostatních proměnných splývá s valuací 3) Hodnota termu t v interpretaci a valuaci V je prvek t 1, z takový, že: - Je-li t proměnná, t, = (t) - Je-li t = f(t 1,, t n ), pak t, je hodnotou funkce (f) pro argumenty t 1,,, t n, 4) Splnitelnost 23

25 5) Pravdivost formulí - Formuli A nazveme pravdivou v interpretaci, je-li splňována pro libovolnou valuaci; píšeme A - Formule A je 1. Tautologie, pokud je pravdivá pro každou interpretaci 2. Splnitelná, pokud je pravdivá pro alespoň jednu interpretaci a valuaci 3. Kontradikce, pokud je tautologie Normální forma 1) Prenexe - Cílem prenexové normální formy (PNF) je převést libovolnou (uzavřenou) formuli do tvaru, v němž jsou všechny kvantifikátory na začátku a následuje otevřené (= bez kvantifikátorů) jádro KNF (DNF). - Každá formule se dá převést - Algoritmus převodu: 1. Eliminovat zbytečné kvantifikátory 2. Přejmenovat proměnné tak, aby u každého kvantifikátoru byla jiná proměnná 3. Eliminovat všechny spojky různé od,, a 4. Přesunout negaci dovnitř 5. Přesunout kvantifikátory doleva použít distributivní zákony k převodu jádra do KNF (DNF) 24

26 Skolemizace - Skolemizace je převod formulí na formule bez existenčních kvantifikátorů v jazyce, který je rozšířen o tzv. Skolemovy funkce. - Idea převodu: formuli x 1,, x n P(x 1,, x n, y)převedeme na x 1,, x n P(x 1,, x n, f(x 1,, x n )) - Skolemova normální forma (SNF) je prenexová normální forma pouze s univerzálními kvantifikátory - Každou formuli A lze převést na takovou formuli A ve SNF, že A je splnitelná právě když A je splnitelná - Algoritmus převodu: 1. Převést formuli do (konjunktivní) PNF 2. Provést skolemizaci: odstranit všechny existenční kvantifikátory a nahradit jimi vázané proměnné pomocnými Skolemovými funkcemi - Příklady: 25

27 Lineární algebra a geometrie Operace s vektory a maticemi, vlastnosti lineárních operací a skalárního součinu, řešení systému lineárních rovnic, determinant, vlastní čísla a vektory, inverzní matice, podprostory, báze. Analytická geometrie, afinní objekty, afinní transformace. 26

28 Operácie s vektormi a maticami Množinu R n usporiadaných n-tic reálnych čísel a = (a 1, a 2,, a n ) s operáciami sčítania a násobenia reálnymi číslami definovanými (a 1, a 2,, a n ) + (b 1, b 2,, b n ) = (a 1 + b 1, a 2 + b 2,, a n + b n ) k(a 1, a 2,, a n ) = (ka 1, ka 2,, ka n ) pre všetky k R a (a 1, a 2,, a n ), (b 1, b 2,, b n ) R n nazývame lineárnym vektorovým priestorom. Prvky tohto priestoru, teda usporiadané n-tice reálnych čísel nazývame vektory. Čísla (a 1, a 2,, a n ) nazývame zložky vektoru a. Číslo n nazývame dimenzia (rozmer) vektoru a. Vektor (0,0,,0) dimenzie n nazývame nulový vektor. Maticou typu m/n nad skalármi K nazývame obdĺžnikovú schému 27

29 Hodnost matice je maximální počet lineárně nezávislých řádků/sloupců v matici. Matice se nazývá regulární, jestliže má maximální hodnost (tj. pokud se v ní nevyskytuje žádný lineárně závislý řádek) a jestliže je to matice čtvercová. Čtvercová matice se nazývá singulární, jestliže není regulární (tj. jestliže matice obsahuje alespoň jeden lineárně závislý řádek). Tyhle dva pojmy jsou docela důležité, respektive často na nich stojí nějaké definice. Spousta věcí je definována, jen pokud je matice regulární. Všetky základné informácie o maticiach (asi to sem nemá zmysel kopírovať): Vlastnosti lineárních operací a skalárního součinu 28

30 29

31 30

32 Násobenie vektoru Vektorový súčin: 31

33 32

34 Řešení systému lineárních rovnic 33

35 Podmínky řešitelnosti soustavy lineárních rovnic veľmi dobre príklady 34

36 Determinant V lineární algebře je determinant zobrazení, které přiřadí každé čtvercové matici A skalár, který označujeme A. V případě číselných matic je determinant rovný nějakému reálnému číslu. Permutace entice Abychom mohli nadefinovat determinant, budeme muset vědět, jak vypočítat permutaci entice, respektive znaménko permutace. Nejlépe to vysvětlím na příkladu. Mějme uspořádanou trojici 1, 2, 3, která se zobrazuje na trojici 2, 3, 1. Obvykle to v případě permutací přepisujeme takto: Nyní musíme zjistit, kolik různých prohození čísel jsme museli použít, abychom z první množiny dostali druhou množinu. Přičemž prohazovat smíme pouze čísla vedle sebe. Takže máme trojici 1, 2, 3. Nyní prohodíme jedničku s dvojkou: 2, 1, 3. Teď prohodíme jedničku s trojkou: 2, 3, 1, čímž už získáme hledanou permutaci. K získání obrazu jsme potřebovali dvě prohození. Znaménko permutace zjistíme jednoduše pokud je počet prohozů sudý, je znaménko kladné. Pokud je počet lichý, je znaménko záporné. V našem případě se tudíž jedná o kladné znaménko permutace. Zkusíme ještě určit znaménko permutace u tohoto příkladu: Budeme postupovat následovně: Úprava je hotová. Potřebovali jsme celkem pět úprav, takže jsme tentokrát získali permutaci s lichým znaménkem. Permutaci označujeme pomocí Levi-Civitova symbolu: Definice determinantu Determinant je číslo; je definovaný pouze na čtvercových maticích a je zapisován buď jako det A nebo A. Toto číslo je definované takto: 35

37 Zkusíme si vypočítat determinant čtvercové matice řádu 2 2: Pokud si do definice dosadíme konkrétní hodnotu n = 2, získáme tento vzorec: Inak povedané Determinant matice A je rovný deseti. Tento vzorec platí obecně na jakoukoliv matici řádu 2 2. Sarrusovo pravidlo Pomocí Sarrusova pravidla počítáme determinant matice třetího řádu. Tento determinant už je trochu složitější. Tak jdeme počítat, třeba tuhle matici: Nyní budeme postupovat podobně jako u matice druhého řádu, ale pro přehlednosti si tuto matici rozšíříme ještě o další dva řádky pod tuto matici opíšeme první dva řádky matice: 36

38 První a čtvrtý řádek matice tak jsou stejné, stejně tak druhý a pátý. Teď budeme postupovat tak, že sečteme násobky prvků na hlavních diagonálách a odečteme od nich součet násobků vedlejších diagonálách. Po dosazení dostaneme: Vlastnosti determinantu Vynásobíme-li řádek nebo sloupec matice A číslem c 0, získáme matici A' a pro jejich determinanty bude platit: c A = A'. Tedy pokud vynásobíte řádek matice třemi a spočítáte determinant, pak determinant původní matice získáte tak, že současný výsledek vydělíte třemi. Vynásobením i-tého řádku a přičtením k j-tému řádku se determinant matice nezmění. Opět totéž pro sloupce. Je-li alespoň jeden řádek matice nulový, determinant matice bude nula. Regulární matice bude mít vždy determinant různý od nuly a singulární matice bude mít vždy determinant rovný nule. Determinant matice ve schodovitém tvaru je rovný součinu prvků na hlavní diagonále. Prohodíme-li dva řádky matice, změní se znaménko determinantu. A = A T A B = A B A 1 = 1/ A Z předchozích vlastností vyplývá poměrně jednoduchý postup, jak determinant vypočítat. Stačí upravit matici do schodovitého tvaru a poté vynásobit prvky na hlavní diagonále. Jdeme na to: Standardními maticovými úpravy nyní upravíme matici na schodovitý tvar: Teď uděláme součin prvků na diagonále: 1 ( 1) ( 107) = 107. Laplaceův rozvoj K pochopení algoritmu budeme muset umět vypočítat speciální submatici původní matice. Máme danou matici A a potřebujeme vytvořit submatici, která vznikne tak, že z matice A odstraníme jeden řádek a jeden sloupec. Tuto novou matici označíme S A ij, což nám říká, že jsme z matice A odstranili i-tý řádek a j-tý sloupec. Příklad: 37

39 Submatice S A 12 by měla tento tvar: Dále definujeme pojem minor, což není nic jiného, než determinant námi definované submatice S A ij. Minor označíme stejně, jen s písmenem M, tedy M A ij = S A ij. Můžeme uvažovat i minor prvku a ij, což je právě M A ij. Pomocí těchto minorů můžeme spočítat determinant původní matice. V prvním kroku si vybereme řádek (nebo sloupec) matice. Pak pro každý prvek tohoto řádku spočítáme jeho minor. Dostaneme tak tolik minorů, kolik má řádek prvků. Nyní můžeme vyjádřit determinant původní matice A typu n n jako vážený součet těchto minorů: kde i je námi zvolený řádek. Pokud budeme iterovat přes proměnnou i, budeme si pevně volit proměnnou j index sloupce. V praxi to vypadá tak, že máte matici a chcete znát determinant. Vemete tedy jeden sloupec matice (nebo řádek) a ke každému prvku v tomto sloupci určíte minor a přiřadíte znaménko ( 1) i+j a vše sečtete, přičemž každý deteminant vynásobíte prvkem, jehož minorem ta matice je. Díky tomu, že minor M A ij ještě násobíme prvkem a ij, je vhodné, pokud je tento prvek nula. Pak totiž odpadne další počítání a ušetříte si práci. Zkusíme si spočítat determinant této matice: V matici se nachází jediná nula, takže ideálně rozvoj provedeme buď přes druhý řádek nebo přes třetí sloupec. Zvolíme například řádek. V prvním kroku extrahujeme submatice: Nyní spočítáme determinanty, čímž dostaneme minory. Pro matici druhého řádu je to triviální. 38

40 Teď už to můžeme dosadit do vzorce, i = 2: Všimněte si, že díky tomu, že prvek na konci druhého řádku je nulový, se nám třetí sčítanec také rovnal nule. Vlastní čísla a vektory Vlastním číslem čtvercové matice A se nazývá číslo, pro které existuje vektor. Vektor v označíme za vlastní vektor matice A příslušný vlastnímu číslu. takový, že Jednoduše řečeno je vlastní vektor takový vektor, jehož směr se po aplikaci transformace A nemění. Vlastní číslo je pak koeficient změny velikosti daného vektoru. Spočítejte vlastní čísla a vlastní vektory dané matice. Problém hledání vlastních čísel a vektorů můžeme vyjádřit také následující rovností: Jelikož hledáme nenulové vlastní vektory, tak musí být determinant matice musí být singulární). nulový (tj. matice Vlastní čísla matice A jsou,, protože je jedno vlastní číslo kladné, a druhé záporné, tak je symetrická matice A indefinitní. Nyní již zbývá pouze získat dosazením vlastní vektory matice A. Pro 39

41 Řešením je zřejmě vektor. Pro Řešením je vektor. Nechť A = (aij) je matice řádu n, kde aij C. Číslo λ C se nazývá vlastní nebo charakteristické číslo matice A, jestliže existuje nenulový vektor x Cn tak, že A. x = λ x. Vektor x se nazývá vlastní nebo charakteristický vektor příslušný k λ. 40

42 41

43 Inverzní matice Veta: Ke ctvercove matici A existuje matice inverznı A je regularni, tj. det A 0. Názorný výpočet inverznej matice: 42

44 Podprostory, báze Vektorový prostor (též lineární prostor) je základním objektem studia lineární algebry. Prvky vektorového prostoru se nazývají vektory. Při zavádění vektorů lze uvažovat některé operace (sčítání vektorů, násobení skalárem) společně s některými omezeními (asociativita atd.) Tím dospějeme k matematické struktuře zvané vektorový prostor. Vektorový prostor nad komutativním tělesem F (např. tělesem reálných čísel nebo komplexních čísel) je množina V společně se dvěma operacemi: sčítání vektorů: V V V značeno v + w, kde v, w V násobení skalárem: F V V značeno a v, kde a F ; v V. splňující následující axiomy (pro každé a, b F a u, v, w V): 1. V společně se sčítáním vektorů tvoří komutativní grupu 1. Existuje neutrální prvek 0 V tak, že pro všechna v V, v + 0 = v. Prvek 0 se nazývá nulový vektor. 2. Pro všechna v V existuje opačný prvek w V tak, že v + w = 0. Vektor w bývá také označován jako opačný vektor k vektoru v a značen w = -v. 3. Sčítání vektorů je asociativní: u + (v + w) = (u + v) + w. 4. Sčítání vektorů je komutativní: v + w = w + v. 2. Násobení skalárem je asociativní: a(b v) = (ab)v v = v, kde 1 je jednotkový prvek tělesa F. 4. Distributivita: 1. a (v + w) = a v + a w. 2. (a + b) v = a v + b v. Z definice vektorového prostoru lze dokázat například tyto vlastnosti: Nulový vektor 0 V je právě jeden. a 0 = 0 pro všechna a F. 0 v = 0 pro všechna v V kde 0 je neutrální prvek pro sčítání v F. a v = 0 právě tehdy, když a = 0 nebo v = 0. Opačný prvek vektoru v pro sčítání vektorů je unikátní. Většinou se značí v. ( 1)v = v pro všechna v V. ( a)v = a( v) = (av) pro všechna a F a v V. 43

45 Neprázdná podmnožina vektorového prostoru nad tělesem se nazývá podprostorem (někdy také vektorový modul) ve, pokud pro libovolné vektory a libovolný skalár platí: Množina je tedy uzavřená vzhledem k operacím sčítání vektorů a násobení vektoru skalárem. 44

46 Báza: Báze vektorového prostoru V je množina lineárně nezávislých vektorů, jejichž lineární obal je roven celému prostoru V. V konečně dimenzionálním prostoru dimenze n je bází každá množina obsahující n lineárně nezávislých vektorů. U prostorů nekonečné dimenze je pojem složitější. Přímočaré zobecnění vede k pojmu Hammelovy báze (je to množina vektorů taková, že každý vektor je možné vyjádřit jako konečnou lineární kombinaci bázových vektorů). Je-li bází -rozměrného vektorového prostoru, pak libovolný vektor lze vyjádřit pomocí jednoznačně určených koeficientů jako. Čísla se pak nazývají souřadnice vektoru v bázi. 45

47 Ortogonální a ortonormální báze Báze v prostoru H se nazývá ortogonální, jestliže pro libovolné dva různé vektory ui, uk zvolené báze platí kde závorka označuje skalární součin., Pokud navíc pro každý prvek báze platí pak bázi označujeme jako ortonormální., Gramov-Schmidtov ortogonalizačný proces: 46

48 Analytická geometrie, afinní objekty, afinní transformace Afinní prostor je v geometrii prostor, na kterém je definováno sčítání bodů a vektorů. [1] Slouží jako model pro afinní geometrii [2]. Jedná se o zobecnění eukleidovského prostoru. Afinní prostor je množina spolu se zobrazením kde je vektorový prostor, které má následující vlastnosti: [3][4] 1. Pro každé a v A platí, kde je nulový vektor 2. Pro každé v, w ve V a a v A platí, 3. Pro každé a v A, zobrazení je bijekce. Volbou počátku je možné identifikovat A s vektorovým prostorem V zobrazením. Naopak, každý vektorový prostor V je afinní prostor nad sebou samým. 47

49 V euklidovském prostoru obvykle máme danou soustavu souřadnic bodů i vektorů. Velikost vektoru je a skalární součin vektorů. Přímky jsou dány jako množiny kde a je bod a v vektor. V dvourozměrném prostoru je navíc definována kružnice je množina bodů v rovině, které mají stejnou vzdálenost od jednoho bodu (středu kružnice). Její rovnice je. Takto popsaný prostor, ve kterém můžeme definovat přímky, body, úhly a vzdálenosti pomocí rovnic a souřadnic, tvoří model pro euklidovské geometrie. Vzájemná poloha bodu a přímky Pokud bod leží na přímce, rozděluje ji takto na dvě polopřímky. Bod ležící mimo přímku s ní určuje jednu rovinu. Obdobně jako u obecné křivky, bod A leží na přímce p pokud dosazením souřadnic bodu do rovnice přímky získáme rovnost. Leží-li bod mimo přímku, je možno určit jejich vzájemnou vzdálenost. Vzájemná poloha bodu a kružnice Obecný bod může ležet uvnitř kružnice (vzdálenost středu kružnice a bodu je menší než poloměr) na kružnici (vzdálenost středu kružnice a bodu je rovna poloměru) vně kružnice (vzdálenost středu kružnice a bodu je větší než poloměr) 48

50 Vzájemnou polohu bodu a kružnice určuje tzv. mocnost bodu ke kružnici. Máme-li kružnici určenou vztahem, pak mocnost bodu k této kružnici se určí jako Pro leží bod na kružnici, pro leží bod vně kružnice a pro uvnitř kružnice. Detaily k jednotlivym geometrickym utvarom, nema zmysel to tu všetko vypisovať: Afinní transformace Posunutie o vektor (x,y,z): ( ) x y 1 Otočenie o uhol okolo osi x,y,z: Užitočné matice: cos 0 sin 0 0 cos sin ( ) ( ) ( 0 sin cos 0 sin 0 cos cos sin 0 0 sin cos 0 0 ) Zdroje

51 Pravděpodobnost a statistika Elementární kombinatorika (kombinace, permutace, variace). Pravděpodobnost, podmíněná pravděpodobnost, Bayesova věta, distribuční funkce a rozdělení náhodných veličin, příklady. Popisná statistika, střední hodnota, medián, rozptyl. 50

52 Variace Nechť S je konečná množina n prvků {a 1,, a n }. Variace jsou definovány jako uspořádané výběry prvků z množiny S (výběr k-tice), kde záleží na pořadí. Dále rozlišujeme, zda se mohou či nemohou prvky z S opakovat, podle to dělíme variace na s opakováním a bez opakování. Slovní vyjádření: Variace k-té třídy z n prvků. Bez opakování: v k (n) = n (n k) nebo jiné značení v(n, k) = n (n k) Příklad: Určete, kolika způsoby lze umístit 5 kulečníkových koulí do děr. Kulečníkových koulí je dohromady 16, na pravidla hry nedbejte. ( ) = ( ) = = = = t ko l l e m stit do d so. S opakováním: k(n) = n k nebo jiné značení V(n, k) = n k Příklad: Kolik šesticiferných čísel lze sestavit z číslic {2, 4, 6, 8}, jestliže se číslice mohou opakovat? (4) = 4 = 4096 Lze sestavit 40 6 šesticiferných čísel. Faktoriál Faktoriál čísla n je roven součinu všech přirozených čísel, která jsou menší nebo rovna číslu n. n { Důležitá vlastnost faktoriálu je, že se krátí ve zlomcích. 1 pro n = 0 n (n 1) jinak 5 4 = = 5 1 = 5

53 Permutace Speciálním případem variace bez opakování jsou permutace. Pokud máme množinu S o velikost n, pak permutace je libovolná n-tice složená z prvků z množiny S, přičemž žádný prvek se nesmí opakovat. Bez opakování: (n) = n (n) = n (n n) = n = n = n Příklad: Máte celkem šest knih a chcete je uložit na poličku v nějakém pořadí. Kolik celkem různých pořadí existuje? ( ) = ( ) = = Šest knih lze srovnat 120 způsoby. S opakováním: Permutace s opakováním z n prvků je uspořádaná k-tice sestavená z těchto prvků tak, že každý se v ní vyskytuje aspoň jednou. Počet P(k, k,, k n ) permutací z n prvků, v nichž se jednotlivé prvky opakují k, k,, k n krát, je pak P(k, k,, k n ) = (k + k + +k n ) k k k n A zároveň musí platit: k n = n 0 Příklad: Určete, kolika způsoby je možné srovnat do řady 2 šedé, 2 modré a 2 černé kostky. k = k = k = P(,, ) = ( + + ) = = = Knihy je možné srovnat 0 způsoby. Kombinace Nechť S je konečná množina. Kombinace jsou neuspořádané výběry prvků množiny S, kde nezáleží na pořadí. Každá kombinace k-té třídy bez opakování určuje k variací, proto lze vzorec pro kombinace odvodit z vzorce pro variace. 52

54 Bez opakování: c(n, k) = v(n, k) k = n (n k) 1 k = n (n k) k = (n k ) Tedy dostáváme se k výslednému vzorci. Kromě tohoto vzorce to také odpovídá tzv. kombinačnímu číslu. c(n, k) = ( n k ) = n (n k) k Příklad: V krabici je 15 výrobků, z nichž jsou 4 vadné. Kolika způsoby lze vybrat 6 výrobků tak, aby žádný nebyl vadný? c(11,6) = ( 11 6 ) = 11 (11 6) 6 = = = 462 = = = Šest výrobků s požadavkem, aby žádný nebyl vadný, lze realizovat 462 způsoby. S opakováním: Pokud máme množinu prvků S o velikosti n a vybíráme z ní k-tice, přičemž jednotlivé prvky se mohou opakovat, pak mluvíme o kombinacích s opakováním. n + k 1 + k 1 C(n, k) = ( ) = (n ) n 1 k Příklad: Kolika způsoby lze rozdělit 20 volných vstupenek na zápas Sparta x Plzeň mezi 10 lidí? (lze dát i 20 lístků jednomu) n + k C(10,20) = ( ) = ( ) = ( 29 k ) = 29 (29 20) 20 = = = = = Lze rozdat způsoby. 53

55 Kombinační číslo Kombinační číslo čteme jako en nad ká. Hodnota kombinačního čísla je pak stejná jako C(n, k). Říká se mu také binomický koeficient či binomické číslo. Geometrickou reprezentací binomických koeficientů je Pascalův trojúhelník. Binomické koeficient je využíván v Binomické větě. ( n k ) = n (n k) k Pravidla platící pro kombinační čísla: n ( n k ) = ( n n k ) ( n k ) = 2n k 0 ( n + 1 k ) = (n k ) + ( n k 1 ) ( n 0 ) = 1 ( n n ) = 1 Pravděpodobnost Pravděpodobnost náhodného jevu je číslo, které je mírou očekávatelnosti výskytu jevu. Elementární jevy jsou množné výsledky náhodného pokusu a tvoří základní prostor. Ω (omega) základní prostor neprázdná množina výsledků náhodného pokusu jevové pole - je systém podmnožin základního prostoru, je uzavřený na konečné průniky, spočetná sjednocení a množinové rozdíly A, B, C, se nazývají náhodnými jevy, pokud jsou prvky množiny, tedy A, B, C Ω Terminologie náhodných jevů: 54

56 Ω - jev jistý, { } - jev nemožný {w} - elementární jev A B, A - společné nastoupení náh. jevů (průnik) A B, A - nastoupení alespoň jednoho náh. jevu (sjednocení) A B - jev A má za důsledek jev B A\B - nastoupí jev A a současně nenastoupí jev B (rozdíl) A B = - jevy A a B jsou neslučitelné Ω\A =: A c - jev opačný k jevu A (komplement) Klasická pravděpodobnost Pravděpodobnostní funkce P je reálná funkce na jevovém poli (Ω, ), kde P : R 1. Nezáporná 2. Aditivní: P(A B) = P(A) + P(B) platí pro neslučitelné jevy A, B 3. Normovaná: P(Ω) = 1 A je počet výsledků příznivých v A Ω je počet všech možných výsledků P(A) = A Ω Příklad: Házíte jedenkrát 12stěnnou kostkou. Jaká je pravděpodobnost, že padne sudé číslo? Sudé číslo padne s pravděpodobností 50%. Jev A padne sudá: 2,4,6,8,10,12 A = 6 Ω = 12 P(A) = A Ω = 6 12 = 0,5 Geometrická pravděpodobnost Definujeme jako porovnání meřitelných množin (tedy délek, obsahů, objemů), značíme ol A P(A) = ol A ol Ω Geometrická pravděpodobnost je základ pro metodu Monte Carlo. Podmíněná pravděpodobnost Hypotéza H je náhodný jev, pro libovolný náhodný jev A definujeme vztah a čteme jako podmíněná pravděpodobnost jevu A za podmínky (nastoupení jevu) H. 55

57 P(A/H) = P(A H) P(H) Bayesova věta (vzorec) Využíváme jej, když známe podmíněnou pravděpodobnost P(B/A) a chceme zjistit pravděpodobnost P(A/B). P(A/B) = P(B/A) P(A) P(B) 56

58 Příklad: Dva střelci vystřelí každý jednu ránu na terč. První má pravděpodobnost zásahu 80%, druhý 60%. V terči se našla jedna rána. Jaká je pravděpodobnost, že patří prvnímu střelci? Pst. trefí se první P(S 1 ) = 0,8 Pst. trefí se druhý P(S 2 ) = 0,6 Jev A trefí se první V terči jeden zásah (trefí se první a druhý ne nebo se netrefí první a druhý ano) P(H) = 0,8 0,4 + 0,2 0,6 = 0,44 P(A/H) = 0,8 0,6 0,44 Pravděpodobnost, že střela patřila prvnímu střelci je 73%. = 0.73 Pravděpodobnost průniku a sjednocení jevů Mají-li elementární jevy A, B neprázdný průnik, potom je pravděpodobnost započítána dvakrát a je nutné ji odečíst. P(A B) = P(A) + P(B) P(A B) Pokud se jedná o více náhodných jevů, mluvíme o principu inkluze a exkluze. P(A B C) = P(A) + j(b) + j(b) P(A B) P(A C) P(B C) + P(A B C) Jsou-li jevy A, B neslučitelné (mají prázdný průnik), pak Průnik u dvou závislých jevů je roven P(A B) = P(A) + P(B) Průnik dvou neslučitelných jevů je pak roven P(A B) = P(A/B) P(B) P(A B) = P(A) P(B) Distribuční funkce distribuční funkcí náhodné veličiny X je funkce F: R R definovaná pro všechny xεr a vztahem F(x) = P(X x) Diskrétní náhodná veličina X X na pravděpodobnostním prostoru (Ω; A; P) nabývá jen konečně mnoha hodnot x 1, x 2,, x n R. Pak existuje tzv. pravdepodobnostní funkce f(x) taková, že f(x) = P(X = x ) x = x, jinak n f(x ) =

59 a pro rozdělení pravděpodobnosti platí distribuční funkce je ve tvaru P(X 1 B) = f(x ) B F (t) = f(x ) Každá náhodná veličina definovaná pro klasickou pravděpodobnost je diskrétní. Diskrétní veličinu si můžeme představit jako graf složený z bodů, které odpovídají pravděpodobnosti daného jevu (pro házení kostkou je to 1/6) Sečtení hodnot bodů musí dát 1. Distribuční funkce F v bodě 3 se vlastně rovná součtu pravděpodobnostních hodnot do tohoto bodu, tedy = 1 2 Spojité náhodné veličině odpovídá spojitá distribuční funkce. f(x) je funkce hustoty pravděpodobnosti Funkce hustoty pravděpodobnosti F(x) = P(A X B) = f(x)dx Nechť X je náhodná veličina, F(x) je její distribuční funkce. 1. F je zleva spojitá, lim = 0 a lim = Vždy platí P(a X b) = F(b) F(a). 3. Je-li X diskrétní s hodnotami x 1, x 2,, x n, pak je F(x) po částechk onstantní, F(x) = P(X = x ) a F(x = 1) kdykoliv x > x n. 4. Je-li X spojitá, pak je F (x) diferencovatelná a její derivace se rovná hustotě pravděpodobnosti X, tj. platí. F (x) = f(x) a b Spojitou veličinu si můžeme představit jako spojitý graf (když například zobrazujeme výšku lidí) 58

60 Plocha pod křivkou musí mít obsah 1. Distribuční funkce se proto vyjadřuje jako integrál. Rozdělení náhodných veličin Náhodná veličina X na pravděpodobnostním prostoru (Ω; A; P) je taková funkce X Ω R, že vzor X 1 (B) patří do A pro každou Borelovskou množinu B ε na R (tj. X Ω R, je tzv. borelovsky měřitelná). Zavádíme ji, protože chceme pracovat s intervaly - vyjádřit, jaká je pravděpod., že daná hodnota bude právě z tohoto intervalu. Množinová funkce P (B) = P(X 1 (B)) se nazývá rozdělení pravděpodobnosti náhodné veličiny X. Je pravidlo, které přiřazuje pravděpodobnosti událostem nebo tvrzením. Náhodný vektor (X1; ; Xk ) na (Ω; A; P) je k-tice náhodných veličin. Diskrétní rozdělení pravděpodobností (definováno na spočetné, diskrétní množině, jako je podmnožina celých čísel) - např. binomické, Poissonovo Spojité rozdělení (existuje spojitá distribuční funkce, např. polynomická nebo exponenciální) - např. normální rozdělení, exponenciální rozdělení Příklady spojitých a diskrétních rozdělení Diskrétní Řadíme sem například Alternativní (Bernoulliovo) rozdělení, Binomické rozdělení, Poissonovo rozdělení Alternativní (Bernoulliovo) rozdělení Pokud náhodná veličina X má alternativní rozdělení pravděpodobnosti, zapisujeme to ve tvaru X~A(p) a zápis čteme náhodná veličina X má alternativní rozdělení s parametrem p. Použití při náhodném pokusu, který má dva číselné výsledky úspěch s pravděpodobností p a neúspěch s pravděpodobností 1 p. 1 p pro x = 0 p(x) = P(X = x) = { p pro x = 1 0 jinde 59

61 F(x) = P(X x) = { 0 pro x 0 1 p pro x (0,1 1 x > 1 Degenerované rozdělení Je speciální případ rozdělení alternativního, kdy X~ ( ) Binomické rozdělení X má binomické rozdělení pravděpodobnosti, zapisujeme to ve tvaru X~Bi(n, p), kde n b N a p ε (0; 1). Odpovídá n-krát nezávisle opakovanému pokusu popsanému alternativním rozdělením, přičemž naše náhodná veličina měří počet zdarů. p(x) = { F(x) = ( n x ) p (1 p) n pro x = 0,, n 0 jinde 0 pro x 0 ( n t ) p (1 p) n pro xε(0, n) { <, N 0 1 pro x > n Poissonovo rozdělení X má Poissonovo rozdělení, značíme X~Po(λ), kde λ > 0. Dobře aproximuje binomická rozložení pro λ > 0konstantní a veliká n. Poissonovo rozdělení se obvykle užívá pro vyjádření pravděpodobnosti počtu nastoupení sledovaného jevu v určitém intervalu. p(x) = { e λ ( λ x ) 0 jinde pro x = 0,1, Spojité sem patří rovnoměrné rozdělení, exponenciální rozdělení, normální rozdělení, Pearsonovo rozdělení Rovnoměrné rozdělení X má rovnoměrné rozdělení, značíme X~R(a, b), kde a, b R a a Normální rozdělení f(x) = { F(x) = { 1 b a pro x a, b 0 jinde 0 pro x a x a pro xε(a, b b a 1 pro x > b b 60

62 X má normální rozdělení, značíme X~N(μ, σ 2 ), kde μ je střední hodnota E(X) a σ 2 je rozptyl (X). Normální rozdělení je používaným modelem v aplikacích, které interpretují náhodné výsledky jako aditivní výsledek mnoha nezávislých jevů. binomické Bi(n, p) pro velké n konverguje k normálnímu N(n p, n p (1 p)) f(x) = 1 ( μ) 2 σ 2π e 2σ 2 xεr Což odpovídá Gaussově křivce rozdělení s touto hustotou se nazývá normální rozdělení N(0,1) F(x) = 1 σ 2π e ( μ) 2 2σ 2 dt xεr Exponenciální rozdělení X má exponciální rozdělení, značíme X~Exp(A, δ), kde A R a δ > 0 f( ) = {δ e δ ro > jinde Popisná statistika Popisná statistika (deskriptivní statistika) se zabývá popisem stavu nebo vývoje hromadných jevů. Nejprve se vymezí soubor prvků, na nichž se bude uvažovaný jev zkoumat. Následně se všechny prvky vyšetří z hlediska studovaného jevu. Výsledky šetření kvalitativní i kvantitativní, vyjádřeny především číselným popisem tvoří obraz studovaného hromadného jevu vzhledem k vyšetřovanému souboru. Statistický soubor je množina všech prvků, které jsou předmětem daného statistického zkoumání. Každý z prvků je statistickou jednotkou. Prvky tvořící statistický soubor mají určité společné vlastnosti - tzv. identifikační znaky - umožňující určit, zda prvek do daného statistického souboru patří nebo nepatří. Identifikační znaky tedy statistický soubor vymezují. Střední hodnota Při rovnoměrném rozdělení je střední hodnotou aritmetický průměr. Střední hodnota diskrétní náhodné veličiny X s pravděpodobnostní funkcí p (x) nenulovou pouze pro x, kde i, je definována jako E(X) = x p (x) = x p (x ) Střední hodnota spojité náhodné veličiny X s hustotou f (x) je definována jako E(X) = x f (x)dx 61

63 Rozptyl Rozptylem náhodné veličiny X, která má konečnou střední hodnotu, nazýváme číslo (X) = var X = E([X E(X)] 2 ) pro výpočet se však více hodí (X) = E(X 2 ) E 2 (X) kde E 2 (X) je značení (E(X)) 2 udává, jak jsou hodnoty daleko od střední hodnoty, udává se v jednotkách na druhou, proto se také 2 zavedla výběrová směrodatná odchylka, která se rovná (x), která má hodnotu v jednotkách Medián Je-li F (x) spojitá rostoucí distribuční funkce veličiny, pak zjevně ( ) = F 1 (1 ). Pro normální rozdělení splňuje distribuční funkce tento požadavek. Takto definovaným hodnotám ( ) se říká kritické hodnoty. Kritické hodnoty jsou dány pomocí tzv. kvantilové funkce Medián je speciální případ kvantilu ε 0,1 a F 1 ( ) = inf{f(x) a} Kvantily: = 0,5 medián = 0,25 doln kvartil nebo medián prvn poloviny = 0,75 horn kvartil nebo medián druhé poloviny 62

64 Matematická analýza Vlastnosti reálných funkcí, polynomy, spojité funkce a limity, derivace, neurčitý a určitý integrál. Elementární diferenciální rovnice a jejich aplikace, funkce více proměnných, parciální derivace. 63

65 Vlastnosti reálných funkcí Funkce je v matematice název pro zobrazení z nějaké množiny M do množiny čísel (většinou reálných nebo komplexních), nebo do vektorů (pak se mluví o vektorové funkci). Je to tedy předpis, který každému prvku z množiny M jednoznačně přiřadí nějaké číslo nebo vektor (hodnotu funkce). Někdy se však slovo funkce používá pro libovolné zobrazení. (neformální definice) f je funkce a M (f) podmnožina definičního oboru funkce f funkce f je na množině M: zdola ohraničená, jestliže d R takové, že pro x M platí d f(x) graf takové funkce leží nad nějakou vodorovnou přímkou shora ohraničená, jestliže h R takové, že pro x Mplatí f(x) h graf takové funkce leží pod nějakou vodorovnou přímkou ohraničená, je-li na M ohraničená zdola i shora. graf takové funkce leží mezi nějakými dvěma vodorovnými přímkami sudá, pokud pro x (f) platí, že x (f) f( x) = f(x) graf takové funkce je symetrický podle osy y lichá, pokud pro x (f) platí, že x (f) f( x) = f(x) graf takové funkce je symetrický podle počátku periodická s periodou p, pokud pro x (f) platí: x + p (f) f(x) = f(x + p) rostoucí, pokud pro x1, x2 M splňující x1 x2 platí f(x1) f(x2) klesající, pokud pro x1, x2 M splňující x1 x2 platí f(x1) > f(x2) ryze monotónní na množině M, je-li buď rostoucí, nebo klesající (ne obojí najednou!) neklesající, pokud pro x1, x2 M splňující x1 x2 platí f(x1) f(x2) nerostoucí, pokud pro x1, x2 M splňující x1 x2 platí f(x1) f(x2) monotónní na množině M, je-li buď nerostoucí, nebo neklesající (ne obojí najednou!) konstantní, pokud pro x1, x2 M splňující x1 x2 platí f(x1) = f(x2) prostá, pokud pro x1, x2 M splňující x1 x2 platí f(x1) f(x2) graf takové funkce protínají všechny vodorovné přímky pouze jednou Nechť f je prostá funkce. Funkci f -1, která každému y H(f) přiřazuje právě to x y = f (x), nazýváme inverzní funkcí k funkci f grafy funkcí f a f -1 jsou symetrické podle osy prvního kvadrantu (f), pro které platí Nespecifikujeme-li množinu M, máme na mysli, že uvedená vlastnost platí na celém definičním oboru funkce f. Polynomy Definice: Funkci P(x) = a nx n + a n-1x n a 1x + a 0, kde a n 0, a 0,..., a n R nazýváme polynom stupně n. Čísla a 0,..., a n nazýváme koeficienty polynomu P(x). Koeficient a 0 se nazývá absolutní člen. Definice: Polynom se všemi koeficienty nulovými se nazývá nulový polynom. Stupeň nulového polynomu definujeme hodnotou -1. Stupeň polynomu p značíme St(p). Pro nenulové polynomy p a q platí: St(p + q) ma (St(p), St(q)), St(p. q) = St(p) + St(q). Násobení polynomů Součin dvou polynomů P(x) a Q(x), které mají koeficienty a 0, a 1,, a m a b 0, b 1,, b m, je polynom, který má koeficienty c 0, c 1,, c m+n takové, že: c k = a 0 b k + a 1 b k a k b 0, přičemž klademe a = 0 pro i > m a b = 0 pro i > n 64

66 Dělení polynomu polynomem se zbytkem Věta: Pro polynomy p a q (polynom q nenulový) existují polynomy r a takové, že p = rq +, neboli p: q = r +, kde St( ) St(q). Polynomu r říkáme částečný podíl a polynomu říkáme zbytek při dělení polynomu p polynomem q. Příklad: Kořeny polynomů Definice: Kořenem polynomu P(x) je číslo x 0 C, pro které platí P(x 0 ) = 0. Základní věta algebry: Polynom stupně n má právě n komplexních kořenů. Kvadratická rovnice ax 2 + bx + c má právě dva kořeny: x 1,2 = b b2 4ac 2a Věta: Je-li celočíselný kořen polynomu p s celočíselnými koeficienty, pak dělí koeficient a 0. Je-li C kořen polynomu p s reálnými koeficienty, pak (komplexně sdružené číslo k číslu ) je také kořen polynomu p, dokonce stejné násobnosti. Věta: Nechť k N, k 2. Kořen polynomu P(x) je k-násobným kořenem právě tehdy, když je (k 1)- násobným kořenem polynomu P (x). Rozklad polynomu na kořenové činitele Je-li x 0 kořenem polynomu, pak lineární polynom (x - x 0) s proměnnou x nazýváme kořenový činitel příslušný kořenu x 0. Číslo x 0 je k-násobným kořenem polynomu P, jestliže P(x) = (x - x 0) k G(x), kde G je polynom a x 0 již není jeho kořenem. Hornerovo schéma Hornerovo schéma se používá k vypočtení funkční hodnoty daného polynomu v daném bodě. V případě, že je funkční hodnota nulová, je dané číslo kořenem polynomu. Věta: Nechť f(x) = a n n + a n 1 x n a 1 x + a 0, g(x) = b n 1 x n 1 + b n 2 x n b 1 x + b 0 jsou polynomy. Je-li f(x) = (x )g(x) + b 1, pak platí a = 1 a 1 = + a, pro k = 0, 1,..., n 1. Příklad: str Výpočet popsán zde je demonstrován na monickém (normovaném) polynomu tj. takový, který má koeficient nejvyššího členu roven 1 (a n = 1). Pro hledání reálných kořenů na obecném polynomu jsou potenciální kořeny ve tvaru, kde r d l a 0 a s d l a n. Polynom nad tělesem Číselné obory Q, R a C jsou příklady takzvaných těles. Těleso značme. Pokud polynom má koeficienty jen z a definiční obor je také z (tj. za formální proměnnou x dosazujeme pouze čísla z ), pak hovoříme o polynomu nad tělesem. Definice: Polynom p nad tělesem je ireducibilní v, pokud jej není možné rozložit na součin polynomů r, s nad stupně alespoň prvního. Takže nemůže platit p = rs. Pokud je možné polynom výše zmíněným způsobem rozložit říkáme mu reducibilní v. Spojité funkce a limity Okolí bodu Okolím bodu x0 R rozumíme libovolný otevřený interval I, který tento bod obsahuje. Nejčastěji se používá interval, jehož je bod x 0 středem. Takovýto interval nazýváme δ-okolím bodu x0 a značíme jej O δ (x0). Jestliže z δ -okolí bodu x0 vyjmeme bod x0, mluvíme o ryzím δ-okolí bodu x0 a budeme jej značit Ô δ (x0). Pravým ryzím δ-okolím bodu x0 rozumíme otevřený interval + (x 0 ) = (x 0, x 0 + δ). Levým ryzím δ-okolím bodu x0 rozumíme otevřený interval (x 0 ) = (x 0 δ, x 0 ). 65

67 Limita funkce Nechť x0, L R a f : R R je funkce f definovaná v nějakém ryzím okolí bodu x0. Řekneme, že funkce f má v bodě x0 limitu rovnu číslu L, jestliže pro ε > 0: δ > 0 takové, že pro x Ôd(x0) platí f (x) Oε(L). Píšeme lim 0 ( ) =. Jednostranná limita Nechť x0, L R a f : R R je funkce f. Dále nechť je funkce f definovaná v nějakém pravém ryzím okolí bodu x0. Řekneme, že funkce f má v bodě x0 limitu zprava rovnu číslu L, jestliže pro ε > 0: δ > 0 takové, že pro x + (x0) platí f (x) Oε(L). Píšeme lim f(x) =. 0 Analogicky definujeme limitu zleva. Věta: Funkce má v každém bodě nejvýše jednu limitu (limitu zprava, limitu zleva). Věta: Funkce má v bodě x0 R limitu právě tehdy když lim f(x) = lim f(x). 0 0 Rozšířená množina reálných čísel R * - množina reálných čísel R rozšířená o body ±, tedy R * = R {-, } Prvky ± nazýváme nevlastní body, body množiny R nazýváme vlastní body. Pro a R definujeme: a + = a - = - + = - - = - a. = -. (- ) =. (- ) = - - a < = o a > 0 nav c: a. = a. (- ) = - o a 0 nav c: a. = - a. (- ) = Ne čité vý a (ted takové, kte é jso nede inované): -. 0 Nevlastní limita Říkáme, že funkce f(x) má v bodě x 0 nevlastní limitu + (- ), jestliže pro x Ô δ(x0) platí f(x) > M (resp. f(x) < -M). Píšeme lim ( ) = + ( ). 0 o M > 0 existuje δ > 0 takové, že Aby existovala limita v bodě x 0 R, nemusí být funkce f v bodě x 0 definovaná. Například limita funkce lim existuje, i když tato funkce není definovaná v bodě 0. Funkce naopak musí být definovaná v 0 nějakém ryzím okolí (nebo jednostranném ryzím okolí, v případě jednostranné limity) bodu a. Není tedy definovaná například lim 1 3x 2 nebo lim ln (x) 1 0 Limita v nevlastním bodě Říkáme, že funkce f (x) má limitu L v nevlastním bodě + ( ), jestliže pro ε > 0 existuje K > 0 takové, že pro x > K (resp. x < K) platí f (x) O ε(l). Spojitost funkce Řekneme, že funkce f : R R je spojitá v bodě x 0, jestliže x0 D( f ) a lim 0 (x) = f(x 0 ). 66

68 Řekneme, že funkce f : R R je spojitá zprava (spojitá zleva) v bodě x 0, jestliže x0 D( f ) a lim (x) = f(x 0 ) ( lim (x) = f(x 0 )). 0 0 Řekneme, že funkce f : R R je spojitá na intervalu (a,b), <a,b), (a,b>, <a,b>, je-li spojitá v každém jeho vnitřním bodě a v krajních bodech (pokud tam patří) je spojitá zleva resp. zprava. Věta: Spojitá funkce nabývá v uzavřeném intervalu <a,b> své nejvyšší a nejnižší hodnoty a také všech hodnot mezi nimi. Věta: Nechť f (x) je spojitá funkce v uzavřeném intervalu <a, b> a platí f (a) f (b) < 0. Pak existuje alespoň jedno číslo c (a, b) takové, že f (c) = 0. Pravidla pro počítání s limitami Bud a R *, k R, f, g : R R. Jestliže mají f a g v bodě a limitu, pak platí: Zobecněním pravidel lze získat linearitu limity: lim a k 1 f 1 (x) + + k n f n (x) = k 1 lim a f 1 (x) + + k n lim a f n (x) Věta: Je li funkce g spojitá, pak platí: lim g (f(x)) = g( lim f(x)). Totéž platí i pro jednostranné limity. 0 0 Dále tedy například platí: Výpočet limity funkce V bodě, ve kterém je funkce definovaná a spojitá vypočteme limitu přímým dosazením. V bodě, ve kterém funkce není definovaná nebo není spojitá, mohou dosazením vznikat výrazy typu: 1. k, které vedou k nevlastní limitě nebo 0, což jsou neurčité výrazy, které lze řešit pomocí úprav nebo L Hospitalova pravidla (viz derivace) 67

69 Derivace L Hospitalovo pravidlo Věta: Předpokládejme, že f a g jsou funkce diferencovatelné v okolí bodu x0 R, ne však nutně v bodě x0 samotném, a nechť existují limity lim 𝑓(𝑥) = 0, lim 𝑔(𝑥) = 0. Jestliže existuje limita lim ( ) 0 ( ) existuje i limita lim ( ), ( ) pak a jsou si rovny. Pravidla pro úpravu neurčitých výrazů: Derivace funkce Nechť x0 D( f ). Řekneme, že funkce f má v bodě x0 derivaci rovnu f (x0), jestliže existuje konečná limita 𝑓 (𝑥0 ) = lim 0 ( 0 + ) ( 0 ). Neexistuje-li tato limita, říkáme, že funkce f(x) nemá v bodě x0 derivaci. Geometrický význam derivace: ( + ) ( ) 0 Sečna ke grafu funkce f procházející body [x0, f (x0)] a [x0 + h, f (x0 + h)] má směrnici 0. Jestliže se s bodem (x0+h) blížíme k bodu x0 (tj. provádíme-li limitní přechod lim ), přejde sečna v tečnu v bodě [x0, 0 f (x0)]. Limitní hodnota, tj. směrnice tečny, je potom rovna derivaci f (x0). Má-li funkce f v bodě x0 derivaci, je rovnice tečny ke grafu funkce v bodě [x0, f (x0)]: 𝑦 = 𝑓 (𝑥0 )(𝑥 68 𝑥0 ) + 𝑓 (𝑥0 )

70 Definice: Nechť má funkce f derivaci v každém bodě otevřeného intervalu I. Předpisem, který každému bodu x z intervalu I přiřadí derivaci funkce f v bodě x je na I definována funkce, kterou nazýváme derivací funkce f na intervalu I a označujeme f. Často označujeme derivaci mimo f také jako y nebo. Funkci, která má v bodě x0 resp. na intervalu I derivaci, nazýváme diferencovatelnou v bodě x0 resp. na intervalu I. Derivace elementárních funkcí: Pravidla pro derivování: Pro složenou funkci platí: [ f (g(x))] = f (g(x))g (x), kde existence derivace funkce vlevo plyne z existence funkcí vpravo. (f (g(x)) znamená derivaci funkce f vypočtenou v bodě g(x) ). Diferenciál funkce Nechť funkce f (x) je spojitá v nějakém okolí O(x 0) bodu x 0 a nechť existuje derivace f (x 0). Nechť x 0 + h O(x 0). Diferenciálem funkce f (x) v bodě x 0 rozumíme výraz d f (x 0) = f (x 0) h. Pro různé hodnoty h dostáváme různé hodnoty diferenciálu d f (x 0). Diferenciál d f (x 0) je tedy funkcí proměnné h (evidentně funkcí lineární). Pokud budeme uvažovat obecný bod x, v němž existuje derivace f 69

71 (x), bude diferenciál d f (x) funkcí dvou proměnných x a h. Protože pro funkci f (x) = x platí d f (x) = dx = 1 h, můžeme použit vztahu h = dx pro obvyklý historický zápis diferenciálu a derivace funkce y = f (x): d f (x) = dy = f (x)dx, tj. f (x) = d d Derivace vyšších řádů Derivací 2. řádu (druhou derivací) funkce f (x) nazýváme funkcí (f ), tj. derivací první derivace funkce y = f (x). Podobně derivaci 3. řádu definujeme jako derivaci 2. derivace. Definice: Derivaci n-tého řádu funkce f (x) definujeme jako derivaci derivace řádu n 1, tj. f (n) = [f (n 1) (x)] Vyšší derivace označujeme f, f, f (4), f (5),, f (n) nebo y, y, y (4), y (5),, y (n) nebo Monotónnost funkce, lokální extrémy Věta: Nechť f (x) je na <a, b> spojitá a má derivaci v každém jeho vnitřním bodě. Pak platí: Funkce f (x) je na <a, b> konstantní x (a, b) platí f (x) = 0. Funkce f (x) je na <a, b> rostoucí x (a, b) platí f (x) > 0. Funkce f (x) je na <a, b> klesající x (a, b) platí f (x) < ,,, n Definice: Řekneme, že f (x) má v bodě x 0 lokální maximum (minimum), resp. lokální extrém, jestliže x z nějakého okolí x 0 platí f (x) f (x 0) (f (x) f (x 0)). Pokud pro x x 0 platí ostré nerovnosti, nazýváme lok. extrém ostrým. Věta: Má-li funkce f v x 0 lokální extrém, pak f (x 0) = 0 nebo derivace f (x 0) neexistuje. Definice: Je-li f (x 0) = 0, pak bod [x 0, f (x 0)] nazýváme stacionárním bodem. Věta: Nechť f (x 0) = 0 a f (x 0) 0. Pak má f (x) v x 0 lokální extrém, a to: lokální maximum, je-li f (x 0) < 0 lokální minimum, je-li f (x 0) > 0 Konvexnost, konkávnost, inflexní body Definice: Funkci nazveme konvexní (konkávní) v bodě x 0, jestliže její graf leží v okolí x 0 nad (pod) tečnou v tomto bodě. Funkci nazveme konvexní (konkávní) na intervalu I, je-li konvexní (konkávní) v každém jeho bodě. Věta: Nechť f (x) je diferencovatelná na (a, b). Pak: jestliže x (a, b) platí f (x) > 0 f je konvexní na (a, b) jestliže x (a, b) platí f (x) < 0 f je konkávní na (a, b) Definice: Funkce f má v bodě x 0 inflexní bod, jestliže má v x 0 tečnu a f (x) zde mění znaménko (graf funkce přechází z konvexnosti do konkávnosti nebo naopak). Důsledek: Funkce f (x) může mít inflexní bod v takovém bodě x 0 kde f (x 0) = 0 nebo kde f (x 0) neexistuje. Mnemotechnická pomůcka: konkávní průběh jako hlavní linka písmene A konvexní průběh jako linka písmene V Asymptoty funkce Definice: Asymptota je přímka, která je tečnou ke grafu funkce v některém nevlastním bodě. Věta: Funkce má: asymptotu bez směrnice x = x 0 má f v bodě x 0 nevlastní limitu zleva nebo zprava n.

72 ( ) asymptotu se směrnicí y = kx + q pro x ± k = lim R a = lim (f(x) kx) R Postup při vyšetřování průběhu funkce 1. Určíme D(f), sudost, resp. lichost, periodičnost funkce a průsečíky grafu funkce se souřadnými osami. Najdeme intervaly, kde je funkce kladná a kde záporná. 2. Vyšetříme chování funkce v nevlastních bodech a najdeme asymptoty. 3. Vypočteme f, najdeme stacionární body, intervaly monotónnosti a nalezneme lokální extrémy. 4. Vypočteme f, najdeme kritické body, intervaly konvexnosti a konkávnosti a nalezneme inflexní body. 5. Načrtneme graf. Taylorův polynom Funkční hodnotu dovedeme přesně vypočítat pouze u polynomů a racionálních lomených funkcí s racionálními koeficienty. U ostatních funkcí je třeba použít pro výpočet numerické hodnoty některou z aproximačních metod. Základní aproximační metodou je použití Taylorova polynomu příslušného dané funkci. Definice: Nechť funkce f má v okolí bodu x 0 spojité derivace až do řádu n+1. Taylorovým polynomem n-tého stupně příslušným funkci f (x) v bodě x 0 rozumíme polynom: ( 0 ) ( 0 ) ( ) (x) = f(x 0 ) + (x x 1 0 ) + (x x 2 0 ) 2 ( 0 ) + + (x x n 0 ) n Taylorův polynom stupně n má v bodě x 0 stejnou funkční hodnotu a také všechny derivace až do řádu n jako funkce f, tj. n(x 0 ) = f(x 0 ) n (x 0 ) = f (x 0 )... (n) (x 0 ) = f (n) (x 0 ) n Taylorův rozvoj stupně 1, 3, 5, 7, 9, 11 a 13 funkce sin(x). Sin(x) je vyznačen černě. Věta (Taylorova věta): Nechť funkce f má v okolí O(x 0) bodu x 0 spojité derivace až do řádu n +1. Pak existuje vhodné číslo c, které leží mezi x 0 a x takové, že x O(x 0 ) platí f (x) = n(x) + R n+1 (x), Kde n (x) je Taylorův polynom a R n+1 (x) je polynom stupně alespoň n + 1 v proměnné (x x 0 ), které nazýváme zbytkem. Zbytek může být např. ve tvaru: 71

73 R n+1 (x) = f(n) (c) (n + 1) (x x 0) n+1 Neurčitý a určitý integrál Neurčitý integrál funkcí jedné proměnné Definice: Buď I otevřený interval, f a F funkce definované na I. Jestliže platí F (x) = f (x) pro x I, nazývá se funkce F primitivní funkcí k funkci f, nebo též neurčitý integrál funkce f na intervalu I. Zapisujeme f(x)dx = F(x). Z existence derivace primitivní funkce F(x) vyplývá, že je vždy spojitá na I. Věta: (postačující podmínka existence neurčitého integrálu): Ke každé spojité funkci existuje neurčitý integrál. Věta: (jednoznačnost primitivní funkce): Primitivní funkce je na daném intervalu k dané funkci určena jednoznačně, až na libovolnou aditivní konstantu. Přesněji, platí následující: 1. Je-li F primitivní funkcí k funkci f na intervalu I, platí totéž i pro funkci G(x) = F(x) + c, kde c R je libovolná konstanta nezávislá na x. 2. Jsou-li F a G primitivní funkce k téže funkci f na intervalu I, liší se obě funkce na intervalu I nejvýše o aditivní konstantu, tj. existuje c R takové, že F(x) = G(x) + c pro všechna x. Základní vzorce a pravidla pro integrování Základní vzorce pro nalezení primitivní funkce vyplývají ze vztahů pro derivace elementárních funkcí a jsou dány následujícími vztahy. Primitivní funkce jsou definovány pro všechna x z definičního oboru integrované funkce: Věta: Nechť f, g jsou funkce integrovatelné na I, c nechť je reálné číslo. Pak na intervalu I platí: f(x) + g(x)dx = f(x)dx + g(x)dx cf(x)dx = c f(x)dx Věta: (speciální případ složené funkce): Nechť f je funkce integrovatelná na. Pak: f(ax + b)dx = 1 a F(ax + b), Kde F je funkce primitivní k funkci f na intervalu. Platí pro ta x, pro která je ax + b. 72

74 Metoda per partés (po částech) Umožňuje derivovat některé součiny. Vychází z pravidla pro derivaci součinu. (uv) = u v + uv (uv) dx = u vdx uv dx uv = u vdx uv dx d = d Metodou per-partés integrujeme například integrály následujících typů (P(x) je polynom): P(x) e dx, P(x) sin( x) dx, P(x) cos( x) dx Zde postupujeme, tak že derivujeme polynom, čímž snížíme jeho stupeň, v případě potřeby tento postup opakujeme. P(x)arctg(x)dx, P(x)ln m (x)dx Zde naopak derivujeme funkce arctg(x) a ln(x). Substituční metoda Věta: Nechť f(t) je funkce spojitá na intervalu I, nechť funkce j(x) má derivaci na intervalu J a platí j(j) =. Potom na intervalu J platí: f(φ(x))φ (x)dx = f(t)dt, dosadíme-li napravo t = φ(x). Formálně substituci provádíme tak, že píšeme v integrálu vpravo t místo φ(x) a dt místo φ (x)dx. Věta:Nechť f (x) je funkce spojitá na intervalu I, nechť funkce j(t) má nenulovou derivaci na intervalu J a platí j(j) =. Potom na intervalu I platí: f(x)dx = f(φ(t))φ t dt, dosadíme-li napravo t = φ 1 (x), kde φ 1 (x) je funkce inverzní k funkci φ(x). Existence inverzní funkce j 1 plyne z nenulovosti derivace funkce j. Výraz napravo sice vypadá komplikovaněji, v praxi však substituci volíme vždy tak, aby po úpravě vpravo vyšel integrál jednodušší, který umíme vypočítat. Vidíme, že u druhé substituční metody se vlastně jedná o použití vzorce z první metody zprava doleva. Integrace racionálních lomených funkcí Ryze lomená funkce je funkce, jejíž stupeň polynomu v čitateli je menší než stupeň polynomu ve jmenovateli. Při integraci neryze lomené funkce vždy rozkládáme funkci na součet polynomu a ryze lomené funkce, a to pomocí dělení polynomů se zbytkem nebo trikovým doplněním čitatele. Polynom pak integrujeme a ryze lomenou funkci rozkládáme na jednodušší ryze lomené funkce, tzv. parciální zlomky. ( Dostaneme jednoduché integrály. Které řešíme substitucí, nebo pomocí vzorců viz str Integrace goniometrických funkcí R(cos(x))sin(x)dx zavádíme substituci t = cos(x). R(sin(x))cos(x)dx zavádíme substituci t = sin(x). R(sin x) resp. R(cos x) jsou racionální lomené funkce jen v sinu resp. kosinu. Většinou je třeba integrand na tento typ převést užitím goniometrických vzorců nebo rozšířením zlomku. Univerzální metodou k výpočtu R(sin x, cos x) dx je substituce t = tg 2. V případě pouze sudých mocnin funkcí sinus a kosinus je jednodušší substituce t = tg x. 73

75 Určitý integrál Určitý integrál slouží k přesnému stanovení obsahu útvaru omezeného křivkou y = f (x) a osou x na intervalu <a,b>. Řekové počítali přibližně obsah plochy pod křivkou y = f (x) tak, že útvar rozsekali na kousky, které byly podobné obdélníkům, spočítali jejich obsahy a sečetli je. Rozdělíme tedy interval <a,b> na dílky a = x 0 x 1 x n = b. Na obrázku je n = 6. Obsah i-tého obdélníku je přibližně f( i)(x x 1), kde i (x 1, x ) je tzv. reprezentant. n Součet všech obdélníků a přibližný obsah útvaru je S n = 1 f( i)(x x 1). Tomuto číslu dnes říkáme integrální součet. Je zřejmé, že na našem obrázku dostaneme pro n > 6 přesnější odhad obsahu útvaru pod křivkou. Za použití limitního přechodu n mají dílky dělení délku x = x x 1 konvergující k 0 a označujeme je dx (diferenciál x). Formálně dostáváme zápis: n b f( i) x f(x)dx 1 a Znak integrálu původně opravdu znamenal protáhlé písmeno S suma. Definice: Buď <a, b> uzavřený interval a f funkce definovaná a ohraničená na <a, b>. Řekneme, že funkce f je integrovatelná na intervalu <a, b>, jestliže existuje číslo I, které je limitou = lim S n = lim f( i) x n n 1 pro libovolnou posloupnost dělení s délkou dílků konvergující k 0, při libovolné volbě reprezentantů. Číslo I nazýváme určitý integrál funkce f na intervalu <a, b> a označujeme b n f(x)dx a Newton-Leibnitzova formule Věta: Nechť funkce f (x) je integrovatelná na <a, b>. Nechť F(x) je funkce spojitá na <a, b>, která je na intervalu (a, b) primitivní k funkci f (x). Pak platí b f(x)dx = [F(x)] b a = F(b) F(a) a (Při výpočtu pomocí této formule je nutné zkontrolovat podmínku spojitosti funkce F(x) na intervalu <a, b>). 74

76 Vlastnosti určitého integrálu Geometrická aplikace určitého integrálu Obsah rovinné plochy omezené spojitou nezápornou funkcí y = f(x), osou x a přímkami x = a a x = b: b S = f(x) dx a Obsah rovinné plochy omezené spojitými funkcemi y = d(x) a y = h(x), které na intervalu <a,b> splňují d(x) h(x), a přímkami x = a a x = b: b S = h(x) d(x) dx a Objem rotačního tělesa vzniklého rotací plochy omezené spojitou nezápornou funkcí y = f(x), osou x a přímkami x = a a x = b: b = π f 2 (x) dx a Objem rotačního tělesa vzniklého rotací plochy omezené spojitými funkcemi y = d(x) a y = h(x), které na intervalu <a,b> splňují d(x) h(x), a přímkami x = a a x = b: b = π h 2 (x) d 2 (x) dx Délka rovinné křivky y = f(x), x <a,b>, která je na intervalu <a,b> diferencovatelná a b = 1 + [f (x)] 2 dx a Obsah pláště rotačního tělesa vzniklého rotací plochy omezené spojitou nezápornou funkcí y = f(x), osou x a přímkami x = a a x = b b P = 2π f(x) 1 + [f (x)] 2 dx a Nevlastní integrál Nevlastní integrál je rozšířením pojmu určitého integrálu. Určitý integrál je definovaný pouze pro ohraničené funkce a konečné obory integrace. Body, ve kterých funkce není ohraničená a nevlastní body ±, budeme souhrnně nazývat singularitami. b Integrál f(x)dx nazýváme nevlastní, pokud alespoň jedno z čísel a, b je rovno ±, nebo funkce f(x) a není ohraničená na uzavřeném intervalu <a,b> (tj. alespoň v jednom bodě intervalu funkce má singularitu - nemusí jít vždy o body a nebo b, ale singulární bod může být i uvnitř intervalu). Následující definice je současně i návodem, jak nevlastní integrál vypočítat. Definice: Nech f(x) má singularitu v horní mezi b (resp. dolní mezi a). Existuje-li konečná limita lim f(x)dx (resp. lim f(x)dx) b a a říkáme, že nevlastní integrál konverguje (existuje) a definujeme 75 b

77 b f(x) dx a b resp. f(x) dx a = lim b = lim a f(x)dx a b f(x)dx b Pokud limita neexistuje nebo je nevlastní, říkáme, že integrál f(x) dx a neexistuje. Elementární diferenciální rovnice a jejich aplikace Základní dělení diferenciálních rovnic je podle typu obsažených derivací: Obyčejné diferenciální rovnice (ODR): obsahují derivace hledané funkce jen podle jedné proměnné. Parciální diferenciální rovnice (PDR): obsahují derivace hledané funkce podle více proměnných, tedy parciální derivace. Pokud je dáno m diferenciálních rovnic pro n neznámých funkcí, pak hovoříme o soustavě diferenciálních rovnic. Řád diferenciální rovnice je řád nejvyšší derivace, která je v ní obsažená. Za řád soustavy diferenciálních rovnic považujeme hodnotu nejvyšší derivace, která se v soustavě vyskytuje. Podle řádu bývají diferenciální rovnice děleny na diferenciální rovnice prvního řádu a diferenciální rovnice vyšších řádů. Diferenciální rovnice, v nichž se hledaná funkce vyskytuje pouze lineárně, přičemž se nikde nevyskytují ani součiny hledané funkce s jejími derivacemi, ani součiny derivací této funkce, označujeme jako lineární diferenciální rovnice. Pokud jedna z uvedených podmínek není splněna, hovoříme o nelineárních diferenciálních rovnicích. Řešení rovnic Za řešení (integrál) diferenciální rovnice (v daném oboru) považujeme každou funkci, která má příslušné derivace a vyhovuje dané diferenciální rovnici. Řešením (integrálem) soustavy diferenciálních rovnic je množina funkcí s derivacemi potřebného řádu, které vyhovují všem rovnicím dané soustavy. Řešení diferenciálních rovnic dělíme následovně: obecné - Jako obecné řešení označujeme takové řešení diferenciální rovnice, které obsahuje libovolnou integrační konstantu. Přiřadíme-li každé konstantě obecného řešení určitou číselnou hodnotu, získáme řešení partikulární. partikulární (částečné) - Partikulární (částečné) řešení je řešení diferenciální rovnice, které získáme přiřazením určité číselné hodnoty každé integrační konstantě obecného řešení. singulární (výjimečné) - Některá řešení nelze získat z obecného řešení. Taková řešení, která se vyskytují pouze u některých rovnic, popř. v některých bodech oboru, označujeme jako singulární nebo výjimečná. Partikulární řešení můžeme v případě jednoduchých diferenciálních rovnic vypočítat analyticky. Nicméně ve velkém množství případů je analytické řešení příliš obtížné a diferenciální rovnice se řeší numericky. Diferenciální rovnice prvního řádu Obecně rozumíme (obyčejnou) diferenciální rovnicí prvního řádu vztah mezi derivací funkce y (x) v promenné x, její hodnotou y(x) a samotnou proměnnou, který lze zapsat jako F(y (x), y(x), x) = 0 76

78 nějakou pevnou funkci F, která každé trojici reálných čísel přiřadí jedno reálné číslo. Zápis připomíná implicitně zadané funkce y(x), nicméně navíc je tu závislost na derivaci hledané funkce y(x). Pokud je alespoň rovnice explicitně vyřešena vzhledem k derivaci, tj. y (x) = f(x, y(x)) můžeme si dobře graficky představit, co taková rovnice zadává. Pro každou hodnotu (x, y) v rovině si totiž můžeme představit šipku udávající vektor (1, f(x, y)), tj. rychlost se kterou nám rovnice grafu řešení přikazuje pohybovat se rovinou. Věta: (O existenci a jednoznačnosti řešení ODR). Nechť funkce f(x, y): R 2 R má spojité parciální derivace. Pak pro každý bod (x0, y0) R 2 existuje interval [x0 a, x0 + a], s a R kladným, a právě jedna funkce y(x) R R, která je řešením rovnice ( ) = (, ( )) Rovnice se separovanými proměnnými Užitečným typem rovnic, pro který máme elementární postup k řešení, jsou tzv. rovnice se separovanými proměnnými: ( ) = ( ) g( ( )) pro dvě dostatečně hladké funkce jedné reálné proměnné f a g. Obecné řešení tu lze získat integrací, tj. nalezením primitivních funkcí: G(y) = dy g(y), F(x) = f(x)dx Pak totiž spočtením funkce y(x) z implicitně zadaného vztahu F(x) + C = G(y) s libovolnou konstantou C vede k řešení, protože derivováním této rovnosti (s použitím pravidla pro derivování složené funkce G(y(x)) dostaneme skutečně 1 ( ) y (x) = f(x). Jako příklad najdeme řešení rovnice ( ) = ( ). Přímým výpočtem dostaneme ln y(x) = 1 2 x2 + C. Odtud to vypadá (alespoň pro kladná y) na y(x) = e = e kde D je nyní libovolná kladná konstanta. Zastavme se ale pozorněji u výsledné formule a znamének. Konstantní řešení y(x) = 0 vyhovuje naší rovnici také a pro záporná y můžeme použít stejné řešení se zápornými konstantami D. Ve skutečnosti může být konstanta D jakákoliv a našli jsme řešení vyhovující jakékoliv počáteční hodnotě. Systémy ODR prvního řádu Na řešení rovnice y (x) = f(x, y) lze také pohlížet jako na hledání (parametrizované) křivky (x(t), y(t)) v rovině, kde jsme již předem pevně zvolili parametrizaci proměnné x(t) = t. Pokud ale akceptujeme tento pohled, pak můžeme jednak zapomenout na tuto pevnou volbu pro jednu proměnnou a hlavně přibrat libovolný počet proměnných. Například v rovině můžeme psát takový systém ve tvaru (t) = (t, (t), (t)), (t) = g(t, (t), (t)) se dvěma funkcemi f, g: R 3 R se spojitými derivacemi. Obdobně pro více proměnných. Jednoduchým příkladem v rovině muže sloužit systém rovnic (t) = (t), (t) = (t) Řešením takového systému je např. (t) = cos(t), (t) = sin(t) s libovolnou nezápornou konstantou R a křivky řešení budou právě parametrizované kružnice o poloměru R. Věta (O existenci a jednoznačnosti řešení systému ODR): Nechť funkce f (t, x 1,, x n ): R n+1 R, i = 1,, n všechny mají spojité parciální derivace. Pak pro každý bod (t0, 1,, n ) R 2 existuje interval [t0 a, t0 + a], s a R kladným, a právě jedna funkce y(t): R R n, která je řešením systému rovnic 77

79 x 1 (x) = f 1 (t, x 1 (t),, x n (x)),, x n (x) = f n (t, x 1 (t),, x n (x)) s počáteční podmínkou 1(t 0 ) = 1,, (t 0 ) = Lineární diferenciální rovnice Již jsme přemýšleli o operaci derivování jako o lineárním zobrazení z (dostatečně) hladkých funkcí do funkcí. Pokud derivace ( ) jednotlivých řádu j vynásobíme pevnými funkcemi a (x) a výrazy sečteme, dostaneme tzv. lineární diferenciální operátor: ( ) ( )( ) = a ( ) ( ) ( ) + + a 1 ( ) ( ) + a 0 ( ) Řešit příslušnou homogenní lineární diferenciální rovnici pak znamená najít funkci y splňující (y) = 0, tj. obrazem je identicky nulová funkce. Ze samotné definice je zřejmé, že součet dvou řešení bude opět řešením, protože pro libovolné funkce y 1 a y 2 platí (y 1 + y 2 )( ) = (y 1 )( ) + (y 2 )( ) Obdobně je také konstantní násobek řešení opět řešením. Celá množina všech řešení lineární diferenciální rovnice k-tého řádu je tedy vektorovým prostorem. Přímou aplikací předchozí věty o jednoznačnosti a existenci řešení rovnic dostáváme: Důsledek: Vektorový prostor všech řešení homogenní lineární diferenciální rovnice k-tého řádu je vždy dimenze k. Proto můžeme vždy řešení zadat jako lineární kombinaci libovolné množiny k lineárně nezávislých řešení. Taková řešení jsou zadána jednoznačně lineárně nezávislými počátečními podmínkami na hodnotu funkce y(x) jejích prvních (k 1) derivací. Aplikace diferenciálních rovnic Diferenciální rovnice stojí v základech fyziky a jejich aplikace najdeme ve většině oblastí lidského vědění. Příklady: tepelná výměna (závislost teploty na čase) čistička vody (závislost hmotnosti nečistot v čističce na čase/ objemu přitékající vody apod.) šíření zprávy v populaci (závislost počtu lidí, kteří zprávu slyšeli, na čase) šíření epidemie v populaci (závislost počtu nakažených lidí na čase) radioaktivní rozpad prvku (závislost množství daného prvku na čase) změna rychlosti padajícího předmětu v konstantním gravitačním poli v prostředí s daným odporem rychlost nárůstu populace Funkce více proměnných Reálná funkce n-reálných proměnných f: R n R je zobrazení, které každému x R n přiřadí nejvýše jedno f(x) R. Prvky x = [x 1,, x n ] R n se nazývají body n-rozměrného prostoru R n. Množina = {x R n ; y R: f(x) = y} se nazývá definiční obor funkce f. Množina H = {x R; x : f(x) = y} se nazývá obor hodnot funkce f. Množina G = {[x 1,, x n, f(x 1,, x n )]; (x 1,, x n ) } se nazývá graf funkce f. Pro snazší pochopení budeme nejčastěji pracovat s případy n = 2 nebo n = 3 a přitom budeme místo číslovaných proměnných používat písmena x, y,. To znamená, že funkce f definované v rovině R 2 budou značeny f: R 2 (x, y) f(x, y) R a podobně v prostoru R 3 f: R 3 (x, y, ) f(x, y, ) R Volba souřadnic, může zdánlivě zjednodušit nebo zhoršit naše vnímání studovaného objektu. Je vhodné na změnu souřadnic pohlížet jako na zobrazení R n R n. Velice obvyklý příklad je změna kartézských 78

80 souřadnic v rovině na tzv. polární, tj. polohu bodu P zadáváme pomocí jeho vzdálenosti od počátku souřadnic r = x 2 + y 2 a úhlem φ = a ctan (y x), pokud je x 0, mezi spojnicí s počátkem a osou x. Přechod z polárních souřadnic do standardních je Euklidovské prostory á = (, ) ( cos, sin ) = é é Prostor E n vnímáme jako množinu bez volby souřadnic a na jeho zaměření R n pohlížíme jako na vektorový prostor možných přírůstků, které umíme k bodům prostoru E n přičítat. Navíc je na R n zvolen standardní n skalární součin u v = 1 x y kde u = (x 1,, x n ) a v = (y 1,, y n ) jsou libovolné vektory. Tím je na E n dána metrika, tj. funkce vzdálenosti P Q dvojic bodu P, Q předpisem P Q 2 = u 2 = x 2 1 kde u je vektor, jehož přičtením k P obdržíme Q. Např. v rovině E 2 je tedy vzdálenost bodu P 1 = (x 1, y 1 ) a P 2 = (x 2, y 2 ) dána P 1 P 2 2 = (x 1 x 2 ) 2 + (y 1 y 2 ) 2 Takto definovaná metrika splňuje trojúhelníkovou nerovnost pro každé tři body P, Q, R P R = (P Q) + (Q R) P Q + Q R Rozšíření pojmů pro body P i Euklidovského prostoru Cauchyovská posloupnost P P, pro každé pevně zvolené > 0 až na konečně mnoho výjimečných hodnot i, j konvergentní posloupnost P P, pro každé pevně zvolené > 0 až na konečně mnoho výjimečných hodnot i, j, bod P pak nazýváme limitou posloupnosti P hromadný bod P množiny n existuje posloupnost bodu v A konvergující k P a vesměs různých od P uzavřená množina obsahuje všechny své hromadné body otevřená množina její doplněk je uzavřený otevřené δ-okolí bodu P množina O (P) = {Q E n ; P Q δ} hraniční bod P množiny každé δ-okolí bodu P má neprázdný průnik s A i s komplementem E n A vnitřní bod P množiny existuje δ-okolí bodu P, které celé leží uvnitř A ohraničená množina leží celá v nějakém δ-okolí některého svého bodu (pro dostatečně velké δ) kompaktní množina uzavřená a ohraničená množina Posloupnosti bodů P mají vlastnosti zmiňované v prvních dvou bodech předchozím výčtu tehdy a jen tehdy, když stejně nazvané vlastnosti mají reálné posloupnosti vzniklé z jednotlivých souřadnic bodů P ve kterékoliv kartézské souřadné soustavě. Každá Cauchyovská posloupnost bodu v E n je konvergentní. Věta: Pro podmnožiny A E n v euklidovských prostorech platí: 1. A je otevřená, právě když je sjednocením nejvýše spočetného systému δ-okolí. 2. Každý bod a A je bud vnitřní nebo hraniční. 3. Každý hraniční bod je buď izolovaným nebo hromadným bodem A. 4. A je kompaktní, právě když každá v ní obsažená nekonečná posloupnost má podposloupnost konvergující k bodu v A. 5. A je kompaktní, právě když každé její otevřené pokrytí obsahuje konečné pokrytí. Křivky v n Pro každou křivku, tj. zobrazení c: R R n v n-rozměrném prostoru, můžeme pracovat s pojmy, které jednoduše rozšiřují naše úvahy z funkcí jedné proměnné: n limita: lim 0 c(t) R n 79

81 1 derivace: c (t 0 ) = lim (c(t) c(t 0 0 0)) R n b integrál: c(t)dt R n a V případě integrálu přitom musíme uvažovat křivky ve vektorovém prostoru R n. Důvod je videt už v jednorozměrném případě, kde potřebujeme znát počátek, abychom mohli vidět plochu pod grafem funkce. Opět je přímo z definice zjevné, že limity, derivace i integrály lze spočíst po jednotlivých n souřadných složkách v R n a stejně se rozpozná i jejich existence. Tečný vektor ke křivce c: R E n v bodě c(t 0 ) E n, který definujeme jako vektor v prostoru zaměření R n daný derivací c (t 0 ) Rn. Přímka T zadaná parametricky : c(t 0 ) + c (t 0 ) se nazývá tečna ke křivce c v bodě t 0. Na rozdíl od tečného vektoru, tečna T zjevně nezávisí na parametrizaci křivky c. Parciální derivace Řekneme, že f: R n R má derivaci ve směru vektoru v R n v bode x E n, jestliže existuje derivace d f(x) složeného zobrazení t f(x + tv) v bodě t = 0, tj. 1 d f(x) = lim (f(x + tv) 0 t f(x)) Často se d f říká směrová derivace. Speciální volbou přímek ve směru souřadných os dostáváme tzv. parciální derivace funkce f, které značíme operace. Pro funkce v rovině tak dostáváme x f(x, y) = lim 0, i = 1,, n nebo bez odkazu na samotnou funkci jako 1 (f(x + t, y) t f(x, y)) y f(x, y) = lim 1 (f(x, y + t) f(x, y)) 0 t Definice: Funkce f: R n R je diferencovatelná v bodě x, jestliže v bodě x existují všechny směrové derivace d f(x), v R n, d f(x) je lineární v závislosti na přírůstku v a 0 = lim 0 1 (f(x + v) f(x) d f(x)) Řečeno slovy požadujeme, aby v bodě x existovalo dobré lineární přiblížení přírůstku funkce f lineární funkcí přírůstku proměnných veličin. Lineární výraz d f (ve vektorové proměnné v) nazýváme diferenciál funkce f vyčíslený na přírůstku v. V literatuře se často také říká totální diferenciál df funkce f. Věta: Nechť f: E n R je funkce n proměnných, která má v okolí bodu x E n spojité parciální derivace. Pak existuje její diferenciál df v bode x a jeho souřadné vyjádření je dáno rovnicí Tečná rovina ke grafu funkce df = f x 1 dx 1 + f x 2 dx f x n dx n Pro funkce n proměnných definujeme tečnou rovinu jako afinní nadrovinu v E n+1. Místo zaplétání se do spousty indexů bude snad užitečná vzpomínka na afinní geometrii: Je to nadrovina procházející bodem (x, f(x)) se zaměřením, které je grafem lineárního zobrazení df(x) R n R, tj. diferenciálu v bodě x E n. Ještě jinak můžeme také říci, že směrová derivace d f je dána přírůstkem na tečné rovině, odpovídajícím přírůstku argumentu v. Z těchto úvah vyplývá řada analogií s funkcemi jedné proměnné. Zejména má diferencovatelná funkce f na E n v bodě x E n nulový diferenciál tehdy a jen tehdy, když její složení s libovolnou křivkou procházející 80

82 tímto bodem zde má stacionární bod, tj. ani neroste ani neklesá v lineárním přiblížení. Jinak řečeno, tečná rovina je rovnoběžná s nadrovinou proměnných (tj. její zaměření je E n E n+1 s nulovou přidanou souřadnicí pro hodnoty f). To ovšem neznamená, že v takovém bodě musí mít f aspoň lokálně bud maximum nebo minimum. Stejně jako u funkcí jedné proměnné můžeme rozhodovat teprve podle derivací vyšších. Derivace vyšších řádů Jestliže vybereme pevný přírůstek v R n, zadává vyčíslení diferenciálu na tomto přírůstku (diferenciální) operaci na diferencovatelných funkcích f: E n R f d f = df(v) a výsledkem je opět funkce df(v): E n R. Jestliže je tato funkce opět diferencovatelná, může opakovat totéž s jiným přírůstkem atd. Zejména tedy můžeme pracovat s iteracemi parciálních derivací. Pro parciální derivace druhého řádu píšeme ( ) f = x x v případě opakované volby i = j píšeme také ( ) f = x x x 2 f = Úplně stejně postupujeme při dalších iteracích a hovoříme o parciálních derivacích k-tého řádu k f x 1 x k Věta: Nechť f: E n R je k-krát diferencovatelná funkce se spojitými parciálními derivacemi až do řádu k včetně v okolí bodu x R n. Pak všechny parciální derivace nezávisí na pořadí derivování. Definice: Je-li f: R n R libovolná dvakrát diferencovatelná funkce, nazýváme symetrickou matici funkcí x 2 x 2 f = x 2 f x 2 2 f x Hf(x) = ( x 2 f x (x)) = ( 2 f x 1 x 1 (x) 2 f x n x 1 (x) 2 f x 1 x n (x) 2 f x n x n (x) ) Hessián funkce f v bodě x. Hessián Hf(x, y) = ( f (x, y) f (x, y) ) hraje roli druhé derivace. f (x, y) f (x, y) Taylorova věta Věta: Nechť f: E n R je k-krát diferencovatelná funkce v okolí O (x) bodu x E n. Pro každý přírůstek v R n s velikostí v δ pak existuje číslo 0 1 takové, že f(x + v) = f(x) + 1 f(x)(v) f(x)(v) k 1 f(x)(v) + 1 k f(x + v)(v) 2 k 1 k kde 1 f je diferenciál df v prvním řádu a 2 f hessián v řádu druhém. Lokální extrémy funkcí více proměnných Stejně jako v případě funkce jedné proměnné řekneme o vnitřním bodu x 0 E n definičního oboru funkce f, že je (lokálním) maximem nebo minimem, jestliže existuje jeho okolí takové, že pro všechny body x splňuje funkční hodnota f(x) f(x 0 ) nebo f(x) f(x 0 ). Pokud nastává v předchozích nerovnostech ostrá nerovnost pro všechny x x0, hovoříme o ostrém extrému. Pro jednoduchost budeme nadále předpokládat, že naše funkce f má spojité parciální derivace prvního i druhého řádu na svém definičním oboru. Nutnou podmínkou pro existenci maxima nebo minima v bodě x 0 je vymizení diferenciálu v tomto bode, tj. df(x 0 ) = 0. Skutečně, pokud je df(x 0 ) 0, pak existuje směr v, 81

83 ve kterém je d f(x 0 ) = 0. Pak ovšem nutně podél přímky x 0 + tv na jednu stranu od bodu x 0 hodnota funkce roste a na druhou klesá. Vnitřní bod x E n definičního oboru funkce f, ve kterém je diferenciál df(x) nulový nazýváme stacionární bod funkce f. Věta: Nechť f: E n R je dvakrát spojitě diferencovatelná funkce a x E n nechť je stacionární bod funkce f. Potom f má v x ostré lokální minimum, je-li Hf(x) positivně definitní, f má v x ostré lokální maximum, je-li Hf(x) negativně definitní, f nemá v bodě x lokální extrém je-li Hf(x) indefinitní. Věta nedává žádný výsledek, pokud je hessián funkce ve zkoumaném bodě degenerovaný a přitom není indefinitní. Důvod je opět stejný jako u funkcí jedné proměnné. V takových případech totiž existují směry, ve kterých první i druhá derivace zmizí a my proto v tomto řádu přiblížení neumíme poznat, zda se funkce bude chovat jako t 3 nebo jako t 4 dokud nespočteme alespoň v potřebných směrech derivace vyšší. Pro zjištění zda je matice definitní se dá použít více způsobů. Jedním z nich je např. Sylvestrovo kritérium: a 11 a 1n Nechť A je symetrická matice, kde A = ( ). a n1 a nn Označme determinanty následovně 1 = a 11, 1 = a a 11 a 11 a 1n 12 a 21 a,, n = = A. Potom 22 a n1 a nn matice je: positivně definitní všechny determinanty jsou kladné negativně definitní 0 pro i liché a > 0 pro i sudé indefinitní všechny determinanty jsou nenulové, ale matice není positivně/ negativně definitní 82

84 Grafy Typy grafů, stromy, stupně vrcholů, orientované grafy, komponenty souvislosti. Grafové algoritmy: prohledávání do hloubky a do šířky, hledání nejkratší cesty, minimální kostra grafu. 83

85 Grafy (Primárně zpracováno na základě předmětu PB165 a následně doplněno informacemi z předmětu IB00) (pozn. autora: toto berte jako nějaký obecný úvod, kterým můžete tuto otázku začít) Definice grafu: Graf G je uspořádaná dvojice množin (V, E), kde V je množina vrcholů a E je množina hran (tedy množina dvouprvkových podmnožin V). Ukázka: Vrcholy spojené hranou se nazývají sousední. Hrana se označuje jako incidentní k vrcholům, které spojuje. (pozn. autora: následující řádky (až po začátek první podkapitoly) se nehodily do žádné podotázky, ale přesto je zmiňuji, protože je považuji za základní znalosti) Sled: Posloupnost vrcholů a hran v 0, e 1, v 1,..., e n, v n, kde každá hrana e i spojuje vrcholy v i-1, v i, resp. vede z v i-1 do v i. Sled v grafu je tedy trasou, na které se mohou vrcholy i hrany opakovat. Samotný vrchol je také sledem. Cesta: Sled bez opakování vrcholů. V důsledku neopakování vrcholů se nemohou opakovat ani hrany. Isomorfismus: Isomorfismus mezi grafy G, H je bijektivní zobrazení vrcholů, které zachovává hrany - tj. pokud vede v grafu G hrana mezi vrcholy u, v, pak v grafu H vede hrana mezi vrcholy f(u), f(v). Pokud mezi grafy G, H existuje isomorfismus, nazývají se isomorfní (ukázka na obrázku níže). Isomorfní grafy musí mít stejný počet vrcholů a hran a vrcholy musí mít stejné stupně. Graf lze uložit pomocí matice sousednosti nebo seznamu sousedů. Matice sousednosti: Matice E o rozměrech n x n pro n vrcholů grafu. E ij = 1, pokud hrana (i, j) patří do grafu. Jinak E ij = 0. Pro neorientovaný graf je symetrická, pro orientovaný graf to platit nemusí. 84

86 V této podobě je matice sousednosti vhodná jen pro reprezentaci jednoduchého grafu. Multigraf lze reprezentovat maticí sousednosti, jejíž prvky udávají počet hran mezi každými dvěma vrcholy. Obdobně lze ukládat jednoduchý hranově ohodnocený graf. Seznam sousedů: Pro každý vrchol existuje samostatný seznam sousedů, s nimiž je tento spojen hranou (či do nich vede orientovaná hrana). Lze implementovat pomocí 2 jednorozměrných polí - v jednom jsou uloženy všechny seznamy za sebou, seřazené podle čísla vrcholu, druhé uchovává indexy, na kterých začínají v prvním posli sousedé každého vrcholu. Násobné hrany v multigrafu jsou zadány násobným uvedením vrcholu v seznamu sousedů. (na obrázku máme následující hrany (lexikograficky řazeno): (1) a-c, (2) b-c, b-c, b-d, b-d, (6) c-a, c-b, c-b, c-e, (10) d-b, d-b, d-d, (13) e-c, e-e) (n)... značí index v poli indexů, čili na první pozici začíná a, na druhé b, na šesté c atd. Kružnice: Netriviální neorientovaná cesta, která začíná i končí ve stejném vrcholu. Cyklus: Orientovaná (z orientovaných hran složená) kružnice respektující orientaci těchto hran. Nesmí se tedy opakovat vrcholy (kromě shodnosti prvního a posledního) a hrany. Samostatný vrchol, který je cestou, za cyklus nepovažujeme. Graf, který obsahuje cyklus, se nazývá cyklický. V opacčném případě se nazývá acyklický. Cyklická hrana: Hrana, která je součástí nějakého cyklu v grafu. Odstraníme-li ze souvislého grafu G hranu e, vzniklý graf G - e bude souvislý právě tehdy, když e je cyklická. 85

87 Typy grafů Hrany v grafu spojují dva rovnocenné vrcholy. Takové vrcholy se také nazývají neorientované. U hran ovšem můžeme vyznačit směr, kterým vedou - hrany i graf se poté nazývají orientované. Orientovaný graf: Graf, jehož hrany jsou uspořádané dvojice vrcholů. O hraně (u, v) říkáme, že vychází z vrcholu u a vstupuje do v. Graficky se orientace hrany označí šipkou ve směru, kterým hrana vede. Ukázka: Definice grafu povoluje nejvýše 1 hranu mezi každou dvojicí vrcholů a požaduje, aby hrana spojovala různé vrcholy. Tato omezení odstraňuje multigraf. Multigraf: Graf, jenž nahrazuje množinu hran multimnožinou (smí obsahovat násobné prvky) a umožňuje existenci smyček - hran spojujících vrchol sám se sebou. Vrcholům a hranám je možné přiřadit např. číslo (či barvu). Přiřazení prvků konečné množiny vrcholům či hranám grafu nazýváme jejich ohodnocením. Hranově ohodnocený graf, Vrcholově ohodnocený graf: Podgraf: Graf H je podgrafem grafu G, pokud platí následují podmínky: 1) Vrcholy grafu H tvoří podmnožinu vrcholů grafu G. 2) Hrany grafu H tvoří podmnožinu hran grafu G. 3) Hrany grafu H mají oba vrcholy v H. Graf G je poté nadgrafem grafu H. 86

88 Podgraf H se nazývá indukovaný, pokud obsahuje všechny hrany, které mezi jeho vrcholy vedou v nadřazeném grafu G. Samostatné vrcholy libovolného grafu tvoří jeho podgraf. Strom: více v kapitole 6.2 Stromy Les: Graf, který neobsahuje kružnice. Strom: Graf, který neobsahuje kružnice a je souvislý. Strom je tedy souvislý les. Každý strom s alespoň 1 hranou obsahuje nejméně 2 vrcholy stupně 1. Strom s n vrcholy obsahuje právě n - 1 hran. Les o n vrcholech a k komponentách má n - k hran. Mezi každými 2 vrcholy ve stromu vede právě jedna cesta. Z toho vyplývá, že přidáním libovolné hrany do stromu vznikne právě jedna kružnice. Strom, jehož hrany jsou orientovány, se nazývá orientovaný. Kořenový strom: Orientovaný strom, jenž má určen význačný vrchol (kořen) r, a v němž existuje orientovaná cesta z r do všech ostatních vrcholů, se nazývá kořenový strom. Orientovaný strom je kořenový právě tehdy, když právě jeden z jeho vrcholů má vstupní stupeň 0 a všechny ostatní vrcholy mají vstupní stupeň 1. Hloubka (úroveň) vrcholu: Vzdálenost (počet hran na cestě) vrcholu od kořene stromu. Výška kořenového stromu: Nejvyšší z hloubek všech jeho vrcholů. 87

89 Vede-li v kořenovém stromu hrana z vrcholu u do v, nazývá se u rodičem (otcem) v a v synem. Vrcholy mající společného rodiče nazýváme sourozenci. Vrchol u je předkem vrcholu v, pokud leží na cestě z r do v, v se v takovém případě nazývá následníkem vrcholu u. List stromu: Vrchol, který nemá žádné potomky. Ostatní vrcholy se označují jako vnitřní. Isomorfismus kořenových stromů: Kořenové stromy považujeme za isomorfní, pokud mezi nimi existuje isomorfismus, který zobrazí kořen stromu na kořen. N-ární strom: Kořenový strom, jehož každý vrchol má nejvýše n potomků. N-ární strom, jehož vnitřní vrcholy mají právě n potomků a všechny listy jsou stejné hloubky se nazývá úplný n-ární. Uspořádaný strom: Kořenový strom s daným pořadím potomků každého vrcholu. V m-té úrovni n-árního stromu se nachází nejvýše n m vrcholů. Binární strom: Uspořádaný 2-ární strom. Potomci každého vrcholu jsou označováni jako levý a pravý. Indukovaný podgraf binárního stromu G, tvořený jedním potomkem vrcholu v a všemi jeho následníky, se nazývá podstromem vrcholu v a stromu G. Úplný binární strom výšky h má právě 2 h+1-1 vrcholů. Kořenové stromy lze jednoznačně reprezentovat polem rodičů - tedy polem, ve kterém je pro každý vrchol uložen pouze název jeho rodiče. Pole rodičů má tvar: Reprezentace úplných ohodnocených binárních stromů: Kořen je uložen na pozici 0. Potomci vrcholu k jsou uloženi na pozicích 2 * k + 1, 2 * k + 2. Průchod binárního stromu: Buď po úrovních, anebo po podstromech. (pozn. autora: v podstatě skoro to stejné jako BFS a DFS) IB

90 Binární halda: Nechť K je úplně uspořádaná množina tzv. klíčů (např. z N). Binární halda je binární strom, jehož uzly jsou ohodnoceny prvky K a který splňuje: 1) Délky všech větví se liší nejvýše o 1, čili mají délku k nebo k-1, kde k je hloubka stromu. 2) Hodnoty uzlů na každé větvi jsou vzestupně (= minimová halda) či sestupně (= maximová halda) uspořádány. obrázek napravo demonstruje maximovu zleva zarovnanou haldu Mazání probíhá následovně: Smažu kořen a nahradím ho posledním prvkem. Následně haldu seřadím, aby opět byla maximová/minimová. Binomiální halda: Konečná posloupnost binomiálních stromů. Binomiální strom je kořenový strom s libovolným větvením a s uzly ohodnocenými klíči. Binomiální strom stupně 0 je jednouzlový strom. Binomiální strom stupně r + 1 vznikne ze dvou binomiálních stromů t 1, t 2 stejného stupně r tzv. spojením: strom t 1 se stane novým, nejlevějším, následníkem stromu t 2. uspořádání klíčů na všech větvích binomiálních stromů je rostoucí. Binomiální halda je tedy konečná posloupnost binomiálních stromů v pořadí rostoucích stupňů. Tedy stupně všech stromů v binomiální haldě jsou navzájem různé. Binární vyhledávací strom (BVS): Binární strom nad úplně uspořádanou množinou (tzv. klíčů) (K, ) takový, že pro každý jeho podstrom t platí: 1) Hodnoty uzlů v levém podstromu t jsou menší než hodnota v kořenu t. 2) Hodnoty uzlů v pravém podstromu t jsou větší než hodnota v kořenu t. AVL strom: Binární vyhledávací strom, u kterého se hloubka levého a pravého podstromu libovolného uzlu liší o jedničku. Příkladem AVL stromu je Fibonacciho strom. Vyhledávání v AVL stromu se neliší od vyhledávání v běžném vyhledávacím stromu. Při přidávání položky do AVL stromu se musí kontrolovat (a 89

91 případně spravit = provádění rotací) vyváženost. Podobně při rušení položky. obrázek nalevo: RR rotace, obdobně by se prováděla LL rotace obrázek napravo: LR rotace, obdobně by se prováděla RL rotace (při hledání uzlů, které porušují vyváženost AVL stromu, jdu zespodu nahoru) Červenočerný (bíločerný) strom: Binární vyhledávací strom, jehož každý uzel je obarven černou nebo červenou barvou. Musí splňovat tyto podmínky: 1) Kořen stromu je černý. 2) Je-li vnitřní uzel červený (resp. bílý), jeho následníci (pokud existují) jsou černí. 3) Všechny větve obsahují stejný počet černých uzlů. Cílem je mít co nejmenší černou hloubku. obrázek napravo znázorňuje vyvažování stromu (zvýrazněné uzly jsou černé) B-strom: Vyvážený strom kde operace vyhledávání a odstranění prvku probíhá v logaritmickém čase. B- strom řádu n má tyto vlastnosti: všechny listy jsou na stejné úrovni (hodnoty uzlů jsou uloženy až v lstech); všechny uzly mají maximálně potomků. Stupně vrcholů Stupněm vrcholu v neorientovaném grafu nazýváme počet hran incidentních k vrcholu. Stupeň vrcholu u značíme deg(u). V případě orientovaného grafu rozlišujeme vstupní a výstupní stupeň. Vstupním (výstupním) stupněm vrcholu u orientovaného grafu nazýváme počet hran vstupujících do, resp. vycházejících z vrcholu u a značíme jej deg + (u), resp. deg - (u). 90

92 Komponenty souvislosti Souvislost: Neorientovaný graf se nazývá souvislý, pokud mezi jeho každými dvěma vrcholy vede cesta. Nahradíme-li všechny hrany orientovaného grafu G neorientovanými a získáme-li tak souvislý graf, G je slabě souvislý. Orientovaný graf je silně souvislý, pokud mezi každými dvěma jeho vrcholy vedou cesty v obou směrech. Prohledávání do hloubky a do šířky BFS (Breadth-First Search): Předpokládáme, že vstupem je souvislý neorientovaný graf. Slouží k prohledání a navštívení všech vrcholů grafu. Vrcholy jsou navštěvovány v pořadí podle vzdálenosti od počátečního vrcholu. Nalezne nejkratší cestu z počátečního vrcholu do všech ostatních. Při průchodu grafem je budován strom cest do všech jeho vrcholů. Pro implementaci algoritmu se používá fronta. Časová složitost je O( V + E ), kde V je množina vrcholů a E je množina hran. Ukázka jedné z implementací BFS: DFS (Depth FIrst Search): Namísto postupného procházení vrcholů od nejbližších ke kořeni postupuje algoritmus do hloubky - dokud je to možné, vybere vždy hranu vedoucí dále z vrcholu, do kterého právě vstoupil. Poté se vrací stromem ke kořenu - "backtrackuje". Velmi podobné BFS - stejná časová složitost. Projde všemi vrcholy grafu. Vstupem je rovněž neorientovaný souvislý graf. Algoritmus ovšem nenalezne nejkratší cesty do vrcholů. Algoritmus je vhodnější pro prohledávání stavových prostorů a heuristiky. K implementaci se používá zásobník. Ukázka jedné z implementací DFS: 91

93 Procházení grafu do hloubky: Prohledávání do hloubky (v angličtině označováno jako Depth-first search nebo zkratkou DFS) je grafový algoritmus pro procházení grafů metodou backtrackingu. Pracuje tak, že vždy expanduje prvního následníka každého vrcholu, pokud jej ještě nenavštívil. Vrcholy k procházení ukládá do zásobníku (LIFO). Pokud narazí na vrchol, z nějž už nelze dále pokračovat (nemá žádné následníky nebo byly všichni navštíveni), vrací se zpět backtrackingem. Backtracking (česky zpětné vyhledávání) je způsob řešení algoritmických problémů založený na metodě pokus - omyl. Jedná se o vylepšení hledání řešení hrubou silou v tom, že velké množství potenciálních řešení může být vyloučeno bez přímého vyzkoušení. Algoritmus je založen na procházení do hloubky možných řešení. Algoritmus je úplný (vždy najde řešení, tzn. určitý cílový vrchol, pokud existuje), ale není optimální (pokud graf není strom, nemusí najít nejkratší možnou cestu k cíli). Jeho asymptotická složitost je O( V + E ), kde V je množina vrcholů a E množina hran daného grafu. Prohledávání do šířky: Prohledávání do šířky (anglicky Breadth-first search, zkráceně BFS) je grafový algoritmus, který postupně prochází všechny vrcholy v dané komponentě souvislosti. Algoritmus nejprve projde všechny sousedy startovního vrcholu, poté sousedy sousedů atd. až projde celou komponentu souvislosti. Prohledávání do šířky je algoritmus či metoda, která postupuje systematickým prohledáváním grafu přes všechny uzly. Nepoužívá při svém prohledávání žádnou heuristickou analýzu, pouze prochází všechny uzly a pro každý projde všechny jeho následovníky. Přitom si poznamenává předchůdce jednotlivých uzlů a tím je poté vytvořen strom nejkratších cest k jednotlivým uzlům z kořene (uzlu, ve kterém jsme začínali) v hranově neohodnoceném grafu. Z hlediska algoritmu, veškeré následovníky uzlu získané expanzí uzlu vkládáme do FIFO fronty. FIFO fronta znamená, že první uzel, který do fronty vstoupil, ji také první opustí. V typických implementacích jsou dosud neobjevené označeny jako FRESH. Uzly, které se dostávají do fronty a jsou v této chvíli právě vyšetřovány na jejich následníky, jsou označeny jako OPEN a naposled uzly, které už byly z fronty vybrány a dále se s nimi nebude pracovat, jsou označeny jako CLOSE. CLOSE uzly již nikdy v tomto běhu algoritmu nebudou prozkoumávány, mají vyplněné všechny informace. To znamená vzdálenost od kořenového (počátečního) uzlu, stav uzlu (CLOSE) a předchůdce. Hledání nejkratší cesty Délka cesty v neohodnoceném grafu je rovna počtu hran na této cestě. Vzdálenost δ(u, v) vrcholů u, v v grafu je délka nejkratší cesty z u do v. Vzdálenost mezi dvěma vrcholy nemusí být v případě orientovaného grafu symetrická. Délka cesty v ohodnoceném grafu je rovna součtu ohodnocení hran na této cestě. Pokud v grafu neexistuje cyklus záporné délky, je nejkratší sled v grafu (nejkratší) cestou. Dijkstrův algoritmus: Klasický algoritmus pro hledání nejkratší cesty v grafu. Najde nejkratší cesty z jednoho vrcholu do všech ostatních. Pracuje pro orientovaný i neorientovaný graf. Vyžaduje nezáporné ohodnocení všech hran (nejen cyklů). Lineární paměťová složitost. Časová složitost se odvíjí od použité datové struktury (viz níže). Popis algoritmu: Počáteční vrchol označíme s. Pro každý vrchol v grafu je udržována hodnota d[v] - délka nejkratší doposud nalezené cesty z s do v. (Na počátku d[s] = 0 pro počáteční vrchol a d[v] = pro ostatní vrcholy. Po skončení výpočtu obsahuje d[v] délku nejkratší cesty v grafu, pokud taková existuje, nebo v 92

94 opačném případě.) Dále v proměnné p[v] ukládáme předchůdce vrcholu v na doposud nalezené nejkratší cestě z s. (Před výpočtem nastavíme hodnotu p[v] jako nedefinovanou pro všechny vrcholy. Po skončení výpočtu je nejkratší cesta posloupnost vrcholů s, p[...p[v]...],... p[p[v]], p[v], v.) Všechny vrcholy jsou rozděleny do dvou vzájemně disjunktních množin (S obsahuje právě ty vrcholy, pro něž je v d[v] uložena definitivní nejkratší cesta z s do v v grafu. Q obsahuje všechny ostatní vrcholy). Vrcholy množiny Q jsou ukládány v prioritní frontě. (Nejvyšší prioritu má vrchol u s nejnižší hodnotou d[u] - nelze do něj již nalézt kratší cestu, než která je aktuální.) V každé iteraci jsou provedeny následující kroky: 1) Odstraň vrchol u z počátku fronty. 2) Přesuň vrchol u z množiny Q do S. 3) Relaxuj všechny hrany (u, v) - pokud d[v] > d[u] + w(u, v), uprav d[v]. 4) w(u, v) značíme ohodnocení (weight) hrany (u, v). Příklad: Časová složitost: Inicializace je provedena v lineárním čase vzhledem k počtu vrcholů n (m = počet hran). Každou hranou prochází algoritmus vždy právě jednou nebo dvakrát (v případě neorientovaného grafu). Hlavní cyklus je proveden vždy n-krát. Je tudíž provedeno vždy právě n výběrů z prioritní fronty. Složitost výběru z fronty záleží na její implementaci: 1) Pole, seznam vrcholů = O(n 2 + m), 2) Binární halda = O((n + m) * log(n)), 3) Fibonacciho halda = O(m + n*log(n)). A*(star) algoritmus: Upravený Dijkstrův algoritmus. Používá se zejména k nalezení cesty do jednoho vrcholu (např. navigace). Kromě délky nejkratší cesty do každého vrcholu bere při vyhledávání v úvahu i heuristický odhad jeho vzdálenosti od cíle. Každé cestě je přiřazen heuristický odhad délky F jako součet ohodnocení jejích hran G a heuristického ohodnocení koncového vrcholu H (F = G + H). Do prioritní fronty nejsou ukládány vrcholy grafu, ale cesty (Nejvyšší prioritu má cesta s nejnižším heuristickým ohodnocením). Pro každý vrchol je uloženo, je-li již "uzavřen" či nikoliv, tzn., byl-li již navštíven, prozkoumán odebráním z fronty některé cesty v tomto vrcholu končící. Dijkstrův algoritmus lze použít také k nalezení cesty do jednoho vrcholu grafu. Obvykle ale projde mnoho neperspektivních vrcholů - např. při vyhledávání trasy v mapě jde i opačným směrem stejně daleko, jak správným. A* tyto vrcholy eliminuje pomocí heuristiky, je-li vhodně zvolena. Časová složitost záleží na kvalitě zvolené heuristiky - nejhůře může být exponenciální, nejlépe polynomiální, a to vůči délce optimální cesty. Paměťová složitost může být v nejhorším případě také exponenciální - existuje několik zlepšujících variant algoritmu. Bellman-Ford algoritmus: Stejně jako Dijkstrův algoritmus vypočítá vzdálenost všech vrcholů grafu z jednoho zdroje. Základní strukturou podobný Dijkstrovu algoritmu. Graf smí obsahovat i záporně ohodnocené hrany. Cykly s celkovým záporným ohodnocením jsou algoritmem detekovány. Namísto výběru hrany k relaxaci v každé iteraci relaxuje všechny hrany. Časová složitost je O(m * n) (počet hran * počet vrcholů). Příklad: 93

95 Celý tento proces by se ještě opakoval (n - 1)-krát, k žádné změně již ovšem nedojde. (více zde: Floyd-Warshallův algoritmus: Vypočítá nejkratší vzdálenost mezi všemi dvojicemi vrcholů v grafu. Graf může obsahovat záporně ohodnocené hrany, cykly s celkovým záporným ohodnocením vedou k chybnému řešení. Mezi každými dvěma dvojicemi vrcholů postupně vylepšuje nejkratší známou vzdálenost. V každém kroku algoritmu je definována množina vrcholů, kterými je možno nejkratší cesty vést. Každou iterací je do této množiny přidán jeden vrchol. V každé z n iterací jsou aktualizovány cesty mezi všemi n 2 dvojicemi vrcholů. Časová složitost algoritmu je tedy O(n 3 ). Paměťová složitost je O(n 2 ). Popis algoritmu: Nechť jsou vrcholy grafu očíslovány 1...n. Nejprve algoritmus uvažuje pouze hrany grafu. Následně prohledává cesty procházející pouze vrcholem 1. Poté cesty procházející pouze vrcholy 1, 2, atd. Mezi každými dvěma vrcholy u, v je v (k + 1)-ní iteraci algoritmu známa cesta využívající vrcholů 1...k. Pro nejkratší cestu mezi těmito vrcholy využívající vrcholů 1...k + 1 jsou dvě možnosti: 1) Vede opět pouze po vrcholech 1...k. 2) Vede po vrcholech 1...k z u do vrcholu k + 1 a z něj poté do v. Na konci výpočtu jsou známy nejkratší cesty využívající všech vrcholů grafu. Vstupem grafu je matice sousednosti, kde jednotlivé prvky značí ohodnocení hrany nebo. Příklad: Minimální kostra grafu (Začíná se vlevo nahoře, poté se pokračuje vlevo uprostřed atd.) Kostra grafu: Kostra grafu G je takový strom T v grafu G, pro který platí V(T) = V(G), tedy vrcholy v T a v G jsou totožné. Graf může mít více než jednu kostru. 94

96 Minimální kostra grafu: Nechť G je souvislý graf s ohodnocenými hranami. Kostra grafu G, jejíž součet ohodnocení všech hran je nejnižší, se nazývá minimální kostra grafu G. Primův algoritmus: Hledá minimální kostru. Neprohledává systematicky všechny kostry grafu. Začíná v libovolném vrcholu a buduje strom. Nejvyšší prioritu mají hrany s nejnižším ohodnocením. Stále existuje jen jedna komponenta minimální kostry, která postupně roste. Složitost zavisí na datové struktuře ukládající okrajové hrany (matice sousednosti = O(V 2 ), binární halda = O(E*log(V)), Fibonacciho halda = O(E + V*log(V))). Ukázka implementace: Platí, že výstupní strom T k vytvořený k iteracemi Primova algoritmu je podstromem minimální kostry grafu. Příklad: Kruskalův algoritmus: Druhý algoritmus pro hledání minimální kostry grafu. Nepostupuje cestou budování stromu, naopak vzniká les. Přidává hrany seřazené vzestupně podle jejich ohodnocení. Při použití vhodných datových struktur má časovou složitost O(E*log(V)). Ukázka implementace: Příklad: 95

97 Borůvkův algoritmus: Od předchozích dvou algoritmů se liší tím, že buduje minimální kostru ze všech vrcholů najednou. Na začátku tedy máme n komponent minimální kostry (n = počet vrcholů). Z každého vrcholu vždy hledá hranu s nejmenším ohodnocením a zahrne ji do kostry. Tímto postupem se počet komponent minimální kostry postupně zmenšuje a jednotlivé komponenty se zvětšují. Dokud nemáme jednu komponentu (= minimální kostra), tak vždy hledáme ze všech komponent další hrany s nejmenším ohodnocením a přidáváme je do kostry. (Více na obrázku: Zdroje PB165 - Grafy a sítě (prezentace 1 až 4 - podzim 2012) IB002 - Návrh algoritmů I (poznámky ze cvičení a slidy - jaro 2012) Staré vypracované otázky 96

98 Formální jazyky Hierarchie jazyků, regulární jazyky, bezkontextové jazyky, uzávěrové vlastnosti jazyků. Reprezentace jazyků (gramatiky, regulární výrazy, automaty), převody mezi jednotlivými reprezentacemi. 97

99 Základné pojmy Abeceda je libovolná konečná množina znaků (písmen, symbolů). Slovo nad abecedou Σ je libovolná konečná posloupnost znaků této abecedy. Jazyk nad abecedou Σ je libovolná množina slov nad Σ. Hierarchie jazyků a gramatik typ 0 frázové gramatiky typ 1 kontextové gramatiky (contextsensitive grammar, CSG) typ 2 bezkontextové gramatiky (context-free grammar, CFG) typ 3 regulární gramatiky Tvar pravidiel na tvar pravidel se nekladou žádné omezující požadavky každé její pravidlo je tvaru, kde s eventuální výjimkou pravidla S, pokud se S nevyskytuje na pravé straně žádného pravidla každé její pravidlo je tvaru A, kde 1 s eventuální výjimkou pravidla S, pokud se S nevyskytuje na pravé straně žádného pravidla Každé její pravidlo je tvaru A ab nebo A a (A,B jsou liboolné neterminály, a je libovolný terminál) s eventuální výjimkou pravidla S, pokud se S nevyskytuje na pravé straně žádného pravidla Třídy jazyků Jazyky Gramatiky (typ) Automaty rekursivně spočetné frázové (typ 0) Turingovy stroje rekursivní - úplné Turingovy stroje kontextové kontextové (typ 1) lineárně ohraničené TM bezkontextové bezkontextové (typ 2) zásobníkové automaty deterministické CFL - deterministické PDA regulární regulární (typ 3) Konečné automaty Třída na nižším řádku je vždy vlastní podtřídou třídy na vyšším řádku. Příklad: Každý regulární jazyk je zároveň bezkontextový, ALE každý bezkontextový není zároveň regulární (resp. existují bezkontextové jazyky co nejsou regulární). Regulární jazyky Jazyk L je regulární, právě když: může být vygenerován regulární gramatikou (tzn. existuje regulární gramatika G taková, že (G) = ), je akceptovaný nějakým deterministickým konečným automatem (tzn. existuje deterministický konečný automat M takový, že (M) = ), je akceptovaný nějakým nedeterministickým konečným automatem (tzn. existuje nedeterministický konečný automat M takový, že (M) = ), může být popsán regulárním výrazem (tzn. existuje regulární výraz RE takový, že (RE) = ) 98

100 Lemma o vkládání (pumping lemma) Nechť je regulární jazyk. Pak existuje n N takové, že libovolné slovo w, délky alespoň n, lze psát ve tvaru w = xy, kde xy n, y a xy pro každé i N 0. Lemma o vkládání je nutnou (nikoliv postačující) podmínkou pro regularitu jazyka a lze jej použít pro důkaz toho, že nějaký jazyk není regulární (NE pro důkaz toho, že jazyk je regulární!!!). Obměnou (v téhle části by určitě měla zaznít obměna a ne negace, uvědomte si, že PL je vlastně akorát taková větší implikace) lemmatu o vkládání lze ukázat, že jazyk není regulární: pro libovolné n N (pumpovací konstanta), dále pevné existuje takové w, délky alespoň n, pro které platí, že při libovolném rozdělení slova w, splňujícím w = xy, xy n a y existuje alespoň jedno i N 0 takové, že xy Potom z lemmatu o vkládání plyne, že není regulární. Myhill-Nerodova věta Myhill-Nerodova věta představuje nutnou a postačující podmínku pro regularitu jazyka. Pro formulaci M-N věty potřebujeme několik pomocných pojmů: Definice: Nechť Σ je abeceda a nechť ~ je ekvivalence na Σ. Řekněme, že ~ je zprava invariantní (pravá kongruence), pokud pro každé u, v, w Σ platí u ~ v uw ~ vw. Index ~ je počet tříd rozkladu Σ ~ (pokud je těchto tříd nekonečně mnoho, klademe index ~ roven ). Definice: Nechť je libovolný (ne nutně regulární) jazyk nad abecedou Σ. Na množině Σ definujeme relaci ~ L zvanou prefixová ekvivalence pro takto: u~ L v w Σ : uw vw. Tedy ~ L obsahuje právě ty dvojice (u, v) které mají tu vlastnost, že po připojení libovolného w vzniklá slova uw, vw budou do jazyka patřit buď obě, nebo ani jedno z nich. Myhill-Nerodova věta: Nechť je jazyk nad Σ, pak tato tvrzení jsou ekvivalentní: 1. je rozpoznatelný konečným automatem. 2. je sjednocením některých tříd rozkladu určeného pravou kongruencí na Σ s konečným indexem. 3. Relace ~ L má konečný index. Bezkontextové jazyky Jazyk L je bezkontextový, právě když: existuje bezkontextová gramatika G taková, že (G) = (neboli která ho generuje) 99

101 je akceptován nějakým zásobníkovým automatem (existuje zásobníkový automat M, takový, že (M) = ) Lemma o vkládání pro bezkontextové jazyky Nechť je CFL. Pak existují p, q N (závisející na ) taková, že každé slovo delší než p lze psát ve tvaru = uvwxy, kde alespoň jedno ze slov v, x je neprázdne (tj. vx ), vwx q a uv wx y pro každé i N 0. Použití lemmatu pro libovolné n N (pumpovací konstanta), dále pevné existuje takové, délky alespoň n, pro které platí, že při libovolném rozdělení slova splňující = uvwxy, vwx n a vx existuje alespoň jedno i N 0 takové, že uv wx y Potom z lemmatu o vkládání plyne, že není bezkontextový. Vlastnosti jazyků Uzávěrové vlastnosti jazyků Třída jazyků L (množina jazyků s určitými vlastnostmi) je uzavřená na n-ární operaci o, pokud pro libovolné jazyky 1,, n patřící do L platí, že také jazyk o( 1,, n ) patří do L. Třída regulárních jazyků je uzavřena na: sjednocení ( 1 2), průnik ( 1 2), rozdíl ( 1 2 ), komplement (co ), zřetězení ( 1. 2 ), iteraci ( ), pozitivní iteraci ( + ), zrcadlový obraz ( ). Třída bezkontextových jazyků je uzavřena vzhledem k operacím: sjednocení zřetězení iterace pozitivní iterace průnik s regulárním jazykem 100

102 Třída bezkontextových jazyků není uzavřena vzhledem k operacím: průnik doplněk rozdíl Rozhodnutelné problémy Rozhodnutelné problémy pro třídu regulárních jazyků: ekvivalence: jsou M a M ekvivalentní? (platí (M) = (M )?) inkluze (jazyků): platí (M) (M )? příslušnost (slova k jazyku): je-li dáno w Σ, platí w (M)? prázdnost (jazyka): je (M) =? univerzalita (jazyka): je (M) = Σ? konečnost (jazyka): je (M) konečný jazyk? Rozhodnutelné problémy pro třídu bezkontextových jazyků: příslušnost: Ke každé CFG je možné sestrojit PDA a můžeme tak ověřit jestli daný PDA přijme nebo zamítne slovo w. prázdnost: Stačí ověřit zda S N. (N je množina použitelných symbolů vzhledem k typu I.) konečnost: Ke každé CFG lze sestrojit čísla m, n taková, že (G) je nekonečný, právě když existuje slovo (G) takové, že m n. Reprezentace jazyků Gramatiky Gramatika G je čtveřice (N, Σ, P, S), kde N je neprázdná konečná množina neterminálních symbolů (neterminálů), Σ je konečná množina terminálních symbolů (terminálů) taková, že N Σ = ; N Σ = je množina všech symbolů gramatiky, P N je konečná množina pravidel. Pravidlo obvykle zapisujeme ve tvaru (čteme alfa přepiš na beta ), S N je počáteční neterminál, neboli kořen gramatiky. Bezkontextová gramatika (context-free grammar, CFG) G je čtveřice (N, Σ, P, S), kde: N je neprázdná konečná množina neterminálních symbolů, Σ je konečná množina terminálních symbolů taková, že N Σ = ; (značení: N Σ = ) P N je konečná množina pravidel. S N je počáteční neterminál. Konstrukce bezkontextové gramatiky 101

103 Každou bezkontextovou gramatiku, která reprezentuje neprázdný bezkontextový jazyk, lze dále upravit do tzv. kanonických tvarů - lépe se s nimi pracuje, jsou přehlednější, vyžadují je některé algoritmy atd. Kanonické tvary bezkontextových gramatik jsou následující: redukované CFG gramatiky bez -pravidel gramatiky bez jednoduchých pravidel gramatiky bez levé rekurze normální formy CFG (např. GNF,CNF, Backusova-Naurova forma) Symbol x (N Σ) je nepoužitelný v CFG G = (N, Σ, P, S), právě když v G neexistuje derivace tvaru S wxy wxy pro nějaká w, x, y Σ. Řekneme, že G je redukovaná, jestliže neobsahuje žádné nepoužitelné symboly. Nepoužitelnost typu I.: Neexistuje terminální řetěz w takový, že A w. Nepoužitelnost typu II.: Neexistují řetězy x, y takové, že S xay. Řekneme, že CFG G = (N, Σ, P, S) je bez ε-pravidel právě když buď 1. neobsahuje žádné -pravidlo (tj. pravidlo tvaru A ) nebo 2. v P existuje právě jedno -pravidlo S a S se nevyskytuje na pravé straně žádného pravidla z P. Jednoduchým pravidlem nazýváme každé pravidlo tvaru A B, kde A, B N. CFG G = (N, Σ, P, S) se nazývá necyklická, právě když neexistuje A N takový, že A + A. G se nazývá vlastní, právě když je bez nepoužitelných symbolů, bez -pravidel a necyklická. Ke každému neprázdnému bezkontextovému jazyku existuje vlastní bezkontextová gramatika, která jej generuje. Neterminál A v CFG G = (N, Σ, P, S) se nazývá rekursivní jestliže v G existuje derivace A + A. Je-li = resp. =, pak A se nazývá levorekursivní resp. pravorekursivní. CFG bez levorekursivních terminálů se nazývá nelevorekursivní. Normální formy bezkontextových gramatik Chomského normální forma Bezkontextová gramatika G = (N, Σ, P, S) je v Chomského normální formě (CNF) každé pravidlo z P má jeden z těchto tvarů: je bez -pravidel a 1. A BC, B, C N 2. A a, a Σ 102

104 3. S Každý bezkontextový jazyk lze generovat bezkontextovou gramatikou v Chomského normální formě. Greibachové normální forma Bezkontextová gramatika G = (N, Σ, P, S) je v Greibachové normální formě (GNF) právě když: G je bez -pravidel každé pravidlo z P je tvaru A a, kde a Σ a N. Každý bezkontextový jazyk lze generovat bezkontextovou gramatikou v Greibachové normální formě. Regulární výrazy Množina regulárních výrazů nad abecedou Σ, označovaná RE(Σ), je definována induktivně takto: 1., a a pro každé a Σ jsou regulární výrazy nad Σ (tzv. základní regulární výrazy). 2. Jsou-li E, F regulární výrazy nad Σ, jsou také (E. F), (E + F) a (E ) regulární výrazy nad Σ. 3. Každý regulární výraz vznikne po konečném počtu aplikací kroků 1 2. Každý regulární výraz E nad abecedou Σ popisuje (jednoznačně určuje) jazyk (E) nad abecedou Σ podle těchto pravidel: ( ) { } ( ) (a) {a} pro každé a Σ (E. F) (E). (F) (E + F) (E) (F) (E ) (E) Ekvivalenci mezi regulárními výrazy a konečnými automaty shrnuje Kleeneho věta: Libovolný jazyk je popsatelný regulárním výrazem, právě když je rozpoznatelný konečným automatem. Automaty Konečný automat (Finite Automaton, FA) M je pětice (Q, Σ, δ, q 0, F), kde Q je neprázdná konečná množina stavů, Σ je konečná množina vstupní abeceda, δ Q Σ Q je parciální přechodová funkce, q 0 Q je počáteční (iniciální) stav, F Q je množina koncových (akceptujících) stavů. Nedeterministický konečný automat (NFA) je M = (Q, Σ, δ, q 0, F), kde význam všech složek je stejný jako v definici FA s výjimkou přechodové funkce δ. Ta je definována jako (totální) zobrazení δ Q Σ 2 Q. 103

105 Pre každý NFA M = (Q, Σ, δ, q 0, F) existuje ekvivalentní deterministický FA (DFA). Nedeterministický zásobníkový automat (PushDown Automaton, PDA) je sedmice M = (Q, Σ, Γ, δ, q 0, Z 0, F), kde Q je konečná množina, jejíž prvky nazýváme stavy, Σ je konečná množina, tzv. vstupní abeceda, Γ je konečná množina, tzv. zásobníková abeceda, δ Q (Σ { }) Γ P n(q Γ ), tzv. (parciální) přechodová funkce (zápis P n(q Γ ) značí množinu všech konečných podmnožin množiny Q Γ ). q 0 Q je počáteční stav, Z 0 Γ je počáteční symbol v zásobníku, F Q je množina koncových stavů. Rozšířený zásobníkový automat je sedmice R = (Q, Σ, Γ, δ, q 0, Z 0, F), kde všechny symboly až na δ mají stejný význam jako v definici PDA, δ je zobrazením z konečné podmnožiny množiny Q (Σ { }) Γ do konečné podmnožiny množiny Q Γ. Více o automatech v otázce Automaty. Převody mezi jednotlivými reprezentacemi Vztah mezi konečnými automaty a regulárními gramatikami Třídy jazyků, které lze generovat regulárními gramatikami, resp. rozpoznat konečnými automaty, jsou si rovny. To znamená, že k dané regulární gramatice lze sestrojit ekvivalentní deterministický konečný automat a naopak. Regulární gramatika konečný automat Ke každé regulární gramatice G = (N, Σ, P, S), existuje nedeterministický konečný automat M = (Q, Σ, δ, q 0, F) takový, že (G) = (M). Myšlenka důkazu: Stavy automatu budou odpovídat neterminálům gramatiky, tj. pro každý neterminál A bude existovat stav A. Pro každé pravidlo A ab přidáme do δ(a, a) stav B. Abychom se mohli vypořádat také s pravidly tvaru C a, zavedeme speciální koncový stav q, který přidáme do δ(c, a). Počáteční stav bude S, koncový stav q a případně také S, pokud gramatika obsahuje pravidlo S. 104

106 Konečný automat regulární gramatika Pro každý konečný automat M = (Q, Σ, δ, q 0, F) existuje regulární gramatika G = (N, Σ, P, S) taková, že (M) = (G). Myšlenka důkazu: Neterminály budou odpovídat stavům, pravidla budou simulovat přechodovou funkci. Je tu však jeden problém pokud automat přijímá prázdné slovo (tj. počáteční stav je koncovým stavem), musí každá ekvivalentní gramatika nutně obsahovat pravidlo S, kde S je kořen. Pak se ale S nesmí vyskytovat na pravé straně žádného pravidla. Přitom je ale možné, že některé přechody automatu končí v počátečním stavu a mají být simulovány pravidly, které mají na pravé straně S, což by vedlo ke konfliktu s požadavkem pravostranných výskytů S. Tento problém vyřešíme tak, že k původnímu automatu přidáme nový iniciální stav (původní zachováme, akorát už není iniciální) a Z NĚJ (do něj žádný přechod nevede a nepovede) uděláme přechody stejně jako je měl původní iniciální. Potom už můžeme použít intuitivní přístup, kdy neterminály odpovídají stavům a přechody terminálům. Zásobníkové automaty a bezkontextové jazyky 105

107 Automaty Konečný automat, zásobníkový automat. Varianty automatů, metody akceptování. Nedeterminismus, determinizace automatů. Syntaktická analýza shora dolů a zdola nahoru. 106

108 Konečný automat Abstraktním modelem konečně stavových systémů (i nekonečně stavových, což ale není jejich hlavní poslání) jsou tzv. konečné automaty. Konečný automat je vybaven konečně stavovou řídící jednotkou (tj. konečnou pamětí), čtecí hlavou a páskou, na které je zapsané vstupní slovo viz obrázek. Na začátku výpočtu je hlava umístěna na nejlevějším políčku pásky. Automat na základě přečteného symbolu a momentálního stavu svůj stav změní a posune čtecí hlavu o jedno políčko vpravo. Výpočet končí, pokud se automat zablokuje, nebo přečte celé vstupní slovo. Slovo zapsané na pásce je automatem akceptováno, pokud je celé přečteno a výsledný stav je některý z předem určených koncových stavů. Množina všech slov, která daný konečný automat M akceptuje, tvoří jazyk akceptovaný automatem M. Formální definice: (Deterministický) konečný automat (Finite Automaton, (D)FA) M je pětice M = (Q, Σ, δ, q 0, F), kde: Q je neprázdná konečná množina stavů Σ je konečná množina vstupních symbolů, nazývaná také vstupní abeceda δ: Q x Σ je parciální přechodová funkce q 0 ϵ Q je počáteční stav F Q je množina koncových stavů Dále je třeba zavést rozšířenou přechodovou funkci δ : Q x Σ, definovanou induktivně vzhledem k délce slova ze Σ*: δ (q, ) = q pro každý stav q ϵ Q δ (q, wa) = { δ(δ (q, w), a) pokud je δ (q, w) i δ(δ (q, w), a) definováno jinak 107

109 Značení: znamená, že funkce není definována 𝛿 (𝑞, 𝑤) = 𝑝 znamená, že automat M přejde ze stavu q pod slovem 𝑤 (postupným přečtením zleva doprava) do stavu Jazyk L(M) přijímaný konečným automatem M, je tvořen právě všemi slovy, pod kterými automat přejde z počátečního stavu do některého z koncových stavů: o (𝑀) = { 𝑤 Σ 𝛿 (𝑞0, 𝑤) 𝐹} Jazyk, který je rozpoznatelný konečným automatem, se nazývá regulární jazyk. Konečné automaty M a M jsou ekvivalentní, pokud L(M) = L(M ). Reprezentace konečných automatů tabulkou, přechodovým grafem (viz nahoře) Zásobníkový automat Tak jako k regulárním gramatikám existují konečné automaty, které rozpoznávají právě jazyky generované těmito gramatikami, tak i ke gramatikám bezkontextovým existují ve výše uvedeném smyslu ekvivalentní automaty tzv. zásobníkové automaty (push-down automata PDA). PDA si lze představit jako (nedeterministický nedeterminismus zaveden níže) konečný automat s tím, že navíc obsahuje (pomocnou) paměť (a díky ní i další zdroj nedeterminismu), která pracuje jako zásobník (push-down store) a jejíž velikost není shora omezena je tzv. potenciálně nekonečná v následujícím smyslu: v každém okamžiku (konečného) výpočtu je sice konečná (tj. v zásobníku je uloženo jen konečně mnoho symbolů), ale kdykoli ji můžeme rozšířit o další konečný počet paměťových míst (přidat další symboly na zásobník). Ze vstupní pásky, na níž je zapsáno slovo nad jistou vstupní abecedou, lze pouze číst a čtecí hlava se pohybuje jen vpravo. Automat může na vrchol (vrchol zásobníku vlevo) zásobníku ukládat symboly (opět z jisté abecedy) a takto uložené symboly může následně číst s tím, že smí číst pouze z vrcholu zásobníku. Přečtený symbol je z vrcholu odstraněn (tj. systém LIFO). Jinými slovy, nelze číst do hloubi zásobníku, aniž by přečtené symboly nebyly odstraněny. Formální definice: (Nedeterministický) zásobníkový automat M je sedmice 𝑀 = (𝑄, Σ, Γ, 𝛿, 𝑞0, 𝑍0, 𝐹), kde: Q je konečná množina stavů automatu Σ je konečná množina vstupních symbolů, tzv. vstupní abeceda Γ je konečná množina zásobníkových symbolů, tzv. zásobníková abeceda 𝛿: 𝑄 𝑥 (Σ { } Γ) 𝑃 𝑛 (𝑄 Γ ), tzv. (parciální) přechodová funkce, kde 𝑃 množinu všech konečných podmnožin 𝑄 Γ q0 Q je počáteční stav 108 𝑛 značí

110 Z 0 Γ je počáteční zásobníkový symbol F Q je množina koncových stavů Vnitřní konfigurací PDA M nazveme libovolný prvek (q, γ) Q Γ, kde q je momentální stav PDA M a γ je celý obsah zásobníku s vrcholem psaným vlevo). Konfigurací nazveme libovolný prvek (p, w, ) Q Σ Γ (navíc i ω dosud nepřečtená část vstupního řetězu). Krok výpočtu: binární relace M definovaná jako: (p, aw, Z ) M (q, w, γ ) (q, γ) δ(p, a, Z) pro a Σ { } - (po přečtení slova a přejdeme ze stavu p do stavu q a obsah zásobníku Zα nahradíme γα) Rozšířený zásobníkový automat sedmice R = (Q, Σ, Γ, δ, q 0, Z 0, F), kde všechny symboly až na δ mají stejný význam jako v definici PDA. (vrchol stejný jako PDA) δ je zobrazením z konečné podmnožiny množiny (Q x (Σ { }) Γ ) do konečných podmnožin množiny Q Γ. Pojmy konfigurace a akceptování zůstávají beze změn. Krok výpočtu: (p, aw, γ ) M (q, w, γ ) (q, γ ) δ(p, a, γ) pro a Σ { }. Ke každému rozšířenému PDA existuje ekvivalentní PDA. Metody akceptování: Jazyk akceptovaný PDA M koncovým stavem definujeme jako: L(M) = { w ε Σ (q 0, w, Z 0 ) (q,, ), kde q F, Γ } Jazyk akceptovaný PDA M prázdným zásobníkem definujeme jako: L(M) = { w ε Σ (q 0, w, Z 0 ) (q,, ), kde q Q } Každý výpočet pro vstupní slovo ω tedy začíná v konfiguraci (q 0, ω, Z 0), tj. ve vnitřní konfiguraci (q 0,Z 0) a dosud nečteným vstupem. Způsobů akceptování je obecně více: každá akceptující (finální) konfigurace je charakterizována zcela přečteným vstupním slovem, tj. (q,, ), vzájemně se však tyto způsoby liší tím, co prohlásíme za akceptující vnitřní konfiguraci. Ve výše uvedené definici jsou to po řadě totální stavy z F Γ, resp. Q { }. Další způsoby akceptování lze definovat tak, že za akceptující vnitřní konfigurace prohlásíme např. prvky z F {ε} - akceptování koncovým stavem a prázdným zásobníkem. Ekvivalence dvou způsobů akceptování: Pro každý jazyk L platí: L = L(N) pro nějaký PDA N = (M) pro nějaký PDA M Nedeterminismus Nedeterministický konečný automat (NFA) je zařízení, které je velimi podobné konečnému automatu, avšak rozdíl je v tom, že NFA nemusí mít pro daný stav a vstupní symbol určen následující stav jednoznačně (lze si to představit tak, že z jednoho uzlu může vycházet více hran se stejným návěštím). Není tedy předem jasné, do jakého stavu se automat dostane po zpracování daného slova w, neboť automat si během výpočtu může vybírat jeden z možných následujících stavů. Slovo w bude akceptováno, pokud alespoň jeden z možných výpočtů nad slovem w skončí v koncovém stavu. Nedeterminismus je velmi silný popisný aparát, který často umožňuje zachytit strukturu jazyka elegantním a přirozeným způsobem. 109

111 Navrhnout DFA, který rozpoznává L = {w {a, b} w o sa je odslovo abba ne o bab}, není zcela triviální. Naopak NFA lze zkonstruovat poměrně snadno (viz obrázek níže). Nedeterminismus lze dobře využít jako popisný prostředek, nemá však vliv na výpočetní sílu konečných automatů. Ke každému NFA totiž ve skutečnosti existuje ekvivalentní DFA, který lze algoritmicky zkonstruovat (viz. v sekci determinizace) Formální definice: NFA je pětice M = (Q, Σ, δ, q 0, F), kde význam všech složek je stejný jako u FA, s výjimkou přechodové funkce ta je definovaná jako (totální) zobrazení: δ: Q Σ 2 Q Na deterministické automaty tedy můžeme pohlížet jako na speciální případ NFA, kdy pro každé q Q a a Σ je množina δ(q, a) nejvýše jednoprvková. Zavedeme rozšířenou přechodovou funkci δ : Q Σ 2 Q : δ (q, ) = {q} δ (q, wa) = p (, ) δ(p, a) Jazyk akceptovaný NFA M je definovaný jako: L(M) = {w ε Σ δ (q 0, w) F } Další varianty automatů Automaty s ε-kroky: Model NFA je možné rozšířit o tzv. -kroky. Automat pak může svůj stav za určitých okolností změnit samovolně, tj. bez přečtení vstupního symbolu. Tato schopnost je formálně popsána pomocí -kroků, které si lze na přechodových grafech představit jako hrany, jejiž návěštím je prázdné slovo. Přes tyto hrany může automat během výpočtu na slově w měnit svůj stav bez toho, aby ze vstupu cokoliv přečetl mezi přečtením dvou po sobě jdoucích symbolů z w může provést libovolné konečné množství -přechodů. Ke každému takovému automatu existuje ekvivalentní NFA bez -kroků. Formální definice: NFA s ε-kroky je pětice M = (Q, Σ, δ, q 0, F), kde význam všech složek je stejný jako v definici NFA s výjimkou přechodové funkce ta je definována jako totální zobrazení: δ: Q (Σ {ε}) 2 Q Rozšířenou přechodovou funkci δ ovšem musíme definovat odlišným způsobem, nejprve zavedeme funkci D ε : Q 2 Q, která pro daný stav p vrací množinu stavů, kterých může M dosáhnout z p bez toho, aby četl vstup. Pro dané p Q je (p) nejmenší množina X Q taková, že platí: p X Pokud q X a r δ(q, ), pak také r X 110

112 Nyní již můžeme definovat rozšířenou přechodovou funkci δ : Q x Σ 2 Q takto: δ (q, ) = (q) δ (q, wa) = (δ(p, a)) p (, ) Jazyk přijímaný automatem M s ε-kroky je definován stejně jako v případě NFA, tedy: L(M) = {ω ε Σ δ (q 0, ω) F } Deterministický zásobníkový automat (DPDA) Formální definice: Řekněme, že PDA M = (Q, Σ, Γ, δ, q 0, Z 0, F) je deterministický, jestliže jsou splněny tyto podmínky: 1. Pro všechna q Q a Z Γ platí: kdykoliv δ(q,, Z), pak δ(q, a, Z) = pro všechna a Σ 2. Pro žádné q Q, Z Γ, a (Σ { }) neobsahuje δ(q, a, Z) více než jeden prvek. Podmínka 1 vylučuje možnost volby mezi krokem nezávislým na vstupním symbolu ( -krokem) a krokem, kdy se ze vstupu čte. Podmínka 2 říká, že jak v případě čtecího kroku, tak i pro -krok, neexistuje více než jedna varianta, jak dále pokračovat. Řekněme, že L je deterministický bezkontextový jazyk (DCFL), právě když existuje DPDA M takový, že: L = L(M) Determinizace Transformace NFA na ekvivalentní DFA: Vstup: Nedeterministický konečný automat M = (Q, Σ, δ, q 0, F) Výstup: Ekvivalentní deterministický konečný automat M = (Q, Σ, δ, {q 0 }, F ) bez nedosažitelných stavů s totální přechodovou funkcí. (Výstupem algoritmu nemusí být minimální automat) Q = {{q 0 }}; δ = ; F ; one ; while (Q one) do M libovolný prvek množiny Q if M F then F F {M}; end if for all a Σ do N Q Q δ δ end for one = one end while p M δ(p, a); {N}; {((M, a), N)}; {M}; one; Příklad: Zadaný automat: a b c 1 {2,3} {3,4} {1} 2 {3} {4} {2} 111

113 3 {1,2,3} {1} {3,4} 4 {1} {1} {3,4} Výsledek: a b c 1 2,3 3,4 1 2,3 1,2,3 1,4 2,3,4 3,4 1,2,3 1 3,4 1,2,3 1,2,3 1,3,4 1,2,3,4 1,4 1,2,3 1,3,4 1,3,4 2,3,4 1,2,3 1,4 2,3,4 1,3,4 1,2,3 1,3,4 1,3,4 1,2,3,4 1,2,3 1,3,4 1,2,3,4 Syntaktická analýza shora dolů Syntaktická analýza se snaží zkonstruovat derivační strom pro dané slovo (vstup syntaktického analyzátoru, posloupnost symbolů). Metoda shora dolů (Top-Down) se nejprve zabývá nejvyšší úrovní derivačního stromu a postupně prochází derivační strom dolů s využitím formálních pravidel gramatiky. To znamená, že derivační strom věty konstruujeme od kořene (je ohodnocen startovacím symbolem gramatiky) směrem dolů k listům, zleva doprava, podle levé derivace. Syntaktickou analýzu shora dolů (její deterministickou verzi) používají pro svou práci LL syntaktické analyzátory. Analyzátorem je PDA (případně rozšířený PDA). Příklad Pro danou gramatiku G navrhněte zásobníkový automat, který provádí syntaktickou analýzu shora dolů a proveďte analýzu slova abaa. G = ({S, A, B}, {a, b}), P, S) P = { S absa, A AaB ab a, B ass ba } Nejdříve sestrojíme zásobníkový automat A, který provádí syntaktickou analýzu. A = ({q}, {a, b}, {a, b, S, A, B}, δ, q, S, ) (akc. prázdným zásobníkem) A k němu pravidla následujícím způsobem: Čtecí pravidla δ(q, a, a) = {(q, )} δ(q, b, b) = {(q, )} Nečtecí pravidla δ(q,, S) = {(q, ), (q, absa)} δ(q,, A) = {(q, AaB), (q, ab), (q, a)} δ(q,, B) = {(q, ass), (q, ba)} Pro lepší postup si sestrojíme derivační strom zadaného slova: S a b S A 112

114 a B a S S A nyní podle sestrojeného stromu aplikujeme pravidla zásobníkového automatu A: (q, abaa, S) (q, abaa, absa) (q, baa, bsa) (q, aa, SA) (q, aa, A) (q, aa, ab) (q, a, B) (q, a, ass) (q,, SS) (q,, S) (q,, ) Zjistili jsme, že námi vytvořený PDA slovo abaa akceptuje a proto ho gramatika G generuje. Syntaktická analýza zdola nahoru Syntaktická analýza zdola nahoru je postup syntaktické analýzy, který identifikuje nejdříve základní jednotky a z nich potom odvozuje strukturu s vyšší úrovní uspořádání. Název strategie vychází z konceptu derivačního stromu, který má nejzákladnější jednotky ve spodní části, ze kterých postupně vnikají struktury složené. Na vrcholu stromu je posléze samostatná jednotka nebo symbol zahrnující všechny informace, které jsou analyzovány. V této strategii zpracování dochází k analýze obou jazyků jak přirozeného jazyka, tak počítačového jazyka, což je v kontrastu se syntaktickou analýzou shora dolů, ve které jsou komplexní jednotky děleny do jednodušších částí až do okamžiku, kdy jsou veškeré informace zpracovány. Příklad Pro danou gramatiku G navrhněte rozšířený zásobníkový automat, který provádí syntaktickou analýzu zdola nahoru a proveďte analýzu slova abaa. G = ({S, A, B}, {a, b}), P, S) (zásobník se sklápí doprava) P = { S absa, A AaB ab a, B ass ba } Nejdříve zase sestrojíme zásobníkový automat A, který provádí syntaktickou analýzu. A = ({q, r}, {a, b}, {a, b, S, A, B, }, δ, q,, {r}) (akc. prázdným zásobníkem) A k němu pravidla následujícím způsobem: Čtecí pravidla δ(q 0, a, ) = {(q 0, a)} δ(q 0, b, ) = {(q 0, b)} Nečtecí pravidla δ(q 0,, ) = {(q 0, S)} δ(q 0,, absa) = {(q 0, S)} δ(q 0,, AaB) = {(q 0, A)} δ(q 0,, ab) = {(q 0, A)} δ(q 0,, a) = {(q 0, A)} δ(q 0,, ass) = {(q 0, B)} δ(q 0,, ba) = {(q 0, B)} δ(q 0,, S) = {(q 1, )} 113

115 Opět sestrojíme derivační strom zadaného slova: S a b S A a B a S S A nyní podle sestrojeného stromu aplikujeme pravidla zásobníkového automatu A: (q 0, abaa, ) (q 0, baa, a) (q 0, aa, ab) (q 0, aa, abs) (q 0, a, absa) (q 0,, absaa) (q 0,, absaas) (q 0,, absaass) (q 0,, absab) (q 0,, absa) (q 0,, S) (q 1,, ) Zjistili jsme, že gramatika G generuje slovo abaa neboť námi vytvořený PDA A ho akceptuje. 114

116 Korektnost a složitost Parciální a totální korektnost, důkazy korektnosti (vstupní a výstupní podmínka, invarianty cyklů), asymptotická složitost, O-notace. Analýza korektnosti a složitosti základních algoritmů (např. řadicí algoritmy, binární vyhledávání). 115

117 Potřebné definice: Algoritmus přesný a jednoznačný popis toho, jak máme postupovat, abychom po provedení konečně mnoha kroků postupu na vstupních hodnotách dostali kýžený výsledek. Program algoritmus zapsaný v jistém programovacím jazyce. Korektnost algoritmus skončí pro libovolná (korektní) data správným výsledkem v konečném množství kroků. Konečnost algoritmus má konečné množství kroků. Vstupní podmínka ( fí) Podmínka, která ze všech možných vstupů do daného algoritmu vymezuje ty, pro které je algoritmus definován. Výstupní podmínka ( psí) podmínka, která 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. Specifikace vstupní a výstupní podmínka daného algoritmu. Parciální korektnost algoritmus je parciálně korektní, pokud pro každý vstup splňující vstupní podmínku, pro nějž výpočet skoční, výstup splňuje podmínku výstupní (spolu s odpovídajícím vstupem) Konvergence algoritmus je konvergentní, pokud pro každý vstup splňující vstupní podmínku výpočet skončí. Totalní korektnost algoritmus je totálně korektní, pokud je parciálně korektní a konvergentní. Variant je hodnota daná přirozeným číslem, která se v průběhu algoritmu stále snižuje, dokud nenabude hodnoty, při které algoritmus terminuje. Invariant cyklu invariant daného cyklu v algoritmu je každé takové tvrzení o algoritmu, které platí vždy těsně před cyklem (na počátku algoritmu i po jeho prvním kroku), dále po skončení každého průchodu cyklem (pokud k nějakému dojde) a nakonec také těsně po cyklu. Úplný binární strom vývážený a plněný zleva, mající n 1 nillů (nulových ukazatelů "nepoužitých listů") a n / 2 listů Binární strom každý kořen může mít žádný, jeden nebo dva potomky. Binární halda je úplný binárbí strom, ve kterém platí, že každý potomek vrcholku má nižší nebo stejnou hodnotu nežli vrcholek sám. Nové uzly jsou do haldy vkládány zleva. Dále pak pokujd indexujeme prvky hlady od jedničky pěkně shora dolů a zárověň zleva doprava, tak potomci každého vrcholu jsou na indexu 2i 1 a 2i 2 (při indexování od 0). Vlastnost "býti haldou" je rekurzivní, takže všechny podstromy haldy jsou také haldou. Halda musí být uspořádána může být buď maximová (na vrcholku je největší prvek a dole jsou vždy menší/stejné) nebo minimová (analogicky naopak). Délky všech větví se liší maximálně o jednu. Neprázdná binární halda má na n uzlech hloubku log 2 n. Algoritmy užívající metodu "rozděl a panuj" (Divide & Impera) dělají to, že daný problém rozdělí na více jednoduchých elementárních problémů, které lze snadno vyřešit (třeba rekurzí). Jsou to Quicksort, Merge sort. Délka výpočtu je počet kroků výpočetního modelu (redukční kroky, atomické operace, ) pro korektní algoritmus a korektní vstup. Složitost algortimu vyjadřuje náročnost algoritmu na různé zdroje výpočtu: dobu výpočtu, velikost paměti, počet procesorů aj. Podle toho rozlišujeme různé míry složitosti. Složitost problému je zavedena jako složitost optimálního algoritmu řešícího tento problém. Časová složitost problému časová složitost algoritmu, který řeší daný problém (i na nejpomalejších datech) nejrychleji. 116

118 Prostorová složitost problému prostorová složitost algoritmu, který řeší daný problém (i na nejméně příznivých datech) v nejmenší paměti. Časová složitost algoritmu funkce, která pro každou velikost vstupních dat je rovna délce nejdelšího výpočtu na všech možných datech této velikosti. Jde o analýzu nejhoršího případu. Rychlost růstu funkcí pro každou funkci g : N R 0 zavedem následující množiny funkcí (, théta;, omikron;, omega): g f c 0. n. n. f n c gn (množina fukncí rostoucích nejvýše ( ) tak rychle jako g) g f c 0. n. n. f n c gn (množina fukncí rostoucích alespoň ( ) tak rychle jako g) g g g (množina fukncí rostoucích stejně ( ) tak rychle jako g) g f c 0. n. n. 0 f n c gn 0 0 (množina fukncí rostoucích pomaleji ( ) než g) g f c 0. n. n. 0 c gn f n 0 0 (množina fukncí rostoucích rychleji ( ) než g) Tyto řády používáme proto, protože u většiny algoritmů nemůžeme říct, že jejich složitost odpovídá přesně jedné třídě, protože rychlost algoritmu závisí také na povaze dat. Z tohoto důvodu používáme řád růstu funkcí, který zohledňuje nejhorší i nejlepší možný běh algoritmu. O algoritmu tak například řekneme, že je v 2 n a n, což znamená, že nikdy nedoběhne rychleji než v lineárním čase, ale na druhou stranu jeho složitost není pro žádná data horší než kvadratická. Příklad patří/nepatří do složitostní třídy? 3n n n 2 ano, patří n 3n n ano, rozhodující člen 3n n n 2 ano 3n n n 2 ne 3n n n 2 ano 5 n je menší (spadá do) 17 n Pár fakrických údajů k této části: 117

119 c je nějaká číselná konstanta (1, 5/7, , 0.878, ); Různé členy jsou rozděleny podle znemének +/-; dvě funkce vždycky porovnáváme podle jejich rozhodujících členů, zbývající menší členy a konstanty, 2 kterými násobíme, nás "nezajímají", například 2n 2 n log n ; funkce nemusí být v takhle hezkém tvaru a může se stát, že ji bude potřeba matematicky upravit!!! (fígle s logaritmy, fígle s exponenty, ) nlog n, n n log n! od log n!, nlog n a log patří všechny do stejné třídy složitosti, ale matematicky se n n log n liší!!! ( log n! n log n log n ) Asymptotická složitost algoritmu Složitost algoritmu udává, jak je daný algoritmus rychlý (kolik provede elementárních operací) vzhledem k množině vstupních dat. Ke klasifikaci algoritmů se obvykle používá tzv. asymtotická složitost, což je rozdělení algoritmů do tříd složitostí. Jinak řečeno, asymptotická složitost rozděluje algoritmy podle jejich náročnosti tak, že sleduje jejich chování v závislosti na velikosti/počtu vstupních dat. Popisuje se pomocí O- notace (omikron notace, "big O notation"). Asymptota (asymptotická přímka) křivky je taková přímka, jejíž vzdálenost od křivky se s rostoucí souřadnicí limitně zmenšuje. Pokud máme dva algoritmy o srovnatelné složitosti, první pustit na 2x rychlejším stroji a nepoznáme rozdíl. Pokud ovšem nejsou ve stejné třídě složitosti, například jeden n a druhý 2n 2 n a druhý n, tak nám stačí ten druhý, tak nám na srovnání výkonu nepomůže libovolně výkonný počítač, protože dvojnásobný objem dat bude druhému algoritmu trvat 4x tolik času, desetinásobný 100x tolik času Jednoduše řečeno: pokud spadají dva algoritmy do různých tříd asymptotické složitosti, pak vždy existuje takové množství dat, od kterého je asymptoticky lepší algoritmus vždy rychlejší, bez ohledu na to, kolikrát je některý z počítačů výkonnější. 118

120 119 Příklad seřazení několika reprezentativních funkcí, podle jejich rychlosti růstu 2 log log! log log log log log 6 n n n n n n n n n c n k n n n n n n n n n n! log 3 5 2

121 Doporučuji (!!!) si blíže prozkoumat tyto funkce (například které kdy/jak prochází 0, 1 ) Příklad specifikace a totální korektnosti (parciální korektnosti - invariant, konvergence): Funkce power pro čísla z a n počíta mocninu z n. Napište specifikaci a pak k dané specifikaci ověřte totální korektnost: real power(real z, int n) { real r = 1; for(int i = 1; i <= n; i = i + 1) r = r * z; return r; } Pár věcí, co je důležité si uvědomit: Vše záleží na invariantu. Při jeho špatné volbě NIKDY NIC NEDOKÁŽETE! Dále je potřeba si dát pozor na to, že kdyby například naše funkce power měla cyklus, kde "for(int i = 0; i < n; i = i + 1)" a i začínalo od 0, tak bude invariant jiný, než ten, co bude v tomto našem vzorovém příkladě (konkrétně bude r = z i ). 1. Specifikace (nalezení vstupní a výstupní podmínky) Nalezneme vstupy, pro které je program definován. Program má počítat z n (což je cíl funkce a vlastně výstupní podmínka). Když si však zadáme za z a n nějaké hodnoty (většinou nějaké maxima/krajní hodnoty, třeba kolem 0), tak zjistíme následující: když je z=0, tak je výsledek 1 (což mocniny normálně nejsou) a také, že pokud bude n<0, tak to nebude fungovat (viz podmínku for cyklu). Z tohoto nám výjdou podmínky: 2. Totální korektnost Vstupní podmínka: z, n z 0 n 0. n Výstupní podmínka: z, n, r r z. Aby byl algoritmus totálně korektní, tak musí být parciálně korektní a konvergentní. 2.1 Parciální korektnost Protože naše funkce power obsahuje cyklus, musíme najít invariant, pomocí kterého dokážeme platnost vstupní a výstupní podmínky. Abychom sestavili správný invariant, musíme vzít v potaz to, co cyklus dělá a to, že se chceme dostat ke vztahu r=z n k naší výstupní podmínce. 120

122 Vidíme, že cyklus v každém svém kroku počítá hodnotu r tak, že ji pokaždé vynásobí z. Proto bychom mohli říct, že invariantem může být r=z i. Invariant však musí platit před/v/po cyklu. Proto kdyby bylo n = 0, tak k cyklu nedojde a r = z 1 = z a to není správně (při volání power(3,0) bychom dostali výsledek 3 místo správného výsledku 1). Musíme proto tento "skoroinvariant" ještě upravit. Protože při každém vstupu do cyklu, je r=1, tak můžeme náš skoroinvariant vylepšit na r = z i-1. Tento vztach si opět ověříme zavoláním power(3,0) a třeba ještě power(2,3) a výjde nám to. Toto se nedá nijak naučit, na invariant musíte přijít. Může to být vlastně "cokoliv" jakákoliv kombinace proměnných z algoritmu, musí ale platit před/v/po cyklu. Nyní rozdělíme kód funkce power na tři části. První část je kus před cyklem (včetně jeho začátku), druhá je cyklus a třetí je od konce cyklu do konce funkce. První část (A) funkce tedy obsahuje vstupní podmínku. Před cyklem definujeme r a na počátku cyklu nastavujeme také i. Dále pak (protože invariant musí platit před/v/po cyklu) tady máme ještě invariant. Prostřední část (B) cyklus obsahuje invariant (opět připomenu, že invariant musí platit před/v/po cyklu). Dále tu pak máme předpoklad cyklu, že i je menší rovno n a nakonec vlastnosti, které cyklus provádí, tj. že r r * z a i i 1. Je důležité si tyto podmínky sepsat v pořadí, v jakém se provádí. Poslední část (C) cyklu obsahuje zase invariant. Pak předpoklad, díky kterému byl ukončen cyklus a to že i je větší než n. A nakonec ještě výstupní podmínku. Toto všechno se vyčetlo z kódu funkce. Tedy: A B : r 1; i I : r z 0 n 0 i z I : r I : r z i1 assume i n; r r * z; i i 1; I : r : r z i 1 assume i n; n Abychom ověřili, že podmínky na začátcích a koncích našich cest programem wp, s pro výpočet vyjadřovaly opravdu to co program podél cest opravdu dělá, stačí aplikovat operátor nejslabšího předpokladu pro příkaz s aby po jeho vykonání platilo (gámma). Pro typy příkladu je definován takto: x ( x je proměnná; e je výraz), pak 1. Pokud je příkaz s tvaru e wp, x e x / e, kde x / e je formule, kde se všechny výskyty proměnné x nahradí výrazem e. 2. Pokud je s příkaz assume, pak wp, assume. 121

123 122 Podle toho pak pro naše tři cesty dostáváme tvrzení: A: z n z B: * i i z z r n i z r C: n i z r n i z r 1 Podmínka pro A platí ( z z ), pro B taky platí ( i z z r * (nezapomenout, že r se s každým cyklem mění)). Podmínka pro C však neplatí. Neplatí, protože potřebujeme vyjádřit (z podmínky n i ) vztah mezi i a n nemáme v tom vztahu n z r proměnnou i. Ta kontrola ten invariant se většinou zjištuje právě v té podmínce cyklu v tom "for(int i = 1; i <= n; i = i + 1)" Z tohoto vyplývá, že nemáme dostatečně zadaný invariant že náš nynější invariant i1 z r, ze kterého vyjadřujeme formule výše, postrádá nějaké vyjádření i. Analýzou cyklu zjistíme, že i jde k n a cyklus se naposledy provede pro n i. To znamená, že i může nabývat hodnoty 1 n (to 1 je to i, které je po cyklu). Tato podmínka ( 1 n i ) platí i před cyklem (platí, ikdyž se cyklus neprovede ani jednou, tj. 0 n ). Proto může náš invariant i1 z r bez problému rozšířit na 1 1 n i z r i. Znovu připomenu, že invariant musí platit před/v/po cyklu, což tento nový také platí. Nyní s naším novým invariantem znovu ověříme cesty: A B C 1 1; 1; n i z r I i r n z i 1 1; ; * ; n i z r I i i z r r n i assume n i z r I i i n i z r n i assume n i z r I ; 1 1 A: n z n z platí B: 1 1 * n i z z r n i n i z r i i platí (protože n i ) C: i n i z z r n i n i z r platí ( 1 1 i n i n i )

124 Funkce je tedy parciálně korektní. 2.2 Konvergence Hledáme nějakou nezápornou klesající hodnotu. Jedinné, co nám ve funkci power může zabránit v ukončení je cyklus. V něm se v každé iteraci hodnota i blíží po jedné k hodnotě n. Najdeme si tedy například (na to musíte přijít) n i 1. Nemůžeme vzít n i, protože n může být 0 a i se na zažátku nastavuje na 1, takže n i se může rovnat -1, což se příčí s tím, co hledáme. Toto naše n i 1 striktně klesá při každém průchodu o 1 a nikdy nebude záporné. Cyklus tedy skončí. Konvergenci si můžeme dokázat tak, že vezmeme cestu cyklu a ukážeme, že při každém jeho průchodu n, i n i 1 hodnota klesá. Vytvoříme hodnotící funkci : n i 1 BEGINING : n i 1 assume r r * z; i i 1; i END : n i 1 Abychom ověřili, že END < BEGINING, použijeme výše zmíněný operátor wp a dostaneme formuli: Což platí a algoritmus je konvergentní. n i 1 0 i n n i 1 1 n i 1 123

125 Složitost algoritmů Řadící algoritmy slouží k setřízení jednotlivých prvků vstupního souboru (obvykle seznamu) dle jejich velikosti. Při volbě vhodného řadícího algoritmu je třeba dbát na několik kritérií - výkon algoritmu (jeho časová složitost), implementační složitost, vhodnost pro danou datovou strukturu a v neposlední řadě stabilita algoritmu. Z hlediska časové složitosti jsou nejvýkonnějšími algoritmy ty, které neporovnávají jednotlivé hodnoty prvků, ale fungují na jiném pricipu (složitost n ). Příkladem je například counting sort (který počítá výskyty jednotlivých hodnot) nebo radix sort (řadí řetězce fixní délky dle jednotlivých znaků). Tyto algoritmy ale nejsou vhodné pro všeobecné použití. Z tohoto důvodu pro všeobecné použití volíme algoritmy třídy n log heapsort, quicksort nebo merge sort. Tyto algoritmy jsou optimální, jelikož bylo dokázáno, že algoritmus založený na bázi porovnávání hodnot musí mít složitost n log n. 2 Za předpokladu malé velikosti dat jsou vhodným řešením algoritmy se složitostí n bubble sort, insertion sort, selection sort, protože je jejich implementace velmi jednoduchá. Z kvadratických algoritmů je nejvýkonnější Shell sort - řazení se snižujícím se přírůstkem. Pro zopakování (stabilita a přirozenost): Řazení (algoritmus je) je stabilní, pokud v průběhu nedojde k prohození prvků se stejnou hodnotou (první Karel Novák ze dvou Karlů Nováků v seznamu hostů bude pořád prvním). Stabilita je žádaná například v případě, kdy řadíme seznamy lidí poprvé podle příjmení a pak podle křestního jména (aby omylem nepřehodil příjmením křestní jména). Řadící algoritmus je přirozený, pokud rychleji zpracuje již částečně seřezenou posloupnost. Nepřirozený algoritmus "seřazuje" i seřezenou řadu. Například Quicksort se stává nepřirozeným při špatné volbě pivota. Analýza korektnosti a složitosti základních algoritmů (např. řadicí algoritmy, binární vyhledávání) DŮLEŽITÉ Musíte se naučit velmi dobře principy alespoň základních řadících algoritmů (Bubble, Quick, Merge, Heap, Insert). Z toho dokážete odvodit složitost (třeba Insert pro každý prvek z n prochízí a hledá mezi těmito n 2 prvky místo, kam ho šoupnout = takže to je n n v nejhorším případě = n ) Tak stejně korektost. Nemáte šanci za ten čas stihnout dokázat totální korektost těchto algoritmů způsobem, jako jsme dělali power. Spíše půjde o to, ukázat směr, jakým byste se vydali, ukázat, že u toho dokážete přemýšlet. Že víte, kde třeba v tom algoritmu najít konvergenci (třeba jako klesající velikost pole při průchodu algoritmu aj.) Někde se složitosti udávají v a někdy v. To si musíte obhájit. Obě je dobře, musíte ale zdůvodnit, proč jste řekli zrovna to své. Možná bude taky potřeba zdůvodnit, proč je algoritmus přirozený nebo stabilní opět to zjistíte z principu. Bubble sort Přirozený a stabilní 124 n

126 n 2 Začná vždy z jedné strany a "tlačí" (probublává) nejmenší prvek co najde na konec, pak znova Složitost: K seřazení bude potřeba n 1 cyklů, protože při každém průchodu vytlačíme jedn prvek na konec posloupnosti. Poslední prvek není třeba řadit, ten je triviálně seřazen (prostě zbyl na začátku ten největší). Další částí algoritmu je vnitřní podmínka, která rozhoduje o porovnání dvou porovnaných prvků (větší či menší). Vnitřní cyklus se provede 1 n 2 n n krát. (v deseti prvcích provedu devět porovnání a dotlačím nejmenší/největší na konec. Pak ze zbylých devíti prvků provedu osm porovnání a dotlačím největší/nejmenší na předposlední místo nakonec mi zbyde ten jeden, který je triviálně seřazen zůstal sám) To je celkem n 1 sčítanců (rozuměj čísel = když mám pět prvků, tak mám: n 1 n 2 n 3 n to jsou čtyři sčítance (čtyři čísla). Pro n 5 ) a podle vzorce na aritmetickou posloupnost je počet operací (pocetscitancu) * ((prvni + posledni)/2) = n 1 n n 2 n 2 2 Což je asymptoticky n (bereme vždy ten největší člen a lineární funkce a konstanta rostou asymptoticky pomaleji, můžeme je zanedbat). Protože jde jak o nejhorší, tak o nejlepší případ (Bubblesort porovnává stejně, ikdyby bylo pole seřazeno přesně naopak a ikdyby bylo už seřazeno), je výsledná asymptotická 2 složitost n. Insert sort (vkládáním) Přirozený a stabilní n 2 Jeho vylepšením je Shell sort (není ale stabilní) Označíme první prvek jako seřazený. Vezmeme další prvek(ky), pro něž hledáme správné místo v posloupnosti již seřezených prvků, kde ho pak vložíme. Tak to děláme dokola, dokud nejsou všechny seřazeny. Z tohoto taky vyplívá, že pokud máme seřazené pole, tak se jeho složitost blíží k n (protože vlastně nic nikam nevkládá, jenom prohlíží prvky a "potvrzuje si", že jsou na správném místě). Díky k této výkonnostní výhodě je insertion sort a jeho modifikace často používán jako doplněk k řadícím algoritmům typu "rozděl a 125

127 panuj" (quicksort, merge sort) pro řazení malých polí (pro n 10 je insertion sort rychlejší než quicksort) je efektivní pro malé vstupy. Heapsort (řazení haldou) NEpřiorezný a NEstabilní n n log - tato složitost je zaručená, proto je vhodnější pro použití v real-time systémech (než v 2 průměru efektivnější Quicksort, který však může ve špatných případech dosahovat složiosti až n Jeden z nejefektivnějších řadících algoritmu založených na porovnávání dvou prvků Nutným vstupem pro heap sort je binární halda (maximová nebo minimová)! 126 ) Na youtube naleznete spoustu příkladů (například tento) pod heslem "heapsort example" a pro jistotu jsem ho i stáhnul a přiložil. Postup: Nejprve je nutno sestavit haldu (dejme tomu maximovou). Tj. postupně bereme z pole prvky a pěkne shora dolů a zleva doprava z nich děláme binární strom. Musí ale pořád platit, že když jsou dva prvky nad sebou, tak ten výš je větší (v maximové haldě). Takže pokud vložíme někam dolů velký prvek, tak ho musíme prostrkat co nejvýše, dokud to jde dokud se nedostane na vrchol, nebo je nad ním vyšší prvek (v maximové haldě). Takto sestavíme celou haldu. Nesmíme zapomenout, že to děláme zleva! Nyní přepíšeme naši haldu zase do pole. Zhora dolů a zároveň zleva doprava začneme přepisovat jednotlivé prvky. Můžeme si to ověřit tím, že pro každý prvek na pozici i v našem poli, nalezneme jeho potomky na pozici 2i 1 (pro levého potomka) a 2i 2 (pro pravého potomka) (při indexování od 0). Nyní následuje řazení. Prvně prohodíme největší a nejmenší prvek (vrchol a poslední prvek; či v poli hodnot tu první a poslední). Protože se nám nyní nejvyšší prvek dostal na konec haldy, můžeme ho bez problému odšktrnout je seřazen. Nyní zkontrolujeme, jestli je naše binární maximová (minimová) halda pořád binární maximovou (minimovou) haldou. Jestli jsou každé dva prvky nad sebou v takovém poměru, že ten výš je větší (u maximové, u minimové samozřejmě naopak). Pokud budeme (a to budeme!) přehazovat prvky, tak je nesmíme zapomenout přehodit jak v haldě, tak v poli! Až tomu tak bude, až to bude zase binární maximová (minimová) halda, tak opět přehodíme nejměnší prvek a největší prvek z těch, co nám tam zbyly. Největší, který se nám tím pádem dostal na konec haldy, zase vyškrtneme (je seřazen) a opět zkontrolujeme a upravíme to, co nám zbylo, na binární maximovou (minimovou) haldu. A pořád tak dokola až do konce Merge sort (slučováním) Přirozený a stabilní, typu "rozděl a panuj" n log n Pracuje na principu "slévání" dvou již seřezených polí za pomoci dodatečného pole velikosti n. Merge sort byl vynalezen v roce 1 45 Johnem von Neumannem. Příklad třeba zde. Nejprve je nesetříděné pole rekurzivně půleno na jednotilvé prvky protože obsahuje pouze jeden prvek, jsou triviálně seřezeny. Pak sléváme. V každém kroku vybere ze dvou sousedních, stejných seznamů dva nejvyšší prvky a vybereme ten vyšší. Tan nakopírujeme do pole, kde slévá tyto dvě pole. Celý postup opakuje, dokud nevyprázní obě pole. Toto neustále opakuje, dokud neseřadí všechny tyto "podpole".

128 Merge sort by měl být korektní kvůli tomu, že ho rozdělujeme tak dlouho, že z něj zůstane jeden prvek, který je triválně seřazen. V merge sortu také platí (jakoby) "tranzitivita", že když máme tři prvky a, b, c a když je a b, b c tak logicky musí být a c. Proto, když podle principu merge sortu slučujeme prvky, tak víme, že budou seřazeny. Konvergenece v mergesortu by se dala směřovat k velikostem polí jak je vždycky půlíme, tak je budeme půlit až do toho jednoho prvku. Takže ta velikost polí je naše klesající nezáporná hodnota. Quick sort (rozdělováním) NEpřiorezný a NEstabilní, velmi rychlý Očekáváná (avšak nezaručená!) složitost je n log n 2 až n 2 heap sort a merge sort, ho jeho maximální časová náročnost n aplikacích. 127, avšak při špatné volbě pivota (v nejhoším případě). Proto tedy, ikdyž v praxi a podle některých testů se dá říct, že je rychlejší, než formálně rychlejší diskvalifikuje pro použití v kritických Celé je to o volbě "pivota". V zadaném poli zvolíme nějaký prvek, kteréý nazveme pivot. Následně pak přehazujeme pole tak, že na jednu stranu pivota posouváme prvky, které jsou větší a na druhou prvky, které jsou menší. První věc, co je nutná si uvědomit je, že pivot se tak dostane do pozice, kde už zůstane je už zařaren na správné místo. Takto to rekurzivně opakujeme pro každou ze dvou polovin, jenž nám vznikly rozdělením po volbě pivota. Ideální zvolení pivota nastává tehdy, když se nám podaří při každém rekuzivním volání rozpůlit pole (volba pivota je blízká mediánu (prostřední hodnota z pole seřazených prvků) řazené části pole), to však nemůžeme s určitostí zaručit (hledat jinými algoritmy mediány by bylo drahé). Většinou se to nechává na náhodě, ale existují i různé metody, třeba výbět n-tého prvku (sebevražda na částečně seřezených množinách = když třeba seřazujeme naopak už seřazené pole) nebo metoda výběru mediánu z nějakého menšího reprezentativního vzorku prvků. Ideální stav tedy nastává, když se nám podaří pole rozděli na poloviny. To je složitost log n (když mám pole o n 8 prvcích, tak se dokážu ve třech krocích dostat k jednomu prvku log 2 8 3). Při každém takovémto rozdělení můžu přehazovat ze strany na stranu až n prvků. Proto je ta "idální" složitost n log n. Na druhou stranu však můžeme zvolit pivota špatně. Zvolíme (neúmyslně) například nejvyšší nebo nejnižší prvek. V tomto případě nedojde k žádnému rozdělení na poloviny a taky se může stát, že budeme muset pospřeházet všechny zbývající prvky, co nám zůstaly na té jedné straně od pivota. Teď si představe, že pokaždé na každé z n úrovní výběru pivota zvolíme takový krajní prvek a na každé této úrovní musíme povyměňovat až n všech zbývajících prvků (ty, co jsou na jedné straně toho pivota a ještě nebyly pivotem). 2 Takto dostaneme n O n. n a tím pádem tu nějhorší možnou složitost Quicksortu Shell sort (se snižujícím se přírůstkem) Přirozený a NEstabilní n 2 Podobný insert sortu (jeho vylepšení), nejvýkoňější z "kvadratickosložitostních" algoritmů. Rozdíl oproti insertsortu je ten, že neporovnává prvky, které spolu sousedí, ale prvky, mezi nimiž je určitá mezera. Tato mezera se s počtem iterácí zmenšuje. Výhoda tohoto přístupu je tam, že prvky jsou rychle přemístěny na odpovídající stranu pole a v poslední iteraci algoritmus degeneruje na obyčejný insert sort, 2

129 kdy vlastně porovná už pohé minimum pouze sousední prvky. Největší problém je zvolit vhodnou mezeru. Původní autorův záměr bylo půlit pole, což se ale pro některé situace neosvědčilo. Radix sort (přihrádkové řazení) NEpřirozený a stabilní n Používaný především k řazení řetězců totožné délky. Jeho princip vychází přímo z definice stability. Radix sort řadí řetězce totožné délky tak, že nad každým znakem od konce těchto řetězců zavolá stabilní řadicí algoritmus (seřadí řetězce podle posledního znaku, poté podle předposledního...). Po n-tém průchodu jsou řetězce seřazeny dle všech pozic znaků. Asymptotická složitost radix sortu je m C n, kde m je počet znaků řazených řetězců, je velikost dat a C n je složitost vnitřního stabilního řadícího algoritmu (za tímto účelem je často použit counting sort). Counting sort NEpřiozený a stabilní n Narozdíl od bubble sortu nebo quicksortu (porovnávání jednotlivých hodnot), pracuje na bázi výčtu jejich výskytů. Shakersort Přirozený a stabilní n 2 Vylepšený bubble sort (cestuje zleva do prava na jednu stranu tlačí manší a na druhou větší a skončí uprostřed) Selection sort NEpřirozený a NEstabilní n 2 Obecně rychlejší než Bubble sort, avšak pomalejší než insert sort. Vychází z toho, že pole řadíme od největšího k nejmenšímu. Prochází prvky a hledá ten největší, jak ho nalezne, tak ho šoupne na začátek. A tak znova v nesetříděné části zase tam hledá největší a posune ho na začátek, pak znova dokud neskončí. Lineární (sekvenční) vyhledávání Nejtriviálnější způsob vyhledávání. Když máme pole, o kterém nic nevíme, tak procházíme prvky jeden po druhém, než najdeme ten, který chceme. Složitost tohoto postupu je obět triviální, a to n. Binární vyhledávání (metoda půlení intervalu) Je to vyhledávácí technika, která zjišťuje pozici prvku v již seřezeném poli. Vždycky rozpůli pole a přesune se na tu stranu, na kterou potřebuje. Triviálně má asymptotickou složitost log 2 n. 128

130 Interpolační vyhledávání Vylepšení bináního vyhledávání pro případ kdy víme, že pole je nejsem seřezené, ale i také že jeho hodnoty jsou rovnoměrně rozloženy. Protože když toto víme, tak je nerozumné při hledná například čísla 2 v poli sta čísel od 0 do, biinárně pole dělit, ale je lepší se podívat někde blízko indexu 3, kde by se mohla dvojka nacházet. Asymtotická složitost je log log n. Zdroje: materiály z přednášek IB002 Algoritmy a datové struktury I (Návrh algoritmů I) doplňující (ve valné většině nepoužité) zdroje: Introduction to algorithms (kniha) 129

131 Datové struktury Základní abstraktní datové struktury, podporované operace (seznam, množina, zásobník, fronta, prioritní fronta). Typické implementace (zřetězený seznam, binární vyhledávací strom, halda, hašovací tabulka). Složitost operací. 130

132 Dynamické datové struktury Slouží k ukládání informací podobně jako proměnné. Dynamické datové struktury mají velikost danou nějakou proměnnou n, jejíž hodnota se může měnit. Jejich obsah se může v čase měnit, odtud název dynamické. Seznam Seznam je datová struktura pro ukládání údajů, která je na rozdíl od datové struktury množina tvořena posloupností prvků s pevně stanoveným pořadím. V seznamu se mohou nacházet opakovaně stejné údaje, což je jeho další důležitá odlišnost od množiny. Do seznamu chceme mít schopnost ukládat nové hodnoty, vypouštět z něj údaje, popř. i testovat, zda je daná hodnota v seznamu obsažena. Pomocí seznamu se dá implementovat zásobník nebo fronta. Pro samotnou implementaci seznamu se nabízí několik možností: Implementace pomocí dynamického pole: Tento seznam bývá implementován pomocí dynamicky alokovaného pole, které se v případě potřeby (jakmile počet prvků překročí alokované místo) realokuje na dvojnásobek. Je tomu tak proto, že na seznam délky n připadá log2(n) realokací. Kromě toho si musíme pamatovat počet uložených prvků (velikost seznamu) a velikost alokovaného pole (kapacitu seznamu). Na rozdíl od klasického pole můžeme prvky libovolně odebírat a přidávat a nemusíme znát předem jejich počet. Výhodou je rychlý přístup jednotlivým prvkům (O(1)), nevýhodou pomalé odebírání a vkládání prvků doprostřed či na začátek seznamu (O(n)). Při tomto úkonu se všechny prvky za inkriminovaným místem musí posunout o jednu pozici doleva či doprava. Implementace pomocí lineárního (jednostranného) spojového seznamu: Základem je záznam, obsahující uloženou hodnotu a ukazatel na následující prvek. Ukazatel posledního prvku je prázdný. Přístup k prvkům je značně pomalejší (O(n) místo O(1)), ale odebírání a vkládání prvků doprostřed seznamu probíhá v konstantním čase. Implementace pomocí oboustranného spojového seznamu: Oproti jednostrannému spojovému seznamu jeho záznam obsahuje i ukazatel na předchozí prvek. (Ukazatele prvního a posledního prvku jsou prázdné.) Umožníme tak procházení směrem od konce na začátek, musíme však v paměti udržovat dvakrát více ukazatelů. Podporované operace: Nil: S (vytvoření prázdného seznamu) 131

133 cons: B x S > S (přidání prvku do seznamu) null : S > Bool (test zda je seznam prázdný) head: S > B (získá první prvek seznamu) tail: S > S (získá seznam bez prvního prvku) Množina Množina (set) je abstraktní datová struktura, která obsahuje hodnoty, aniž by garantovala jejich pořadí. Tato struktura obsahuje každý prvek vždy maximálně jednou. Složitost provádění operací O(log(n)) Implementace pomocí: hašovací tabulky téměř konstantní přístup k prvkům proto je tato implementace vhodná pro časté vkládání a více viz Hašovací tabulky vyhledávacího stromu vhodné pro setříděné množiny seznamu s ignorováním pořadí a kontrolou vícenásobné přítomnosti prvku. Tento způsob je velice neefektivní, protože je pro vyhledání prvku nutné v krajním případě projít celou množinu O(n) Podporované operace: create vytvoření množiny add(x) přidání prvku do množiny remove(x) odebrání prvku z množiny contains(x) obsahuje prvek X empty() je množina prázdná size() počet prvků v množině get() vrátí prvek z množiny Zásobník Je typem seznamu. Jeho charakteristickou vlastností je, že přidávat a odebírat prvky lze jen na jednom jeho konci. Prvky se nemohou přidávat ani odebírat na druhém konci seznamu (označovaném jako dno zásobníku) ani nikde uprostřed. Kdykoli tedy chceme odebrat jeden prvek ze zásobníku, bude to ten, který byl do něj vložen jako poslední (je momentálně na vrcholu zásobníku). Zásobník proto bývá někdy označován jako struktura typu LIFO (last in - first out). Používá se např. jako základní datová struktura při řízení průchodu do hloubky, při zpracování aritmetických výrazů, při realizaci volání procedur a funkcí apod. Z hlediska obsluhy je to nejjednodušší typ seznamu. Implementace zásobníku pomocí pole První prvek pole vždy představuje dno zásobníku. Vedle vlastního pole dat použijeme ještě jednu proměnnou, která bude v každém okamžiku udávat index toho prvku pole, kde je momentálně vrchol zásobníku. Implementace zásobníku lineárním spojovým seznamem (pomocí ukazatele) Vystačíme si s obyčejným jednosměrným seznamem. Je jen třeba si uvědomit, v jakém směru mají být jednotlivé prvky seznamu zřetězeny. Přidávání prvků na oba konce jednosměrného seznamu je snadné, vypouštění prvku ze začátku jednosměrného seznamu také. Protože vypuštění posledního prvku je ale o dost 132

134 náročnější (bylo by třeba nalézt předposlední prvek, k čemuž je nutné projít celý seznam od začátku), programuje proto zásobník vždy tak, aby v pořadí první prvek spojového seznamu představoval vrchol zásobníku. Podporované operace: Empty: S (vytvoření prázdného zásobníku) Push: B x S -> S (přidání prvku do zásobníku) Isempty: S ->Bool (ověření, zda je zásobník prázdný) Top: S > B (získá vrchol zásobníku) Pop: S > S (získá zbytek zásobníku bez vrcholu) Fronta V seznamu označovaném jako fronta se pracuje s uloženými daty takovým způsobem, jaký odpovídá čekání lidí ve frontě v běžném životě. Přicházející se řadí za sebe; kdo dřív přišel, bude dříve obsloužen a odejde. Do fronty jsou proto na jednom konci ( příchod ) vkládány nové prvky, zatímco z druhého konce ( odchod ) jsou odebírány prvky vyřazované. V anglicky psané literatuře bývá fronta označována jako FIFO (First In First Out). Fronta se v programech používá tehdy, když potřebujeme dočasně odložit nějaká data a zachovat pro další zpracování jejich původní pořadí. Slouží jako základní datová struktura pro řízení průchodu do šířky. Její programová realizace polem i dynamicky je o něco komplikovanější, než tomu bylo v případě zásobníku. Implementace fronty pomocí pole Frontu můžeme naprogramovat pomocí pole, pokud známe horní odhad její maximální možné délky. Budeme přitom potřebovat dvě celočíselné proměnné, které budou udávat indexy těch prvků pole, kde je uložen první prvek fronty (tj. začátek fronty, odchod) a poslední (konec fronty, příchod). Opakovanými operacemi vkládání a vypouštění prvků se budou hodnoty obou těchto proměnných stále zvyšovat, jak se bude směrem k vyšším indexům posunovat obsazená část pole. Tak by se mohlo po čase stát, že ačkoli aktuální délka fronty nikdy nepřekročí velikost pole, nebude možné vložit do fronty další údaj, neboť poslední prvek pole bude obsazen. Na toto nebezpečí existují tři základní varianty řešení: Intuitivní: Posouvat v poli všechny prvky fronty o jedno místo směrem k nižším indexům při každém vypuštění prvku. Díky tomu bude začátek fronty neustále udržován v prvním prvku pole. Postup je to správný a na naprogramování jednoduchý, ale dost neefektivní. Lepším řešením je posouvat v poli frontu pouze tehdy, když je to nutné, tj. není-li již kam vložit novou hodnotu. V takové situaci se obsah pole přemístí najednou tak, aby fronta začínala v prvním prvku pole. Proti předchozímu řešení se přesuny prvků provádějí najednou o větší vzdálenost a méně často, výpočet je proto celkově rychlejší. Nejlepší pak samozřejmě je data uložená v poli vůbec nepřesouvat. Představíme-li si, že pole je jakoby zatočené dokola a že po posledním prvku pole následuje opět první prvek, při vlastní programové realizaci nám pak stačí pouze přepočítávat indexy. Trochu složitějším se stane testování neprázdnosti fronty (při odebírání prvku) nebo zda by její délka přidáním dalšího prvku nepřekročila kapacitu pole. Pro tento účel je vhodné zavést ještě jednu celočíselnou proměnnou, která bude udávat počet prvků ve frontě. 133

135 Implementace fronty pomocí spojový seznamu K naprogramování fronty pomocí lineárního spojového seznamu nám opět postačí jednosměrný seznam. Podobně jako v případě zásobníku musíme jen dobře zvolit směr zřetězení prvků v seznamu. K docílení efektivnosti je opět třeba frontu reprezentovat tak, aby její začátek (odchod) byl na začátku seznamu a její konec (příchod) na konci seznamu. Každý uzel zařazený do fronty tedy obsahuje ukazatel na svého následníka. Je to obráceně, než bývá zvykem v běžném životě (např. v čekárně u lékaře nebo u holiče), kde si lidé zpravidla pamatují svého předchůdce, tj. po kom přijdou na řadu. Další typy front Existují i různé modifikace fronty, jako tzv. obousměrná fronta (vkládat i odebírat lze na obou jejích koncích) či tzv. prioritní fronta (seznam, který není uspořádán v pořadí příchodu prvků, ale podle jejich priorit každý zařazovaný prvek má svou prioritu a při vkládání není zařazován na konec fronty, ale předbíhá všechny prvky fronty, které mají nižší prioritu než on). Realizace prioritní fronty pomocí seznamu je však méně efektivní, proto se prioritní fronta obvykle reprezentuje binární haldou. Podporované operace: Empty: Q (vytvoří prázdnou frontu) Isempty: Q -> Bool (ověří, zda je fronta prázdná) Enqueue: B x Q -> Q (přidá prvek na konec fronty) Dequeue: Q > Q (získá frontu bez prvního prvku) Head: Q > B (získá první prvek z fronty) Binární strom Binární strom je strom, v němž může mít každý vrchol nejvýše dva následníky. Slouží například pro reprezentaci aritmetického výrazu s binárními operátory nebo pro uložení dat do binárního vyhledávacího stromu či do haldy. Binární vyhledávací strom Je binární strom, v jehož uzlech jsou umístěna data. Přitom pro uspořádání hodnot uložených ve stromu platí následující pravidlo: Je-li ve vrcholu V uložena hodnota X, pak všechny uzly v levém podstromu vrcholu V obsahují hodnoty menší než X a všechny uzly v pravém podstromu vrcholu V obsahují hodnoty větší než X. Časová složitost operací nad vyhledávacím stromem závisí na jeho výšce. Vyhledávání vrcholu s hodnotou X v daném binárním vyhledávacím stromě je snadné. Začneme v kořeni stromu a postupujeme směrem k listům na základě porovnání hodnoty uložené v uzlu stromu s hodnotu X. Prohledávání končí buď nalezením uzlu s hodnotu X, nebo zjištěním, že v potřebném směru následník neexistuje a hodnota X tedy není ve stromě uložena. Počet provedených porovnání je menší nebo roven výšce stromu, u vyvážených vyhledávacích stromů je tedy časová složitost vyhledávání logaritmická. 134

136 Při přidávání uzlu do binárního vyhledávacího stromu se postupuje stejně jako při vyhledávání, jen je třeba si zapamatovat uzel, v němž procházení stromem skončilo a pod který je třeba zapojit nový uzel s přidávanou hodnotou. Složitost je opět logaritmická, ale ta může být narušena, jestliže stromy průběžně nevyvažujeme. Operace vypouštění uzlu je o něco komplikovanější - je třeba do zbytku stromu správně navázat případné následníky rušeného uzlu - ale také ji lze implementovat s logaritmickou složitostí. Bude-li množina uložených údajů předem pevně dána, není problém vybudovat tzv. vyvážený vyhledávací strom. Pokud se budou data v průběhu programu měnit, lze pro zajištění vyváženosti či další optimalizace vyhledávání obecně a v různých konkrétních případech zavést některou z modifikací vyhledávacích stromů: Dokonale vyvážené stromy Mají nejlepší možné vyvážení, přičemž přesný význam tohoto označení v literatuře není ustálen. Udržování binárního stromu v dokonale vyváženém stavu je ale každopádně poměrně obtížné a vzhledem k srovnatelné časové složitosti s následujícím typem, na který jsou přitom kladeny slabší podmínky, i zbytečné. AVL-Stromy Binární strom se nazývá AVL-stromem, jestliže pro každý uzel stromu platí, že výšky jeho levého a pravého podstromu se liší nejvýše o 1. Každý dokonale vyvážený strom je současně AVL-stromem, opačné tvrzení však neplatí. V AVL-stromu je do každého uzlu přidána navíc technická položka, která může nabývat hodnot -1, 0 nebo 1 a udává, jak se liší výška jeho levého a pravého podstromu. Implementace AVL-stromu spočívá v zavedení pomocné technické položky (zmíněné výše) a provedení vyvažovacího algoritmu po každém provedení operace nad stromem, která způsobila nevyváženost stromu. Vlastní algoritmy jsou však dosti dlouhé a komplikované a dobře jsou popsány v literatuře a je dostupná jejich implementace v mnoha programovacích jazycích. Červeno-černé stromy (red-black trees) Jsou vyvážené binární vyhledávací stromy, podobné AVL stromům. Narozdíl od AVL stromů nesou v uzlu místo technické položky informaci o barvě (černá/červená), což spolu s následujícími pravidly zaručuje, že je strom vyvážený: 1. Uzel má buďto černou nebo červenou barvu. 2. Kořen má černou barvu. 3. Každý následník červeného uzlu má černou barvu. 4. Každá větev obsahuje stejný počet černých uzlů. Tato pravidla nám zaručují, že nejdelší cesta z kořene do nějakého listu není delší než dvojnásobek nejkratší cesty z kořene do nějakého (jiného) listu. 135

137 Vyhledávání, vkládání i rušení uzlu v červeno-černém stromě probíhá stejně jako v binárním vyhledávacím stromě. Vložení nebo odebrání prvku však může způsobit porušení pravidel. Proto je nutné v takovém případě strom vyvažovat. Vyvažování se provádí přebarvováním uzlů a rotací větví stromu a je dobře popsáno v literatuře, svou komplikovaností ovšem přesahuje rozsah toto textu. Co je podstatné, je fakt, že i přes toto komplikované vyvažování mají operace vložení a odebrání prvku logaritmickou složitost. Složitost vyhledání prvku je ve stejné třídě. URL NA JAVA APPLET S ANIMACEMI: Halda Halda (heap) je speciální datová struktura, která má také tvar binárního stromu, ale využívá se nejen k vyhledávání, ale např. i třídění pomocí haldy (HeapSort). Halda je binární strom, pro který jsou splněny následující podmínky: 1. V každé hladině od první až do předposlední je maximální možný počet uzlů, tzn. v k-té hladině je 2k-1 uzlů. 2. V poslední hladině jsou všechny uzly umístěny co možná nejvíce vlevo, tj. při procházení stromu do hloubky zleva nejprve mají uzly předposlední hladiny dva následníky, pak může být jeden s jedním následníkem a zbývající takové uzly jsou pak už bez následníků. 3. Pro každý uzel platí, že hodnota v něm uložená je menší než hodnota v jeho libovolném předchůdci. Tj. v kořenu stromu je vždy prvek s největší hodnotou. Obr. Ukázka haldy Implementace haldy Svou strukturou zajišťuje halda nalezení minimálního prvku v konstantním čase, provedení operací odebrání minima a přidání nového prvku pak v čase logaritmickém. Její výhodou je algoritmická jednoduchost a možnost snadné realizace v poli, známe-li horní odhad maximálního počtu prvků v haldě. Přidání nového prvku do haldy probíhá jeho připojením na první volné místo v haldě (tj. konec obsazené části pole; aby byla zachována pravidla 1 a 2 pro haldu) a provádění série výměn hodnoty v uzlu s hodnotou v jeho předchůdci, dokud je to třeba (aby bylo zachováno pravidlo 3). Vypuštění minimálního prvku probíhá dosti podobně hodnotu z kořenu smažeme a namísto toho do kořene přesuneme hodnotu z posledního uzlu haldy, kterou pak necháme dle potřeby probublat na její správné místo dolů. 136

138 Hašovací tabulka Hašovací tabulka je datová struktura, která slouží k ukládání dvojic klíč-hodnota. Hašovací tabulka kombinuje výhody vyhledávání pomocí indexu (složitost O(1)) a procházení seznamu (nízké nároky na paměť). Pro získání hodnoty z klíče se používá hašovací funkce. Funkce má vlastnosti: Konzistentně vrací pro stejné objekty stejné adresy (slovo stejné typicky neznamená stejné instance, ale stejná data). Nezaručuje, že pro dva různé objekty vrátí různou adresu. Využívá celého prostoru adres se stejnou pravděpodobností. Výpočet adresy proběhne velmi rychle. Velmi oblíbená je implementace hašovací funkce, která kombinuje násobení klíče multiplikativní konstantou a modulární aritmetiku (k je klíč, m je velikost pole). Jednou z vlastností hašovací funkce je, že nezaručuje, že dvěma různým objektům nepřiřadí stejné adresy. Situaci, kdy chceme uložit na stejnou adresu více objektů, se říká kolize. Podle způsobu řešení kolizí se hašovací tabulky dělí na dva základní druhy, a to 1) Řešení kolizí zřetězením a 2) Otevřená adresace. Za speciální varianty pak lze považovat situace, kdy kolize nevznikají (tzv. perfektní hašování), nebo se ignorují a řeší prostým přepisováním (např. v transpozičních tabulkách). V posledním případě není zaručeno, že data vložená do tabulky tam najdeme, proto toto řešení není vhodné pro klasickou hašovací tabulku. Zřetězení (separate chaining): je nejjednodušším způsobem, jakým se lze vypořádat s kolizemi hodnoty totiž ukládáme do pole spojových seznamů. Nastane-li kolize, prvek se pouze přidá na konec adresovaného spojového seznamu. Nevýhoda tohoto přístupu je zřejmá při velkém zaplnění tabulky dojde k rychlé degradaci výkonu kvůli sekvenčnímu prohledávání příslušných seznamů. Otevřená adresace: Tento druh tabulek je obvyklá implementace. Protože neobsahuje pointery na zřetězené prvky, je paměťově úspornější, neboli ve stejné paměti lze reprezentovat větší tabulku. Tabulka obsahuje všechny prvky ve svých položkách. Kolize se řeší způsobem popsaným výše, tj. pokud je při vkládání pozice již obsazena, je nějakým algoritmem určeno náhradní místo, případně opakovaně, dokud se nepodaří vkládaný prvek umístit na volné místo. Při vyhledávání je nutno projít stejnou posloupnost míst, dokud není prvek nalezen anebo se nenarazí na volné místo, což znamená, že hledaný prvek v tabulce není. Protože při otevřené adresaci jsou všechny prvky v tabulce, je faktor naplnění nutně menší než 1. Metody používané pro určení náhradních míst jsou např. lineární zkoušení a druhotné hašování. 137

139 Lineární zkoušení (Linear probing): V linear probing strategii nejprve vypočteme adresu, na kterou daný prvek uložíme. Je-li adresa obsazená, tak se posuneme o jedno místo dál a zkusíme prvek uložit znovu. Takto postupujeme tak dlouho, dokud se nám prvek nepodaří uložit. Velkou nevýhodou je linear probingu je clustering (shlukování). Vzhledem k principu ukládání objektů dochází ke vzniku shluků objektů, jež mají blízkou nebo totožnou adresu. Tyto shluky je pak při vyhledávání nutné sekvenčně procházet. Dopad na výkon je ještě vyšší než u zřetězeného rozptylování, protože shluky mohou obsahovat prvky odpovídající více klíčům. Druhotné hašování (Double hashing) eliminuje shlukování díky využití dvojice rozptylovacích funkcí. První funkce vypočte iniciální adresu stejným způsobem jako u linear probingu nebo zřetězeného rozptylování. Pokud je dané místo již obsazené, nastoupí druhá funkce, která vypočte posun. Za předpokladu, že je i nové místo plné, dojde opět k posunu na základě druhé funkce. 138

Predikátová logika. prvního řádu

Predikátová logika. prvního řádu Predikátová logika prvního řádu 2 Predikát Predikát je n-ární relace - vyjadřuje vlastnosti objektů a vztahy mezi objekty - z jednoduchého výroku vznikne vypuštěním alespoň jednoho jména objektu (individua)

Více

teorie logických spojek chápaných jako pravdivostní funkce

teorie logických spojek chápaných jako pravdivostní funkce Výroková logika teorie logických spojek chápaných jako pravdivostní funkce zabývá se způsoby tvoření výroků pomocí spojek a vztahy mezi pravdivostí různých výroků používá specifický jazyk složený z výrokových

Více

Formální systém výrokové logiky

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)

Více

Výroková logika. Teoretická informatika Tomáš Foltýnek

Výroková logika. Teoretická informatika Tomáš Foltýnek Výroková logika Teoretická informatika Tomáš Foltýnek foltynek@pef.mendelu.cz Teoretická informatika strana 2 Opakování z minulé přednášky Co je to formalismus a co je jeho cílem? Formulujte Russelův paradox

Více

platné nejsou Sokrates je smrtelný. (r) 1/??

platné nejsou Sokrates je smrtelný. (r) 1/?? Predikátová logika plně přejímá výsledky výrokové logiky zabývá se navíc strukturou jednotlivých jednoduchých výroků na základě této analýzy lze odvodit platnost některých výroků, které ve výrokové logice

Více

Matematická analýza 1

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

Více

Výroková a predikátová logika - II

Výroková a predikátová logika - II Výroková a predikátová logika - II Petr Gregor KTIML MFF UK ZS 2017/2018 Petr Gregor (KTIML MFF UK) Výroková a predikátová logika - II ZS 2017/2018 1 / 17 Předběžnosti Základní pojmy n-ární relace a funkce

Více

Výroková logika - opakování

Výroková logika - opakování - opakování ormální zavedení Výroková formule: Máme neprázdnou nejvýše spočetnou množinu A výrokových proměnných. 1. Každá proměnná je výroková formule 2. Když α, β jsou formule, potom ( α), (α β), (α

Více

Unární je také spojka negace. pro je operace binární - příkladem může být funkce se signaturou. Binární je velká většina logických spojek

Unární je také spojka negace. pro je operace binární - příkladem může být funkce se signaturou. Binární je velká většina logických spojek Otázka 06 - Y01MLO Zadání Predikátová logika, formule predikátové logiky, sentence, interpretace jazyka predikátové logiky, splnitelné sentence, tautologie, kontradikce, tautologicky ekvivalentní formule.

Více

Predikátová logika. Teoretická informatika Tomáš Foltýnek

Predikátová logika. Teoretická informatika Tomáš Foltýnek Predikátová logika Teoretická informatika Tomáš Foltýnek foltynek@pef.mendelu.cz strana 2 Opakování z minulé přednášky Z čeho se skládá jazyk výrokové logiky? Jaká jsou schémata pro axiomy VL? Formulujte

Více

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

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í

Více

Základy logiky a teorie množin

Základy logiky a teorie množin Pracovní text k přednášce Logika a teorie množin (I/2007) 1 1 Struktura přednášky Matematická logika 2 Výroková logika Základy logiky a teorie množin Petr Pajas pajas@matfyz.cz Predikátová logika 1. řádu

Více

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

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

Více

Okruh č.3: Sémantický výklad predikátové logiky

Okruh č.3: Sémantický výklad predikátové logiky Okruh č.3: Sémantický výklad predikátové logiky Predikátová logika 1.řádu formalizuje úsudky o vlastnostech předmětů a vztazích mezi předměty pevně dané předmětné oblasti (univerza). Nebudeme se zabývat

Více

Sémantika predikátové logiky

Sémantika predikátové logiky Sémantika predikátové logiky pro analýzu sémantiky potřebujeme nejprve specifikaci jazyka (doména, konstanty, funkční a predikátové symboly) příklad: formální jazyk s jediným binárním predikátovým symbolem

Více

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. Č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

Více

Výroková a predikátová logika - II

Výroková a predikátová logika - II Výroková a predikátová logika - II Petr Gregor KTIML MFF UK ZS 2013/2014 Petr Gregor (KTIML MFF UK) Výroková a predikátová logika - II ZS 2013/2014 1 / 20 Základní syntax Jazyk Výroková logika je logikou

Více

Výroková a predikátová logika - II

Výroková a predikátová logika - II Výroková a predikátová logika - II Petr Gregor KTIML MFF UK ZS 2015/2016 Petr Gregor (KTIML MFF UK) Výroková a predikátová logika - II ZS 2015/2016 1 / 18 Základní syntax Jazyk Výroková logika je logikou

Více

1 Báze a dimenze vektorového prostoru 1

1 Báze a dimenze vektorového prostoru 1 1 Báze a dimenze vektorového prostoru 1 Báze a dimenze vektorového prostoru 1 2 Aritmetické vektorové prostory 7 3 Eukleidovské vektorové prostory 9 Levá vnější operace Definice 5.1 Necht A B. Levou vnější

Více

Vektory a matice. Obsah. Aplikovaná matematika I. Carl Friedrich Gauss. Základní pojmy a operace

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

Více

Matematická logika. Miroslav Kolařík

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

Více

Determinanty. Obsah. Aplikovaná matematika I. Pierre Simon de Laplace. Definice determinantu. Laplaceův rozvoj Vlastnosti determinantu.

Determinanty. Obsah. Aplikovaná matematika I. Pierre Simon de Laplace. Definice determinantu. Laplaceův rozvoj Vlastnosti determinantu. Determinanty Aplikovaná matematika I Dana Říhová Mendelu Brno Obsah 1 Determinanty Definice determinantu Sarrusovo a křížové pravidlo Laplaceův rozvoj Vlastnosti determinantu Výpočet determinantů 2 Inverzní

Více

Základy maticového počtu Matice, determinant, definitnost

Základy maticového počtu Matice, determinant, definitnost Základy maticového počtu Matice, determinant, definitnost Petr Liška Masarykova univerzita 18.9.2014 Matice a vektory Matice Matice typu m n je pravoúhlé (nebo obdélníkové) schéma, které má m řádků a n

Více

Výroková a predikátová logika - V

Výroková a predikátová logika - V Výroková a predikátová logika - V Petr Gregor KTIML MFF UK ZS 2015/2016 Petr Gregor (KTIML MFF UK) Výroková a predikátová logika - V ZS 2015/2016 1 / 21 Dokazovací systémy VL Hilbertovský kalkul Hilbertovský

Více

Lineární algebra - I. část (vektory, matice a jejich využití)

Lineární algebra - I. část (vektory, matice a jejich využití) Lineární algebra - I. část (vektory, matice a jejich využití) Michal Fusek Ústav matematiky FEKT VUT, fusekmi@feec.vutbr.cz 2. přednáška z ESMAT Michal Fusek (fusekmi@feec.vutbr.cz) 1 / 40 Obsah 1 Vektory

Více

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:

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...

Více

Pro každé formule α, β, γ, δ platí: Pro každé formule α, β, γ platí: Poznámka: Platí právě tehdy, když je tautologie.

Pro každé formule α, β, γ, δ platí: Pro každé formule α, β, γ platí: Poznámka: Platí právě tehdy, když je tautologie. Zpracoval: hypspave@fel.cvut.cz 5. Výroková logika, formule výrokové logiky a jejich pravdivostní ohodnocení, splnitelné formule, tautologie, kontradikce, sémantický důsledek, tautologicky ekvivalentní

Více

vhodná pro strojové dokazování (Prolog) metoda založená na vyvracení: dokazuje se nesplnitelnost formulí

vhodná pro strojové dokazování (Prolog) metoda založená na vyvracení: dokazuje se nesplnitelnost formulí Rezoluce: další formální systém vhodná pro strojové dokazování (Prolog) metoda založená na vyvracení: dokazuje se nesplnitelnost formulí pracujeme s formulemi v nkf (též klauzulárním tvaru), ale používáme

Více

Operace s maticemi. 19. února 2018

Operace s maticemi. 19. února 2018 Operace s maticemi Přednáška druhá 19. února 2018 Obsah 1 Operace s maticemi 2 Hodnost matice (opakování) 3 Regulární matice 4 Inverzní matice 5 Determinant matice Matice Definice (Matice). Reálná matice

Více

postaveny výhradně na syntaktické bázi: jazyk logiky neinterpretujeme, provádíme s ním pouze syntaktické manipulace důkazy

postaveny výhradně na syntaktické bázi: jazyk logiky neinterpretujeme, provádíme s ním pouze syntaktické manipulace důkazy Formální systémy (výrokové) logiky postaveny výhradně na syntaktické bázi: jazyk logiky neinterpretujeme, provádíme s ním pouze syntaktické manipulace důkazy cíl: získat formální teorii jako souhrn dokazatelných

Více

Každé formuli výrokového počtu přiřadíme hodnotu 0, půjde-li o formuli nepravdivou, a hodnotu 1, půjde-li. α neplatí. β je nutná podmínka pro α

Každé formuli výrokového počtu přiřadíme hodnotu 0, půjde-li o formuli nepravdivou, a hodnotu 1, půjde-li. α neplatí. β je nutná podmínka pro α 1. JAZYK ATEATIKY 1.1 nožiny nožina je souhrn objektů určitých vlastností, které chápeme jako celek. ZNAČENÍ. x A x A θ A = { { a, b a A = B A B 0, 1 2 a, a,..., a n x patří do množiny A x nepatří do množiny

Více

Pojem binární relace patří mezi nejzákladnější matematické pojmy. Binární relace

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,

Více

Matematika B101MA1, B101MA2

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

Více

Úvod do logiky (presentace 2) Naivní teorie množin, relace a funkce

Ú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ů

Více

Logika. 2. Výroková logika. RNDr. Luděk Cienciala, Ph. D.

Logika. 2. Výroková logika. RNDr. Luděk Cienciala, Ph. D. Logika 2. Výroková logika RNDr. Luděk Cienciala, Ph. D. Tato inovace předmětu Úvod do logiky je spolufinancována Evropským sociálním fondem a Státním rozpočtem ČR, projekt č. CZ. 1.07/2.2.00/28.0216, Logika:

Více

VI. Maticový počet. VI.1. Základní operace s maticemi. Definice. Tabulku

VI. Maticový počet. VI.1. Základní operace s maticemi. Definice. Tabulku VI Maticový počet VI1 Základní operace s maticemi Definice Tabulku a 11 a 12 a 1n a 21 a 22 a 2n, a m1 a m2 a mn kde a ij R, i = 1,, m, j = 1,, n, nazýváme maticí typu m n Zkráceně zapisujeme (a ij i=1m

Více

Výroková a predikátová logika - VI

Výroková a predikátová logika - VI Výroková a predikátová logika - VI Petr Gregor KTIML MFF UK ZS 2017/2018 Petr Gregor (KTIML MFF UK) Výroková a predikátová logika - VI ZS 2017/2018 1 / 24 Predikátová logika Úvod Predikátová logika Zabývá

Více

Matematika pro informatiky KMA/MATA

Matematika pro informatiky KMA/MATA Matematika pro informatiky KMA/MATA Informace k předmětu Mgr. Přemysl Rosa rosapr00@pf.jcu.cz, J349 Konzultační hodiny v ZS: úterý 10-11, čtvrtek 15-16 nebo individuálně po předchozí domluvě aktivní účast

Více

Matematika B101MA1, B101MA2

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

Více

Vektorové podprostory, lineární nezávislost, báze, dimenze a souřadnice

Vektorové podprostory, lineární nezávislost, báze, dimenze a souřadnice Vektorové podprostory, lineární nezávislost, báze, dimenze a souřadnice Vektorové podprostory K množina reálných nebo komplexních čísel, U vektorový prostor nad K. Lineární kombinace vektorů u 1, u 2,...,u

Více

Výroková a predikátová logika - IX

Výroková a predikátová logika - IX Výroková a predikátová logika - IX Petr Gregor KTIML MFF UK ZS 2013/2014 Petr Gregor (KTIML MFF UK) Výroková a predikátová logika - IX ZS 2013/2014 1 / 15 Korektnost a úplnost Důsledky Vlastnosti teorií

Více

Logika. 5. Rezoluční princip. RNDr. Luděk Cienciala, Ph. D.

Logika. 5. Rezoluční princip. RNDr. Luděk Cienciala, Ph. D. Logika 5. Rezoluční princip RNDr. Luděk Cienciala, Ph. D. Tato inovace předmětu Úvod do logiky je spolufinancována Evropským sociálním fondem a Státním rozpočtem ČR, projekt č. CZ. 1.07/2.2.00/28.0216,

Více

ALGEBRA. Téma 4: Grupy, okruhy a pole

ALGEBRA. Téma 4: Grupy, okruhy a pole SLEZSKÁ UNIVERZITA V OPAVĚ Matematický ústav v Opavě Na Rybníčku 1, 746 01 Opava, tel. (553) 684 611 DENNÍ STUDIUM Téma 4: Grupy, okruhy a pole Základní pojmy unární operace, binární operace, asociativita,

Více

0. ÚVOD - matematické symboly, značení,

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í

Více

3 Množiny, Relace a Funkce

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

Více

Číselné vektory, matice, determinanty

Číselné vektory, matice, determinanty Číselné vektory, matice, determinanty Základy vyšší matematiky LDF MENDELU Podpořeno projektem Průřezová inovace studijních programů Lesnické a dřevařské fakulty MENDELU v Brně (LDF) s ohledem na discipĺıny

Více

MATICE. a 11 a 12 a 1n a 21 a 22 a 2n A = = [a ij]

MATICE. a 11 a 12 a 1n a 21 a 22 a 2n A = = [a ij] MATICE Matice typu m/n nad tělesem T je soubor m n prvků z tělesa T uspořádaných do m řádků a n sloupců: a 11 a 12 a 1n a 21 a 22 a 2n A = = [a ij] a m1 a m2 a mn Prvek a i,j je prvek matice A na místě

Více

Jazyk matematiky. 2.1. Matematická logika. 2.2. Množinové operace. 2.3. Zobrazení. 2.4. Rozšířená číslená osa

Jazyk matematiky. 2.1. Matematická logika. 2.2. Množinové operace. 2.3. Zobrazení. 2.4. Rozšířená číslená osa 2. Jazyk matematiky 2.1. Matematická logika 2.2. Množinové operace 2.3. Zobrazení 2.4. Rozšířená číslená osa 1 2.1 Matematická logika 2.1.1 Výrokový počet logická operace zapisujeme čteme česky negace

Více

Základní pojmy teorie množin Vektorové prostory

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

Více

Úvod do TI - logika Predikátová logika 1.řádu (4.přednáška) Marie Duží marie.duzi@vsb.cz

Úvod do TI - logika Predikátová logika 1.řádu (4.přednáška) Marie Duží marie.duzi@vsb.cz Úvod do TI - logika Predikátová logika 1.řádu (4.přednáška) Marie Duží marie.duzi@vsb.cz Jednoduché úsudky, kde VL nestačí Všechny opice mají rády banány Judy je opice Judy má ráda banány Z hlediska VL

Více

Výroková a predikátová logika - VII

Výroková a predikátová logika - VII Výroková a predikátová logika - VII Petr Gregor KTIML MFF UK ZS 2018/2019 Petr Gregor (KTIML MFF UK) Výroková a predikátová logika - VII ZS 2018/2019 1 / 15 Platnost (pravdivost) Platnost ve struktuře

Více

1 Základní pojmy. 1.1 Množiny

1 Základní pojmy. 1.1 Množiny 1 Základní pojmy V této kapitole si stručně připomeneme základní pojmy, bez jejichž znalostí bychom se v dalším studiu neobešli. Nejprve to budou poznatky z logiky a teorie množin. Dále se budeme věnovat

Více

Výroková a predikátová logika - VII

Výroková a predikátová logika - VII Výroková a predikátová logika - VII Petr Gregor KTIML MFF UK ZS 2013/2014 Petr Gregor (KTIML MFF UK) Výroková a predikátová logika - VII ZS 2013/2014 1 / 21 Sémantika PL Teorie Vlastnosti teorií Teorie

Více

Teorie informace a kódování (KMI/TIK) Reed-Mullerovy kódy

Teorie informace a kódování (KMI/TIK) Reed-Mullerovy kódy Teorie informace a kódování (KMI/TIK) Reed-Mullerovy kódy Lukáš Havrlant Univerzita Palackého 10. ledna 2014 Primární zdroj Jiří Adámek: Foundations of Coding. Strany 137 160. Na webu ke stažení, heslo:

Více

0.1 Úvod do lineární algebry

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

Více

Matematická logika. Miroslav Kolařík

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

Více

Matice. Modifikace matic eliminační metodou. α A = α a 2,1, α a 2,2,..., α a 2,n α a m,1, α a m,2,..., α a m,n

Matice. Modifikace matic eliminační metodou. α A = α a 2,1, α a 2,2,..., α a 2,n α a m,1, α a m,2,..., α a m,n [1] Základní pojmy [2] Matice mezi sebou sčítáme a násobíme konstantou (lineární prostor) měníme je na jiné matice eliminační metodou násobíme je mezi sebou... Matice je tabulka čísel s konečným počtem

Více

Matematika (CŽV Kadaň) aneb Úvod do lineární algebry Matice a soustavy rovnic

Matematika (CŽV Kadaň) aneb Úvod do lineární algebry Matice a soustavy rovnic Přednáška třetí (a pravděpodobně i čtvrtá) aneb Úvod do lineární algebry Matice a soustavy rovnic Lineární rovnice o 2 neznámých Lineární rovnice o 2 neznámých Lineární rovnice o dvou neznámých x, y je

Více

Lineární algebra Operace s vektory a maticemi

Lineární algebra Operace s vektory a maticemi Lineární algebra Operace s vektory a maticemi Robert Mařík 26. září 2008 Obsah Operace s řádkovými vektory..................... 3 Operace se sloupcovými vektory................... 12 Matice..................................

Více

maticeteorie 1. Matice A je typu 2 4, matice B je typu 4 3. Jakých rozměrů musí být matice X, aby se dala provést

maticeteorie 1. Matice A je typu 2 4, matice B je typu 4 3. Jakých rozměrů musí být matice X, aby se dala provést Úlohy k zamyšlení 1. Zdůvodněte, proč třetí řádek Hornerova schématu pro vyhodnocení polynomu p v bodě c obsahuje koeficienty polynomu r, pro který platí p(x) = (x c) r(x) + p(c). 2. Dokažte, že pokud

Více

1 Pravdivost formulí v interpretaci a daném ohodnocení

1 Pravdivost formulí v interpretaci a daném ohodnocení 1 Pravdivost formulí v interpretaci a daném ohodnocení Než uvedeme konkrétní příklady, zopakujme si definici interpretace, ohodnocení a pravdivosti. Necht L je nějaký jazyk. Interpretaci U, jazyka L tvoří

Více

Soustavy lineárních rovnic a determinanty

Soustavy lineárních rovnic a determinanty Soustavy lineárních rovnic a determinanty Petr Hasil Přednáška z matematiky Podpořeno projektem Průřezová inovace studijních programů Lesnické a dřevařské fakulty MENDELU v Brně (LDF) s ohledem na discipĺıny

Více

4.2 Syntaxe predikátové logiky

4.2 Syntaxe predikátové logiky 36 [070507-1501 ] 4.2 Syntaxe predikátové logiky V tomto oddíle zavedeme syntaxi predikátové logiky, tj. uvedeme pravidla, podle nichž se tvoří syntakticky správné formule predikátové logiky. Význam a

Více

Přijímací zkouška - matematika

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,

Více

Rezoluční kalkulus pro výrokovou logiku

Rezoluční kalkulus pro výrokovou logiku AD4M33AU Automatické uvažování Rezoluční kalkulus pro výrokovou logiku Petr Pudlák Výroková logika Výhody Jednoduchý jazyk. Rozhodnutelnost dokazatelnosti i nedokazatelnosti. Rychlejší algoritmy. Nevýhody

Více

Množiny, relace, zobrazení

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,

Více

DEFINICE Z LINEÁRNÍ ALGEBRY

DEFINICE Z LINEÁRNÍ ALGEBRY DEFINICE Z LINEÁRNÍ ALGEBRY Skripta Matematické metody pro statistiku a operační výzkum (Nešetřilová, H., Šařecová, P., 2009). 1. definice Vektorovým prostorem rozumíme neprázdnou množinu prvků V, na které

Více

1 Vektorové prostory.

1 Vektorové prostory. 1 Vektorové prostory DefiniceMnožinu V, jejíž prvky budeme označovat a, b, c, z, budeme nazývat vektorovým prostorem právě tehdy, když budou splněny následující podmínky: 1 Je dáno zobrazení V V V, které

Více

1 Řešení soustav lineárních rovnic

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

Více

Kapitola 1. Úvod. 1.1 Značení. 1.2 Výroky - opakování. N... přirozená čísla (1, 2, 3,...). Q... racionální čísla ( p, kde p Z a q N) R...

Kapitola 1. Úvod. 1.1 Značení. 1.2 Výroky - opakování. N... přirozená čísla (1, 2, 3,...). Q... racionální čísla ( p, kde p Z a q N) R... Kapitola 1 Úvod 1.1 Značení N... přirozená čísla (1, 2, 3,...). Z... celá čísla ( 3, 2, 1, 0, 1, 2,...). Q... racionální čísla ( p, kde p Z a q N) q R... reálná čísla C... komplexní čísla 1.2 Výroky -

Více

1 Projekce a projektory

1 Projekce a projektory Cvičení 3 - zadání a řešení úloh Základy numerické matematiky - NMNM20 Verze z 5. října 208 Projekce a projektory Opakování ortogonální projekce Definice (Ortogonální projekce). Uvažujme V vektorový prostor

Více

Úlohy k přednášce NMAG 101 a 120: Lineární algebra a geometrie 1 a 2,

Úlohy k přednášce NMAG 101 a 120: Lineární algebra a geometrie 1 a 2, Úlohy k přednášce NMAG a : Lineární algebra a geometrie a Verze ze dne. května Toto je seznam přímočarých příkladů k přednášce. Úlohy z tohoto seznamu je nezbytně nutné umět řešit. Podobné typy úloh se

Více

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. 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

Více

1 Výroková logika 1. 2 Predikátová logika 3. 3 Důkazy matematických vět 4. 4 Doporučená literatura 7

1 Výroková logika 1. 2 Predikátová logika 3. 3 Důkazy matematických vět 4. 4 Doporučená literatura 7 1 Výroková logika 1 Výroková logika 1 2 Predikátová logika 3 3 Důkazy matematických vět 4 4 Doporučená literatura 7 Definice 1.1 Výrokem rozumíme každé sdělení, o kterém má smysl uvažovat, zda je, či není

Více

Výroková a predikátová logika - X

Výroková a predikátová logika - X Výroková a predikátová logika - X Petr Gregor KTIML MFF UK ZS 2018/2019 Petr Gregor (KTIML MFF UK) Výroková a predikátová logika - X ZS 2018/2019 1 / 16 Rozšiřování teorií Extenze o definice Rozšiřování

Více

Úvod do informatiky. Miroslav Kolařík

Úvod do informatiky. Miroslav Kolařík Úvod do informatiky přednáška první Miroslav Kolařík Zpracováno dle učebního textu prof. Bělohlávka: Úvod do informatiky, KMI UPOL, Olomouc 2008. Obsah 1 Co a k čemu je logika? 2 Výroky a logické spojky

Více

Úvod do TI - logika Výroková logika - pokračování (3.přednáška) Marie Duží

Úvod do TI - logika Výroková logika - pokračování (3.přednáška) Marie Duží Úvod do TI - logika Výroková logika - pokračování (3.přednáška) Marie Duží marie.duzi@vsb.cz Normální formy formulí výrokové logiky Každé formuli výrokové logiky přísluší právě jedna pravdivostní funkce,

Více

Výroková a predikátová logika - III

Výroková a predikátová logika - III Výroková a predikátová logika - III Petr Gregor KTIML MFF UK ZS 2017/2018 Petr Gregor (KTIML MFF UK) Výroková a predikátová logika - III ZS 2017/2018 1 / 16 2-SAT 2-SAT Výrok je v k-cnf, je-li v CNF a

Více

Matematická logika. Rostislav Horčík. horcik

Matematická logika. Rostislav Horčík.    horcik Matematická logika Rostislav Horčík horcik@math.feld.cvut.cz horcik@cs.cas.cz www.cs.cas.cz/ horcik Rostislav Horčík (ČVUT FEL) Y01MLO Letní semestr 2007/2008 1 / 20 Predikátová logika Motivace Výroková

Více

Sémantika výrokové logiky. Alena Gollová Výroková logika 1/23

Sémantika výrokové logiky. Alena Gollová Výroková logika 1/23 Výroková logika Alena Gollová Výroková logika 1/23 Obsah 1 Formule výrokové logiky 2 Alena Gollová Výroková logika 2/23 Formule výrokové logiky Výrok je oznamovací věta, o jejíž pravdivosti lze rozhodnout.

Více

příkladů do cvičení. V textu se objeví i pár detailů, které jsem nestihl (na které jsem zapomněl) a(b u) = (ab) u, u + ( u) = 0 = ( u) + u.

příkladů do cvičení. V textu se objeví i pár detailů, které jsem nestihl (na které jsem zapomněl) a(b u) = (ab) u, u + ( u) = 0 = ( u) + u. Několik řešených příkladů do Matematiky Vektory V tomto textu je spočteno několik ukázkových příkladů které vám snad pomohou při řešení příkladů do cvičení. V textu se objeví i pár detailů které jsem nestihl

Více

Definice 13.1 Kvadratická forma v n proměnných s koeficienty z tělesa T je výraz tvaru. Kvadratická forma v n proměnných je tak polynom n proměnných s

Definice 13.1 Kvadratická forma v n proměnných s koeficienty z tělesa T je výraz tvaru. Kvadratická forma v n proměnných je tak polynom n proměnných s Kapitola 13 Kvadratické formy Definice 13.1 Kvadratická forma v n proměnných s koeficienty z tělesa T je výraz tvaru f(x 1,..., x n ) = a ij x i x j, kde koeficienty a ij T. j=i Kvadratická forma v n proměnných

Více

7. Lineární vektorové prostory

7. Lineární vektorové prostory 7. Lineární vektorové prostory Tomáš Salač MÚ UK, MFF UK LS 2017/18 Tomáš Salač ( MÚ UK, MFF UK ) 7. Lineární vektorové prostory LS 2017/18 1 / 62 7.1 Definice a příklady Definice 7.1 Množina G s binární

Více

Výroková a predikátová logika - III

Výroková a predikátová logika - III Výroková a predikátová logika - III Petr Gregor KTIML MFF UK ZS 2014/2015 Petr Gregor (KTIML MFF UK) Výroková a predikátová logika - III ZS 2014/2015 1 / 21 Výroková logika Horn-SAT Horn-SAT Jednotková

Více

Místo pojmu výroková formule budeme používat zkráceně jen formule. Při jejich zápisu

Místo pojmu výroková formule budeme používat zkráceně jen formule. Při jejich zápisu VÝROKOVÁ LOGIKA Matematická logika se zabývá studiem výroků, jejich vytváření a jejich pravdivostí. Základním kamenem výrokové logiky jsou výroky. Co je výrok nedefinujejme, pouze si řekneme, co si pod

Více

Matematická indukce, sumy a produkty, matematická logika

Matematická indukce, sumy a produkty, matematická logika Matematická indukce, sumy a produkty, matematická logika 8.9. -.0.009 Matematická indukce Jde o následující vlastnost přirozených čísel: Předpokládejme:. Nějaké tvrzení platí pro.. Platí-li tvrzení pro

Více

Lineární algebra Kapitola 1 - Základní matematické pojmy

Lineární algebra Kapitola 1 - Základní matematické pojmy Lineární algebra Kapitola 1 - Základní matematické pojmy 1.1 Relace a funkce V celém textu budeme používat následující označení pro číselné množiny: N množina všech přirozených čísel bez nuly, N={1, 2,

Více

Matematická logika. Rostislav Horčík. horcik

Matematická logika. Rostislav Horčík.  horcik Matematická logika Rostislav Horčík horcik@math.feld.cvut.cz horcik@cs.cas.cz www.cs.cas.cz/ horcik Rostislav Horčík (ČVUT FEL) Y01MLO Letní semestr 2007/2008 1 / 15 Sémantická věta o dedukci Věta Pro

Více

Základní pojmy matematické logiky

Základní pojmy matematické logiky KAPITOLA 1 Základní pojmy matematické logiky Matematická logika se zabývá studiem výroků, jejich vytváření a jejich pravdivostí. Základním kamenem výrokové logiky jsou výroky. 1. Výroková logika Co je

Více

Cílem kapitoly je opakování a rozšíření středoškolských znalostí v oblasti teorie množin.

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

Více

Aplikovaná matematika I, NMAF071

Aplikovaná matematika I, NMAF071 M. Rokyta, MFF UK: Aplikovaná matematika I kap. 1: Úvod, čísla, zobrazení, posloupnosti 1 Aplikovaná matematika I, NMAF071 M. Rokyta, KMA MFF UK ZS 2013/14 Sylabus = obsah (plán) přednášky [a orientační

Více

8 Matice a determinanty

8 Matice a determinanty M Rokyta, MFF UK: Aplikovaná matematika II kap 8: Matice a determinanty 1 8 Matice a determinanty 81 Matice - definice a základní vlastnosti Definice Reálnou resp komplexní maticí A typu m n nazveme obdélníkovou

Více

Lineární algebra. Matice, operace s maticemi

Lineární algebra. Matice, operace s maticemi Lineární algebra Matice, operace s maticemi Operační program Vzdělávání pro konkurenceschopnost Název projektu: Inovace magisterského studijního programu Fakulty ekonomiky a managementu Registrační číslo

Více

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 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

Více

Marie Duží

Marie Duží Marie Duží marie.duzi@vsb.cz Normální formy formulí výrokové logiky Každé formuli výrokové logiky přísluší právě jedna pravdivostní funkce, zobrazení {p, q, r } {0, 1} (pravdivostní tabulka). Naopak však

Více

IB112 Základy matematiky

IB112 Základy matematiky IB112 Základy matematiky Řešení soustavy lineárních rovnic, matice, vektory Jan Strejček IB112 Základy matematiky: Řešení soustavy lineárních rovnic, matice, vektory 2/53 Obsah Soustava lineárních rovnic

Více

Úvod do lineární algebry

Úvod do lineární algebry Úvod do lineární algebry 1 Aritmetické vektory Definice 11 Mějme n N a utvořme kartézský součin R n R R R Každou uspořádanou n tici x 1 x 2 x, x n budeme nazývat n rozměrným aritmetickým vektorem Prvky

Více

Rezoluční kalkulus pro logiku prvního řádu

Rezoluční kalkulus pro logiku prvního řádu AD4M33AU Automatické uvažování Rezoluční kalkulus pro logiku prvního řádu Petr Pudlák Logika prvního řádu (Někdy nepřesně nazývaná predikátová logika.) Výhody Vyšší vyjadřovací schopnost jazyka, V podstatě

Více

Výroková a predikátová logika - IX

Výroková a predikátová logika - IX Výroková a predikátová logika - IX Petr Gregor KTIML MFF UK ZS 2015/2016 Petr Gregor (KTIML MFF UK) Výroková a predikátová logika - IX ZS 2015/2016 1 / 16 Tablo metoda v PL Důsledky úplnosti Vlastnosti

Více

Logické programy Deklarativní interpretace

Logické programy Deklarativní interpretace Logické programy Deklarativní interpretace Petr Štěpánek S využitím materialu Krysztofa R. Apta 2006 Logické programování 7 1 Algebry. (Interpretace termů) Algebra J pro jazyk termů L obsahuje Neprázdnou

Více