31
Teoretické základy informatiky (18) 2. ELEMENTÁRNÍ KOMBINATORIKA (matika I) permutace – odpovedaju situacii, kedy z mnoziny n predmetov vytvarame nejake poradie jej prvkov . Mame n moznosti na umiestnenie prveho prvku, n-1 druheho atd... dokopy teda existuje n! roznych poradi na n-prvkovej mnozine permutacie s opakovanim P‘(n) = n! / (m 1 ! . m 2 ! . ... m n !) (m i = pocet opakovani prvku n i ) kombinace urcuju, kolkymi sposobmi mozno vybrat k roznych prvkov z mnoziny n prvkov (nezalezi nam na poradi). Mame n(n-1)...(n-k+1) moznych vysledkov postupneho vyberu nasich k prvkov, pritom ale rovnaku vyslednu k-ticu dostanem v k! roznych poradiach. Preto pre pocet kombinacii k-teho stupna z n prvkov plati (ak k<=n) C(n,k) = = n(n-1)...(n-k+1)/ (k(k-1)...1) = n! / ((n-k)! k!) - t.j. ide o kombinacne (binomicke) cislo kombinacie s opakovanim – cisla sa nam mozu opakovat: C‘(n,k) = n+k-1 k variace – ak vyberame k prvkov z n-prvkovej mnoziny a zalezi nam aj na poradi prvkov – potom je to ako kombinaie, ale bez toho clena k! v menovateli, teda: V(n,k) = n(n-1)...(n-k+1) = n(n-1)...(n-k+1) = n! / (n-k)! variacie s opakovanim – cisla sa nam mozu opakovat (vraciame kartu naspat, hadzanie znova kockou atd): V‘(n,k) = n k Binomicky rozvoj: (a+b) n = Σ n k=0 n a k b n-k k - koeficient u mocniny a k b n-k pre kazde 0<=k<=n bude rovny prave poctu moznosti, ako vybrat k-ticu z n zatvoreik v sucine (tie, kde berieme do vysledku a) Plati: Σ n k=0 k n = n 2 n-1 k Pascalov trojuholnik: druha vlastnost umoznuje zostavit vsetky kombinacne cisla do P. t., kde kazde cislo obdrzime ako sucet dvoch bezprostredne nad nim leziacich. V riadku su zase koeficienty u jednotlivych mocnin binomickeho rozvoja. Grupa permutácií: Nech X je množina. Ak množinu všetkých permutácií označíme S(X) a „○“ operáciu skladania zobrazenia, je nekomutatívna grupa. Neformálny dôkaz: je operácia na S(X), je asociatívna, neutrálny prvok je identická permutace a keďže permutácia je bijektívne zobrazenie, vždy existuje inverzný prvok (zobrazenie). Permutácie môžeme zapísať rôznymi spôsobmi:

Teoretické základy informatiky (18)statnice.dqd.cz/w_potitko/vypisky_I.pdfvariacie s opakovanim – cisla sa nam mozu opakovat (vraciame kartu naspat, hadzanie znova kockou atd):

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Teoretické základy informatiky (18)statnice.dqd.cz/w_potitko/vypisky_I.pdfvariacie s opakovanim – cisla sa nam mozu opakovat (vraciame kartu naspat, hadzanie znova kockou atd):

Teoretické základy informatiky (18)

2. ELEMENTÁRNÍ KOMBINATORIKA (matika I)permutace – odpovedaju situacii, kedy z mnoziny n predmetov vytvarame nejake poradie jej prvkov. Mame n moznosti na umiestnenie prveho prvku, n-1 druheho atd... dokopy teda existuje n! roznych poradi na n-prvkovej mnozinepermutacie s opakovanim P‘(n) = n! / (m1! . m2! . ... mn!) (mi = pocet opakovani prvku ni)

kombinace – urcuju, kolkymi sposobmi mozno vybrat k roznych prvkov z mnoziny n prvkov (nezalezi nam na poradi). Mame n(n-1)...(n-k+1) moznych vysledkov postupneho vyberu nasich k prvkov, pritom ale rovnaku vyslednu k-ticu dostanem v k! roznych poradiach. Preto pre pocet kombinacii k-teho stupna z n prvkov plati (ak k<=n)

C(n,k) = = n(n-1)...(n-k+1)/ (k(k-1)...1) = n! / ((n-k)! k!) - t.j. ide o kombinacne (binomicke) cislokombinacie s opakovanim – cisla sa nam mozu opakovat: C‘(n,k) = n+k-1 k

variace – ak vyberame k prvkov z n-prvkovej mnoziny a zalezi nam aj na poradi prvkov – potom je to ako kombinaie, ale bez toho clena k! v menovateli, teda:V(n,k) = n(n-1)...(n-k+1) = n(n-1)...(n-k+1) = n! / (n-k)! variacie s opakovanim – cisla sa nam mozu opakovat (vraciame kartu naspat, hadzanie znova kockou atd): V‘(n,k) = nk

Binomicky rozvoj: (a+b)n = Σnk=0 n akbn-k

k- koeficient u mocniny akbn-k pre kazde 0<=k<=n bude rovny prave poctu moznosti, ako

vybrat k-ticu z n zatvoreik v sucine (tie, kde berieme do vysledku a)Plati:

Σnk=0 k n = n 2n-1

k

Pascalov trojuholnik: druha vlastnost umoznuje zostavit vsetky kombinacne cisla do P. t., kde kazde cislo obdrzime ako sucet dvoch bezprostredne nad nim leziacich. V riadku su zase koeficienty u jednotlivych mocnin binomickeho rozvoja.

Grupa permutácií: Nech X je množina. Ak množinu všetkých permutácií označíme S(X) a

„“ operáciu skladania zobrazenia, je nekomutatívna grupa. Neformálny dôkaz: je operácia na S(X), je asociatívna, neutrálny prvok je identická permutace a keďže permutácia je bijektívne zobrazenie, vždy existuje inverzný prvok (zobrazenie).

Permutácie môžeme zapísať rôznymi spôsobmi:

Page 2: Teoretické základy informatiky (18)statnice.dqd.cz/w_potitko/vypisky_I.pdfvariacie s opakovanim – cisla sa nam mozu opakovat (vraciame kartu naspat, hadzanie znova kockou atd):

tabuľkou, kde v hornom riadku je vstupná hodnota funkcie a v dolnom riadku výsledná

hodnota: ako zloženie cyklov a transpozíc (cyklov dĺžky 2): f = (1,3,5,4,2)(6,6) = (1,3) (3,5,4,2) (6,6) = (1,3) (3,5) (5,4) (4,2) (6,6)

Každá permutácia množiny , kde je súčin transpozíc. Identická permutace je

súčin , kde i,j sú ľubovoľné navzájom rôzne prvky z .

Vlastnosti permutáciíPermutácia je sudá (lichá), ak sa dá rozložiť na sudý (lichý) počet transpozíc. Permutácia uvedená vyššie je teda lichá. Rozklad na transpozície nie je určený jednoznačne (napr.

permutácia , ale aj , jednoznačne je určená len parita permutácie.

Parita ak permutácia f je sudá, ak je permutácia f lichá, .

Každý prvok , pre ktorý platí , se nazývá samodružným prvkom (v rozklade na transpozície ho neuvádzame, jedná sa o transpozíciu (r,r)). Ak je každý prvok permutace samodružný, hovoríme o identickej permutácii.

Ak máme permutáciu značí permutáciu, ktorá vznikne k-násobným zložením

permutácie , tj. , . Rád permutácie je nejmenšie prirodzené číslo

k také, pre ktoré platí , tj. po k zloženiach vznikne identická permutácia. Inverzná permutácia k permutácii

je možné vytvoriť inverznú permutáciu:

Zložením permutácie f a k nej inverznej permutácii f-1 získame identickú permutáciu. Skladanie permutacíMajme na množine X dve permutácie:

Zložením permutácií je permutácia

Operácia zloženia permutácií nie je komutatívna, ak má množina X aspoň 3 prvky.

1. MNOŽINY A RELACE (uvod do inf., matika I – 4. prednaska)Naivna teoria mnozin: „Mnozina je zubor prvkov a je svojimi prvkami plne urcena.“Mnoziny su „rovnake“ ak maju rovnake prvky.Mnozina A je podmnozinou B kazdy prvok A je prvkom B. A=B A je podmn. B a B je podmn. AA je vlastnou podmn. B A je podmn. B a A!=BMnozinove operacie: zjednotenie, prienik, rozdiel, doplnok, kartezsky sucin, potencna mnozina (mnozina vsetkych podmnozin danej mnoziny)

Page 3: Teoretické základy informatiky (18)statnice.dqd.cz/w_potitko/vypisky_I.pdfvariacie s opakovanim – cisla sa nam mozu opakovat (vraciame kartu naspat, hadzanie znova kockou atd):

Relacia medzi mnozinami A1, ... , Ak je podmnozinou kart. sucinu A1 × ... × Ak. Ak plati A1

= ... Ak = A, hovorime o k-arnej relacii na ANech R je podmn. A × B je relacia medzi A a B. Inverzna relacia k relacii R sa znaci R-1 a je definovana takto: R-1 = (b,a) | (a,b) € R R-1 je teda relacia medzi B a A.Nech R je podmn. A × B a S je podmn. B × C su relacie. Kompozicia (zlozenie) relacii R a S je relacia SR je podmn. A × C (citame „S po R“) definovana taktoSR = (a,c) | existuje b € B take, ze (a,b) € R, (b,c) € SUzavery relacii: Nech V je vhodne definovana vlastnost bin. relacii (t.j. existuje nejaka vacsia al. rovna relacia s danou vlastnostou + prienik relacii s danou vlastnostou je opat relacia s danou vlastnosto). Bud M mnozina a R binarna relacia na M. Potom existuje najmensia (vzhladom k inkluzii) relacia obsahujuca R, kt. ma vlastnost V. Tuto relaciu nazyvame V uzaver relacie R.zobrazení – specialny pripad relacie medzi mnozinami A and B. Pre kazdy prvok A existuje prave jeden prvok z B, kt. je s nim v relacii. V pripade, ze oborom hodnot su skalare (cisla), tak ide o skalarne funkcie (bezne), pripadne ak vektory, tak vektorove funkice. Kazda funkcia je preto zobrazenim. Niekedy sa vsak slovo funkcia pouziva pre lubovolne zobrazenie.(ak uvazujeme mnozinu s operaciou na nej, tak je to homomorfizmus f(a*b) = f(a) f(b) pre vsetky a,b € G. Izomorfizmus je bijektivny homomorfizmus (rovnaky pocet prvkov a zobrazuje sa vzdy 1 na 1))

funkce(Totalna) funkcia z mnoziny A do mnoziny B je relacia f medzi A a B taka, ze pre kazde x € A existuje prave jedno y € B take, ze (x,y) € f. Miesto (x,y) € f piseme obvykle f(x)=y. A je defin. oborom funkcie a B je oborom hodnot (f: A→B)Ak vo vyssie zmienenej definicii funkcie pozadujeme, aby pre kazde x € A existovalo najviac jedno y € B take, ze (x,y) € f, obdrzime definiciu parcialnej funkcie z A do B.Plati (gf)(a) = g(f(a))Funkcia f: A→B je

• injektivna (prosta) pre kazde x,y € A, x!=y plati, ze f(x) != f(y)• surjektivna („na“) pre kazde y € B existuje x € A take, ze f(x) = y• bijektivna je injektivna a sucasne surjektivna

Reprezentacia binarnych relacii R je podmn. M × M na mnozine grafom: ak su v relacii, ide medzi nimi sipkaVlastnosti binarnych relacii R je podmn. M × M. Relacia R je:

• reflexivna pre kazde a € M plati (a, a) € R• symetricka pre kazde a, b € M plati, ze ak (a, b) € R, tak tiez (b, a) € R• antisymetricka pre kazde a, b € M plati, ze ak (a, b), (b, a) € R, tak a = b• tranzitivna pre kazde a, b, c € M plati, ze ak (a, b), (b, c) € R, tak tiez (a, c) € R• ekvivalencia je reflex., symetricka, tranzitivna• usporiadanie je reflex., antisym., tranzit.• predusporiadanie je reflex., tranzit.

rozklady, ekvivalenceBud M mnozina. Rozklad (na) M je mnozina N je podmn. 2M taka, ze platia nasledujuce 3 podmienky: prazdna mnozina nepatri do N (tj. kazdy prvok N je neprazdna podmnozina M);ak A, B € N, tak bud A = B alebo A∩B = ∅;UA€N A = M.• Kazdy rozklad N na M jednoznacne urcuje istu ekvivalenciu RN na M.

Page 4: Teoretické základy informatiky (18)statnice.dqd.cz/w_potitko/vypisky_I.pdfvariacie s opakovanim – cisla sa nam mozu opakovat (vraciame kartu naspat, hadzanie znova kockou atd):

Nech RN je podmn. M × M je relacia na M definovana takto: (x, y) € RN existuje A € N take, ze x, y € A. Potom RN je ekvivalencia na M.

• Kazda ekvivalencia R na M jednoznacne urcuje isty rozklad M/R na M.Pre kazde x € M definujeme mnozinu [x] = y € M | (x,y) € R. Rozklad M/R (M faktorizovana podla R) = [x] | x € MKazda takato podmnozina je reprezentovana ktorymkolvek svojim prvkom, tzv. reprezentantom. Mozeme triedam rozkladu rozumiet tiez tak, ze triedu [a] vnimame ako prvok a „az na ekvivalenciu“.

Priklad: zvyskove triedy.

3. USPOŘÁDÁNÍ (uvod do inf., matika I – 4. prednaska)

relace uspořádání- R je podmn. M × M je usporiadanie R je reflex., antisym. a tranzitivna- R je podmn. M × M je predusporiadanie (kvaziuspor., polouspor.) R je reflex. a tranzit.

uspořádané množiny- (Pred)usporiadana mnozina je dvojica (M, ≤), kde M je mnozina a ≤ je (pred)usporiadanie

na M. Príkladom lineárne usporiadaných množín sú N, Z, Q, R vzhľadom k usporiadaniu podľa veľkosti. Príkladom predusporiadanej množiny, ktorá nie je usporiadaná je (Z,| ), kde | je relace deliteľnosti (množina (N,|) usporiadaná je)

- Ak pre x, y € M neplati (x, y) € R ani (y, x) € R, tak x a y su nezrovnatelne.- Usporiadanie R na M je linerane (uplne), ak kazde dva prvky M su zvhladom na R

zrovnatelne. Priklad: (2M, inkluzia) je usporiadana mnozina (ale usporiadanie nie je uplne)• Usporiadanie „po bodoch“: Nech M je mnozina a (A, ≤A) usporiadana mnozina.

Nech F = f | f: M→A Definujme binarnu relaciu na F predpisom f g pre kazde x € M plati f(x) ≤A g(x). Potom (F, ) je usporiadana mnozina a sa nazyva „po bodoch“

• Usporiadanie „po zlozkach“: Nech (A, ≤A) a (B, ≤B) su usporiadane mnoziny. definujme binarnu relaciu na A × B predpisom (a, b) (a‘, b‘) a≤Aa‘ a b≤B b‘. Potom (A × B, ) je usporiadana mnozina. Toto usporiadanie sa nazyva „po zlozkach“

• Lexikograficke usporiadanie: Nech (A, ≤A) a (B, ≤B) su usporiadane mnoziny. definujme binarnu relaciu na A × B predpisom (a, b) (a‘, b‘) bud a≤Aa‘ a a!=a‘ alebo a=a‘ a b≤Bb‘

- Ak mame 2 a viac usporiad. mnozin, tak ich kart. sucin je mozno usporiadat po zlozkach alebo lexikograficky.

- Ak je predusporiadanie na M, mozme definovat relaciu ~ na M predpisom x~y x y a y x Potom ~ je ekvivalencia na M, kt. sa nazyva jadro predusporiadania . Na rozklade M/~ potom mozno zaviest relaciu ≤ definovanu takto: [x] ≤ [y] x y. Potom (M/~, ≤) je usporiadana mnozina.

Bud (M, ≤) usporiadana mnozina• x € M je minimalny pre kazde y € M plati, ze ak y ≤ x tak x ≤ y (Tj. x je minimalny

neexistuje ziaden prvok ostro mensi ako x) – mozu byt ale nezrovnatelne• x € M je maximalny pre kazde y € M plati, ze ak x ≤ y tak y ≤ x (Tj. x je maximalny neexistuje ziaden prvok ostro vacsi ako x)

• x € M je najmensi pre kazde y € M plati, ze x ≤ y (Kazdy najmensi je minimalny - ale nie naopak. Teda „najmensi“ je podmnozinou „minimalny“)

• x € M je najvacsi pre kazde y € M plati, ze y ≤ x• x € M pokryva y € M z!=y, y ≤ x a neexistuje ziadne z € M take, ze x ≠ z ≠y a y≤ z ≤x• x € M je horna zavora mnoziny A je podmn. M y ≤ x pre kazde y € A

Page 5: Teoretické základy informatiky (18)statnice.dqd.cz/w_potitko/vypisky_I.pdfvariacie s opakovanim – cisla sa nam mozu opakovat (vraciame kartu naspat, hadzanie znova kockou atd):

• x € M je dolna zavora mnoziny A je podmn. M x ≤ y pre kazde y € A• x € M je supremum mnoziny A je podmn. M x je najmensia horna zavora mnoziny A• x € M je infimum mnoziny A je podmn. M x je najvacsia dolna zavora mnoziny AŠpeciálne prípady: je najmenší prvok usporiadanej množiny A a je najväčší

prvok A (ak existujú). V usporiadanej množine , kde X je neprázdna podmnožina

P(A) platí:

Nech A je usporiadaná množina, potom nasledujúce výroky sú ekvivalentné. ľuboboľná podmnožina množiny A má infimum ľuboboľná podmnožina množiny A má suprémum

Hassevske diagramy uspor. mnozin su prehladnejsie ako grafy relacii. Hass. diagram usp. mnoziny (M, ≤) vznikne takto: - do prvej horiz. vrstvy zakrezlime body odpovedajuce minimalnym prvkom- ak mame zakreslenu vrstvu i, tak do vrstvy i+1 (kt. je nad vrstvou i) zakreslime vsetky

take prvky, kt. pokryvaju nejaky prvok vrstvy i – a spojime ich neorientovanou hranou (ciarou)

svazy (mat IV)Svaz je poset (K,≤) (partially ordered set), ve kterém každá dvouprvková množina A,B má supremum (A or B) a infimum (A and B) v K. Usporiadaná množina A sa nazýva úplný svaz, ak jej ľubovoľná podmnožina má suprémum a infimum.

Boolova algebra je zvaz, v kt. je distributivita a existuje doplnok ku kazdemu prvku, kt. je dany jednoznacne.

Z predchádzajúcich definícií vyplývajú nasledovné dôsledky:

- Ak je svaz, potom tiež každá neprázdna konečná podmnožina v A má suprémum a infimum. Ak A je konečná (a neprázdna), pojmy svaz a úplný svaz splývajú.

- Každý úplný svaz je tiež svaz.

- Každý úplný svaz má najmenší a najväčší prvok, ktorým je infM a supM. Príklady svazov a úplných svazov:

- Každá lineárne usporiadaná množina je svaz, teda aj , , , sú svazy (žiaden z nich nie je úplný svaz, neexistuje supN, supZ,…).

- Usporiadaná množina je svaz - každá dvojprvková množina má suprémum (najmenší spoločný násobok a,b) a infimum (najväčší spoločný deliteľ a,b). - napr. zvaz vsetkych delitelov daneho cisla (napr. 36) – cisla 1, 2, 3, 4, 6, 9, 12, 18, 36 usporiadame do Hass. diagramu tak, ze a < b a/b (ale delitele 1, 2, 3, 12, 18, 36 uz netvoria zvaz (medzi 12 a 18 neexistuje usporiadanie))

- Usporiadaná množina je úplný svaz, suprémum = zjednotenie, infimum = prienik

číselné obory – plati:

Prirodzene cisla: , prip. - uzavrene na scitanie, nasobenie a mocnenie

Cele cisla: - uz uzavrene aj na odcitanie

Page 6: Teoretické základy informatiky (18)statnice.dqd.cz/w_potitko/vypisky_I.pdfvariacie s opakovanim – cisla sa nam mozu opakovat (vraciame kartu naspat, hadzanie znova kockou atd):

- konstrukcia: na množine relacia vzťahom:

- Triedu ekvivalence určenú prvkom označíme (reprezentuje rozdiel a-b).- Definujeme operácie:

Racionalne cisla: - uz uvazuju aj operaciu delenia

- konstrukcia: na množine relacia vzťahom:

- Triedu ekvivalence určenú prvkom označíme (reprezentuje zlomok ).- Definujeme operácie:

Realne cisla: - zahrnaju Q aj I, teda cisla racionalne aj iracionalne, bezo zvysku pokryju celu ciselnu osu (Irac. cislo; nejde ho vyjadrit v tvare zlomku, napr. √2 alebo ∏ )to pokrytie osi bezo zvysku se zásadním způsobem odráží v některých vlastnostech, na kterých stojí celý obor matematické analýzy. Například je zde pravda, že „každá omezená množina má supremum a infimum “ nebo „z omezené posloupnosti lze vybrat konvergentní posloupnost“, což jsou tvrzení, která neplatí ani na oboru racionálních čísel, dokonce ani na oboru algebraických čísel. (algebraicke: √2, transendentalne: ∏ )Komplexne cisla: C - aby kazda polynomicka rovnica mala nejake riesenie, riesi teda aj x2 = -2, pokryvaju bez zvysku celu rovinu

4. PRAVDĚPODOBNOST A STATISTIKA Ω = mnozina vsetkych moznych vysledkov, zakladny priestor. Prvky ω € Ω predstavuju jednotlive mozne vysledky. Jevové pole je systém podmnožin základního prostoru uzavřený na konečné průniky, spočetná sjednocení a množinové rozdíly. Jednotlivé množiny A € A nazýváme náhodné jevy (vzhledem k A).• celý základní prostor Ω se nazývá jistý jev, prázdná podmnožina ∅ € A se nazývá nemožný jev,• jednoprvkové podmnožiny ω € Ω se nazývají elementární jevy,• společné nastoupení jevů Ai, i € I, odpovídá jevu ∩i € I Ai, nastoupení alespoň jednoho z jevů Ai, i € I, odpovídá jevu Ui €I Ai,• A,B € A jsou neslučitelné jevy, je-li A ∩ B = ∅,• jev A má za důsledek jev B, když A je vlastnou podmn. B,• je-li A € A, pak se jev B = Ω \ A nazývá opačný jev k jevu A, píšeme B = Ac

Pravděpodobnostní prostor je jevové pole A podmnožin (konečného) základního prostoru Ω, na kterém je definována skalární funkce P : A → R s následujícími vlastnosti:• je nezáporná, tj. P(A) ≥ 0 pro všechny jevy A,• je aditivní, tj. P(U i €I Ai) = ∑i €I P(Ai), pro každý nejvýše spočetný systém po dvou neslučitelných jevů,• pravděpodobnost jistého jevu je 1.Funkci P nazýváme pravděpodobností na jevovém poli (Ω, A).- dosledok: pro všechny jevy platí P(Ac) = 1 − P(A)

Page 7: Teoretické základy informatiky (18)statnice.dqd.cz/w_potitko/vypisky_I.pdfvariacie s opakovanim – cisla sa nam mozu opakovat (vraciame kartu naspat, hadzanie znova kockou atd):

klasická pravdepodobnostNechť Ω je konečný základní prostor a nechť jevové pole A je právě systém všech podmnožin v Ω. Klasická pravděpodobnost je pravděpodobnostní prostor (Ω, A, P) s pravděpodobnostní funkcí P : A → R, P(A) = |A| / |Ω| (napr. javy suvisiace s hadzanim mincou)

podmíněná pravděpodobnostNechť H je jev s nenulovou pravděpodobností v jevovém poli A v pravděpodobnostním prostoru (Ω, A, P). Podmíněná pravděpodobnost P(A|H) jevu A € A vzhledem k hypotéze H je definována vztahem P(A|H) = P(A ∩ H) / P(H) (napr. „jaká je pravděpodobnost, že při hodu dvěmi kostkami padly dvě pětky, je-li součet hodnot deset?“ Definice odpovídá požadavku, že jevy A a H nastanou zároveň, za předpokladu, že A nastal s pravděpodobností P(A ∩ H)/P(A).Je také vidět přímo z definice, hypotéza H a jev A jsou nezávislé tehdy a jen tehdy, je-li P(A) = P(A|H).Přepsáním formule pro podmíněnou pravděpodobnost dostávámeP(A ∩ B) = P(B ∩ A) = P(A)P(B|A) = P(B)P(A|B)

Bayesovy věty. Pro pravděpodobnost jevů A a B platí• P(A|B) = P(A) P(B|A) / P(B) • P(A|B) = P(A) P(B|A) / (P(A)P(B|A) + P(A‘)P(B|A‘))

nahodna velicina – zavadzame ju, pretoze chceme pracovat s intervalmi- vyjadrit, ze aka je pravdepod., ze dana hodnota bude prave z tohto intervalu- zavadzame Borelovske mnoziny B = najmensie javove pole obsahujuce vsetky intervalyNá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 € B na R. Reálná funkce PX(B) = P(X−1(B)) definovaná na všech Borelovských množinách B je vlastnou podmn. R se nazývá rozdělení (pravděpodobnosti) náhodné veličiny X. Pro klasickou konečnou pravděpodobnost je náhodnou veličinou každá reálná funkce X : Ω → R. Skutečně, na konečné množině Ω nabývá X jen konečně mnoho hodnot a každá podmnožina v Ω je jevovým prostorem.Rozdělení pravděpodobnosti náhodných veličin zadáváme nejčastěji pomocípravidla, jak roste pravděpodobnost s přírůstkem intervalu B:

distribuční funkce distribuční funkcí náhodné veličiny X je funkce F : R → R definovaná pro všechny x € R vztahem F(x) = P(X < x)Diskretna nahodna velicina XX na pravděpodobnostním prostoru (Ω, A, P) nabývá jen konečně mnoha hodnot x1, x2, . . . , xn € R. Pak existuje tzv. pravděpodobnostní funkce f(x) taková, že f(x) = P(X = xi) x = xi 0 jinak.Evidentně Σn

i=1 f(xi) = 1 a pro rozdělení pravděpodobnosti platí P(X−1 B) =Σxi € B f(xi)a tedy zejména je distribuční funkce tvaru FX(t) =Σ xi<t f(xi)Každá náhodná veličina definovaná pro klasickou pravděpodobnost je diskrétní.Spojita nahodna velicinahustota f(x) pravdepodobnosti P(x ≤ X < x + dx) = f(x)dxTo znamená, že chceme pro −∞ ≤ a ≤ b ≤ ∞ P(a ≤ X < b) = ∫b

a f(x)dx

Page 8: Teoretické základy informatiky (18)statnice.dqd.cz/w_potitko/vypisky_I.pdfvariacie s opakovanim – cisla sa nam mozu opakovat (vraciame kartu naspat, hadzanie znova kockou atd):

Distribucna funkcia: F(x) = P(X≤x) = ∫x-∞ f(t)dt

Nechť X je náhodná veličina, F(x) je její distribuční funkce.(1) F je zleva spojitá, limx→−∞ = 0 a limx→∞ = 1.(2) Vždy platí P(a ≤ X < b) = F(b) − F(a).(3) Je-li X diskrétní s hodnotami x1, . . . , xn, pak je F(x) po částech konstantní, F(x) = Σxi < x P(X = xi) a F(x) = 1 kdykoliv x > xn.(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).

rozdělení náhodných veličinDiskretne:

• degenerovane Dg(µ) - konstantna hodnota X = µdistribucna funkcia: FX(t) = 0 pre t ≤ µ; 1 pre t > µpravdepodobn. funkcia: fX(t) = 1 pre t = µ; 0 jinak

• alternativne A(p) - popisuje pokus s pouze dvěma možnými výsledky, pravdepodobnosti su p a (1-p):FX(t) = 0 pre t ≤ 0; 1-p pre 0 < t ≤ 1; 1 pre t > 1 fX(t) = p pre t = 1; 1-p pre t = 0; 0 inak • binomicke Bi(n, p) - odpovídá n–krát nezávisle opakovanému pokusu popsaném alternativním rozdělením, přičemž naše náhodná veličina měří počet zdarů.fX(t) = n pt (1 − p)1−t pre t € 0, 1, . . . , n; 0 jinak- nejvíce výsledků bude blízko hodnoty np• poissonovo Po(λ) - dobře aproximuje binomická rozložení Bi(n, λ/n) pro konstantní λ > 0 a veliká n: fX(t) = (λk/k!) e−λ pre t € N 0 inak

Spojite: • rovnomerne R(a, b) – hustota fX je konstantna na danom intervale, inde je 0

fX(t) = 0 pre t ≤ a; 1/(b−a) pre t € (a, b); 0 pre t ≥ bFX(t) = 0 pre t ≤ a; (t-a)/(b−a) pre t € (a, b); 1 pre t ≥ b,

• exponencialne ex(λ) : fX = λe−λt pre t > 0; 0 pre t ≤ 0.• normalne – binomicke pre velke n

hustota fX(x) = (1/(√2π)) ex = Gaussova krivkavýpočet střední hodnoty – pri rovnomernom rozdeleni je strednou hodnotou aritmet. priemerpre diskretnu velicinu: EX = Σi xi fX(xi) pre spojitu velicinu: EX = ∫−∞

∞ x fX(x) dx

vypocet rozptylu D(X) = E(X2)- (EX)2

E(X2) - do vzorca pre EX vsade miesto X je X2

(EX)2 – vyratana stredna hodnota na druhusmerodatna odchylka je odmocnina z rozptylu

vypocet kovariancecov(X, Y) = E(X.Y) – E(X).E(Y) - pouzitie v citateli korelacneho koeficientu, ktory urcuje mieru lineranej zavislosti dvoch nahodnych velicinE(X.Y) = Σi=1 Σj=1 xiyj ∏ (xi, yj)korelacny koeficient: cov(X, Y) / √(D(X) . D(Y))

Page 9: Teoretické základy informatiky (18)statnice.dqd.cz/w_potitko/vypisky_I.pdfvariacie s opakovanim – cisla sa nam mozu opakovat (vraciame kartu naspat, hadzanie znova kockou atd):

5. VÝROKOVÁ LOGIKA (uvod do logiky)vyrokova logika = teoria log. spojek chapanych ako n-arne pravdivostne funkcie (t.j. priraduje n-ticiam pravd. hodnot pravd. hodnotu true/false) – pocet vs. moznych argumentov je 2^nnularne spojky: 0,1; unarne spojky: un. verum, projekcia, un. falsum, negacia; binarne spojky: a, alebo, implikacia, ekvival., xor, nand, nor, bin. verum, bin. falsum, inhibicia (neg. impl.), konverzna (opacna) impl., ...pocet navzajom roznych n-arnych spojek je 2^(2^n)syntax – abeceda: vyrokove symboly: p,q,r.., symboly pre spojky, pomocne symboly: (,)spravne utorena formula: 1. kazdy vyrokovy symbol je formula (tsv. atomicka formula)2. ak je vyraz A formula, tak aj not(A) je formula 3. ak su vyrazy A, V formule, potom tiez (A) or (B), (A) and (B), (A) => (B), (A) (B)(zatvorky mozme podla konvencie vynechat, pokial to neni na ujmu jednoznacnosti formule)sémantika – Pravdivostne ohodnotenie (interpretacia) je funkcia priradzujuca vsetkym atomickym formulam danej uvahy pravd. hodnoty (t.j. kazdemu vyrokovemu symbolu priradi 0 alebo 1)Valuacia je rozsirenie interpretacie z atomickych na vsetky formule podla tabulky pre vyrokove spojky (priradi 0/1 napr. aj A => notB)Interpretacia I splnuje formulu A (formula je pravdiva v I, resp. odpov. valuacia I‘(A)=1), ak:

1. A je vyrokovy symbol a I(A) = 12. A je notB a I nesplnuje B, resp. I‘(B)=03. A je tvaru B a C a I splnuje B, C, resp. I‘(B)=I‘(C)=14. A je B or C a I splnuje B alebo C, resp. I‘(B) = 1 alebo I‘(C)=15. A je tvaru B=>C a I nesplnuje B alebo splnuje C, resp I‘(B)=0 alebo I‘(C)=16. A je tvaru BC a I splnuje B aj C, alebo I nesplnuje B aj C, resp. I‘(B)=I‘(C)

odvozovací systém výrokové logiky Tautologia = formula, kt. je splnovana kazdou interpretaciou (ak ziadnou, tak kontradikcia)Formula A je splnitelna, ak je splnovana aspon 1 interpretaciou (=model formule A)Mnozina formuli T je splnitelna, ak existuje interpretacia splnujuca kazdu formulu z T (=model mnoziny T)Formula A logicky vyplyva z mnoziny T, ak pre kazdy model I mnoziny T I splnuje A. Zapisujeme T |= A. priklady niekt. tautologii: na jednom symbole (P or notP), zobrazovacie tautologie (P and Q)not(notP or notQ), komutativita, asociativita ((P and Q) and R)(P and (Q and R)), distributivita (P and (Q or R)) ((P and Q) or (P and R)), zakon simplifikacie p=>(q=>p), zakon kontrapozicie (P=>Q)(notQ=>notP), absorbcia (P and (P or Q)) P (to iste pre obratene a s al), de Morganove zakony o negacii: not(P and Q) (notP or notQ)

- veta o implikacii: ak je A a A=>B tautologie, tak aj B je tautologia- veta o dedukcii: A1,A2, ... An-1, An |=B A1, A2,... An-1 |= An => B

Uplna normalna dizjunkivna forma (beru sa hodnoty 1, spaja sa s „a“, medzi zatvorkami je „al“), uplna norm. konjunktivna forma naopak (undf(A)=neg(unkf(negA))), existuje prave jedna (ak nie uplna, len ndf/nkf tak v tych zatvorkach nemusia byt vsetky literaly, ale moze byt napr. len jeden) – da sa do nej previest bud prevodmi alebo tabulkou vyuzitie: hladanie log. dosledkov mnoziny T (=undf a vsetky jej podmnoziny); hladanie vsetkych predpokladov (premis) formule (vysledkom je undf a undf so vsetkymi elem. dizj. ktore nie su v undf)Uplny system spojok and,or,not, and,not, or, not, impl,not, nand, norSpojky a, or su dualnedůkazy ve výrokové logice, pravdivost a dokazatelnost (odvoditelnost) logických formulí – oba body dobre rozobrate na wiki, ja to mam odtial, uz sa mi to sem pisat nechcelo, kuknite si pripadne tam

Page 10: Teoretické základy informatiky (18)statnice.dqd.cz/w_potitko/vypisky_I.pdfvariacie s opakovanim – cisla sa nam mozu opakovat (vraciame kartu naspat, hadzanie znova kockou atd):

rezoluceFormalny (axiomaticky) system (vyrokovej) logiky = jazyk + formule, odvodzovacie pravidla, axiomy – pozaduje sa: korektnost, uplnost, rozhodnutelnost, nezavislost axiomovRezolucia = formalny system, zhodna pre strojove dokazovanie (Prolog), dokazuje sa nesplnitelnost formuli, formule su v nkf (klauzuralny tvar)Literaly = vyrokove symboly a ich negacieKlauzula = mnozina literalov (chapana ako dizjunkcia), prazdna = nepravdiva ()Formula = mnozina klauzuli (chapana ako konjunkcia), prazdna = pravdivaRezolucne pravidlo – nech C1=p U C1‘, C2=p U C2‘ su klauzule, ich rezolventou je C = C1‘ U C2‘ (rezolvovali sme na literale p) – rezolucne pravidlo zachovava splnitelnostRezolucny dokaz klauzule C z formule S je konecna postupnost klauzuli C1,C2,...,Cn, kde Cn=C a kazde Ci je bud prvkom S, alebo rezolventou klauzuli Cj, Ck pre j,k <i. Ak tento dokaz existuje, C je rezolucne dokazatelna z S (piseme S|-R C). Odvodenie prazdnej klauzule () z S je vyvratenie S = S je nesplinetelnaRezolucny strom – na dokaz C z S (bud notC pridame do S alebo z S rovno odvodime C), na vyvratenie S (odvodime )Zjemnenie rezolucie – snaha obmedzit prehladavany priestor, napr. T-rezolucia (ziadna z rodic. klauzuli nie je tautologia, t.j. neobsahuje naraz literal v oboch paritach); A-rezolucia (semanticka rezoluce) – A je lub. valuacia – aspon 1 z rodic. klauzuli je v A nepravdiva (to je ak chceme dokazat nesplnitelnost), Linearna rezolucia – miesto stromu linearna struktura (vstupne klauzule S, stredne klauzule (odvodene) Ci, bocne klauzule Bi)

6. PREDIKÁTOVÁ LOGIKA PRVNÍHO ŘÁDU (uvod do logiky) predikat je n-arna relacia, vyjadruje vlastnosti objektov a vztahy medzi objektmisyntax = abeceda + pravidla pre spravne tvorenie termov (=vyrazy zlozene len z funkc. symbolov, konstant a premennych) a formuliabeceda: premenne x,y; konstanty a,b- z predom danej mnoziny hodnot - domeny; symboly pre spojky a,al,neg,=>,; symboly pre kvantifikatory: V, E; n-arne funkcne symboly f,g; n-arne predikatove symboly P,Q; pomocne symboly: (,)termy: 1. kazda premenna a kazda konstanta je term

2. ak je f n-arny funkcny symbol a t1,...,tn su termy, potom f(t1,...,tn) je term- termy bez premennych oznacujeme ako uzavrene termyformula: atomicka formula :

1. ak je P n-arny predikatovy symbol a t1,..., tn su termy, potom P(t1,..., tn) je atomicka formula

2. ak su t1 a t2 termy, tak t1=t2 je atomicka formulaformula: 1. kazda atomicka formula je formula

2. ak je A formula, tak notA je formula 3. ak A, B su formule, tak (A or B), (A and B), (A => B), (A B) su formule 4. ak je x premenna a A formula, potom (VxA) and (ExA) su formule

Podformula formule, viazany/volny vyskyt premennej (podla toho ci existuje podformula, kde by bola dana premenna kvantifikovana) sentence = vsetky viazane, otevrena formule = bez kvantifikatorov; substitucia premennych (A(x/t)) – treba dat ale pozor aby to nekolidovalosémantika – potrebujeme najprv specifikaciu jazyka (domena, konstanty, funkcne a predik. symboly) – im ideme teraz pridelit vyznam, cize povedat, co robia, co je vysledkom ich aplikacie (a z toho vyvodit zase co plati pre premenne, termy a formule)interpretacia (realizacia) jazyka predik. logiky je struktura I zlozena z:- lub. neprazdnej mnoziny D (domeny, oboru interpretacie)- zobrazenia I(f): D^n -> D pre kazdy n-arny funkcny symbol f, n>=0- n-arnej realcie I(P) patri do D^n pre kazdy n-arny predikatovy symbol P, n>=1

Page 11: Teoretické základy informatiky (18)statnice.dqd.cz/w_potitko/vypisky_I.pdfvariacie s opakovanim – cisla sa nam mozu opakovat (vraciame kartu naspat, hadzanie znova kockou atd):

(napr D=cele cisla, I(a) = 0, I(a1)=1,... I(b1)=-1...; I(f) = +, I(P) = >)interpretacia volnych premennych spociva v ich ohodnoteni, co je lub. zobrazenie V (valuacia) z mnoziny vsetkych premennych do D, V[x/d] znamena ze x=dhodnota termu t v interpretacii I a valuacii V je prvok |t|I,V z D taky ze ak t je premenna, tak je to valuacia V(t), ak je to funkcia, tak je hodnotou funkcie I(f) pre argumenty vyhodnotene tiez v prislusnom kontexteformula A je splnovana interpretaciou I a valuaciou V , ak.. a teraz osetrene vsetky pripady ako moze A vyzerat (A je P(t1,...,tn); A je t1=t2; A je notB; ... A je VxB, ...)formula A je pravdiva v interpretacii I , ak je splnovana I pre lib. valuaciu, piseme |=I Aformula A je tautologia, ak je pravdiva pre kazdu interpetaciu, splnitelna ak ex. aspon 1 interpretacia a valuacia, kt. ju splnuju a kontradikcia ak notA je tautologiaformula B log. vyplyva z mnoziny formuli, ak v lub. interpretacii, kde je mnozina pravdiva, je pravdive aj Btautologie – ako vo vyrokovej, ale nahradenim p za VxP(x)+ nejake specificke- axiomaticky system pred. logikyprenexace – prenexova norm. forma (pnf) – kazda formula sa da, kvantifikatory vsetky dopredu a vnutrajsok v tvare nkf/ndf

1. eliminovat zbytocne kvantifikatory2. premenovat prem. tak, aby u kazdeho kvantif. bola ina prem.3. eliminovat vsetky spojky rozne od not, and, or4. presunut negaciu dovnutra k predikatom samotnym5. presunut kvantifikatory dolava6. pouzit distribut. zakony pre prevod jadra do nkf (ndf)

skolemizace – skolemova norm. forma = prenexova, ale len z univerzalnymi kvantif. – proces nahradenia: formulu Vx1...VxnEy P(x1,...,xn,y) transformujeme na Vx1...Vxn

P(x1,...,xn,f(x1,...,xn)) – musi ist o funkciu tych premennych, ktore boli normalne pred tym Ey ale vseobecne kvantifikovane

unifikacekonjunktivna pnf + vseob. kvantif. nepiseme – substitucia premennych potrebna ak chceme robit rezoluciukonecna substitucia ф je konecna mnozina x1/t1, x2/t2,..., xn/tn, kde vsetky xi su navzajom rozne prem. a kazde ti je term rozny od xi. Ak su vsetky ti uzavrene termy, ide o uzavrenu substit. ak su ti premenne, oznacujeme o ako premenovanie premennych- term/literal E, potom Eф je vysledok nahradenia vsetkych vyskytov vsetkych xi odpovedajucimi termami ti – substitucie prem. prebiehaju paralelne, nie postupnekompozicie substitucii – beriem postupne prvky prvej substit. a kukam sa do tej druhej ci tam nahodou nie je nahrada nahradeneho (tranzitivne)unifikator mnoziny S= E1, ..., En je substitucia ф, ak E1ф=E2ф=...=Enф, teda v pripade, ze Sф ma jediny prvok (unifikujeme vzdy tak, ze miesto premennej dam konstantu, nie naopak!)- napr unifikatorom P(x,c), P(b,c) je ф = x/b (niekedy unifikator neexistuje)najobecnejsi unifikator (mgu) S je taky unifikator ф, ak pre lubovolny unifikator ψ mnoziny S existuje substitucia λ taka, ze ф λ =ψ - pre unifikovane mnoziny existuje jediny mgurozdiel medzi vyrazmi z mnoziny S, znaci sa D(S) znaci ze sa na danej pozicii lisia tie prvkyUnifikacny algoritmus pre mnozinu vyrazov S: ideme postupne zlava doprava a hladame rozdiely medzi vyrazmi – z daneho rozdielu urcime unifikaciu a hned aj substituujeme... no a pokracujeme dalej doprava.. vysledna unifikacia pozostava z mnoziny jednotlivych unifikacii ako sli za sebou (ulozene do mnoziny)rezoluce – v Skolemovej norm. forme, kvantif. nepiseme, rovnaka notacia ako vo vyr. logike (klauzule reprezentuju dizjunkciu literalov, formule zas mnoziny klauzuli reprez. ich

Page 12: Teoretické základy informatiky (18)statnice.dqd.cz/w_potitko/vypisky_I.pdfvariacie s opakovanim – cisla sa nam mozu opakovat (vraciame kartu naspat, hadzanie znova kockou atd):

konjunkciu) – potrebna standardizacia premennych (aby neboli nikde rovnake, aj ked sa rovnakymi nemyslia)rezolucne pravidlo pre predik. logiku: majme klauzule C1 a C2 bez spol. prem. v tvare C1 = C1‘ U P(x1),...,P(xn), C2= C2‘ U negP(y1), ..., notP(ym) Ak je ф mgu mnoziny P(x1),...,P(xn), P(y1), ..., P(ym), tak rezolventou C1 a C2 je C1‘ф U C2’фrezolucne dokazy a rezolucne vyvratenie rovnake ako vo vyrokovej logike- pri jednom rezolucnom kroku musime byt schopni odstranit niekolko literalov zaroven (inak to nemusime moct vyvratit)- je korektna a uplna (ako vo vyrokovej)- tiez mozme vytvorit rezolucny strom + problem velkeho prehlad. priestoru -> rovnake metody zjemnenia ako vo vyrokovej

7. PROLOG (uvod do logiky)Vyrokova logika: Rezolucia – dokazuje sa nesplnitelnost formuli, su v nkf, v koreni je alebo dokazovana formula C, v listoch su jednotlive klauzule S, vo vnutornych listoch rezolventy Linearna rezolucia – ide o postupnost dvojic <C0, B0>, ... , <Cn, Bn> taka, ze C = Cn+1 a 1. C0 a vsetky Bi su z S alebo nejake Cj, kde j<i2. kazde Ci+1, i<=n je rezolventou Ci a Bi (vstupne klauzule S, bocne Bi a stredne Ci)- je korektna a uplna

Linearna vstupna rezolucia (LI) mnoziny S=P U G je linearne vyvratenie S, ktore zacina klauzulou G a bocnymi klauzulami su iba klauzule z P. – je uplna len pre Hornove klauzule

Hornove klauzule (su v Prologu) = klauzula s najviac jednym pozit. literalom (daju sa reprezentovat ako implikacia) – typy:

- programove – fakty (bez negat. lit. p.), pravdila (s aspon 1 neg. literalom p:-q.)- ciele – bez pozit. literalu ?-p. (t.j. ekvivalent neg p)LD rezolucia – uz mame usporiadane klauzule a pri rezolucii vkladame dovnutra. LD

rezolucne vyvratenie P U G je postupnost <G0, C0>, ... , <Gn, Cn> usporiadanych klauzuli taka, ze G0=G, Gn+1=, Ci je z T a kazde Gi 1<=i<=n je rezolventou usporiadanych klauzuli Gi-

1 a Ci-1

SLD rezoluce – linearna vstupna rezolucia so selekcnym pravidlom (selekcne pravidlo = lubovolna funkcia, kt. vyberie literal z kazdej usporiadanej cielovej klauzule) – uplnost SLD-rezolucie pre Prolog, t.j. pre Hornove klauzule (ze to vie urcite vyvratit, ak to ide)

SLD strom pre program P a ciel G: v koreni je G. Ak je lubovolny uzol oznaceny G‘, tak jeho bezprostredni naslednici su oznaceni vysledkom rezolucie najlavejsieho literalu G‘ so vsetkymi pouzitelnymi klauzulami z P. – takto vznikne vela ciest, aj tie neuspesne, vzdy v kazdom uzle su vsetky literaly negovanePredikatova logika: je to vlastne rovnake ako vyrokova, akorat musime previest do Skolemovej norm. formy a potom tam nie su len hrany v strome, ale na nich aj prislusna unifikacia

výpočetní mechanismus Prologu – uspesne cesty v SLD-strome su tie, kt. koncia , ostatne su neuspesne.Vyhodnocovaci mechanizmus Prologu prechadza SLD-strom do hlbky zlava doprava a hlada (prvu) uspesnu cestu (backtracking). – pripadne prelezie cely strom a vyhlasi ze to nejde- zadanie stredniku (;) po uspesnom vyhodnoteni ciela vynutime backtracking a hladanie alternativneho dokazu

Page 13: Teoretické základy informatiky (18)statnice.dqd.cz/w_potitko/vypisky_I.pdfvariacie s opakovanim – cisla sa nam mozu opakovat (vraciame kartu naspat, hadzanie znova kockou atd):

- odpoved „no“ systemu znamena, ze dany ciel nie je log. dosledkom programu (pripadne ze nema alternat. dokaz)prologovska strategia prehladavania stavoveho priestoru (do hlbky) -moze viest k zacykleniu (aj v pripade, ze existuju uspesne vetvy) – napr.: q:=r. r:-q. q. ciel ?- q.

základy programování v Prologu Logicke programovanie:

- logicky program = lubovolna konecna mnozina programovych Hornovych klauzuli- odvodzovanie (dokazovanie) cielov zalozene na SLD-rezolucii- deklarativne (specifikacia programu je priamo programom)- teoreticky model, zachovava uplnost

Prolog – konkretna implementacia log. prog. jazyka – strata uplnosti (moznost zacyklenia)- vhodny na riesenie problemov tykajucich sa objektov a vztahov medzi nimi, do

znacnej miery vyuziva rekurziuSyntax Prologu: Datove objekty = termy (konstanty, premenne, zlozene termy=funktor (meno, arita) a argumenty – napr. bod(X,Y,Z)), Program = mnozina prog. klauzuli (pravidla, fakty), dotaz=ciel, ma aj explic. unifikaciu pomocou operatora „=“, napr. G(g(z,X)=f(Y)

9. REKURZE (funkc. prog.)To, co dává funkcionálním jazykům vyjadřovací sílu, je možnost definovat nové funkce a neomezovat se na již vestavěné. Funkce ve funkcionálních jazycích definujeme předpisy, ve kterých kromě jména funkce zapisujeme nalevo také její parametry, což budou v nejjednodušším případě jména proměnných. Třetí mocnina: cube x = x * x * x Maximální hodnota ze tří zadaných: max3 a b c = max a ( max b c ) Nové operátory se definují stejným způsobem jako funkce. Definice operátoru: (.-.) u v = if u>v then u-v else 0 rekurzivní definice funkcí – Podstatným důvodem, proč definice nových funkcí zvyšuje naši vyjadřovací sílu, je fakt, že definice mohou být rekurzivní. Napr. fact n = if n==0 then 1 else n*fact(n-1) alebo pomocou vzorov (definicia sa rozlozi na viac klauzuli): fact 0 =1

fact n =n*fact(n-1) (vzor je vyraz, ktory sa sklada len z premennych a konstruktorov (nejde ho teda dalej redukovat)) alebo a^n = if n == 0 then 1 else a * ( a^ ( n-1 ) )

Rozlišujeme dva druhy rekurze: Přímá rekurze nastává, pokud funkce volá přímo sama sebe. map f [] = [] map f (x:s) = f x : map f s

Nepřímá (vzájemná) rekurze je situace, kdy dvě funkce (nebo i více funkcí) volají vzájemně jedna druhou. even n = if (n == 0 then True else (odd (n-1)) odd n = if (n == 0 then False else (even (n-1))

funkcionalna abstrakcia (lambda) – umoznuje definovat anonymnu funkciu niekde v tele napr. inej funkcie, napr. map (\ x -> 3*x+1) [a,b,c,d] – ide vlastne o ekvivalent k let fx = 3*x +1 in map f [a,b,c,d] (ina alternativa definovania je este pomocou where)funkce vyššího řádu = n-arne funkcie, tie su v skutocnosti funkcie unarne. Po aplikacii na svoj argument vratia (n-1)-arnu funkciučástečná aplikace je aplikacia nejakej funkcie na mensi pocet argumentov nez je obvykle – vysledkom tejto aplikacie je funkcia, napr. (+)3 je „pricitac trojky“

Page 14: Teoretické základy informatiky (18)statnice.dqd.cz/w_potitko/vypisky_I.pdfvariacie s opakovanim – cisla sa nam mozu opakovat (vraciame kartu naspat, hadzanie znova kockou atd):

definice funkcí rekurzivně a pomocí kombinátorůFunkce lze definovat rekurzivně tak, že funkce volá sama sebe. Funkce lze ale definovat pomocí tzv. kombinátorů, tedy pomocí jiných funkcí, které buď samy v sobě rekurzi obsahují či ne. Například definice funkce reverse reverse = foldl (flip (:)) [] obsahuje funkci (kombinátor) foldl, která sama ve své definici rekurzi obsahuje, a funkci (kombinátor) flip, která rekurzivní není. Spoustu funkcí, které pracují se seznamy, lze vyjádřit pomocí tzv. akumulačních seznamových funkcí foldr a foldl (které jsou také kombinátory). and = foldr (&&) True or = foldr (||) False concat = foldr (++) [] compose = foldr (.) id ak aplikujeme funkciu foldr na argumenty (+), a, [x1, x2, …, xn-1, xn], dostaneme x1 + (x2 + … + (xn-1 + (xn + a))…) – tato funkcia teda aplikuje operator (+) na vsetky prvky zoznamu a na hodnotu “a”, zdruzujuc operandy spravafoldr :: (b -> a -> a) -> a -> [b] -> afoldr _ a [] = afoldr op a (x:s) = x ‘op’ foldr op a s

napr. and = foldr (&&) True; or = foldr (||) False; concat = foldr (++) []; compose = foldr (.) idfunkcia foldl funguje podobne, ale zdruzuje zlava: (…((b + y1) + y2) +…+ yn-1) + yn

foldl :: (a -> b -> a) -> a -> [b] -> afoldl _ b [] = bfoldl op b (y:t) = foldl op (b ‘op‘ y) t

curryifikace – z kazdej funkcie f‘, ktorej argumentom je n-tica, mozme vytvorit vyssiu funkciu, ktoru mozno postupne aplikovat na n argumentov odpovedajucim zlozkam n-ticenapr. mame dve funkcie – vyssiu add :: Int -> Int -> Int add x y = x+ya nizsiu add‘ :: (Int,Int) -> Int add‘ (x,y) = x+y potom plati f=curry f‘ a f‘ =uncurry fa plati kompilator = curry interpretdefinice vyšších funkcí bez použití formálních parametrů - ŋ-redukcia (vyplyva z principu extensionality) – ze ked popisujeme jednu funkciu pomocou druhej tak ak maju obe rovnake argumenty tak ich uvadzat nemusime, napr. zip = zipWith (,)princip extensionality říká: Jestliže platí f x = g x pro všechna x ze sjednocení definičních oborů funkcí f a g, pak f = g. (Laicky, když popisujeme funkci pomocí jiné funkce a mají stejné formální parametry ve stejném pořadí, tak je nemusíme uvádět.)

10. VYHODNOCOVÁNÍ VÝRAZŮ (funkc. prog.)referencne transparentne jazyky = hodnota vyrazu nezavisi na jeho umiestneni v programepořadí vyhodnocování – dolezite urcit, lebo inak by vypocet nebol jednoznacny (napr. pri funkcii f x = f x a const x y = x a naslednom vyhodnocovani const 3 (f 1)redukcny krok je uprava vyrazu, pri kt. sa niekt. jeho podvyraz nahradi pravou stranou definicie funkcie, prip. vycislenie jednoduchej operacie (aritmet., logickej) (znaci sa to zvlnenou sipkou)redukcna strategia je pravidlo, ktore pre kazdy vyraz jednoznacne urcuje prvy redukcny kroknormální redukce – M N1 .. Nn – skusa redukovat M, ak nejde -> je to funkcia a tak to nahradi pravou stranou definicie (ide zvonka a zlava) = volanie menom – argumenty vyhodnocujeme tolkokrat, kolkokrat na to pri vypocte dojdestriktní redukce – M N1 .. Nn – striktnou pokial to ide tak vyraz Nn, ak nejde, tak Nn-1 atd, ak nejde nakoniec redukovat ani M, tak nahradime pravou stranou (zvnutra a sprava) = volanie

Page 15: Teoretické základy informatiky (18)statnice.dqd.cz/w_potitko/vypisky_I.pdfvariacie s opakovanim – cisla sa nam mozu opakovat (vraciame kartu naspat, hadzanie znova kockou atd):

hodnotou - argumenty funkcii vyhodnocujeme prave raz – pouziva sa u nie cisto funkc. jazykoch (menej pamate) (nie su totiz cisto referencne transparentne)líná redukce – normalna red. strat. nemusi vzdy viest k najkratsiemu vysledku -> pri aplikacii M N1 .. Nn redukujeme M, ak nejde, je to funkcia a nahradime pravou stranou. Tu si ale pri kazdom nasobnom dosadeni pamatame, kt podvyrazy su rovnake a pri ich dalsom vyhodnoc. ich redukujeme len raz. -> kazdy argument vyhodnocujeme najviac jedenkrat – v cisto funkc. (referencne transp.) jazykochChurchova-Rosserova vlastnost pre funkc. jazyky: Pre kazdy vyraz M plati: ak redukujeme M pomocou dvoch red. strategii a v oboch pripadoch obdrzime po konecnom pocte krokov vysledok, tak su oba vysledky rovnake.Veta 2: Ak je mozno nejakou red. strategiou reudkovat vyraz M na vyslednu hodnotu (normalnu formu) M‘, tak k tejto hodnote M‘ dospejeme po konecnom pocte krokov pri pouziti normalne red. strategie.(pripadne linej) = norm. red. strategia (/lina) je efektivne normalizujuca

efektivita nekonečné datové struktury, definice funkcí nad nekonečnými strukturamidatove struktury = n-tice (M, N) = (,) M N – mozu byt rozneho typu, zoznamy (napr. 2:[3, 4] – prvky su indexovane od nuly a musia byt rovnakeho typu) – funkcie nad zoznammi: null, length, head, tail, !!, map, filter, take, drop, zipWith, zip, ++zoznamy – extenzionalny zapis (vymenovanim prvkov), intenzionalny (popisom vlastnosti, napr. vsetky parne cisla mensie ako 10 a pod.) – napr. [n^2 | n<-[1..4]] – obecne ma tvar [vyraz | kvalifikator, ... , kvalifikator] – kvalifikator je: generator (vzor<-zoznam), filter (even n), lokalna definicia (let vzor = vyraz – vztahuje sa na kvalifikatory vysk. sa za nim a na vyraz pred „|“ ), napr. spaces ::Int->[Char] spaces n=[‘ ‘ | i<-[1..n]]nekonecne dat. struktury - nekonecne zoznamy- napr. ones = 1: ones – vyhodnocovanie vdaka linemu vyhodnocovani konstruktoru (:) umozni take 2 ones -–> [1,1] (vyhodnoti to len tie prve dve) – vdaka tomu vlastne mozme pracovat s nekon. dat. strukturami

– zapis nekon. zoznamov pomocou intenzionalneho zapisu, pricom ako generator je nieco ako x<-[1..]

V líných jazycích můžeme pracovat s nekonečnými seznamy. Konstruktor (:) nevyhodnocuje své argumenty, když nemusí. Proto se při výpočtu vyhodnotí z nekonečného seznamu vždy jen tolik, kolik je potřeba. Užitečnými funkcemi pro vytváření nekonečných seznamů jsou repeat, cycle a iterate repeat :: a -> [a] repeat x = s where s = x : s

cycle :: [a] -> [a] cycle t = s where s = t ++ s

iterate :: (a -> a) -> a -> [a] iterate f x = x : iterate f (f x)

Page 16: Teoretické základy informatiky (18)statnice.dqd.cz/w_potitko/vypisky_I.pdfvariacie s opakovanim – cisla sa nam mozu opakovat (vraciame kartu naspat, hadzanie znova kockou atd):

11. REGULÁRNÍ JAZYKY regulární jazyky způsoby jejich reprezentace – regularne gramatiky, konecne automaty (vid dalsia otazka)obecna gramatika G je stvorica (N, ∑, P, S), kde

• N je neprazdna konecna mnozina neterminalnych symbolov• ∑ je konecna mnozina terminalnych symbolov taka, ze N∩∑=0. Zjednotenim N a ∑ je

V (mnozina vsetkych symbolov)• P je podmn. V*NV* × V* je konecna mnozina pravidiel. Pravidlo (α, β) obvykle

zapisujeme v tvare α→β (a citame ako „α prepis na β“)• S € N je specialny pociatocny neterminal (=koren gramatiky)

Chomskeho hierarchia gramatik: Klasifikacia gramatik podla tvaru prepisovacich pravidieltyp 0: pravidla v obecnom tvare (frazove gramatiky)typ 1: pre kazde jej pravidlo tvaru α→β plati | α| ≤ | β| (teda neskracuju) s eventuelnou vynimkou pravidla S→ε, ak sa S nevyskytuje na pravej strane ziadneho pravidla (kontextove gramatiky)typ 2: kazdejej pravidlo je tvaru A→ α, kde | α| ≥1 s eventuelnou vynimkou pravidla S→ε, ak sa S nevyskytuje na pravej strane ziadneho pravidla (bezkontextove gramatiky)typ 3: kazde jej pravidlo je tvaru A→aB alebo A→a s eventuelnou vynimkou pravidla S→ε, ak sa S nevyskytuje na pravej strane ziadneho pravidla (regularne gramatiky)Jazyk L je typu 0 (rekurzivne spocetny), ak existuje gramatika G typu 0 taka, ze L(G) = Lplati L3 je podmn. L2 je podmn. L1 je podmn. L0

vlastnosti regulárních jazykůLemma o vlkadani (pumping lemma): Nech L je regularny jazyk. Potom existuje n€N take, ze lubovolne slovo w€L, ktoreho dlzka je aspon n, mozno zapisat v tvare w=xyz, kde |xy|≤n, y!= ε a xyiz € L pre kazde i € N0

- ak by sme chceli dokazat, ze nie je reg., tak dokazeme negaciu tych tvrdeni – z toho plynie, ze L nie je regularny

Prava kongruencia: ekvivalencia na ∑* je sprava invariantna (prava kongruencia), ak pre kazde u, v, w € ∑* plati u~v => uw~vw. Index ekvivalencie ~ je poet tried rozkladu ∑*/~(pri dokaze staci uvazovat ze w je len jednoznakovy terminal – pre vsetky terminaly overit)Prefixova ekvivalencia: Nech L je lub. (nie nutne reg.) jazyk nad abecedou ∑. Na mnozine ∑* definujeme relaciu ~L zvanu prefixova ekvivalencia L takto:u ~L v pre vsetky w € ∑*: (uw € L vw € L) (pricom u, v nemusia do L vobec patrit)Myhill-Nerodova veta: Nech L je jazyk nad ∑. Potom tieto tvrdenia su ekvivalentne:

1. L je rozpoznatelny konecnym automatom (je regularny)2. L je zjednotenim niekt. tried rozkladu urcenych pravou kongruenciou na ∑*

s konecnym indexom3. Relacia ~L ma konecny index (=pocet stavov minimalneho kon. automatu)

+ kanonizacia automatov, automaty s ε-krokmi (je ich mozno plnohodnotne previest)- trieda regularnych jazykov je uzavrena na zjednotenie, prienik, rozdiel, doplnok, zretazenie, iteraciu, pozit. iteraciu a reverz jazyka (t.j. vsetky slova sa otocia) – to znamena ze ak na reg. jazyk aplikujeme niekt. z tychto operacii, tak aj vysledok bude regul. jazyk

- teda ak L1 je reg., L2 je reg => L1 ∩ L2 je reg. (pozor ale, je tu implikacia!)Trieda regularnych jazykov je najmensia trieda, kt. obsahuje vsetky konecne mnoziny a je uzavrena na zjednotenie, zretazenie a iteraciu.Rozhodnutelne porblemy pre triedu reg. jazykov: ekvivalencia jazykov, inkluzia jazykov, plislusnost slova kjazyku, prazdnost jazyka, univerzalita jazyka (L(M)= ∑*), konecnost jazyka

Page 17: Teoretické základy informatiky (18)statnice.dqd.cz/w_potitko/vypisky_I.pdfvariacie s opakovanim – cisla sa nam mozu opakovat (vraciame kartu naspat, hadzanie znova kockou atd):

L je nekonecny M akceptuje aspon jedno slovo w € ∑* s vlastnostou n ≤ |w| < 2n kde n je pocet stavov automatu

vztah mezi konečnými automaty a regulárními gramatikamiKu kazdej regularnej gramatike G = (N, ∑, P, S) existuje nedeterm. konecny automat M = (Q, ∑, δ, q0, F) taky, ze L(G) = L(M)da sa to navzajom prevadzat: idea prevodu: kazdemu neterminalu G odpoveda stav z M- pri prevode G→M: vytvorime jeden koncovy stav, kam to vsetko pojde – ak aj S→ε,

tak aj z pociatocneho stavu pojde ε-krok do koncoveho stavu – automat je nedeterministicky- pri prevode M→G: pozor na to aby bola gram. reg. – teda podm. S→ε – obcas nutnost

vytvorit novy pociatocny stav, kt. je rovnaky ako S, ale ma este aj ε

12. KONEČNÉ AUTOMATY definiceKonecny automat M je patica (Q, ∑, δ, q0, F), kde

• Q je neprazdna konecna mnozina stavov• ∑ je konecna cstupna abeceda• δ: Q × ∑ → Q je parcialna prechodova funkcia• q0 € Q je pociatocny stav• F podmn. Q je mnozina koncovych stavov

Rozsirena prechodova funkcia δ^: Q × ∑* → Q:• δ^(q, ε) = q pre kazdy stav q€Q• δ^(q, wa) = δ (δ^(q, w), a) ak je δ^(q, w) aj δ (δ^(q, w), a) definovane

nedef. inakSlovo w je akceptovane automatom M, prave ked δ^(q0, w) €F (zamietnute ak nepatri)Jazyk prijimany (akceptovany, rozpoznavany) konecnym automatom je jazyk vsetkych akceptovanych slov = regularny jazykKonecne automaty M a M‘ su ekvivalentne, ak L(M) = L(M‘)Prechodova funkcia je zavedena ako parcialna, my ju ale vieme stotalnit (vytvorime stav, kam pojdu vsetky zvysne sipky)Synchronna paralelna kompozicia automatov – vieme vytvorit pre dane automaty M1, M2

automat rozpoznavajuci prienik/zjednotenie/rozdiel jazykov L(M1) a L(M2) – pre komplement prehodime koncove s nekoncovymi stavmi (najprv treba ale stotalnit)

konstrukce konečného automatu

minimalizace konečného automatumusi byt na zaciatku s totalnou prech. funkciou – najprv odstranime nedosiahnutelne stavy (teda nie je dosiahnutelny – dosiahnutelny je stav q = δ^(q0, w))eliminacia ekvivalentnych stavov: stavy p, q su jazykovo ekvivalentne, piseme p ≡ q, ak p ≡ q pre vsetky w € ∑*: (δ^(p, w) € F δ^(q, w) € F) (vypocet na stave p a slove w skonci v akceptujucom stave, rovnako pre q)- automat mame reprezentovany tabulkou – laicky postup: najprv rozdelim stavy na akceptujuce/ neakceptujuce (2 triedy) a priradujem ze ci skoncia v akcept./neakcept. stave (I/II) – tam, kde je rozdielne chovanie, tak tam to rozdelim – postupne iterujem az kym sa mi to dalsou iteraciou uz nemenipodrobna definicia – vid prednaska 4

převod nedeterministického konečného automatu na deterministický automatNedeterministicky konecny automat (NFA) je M = (Q, ∑, δ, q0, F), kde vyznam vsetkych zloziek je rovnaky ako v definicii FA s vynimkou prechodovej funkcie δ. Ta je definovana ako (totalne) zobrazenie δ: Q × ∑ → 2Q.

Page 18: Teoretické základy informatiky (18)statnice.dqd.cz/w_potitko/vypisky_I.pdfvariacie s opakovanim – cisla sa nam mozu opakovat (vraciame kartu naspat, hadzanie znova kockou atd):

Jazyk prijimany nedeterm. konecnym automatom M je L(M) = w € ∑* | δ^(q0, w) ∩ F != ∅Pre kazdy NFA existuje ekvivalentny DFA.Pre kazde n € N existuje NFA o n stavoch taky, ze ekvivalentny DFA ma aj po minimalizacii 2n stavov.Algoritmus transformacie: podrobne vid prednaska 4 na konci, laicky: pre kazdy prechod s viac ako 1 stavom vytvor novy stav, napr ak 1, 2 tak vytvor stav 12 a tento bude mat prechody odpovedajuce zjednoteniu stavov 1 a 2 ... takto pre vsetky, aj novovzniknute – koncove su tie stavy, ktore v sebe obsahovali nejaky koncovy stav (napr. 12 je koncovy ak bol koncovy 1 alebo 2)

13. BEZKONTEXTOVÉ JAZYKY definicereprezentuju sa bezkontextovou gramatikou G = (N, ∑, P, S), kde

• N je neprazdna konecna mnozina neterminalnych symbolov• ∑ je konecna mnozina terminalnych symbolov taka, ze N∩∑=0. Zjednotenim N a ∑ je

V (mnozina vsetkych symbolov)• P je podmn. N × V* je konecna mnozina pravidiel. • S € N je pociatocny neterminal

Derivacne stromy pre bezkontextove gramatiky (ak existuje deriv. strom, tak ide dane slovo v gramatike odvodit), lava a prava derivacia (rozpisujem po rade zlava/zprava).Viacznacna (nejednoznacna) CFG existuje w € L(G) majuce aspon dva rozne derivacne stromy. (Inak je G jednoznacna).Jazyk L je vnutorne (inherentne) viacznacny kazda gramatika, kt. ho generuje, je viacznacna.

vlastnosti – zahrnaju vacsiu triedu ako regularne jazyky -> pouzitie napr. pri znackov. jazykoch (HTML, XML), pripadne na kontrolu dobre uzatvork. vyrazov, konstruktov if-then-else a pod.rozhodnutelne vlastnosti pre CFG: problem prislusnosti slova do jazyka, problem prazdnosti jazyka (ak je pociatocny neterminal nepouzitelny), problem konecnosti jazykazpůsoby jejich reprezentace – bezkont. gramatika (+ rozne jej formy, obmedzenia, ale stale popisuje tu istu triedu) a zasobnikove automaty

konstrukce bezkontextové gramatiky a zásobníkového automatu(typicky priklad je napr wwR, no alebo pripadne anbn) – zasob. automaty vid dalsia otazka

Redukovane bezkontextove gramatiky = bez nepouzitelnych symbolov typu I aj II (odstranujeme najprv typ I, potom II)

- nepouzitelnost typu I: neexistuje terminalny retaz w taky, ze A =>* w (mame mnozinu neterminalov, ktore su ok - naprv prazdna mnozina, potom pridam tie, kt. maju pravidlo ze sa prepisu len na terminaly, v dalsom kroku bud na terminaly alebo neterminaly z predch. kroku)

- nepouzitelnost typu II: neexistuju retaze x, y take, ze S =>* xAy (mame mnozinu neterminalov, ktore su ok – naprv obsahuje S a postupne sa tam pridavaju neterminaly X, ktore idu takto odvodit A→αXβ, pricom A je neterminal v predch. kroku uznany za ok)

Algoritmus odstranenia ε-pravidiel – mame mnozinu neterminalov, ktore idu v n krokoch (!) prepisat na ε. Pre kazde pravidlo novej gramatiky – ak do tejto mnoziny neterminal nepatri, nechaj tak, ak patri, tak pridaj pravidlo, kt. bude bez tohto neterminalu – obcas sa to moze cyklicky opakovat – vznikne nam takto nove ε-pravidlo, ktore treba znova odstranit

Page 19: Teoretické základy informatiky (18)statnice.dqd.cz/w_potitko/vypisky_I.pdfvariacie s opakovanim – cisla sa nam mozu opakovat (vraciame kartu naspat, hadzanie znova kockou atd):

- ak je tam aj S→ ε, tak pridaj novy neterminal S‘ a pravidlo S‘→ S | εAlgoritmus odstranenia jednoduchych pravidiel (t.j. A→B) – pre kazdy neterminal A zratame mnozinu neterminalov (na zac. je tam samotny neterm.) NA, ktore je mozne z neho odvodit jednoduchymi pravidlami- potom pre kazde pravidlo B→α € P ktore nie je jednoduche, tak pridaj do P‘ pravidla A→ α pre vsetky A take, ze B € NA

Vlastna bezkontextova gramatika je bez nepouzit. symbolov, bez ε-pravidiel a necyklicka (necyklicnost plynie ak nema nepouzit., ε a jednod. pravidla)

normální formy bezkontextových gramatik CFG je v Chomskeho norm. forme (CNF) G je bez ε-pravidiel a kazde pravidlo z P ma jeden z tychto tvarov:

1. A → BC, B, C € N alebo2. A → a, a € ∑ alebo3. S → ε

Kazdy bezkontextovy jazyk mozno generovat bezkont. gramatikou v Chomskeho norm. forme.Prevod na tento tvar: najrpv odstranit ε a jednod. pravidla a potom vsade, kde je terminal „a“, tak dat neterminal „Ta“, plus pravidlo Ta→ a. Ked je prava strana ale dlha, napr. A → BCD, tak rozsek rekurzivne na A → BX, X→ CD (vyuzite lemma o substitucii)

CFG je v Greibachovej norm. forme (GNF) G je bez ε-pravidiel a kazde pravidlo z P je tvaru A → aα, kde a€∑ a α€N* (pripadne s vynimkou pravidla S → ε)Kazdy bezkont. jazyk mozno generovat bezkont. gramatikou v GNF.Prevod do GNF: odstranenie lavej rekurzie a az potom samotny prevododstranenie lavej rekurzie (t.j. pravidiel A=>+ Aβ): na vstupe vlastna CFG (bez nepouzit. symbolov, bez ε-pravidiel a necyklicka) - treba najprv cyklicky nahradit pravidlo Ai→ Ajα za Ai → β1α |...| βnα , kde Aj→ β1|...| βn su vsetky Aj pravidla. Potom odstranit priamu lavu rekurziu pre kazde pravidlo A→ Aα1| ... | Aαm|β1|...| βn vzniknu dve: A→ β1|...| βn| β1A‘|...| βnA‘A‘→α1|...| αm| α1A‘|...|αmA‘samotny prevod do GNF: neterminaly sa usporiadaju tak, ze z (A→Bα) € P plynie A<B. V tomto poradi(od najv. po najm.) sa prechadzaju a nahradzuju sa substituciou pravidla, kt. su tvaru Ai→Ajα za Ai→ β1α|...| βkα (pricom Aj→ β1|...| βn su vsetky Aj pravidla) + sa nahradia terminalmi prisl. neterminalmi a pridaju sa pravidla

použití lematu o vkládání pro bezkontextové jazyky Nech L je CFL. Potom existuju prir. cisla p, q (zavisia na L) take, ze kazde slovo z € L, |z| > p mozno pisat v tvare z = uvwxy, kde

• aspon jedno zo slov v, x je neprazdne (tj. vx != ε)• |vwx| <= q • uviwxiy € L pre vsetky i>=0

(Tvrdenie zostava v platnosti aj ked miesto konstant p, q budeme vsade pisat len (jedinu) konstntu n.)Pouzitie: opat ide o implikaciu, takze mozme dokazat akurat, ze dany jazyk nie je bezkontextovy (ale nie ze je bezkontextovy) – napr na dokaz, ze anbncn nie je bezkontextovy

uzávěrové vlastností bezkontextových jazykůTrieda bezkontext. jazykov je uzavrena vzhladom na operacie zjednotenia, zretazenia, iteracie, pozit. iteracie, prieniku z reg. jazykom. Nie je ale uzavreta na prienik a doplnok (doplnok sa da totiz vyjadrit pomocou prieniku a zjednotenia).

Page 20: Teoretické základy informatiky (18)statnice.dqd.cz/w_potitko/vypisky_I.pdfvariacie s opakovanim – cisla sa nam mozu opakovat (vraciame kartu naspat, hadzanie znova kockou atd):

14. ZÁSOBNÍKOVÉ AUTOMATY definice Nedeterministicky zasobnikovy automat (PDA) je M = (Q, ∑, Г, δ, q0, Z0, F), kde

• Q je konecna mnozina stavov• ∑ je konecna vstupna abeceda (sigma)• Г je konecna mnozina, tzv. zasobnikova abeceda (gama)• δ: Q × (∑ U ε) × Г → РFin(Q × Г*) je parcialna prechodova funkcia (РFin(Q × Г*) je

mnozina vsetkych konecnych podmnozin (Q × Г*))• q0 € Q je pociatocny stav• Z0 € Г je pociatocny symbol zasobnika• F podmn. Q je mnozina koncovych stavov

Konfiguraciou nazveme lubovolny prvok (p, w, α) € Qx∑*x Г*Na mnozine vsetkych kofiguracii automatu M definujeme binarnu relaciuM (krok vypoctu) takto: (p, aw, Zα) M (q, w, γα) existuje(q, γ) € δ(p, a, Z) pre a € ∑ UεZasobnikovy automat akceptuje bud koncovym stavom, alebo prazdnym zasobnikom:Jazyk akceptovany PDA M koncovym stavom definujeme ako L(M) = w€∑* | (q0, w, Z0) *(qf, ε, α), kde qf € F, α € Г*a jazyk akceptovany PDA M prazdnym zasobnikom definujemeLe(M) = w€∑* | (q0, w, Z0) *(q, ε, ε), kde q € QObe reprezentacie mozno navzajom prevadzat: • koncovy stav => prazdny zas. – ked sme v koncovom stave, tak pridame moznost prejst do

noveho stavu, kde vyprazdnime zasobnik – potreba ale ulozit na spodok zasobniku novy symbol, kt. vyberieme az my na konci a aby sa nevybral niekde v priebehu)

• prazdny zas. => koncovy stav – ked vyprazdnime zas. tak prejdeme do noveho, koncoveho stavu – opat novy symbol na spodok, aby sme vedeli rozpoznat, ze sme uz na spodku

Rozsireny zasobnikovy automat: rovnako ako klasiky, ale mozme odoberat naraz viac symbolov zo zasobnika (δ: Q × (∑ U ε) × Г* → РFin(Q × Г*)) – tiez sa daju navzajom prevadzat bez ujmy

převod bezkontextové gramatiky na zásobníkový automat – su si navzajom ekvivalentne – ku kazdemu M mozno zostrojit G a naopaktransformacia bezkont. gram. na PDA = nedeterministicka syntakticka analyza – ta bud zhora dole alebo zdola horesyntaktická analýza shora dolů - PDA simuluje lave derivacie v G. • V lavej derivacii je v jednom kroku odvodenia nahradeny najlavejsi neterminal A pravou

stranou Xi ... Xn nejakeho A-pravidla• V M tejto situacii odpoveda nahrada A na vrchole zasobnika retazcom X1 ... Xn.M = (q, ∑, N U ∑, δ, q, S, ∅), kde δ je definovana:

• δ(q, ε, A) obsahuje (q, α) prave ked A→α € P• δ(q, a, a) = (q, ε) pre vsetky a € ∑

syntaktická analýza zdola nahoruVrchol zasobnika piseme vpravo.PDA simuluje pravu derivaciu v G v obratenom poradi. Ma kroky dvojakeho typu:

1. moze kedykolvek nacitat do zasobnika vstupny symbol2. (redukcia) ak je na vrchole zasobnika retazec tvoriaci pravu stranu nejakeho pravidla

v G, moze ho nahradit odpovedajucim lavostrannym neterminalom (a zo vstupu nic necitat)

Page 21: Teoretické základy informatiky (18)statnice.dqd.cz/w_potitko/vypisky_I.pdfvariacie s opakovanim – cisla sa nam mozu opakovat (vraciame kartu naspat, hadzanie znova kockou atd):

Nech G=(N, ∑, P, S). Polozme R= (q, r, ∑, N U ∑ U , δ, q, , r) kde je novo pridany symbol (pre dno zasobnika) a kde δ je definovana takto: 1. δ(q, a, ε) = (q, a) pre vsetky a € ∑ (nacitanie do zasobnika)2. ak je A→α tak δ (q, ε, α) obsahuje (q, A ) (redukcia)3. δ(q, ε, S) = (r, ε) (akceptovanie, r je koncovy stav – v pripade, ze je uz prazdny

zasobnik)Problem – je to nedeterministicke (exponencialny narast) -> riesenie: • determ. alg. kubickej zlozitosti (Cocke-Kasami-Younger)• determ. zasobnikove automaty a det. bezkont. jazyky (je to striktna podmnozina bezkont.)

= LL(k) gramatiky• linearne algoritmy pre spec. triedy determ. bezkont. jazykov

průběh analýzy daného slova • pri postupe zhora dole zaciname tym, ze na spodku zasobnika je S a pouzijeme niektore

pravidlo, aby sme zmenili S na jeho pravu stranu (abaaba, q, S) (abaaba, q, abSA) ... medzitym umazavam terminaly a aplikujem pravidla = ako lava derivacia, postupujem zhora, od S – mam len 1 stav, akceptujem prazdnym zasobnikom

• pri postupe zdola hore zas mam na zaciatku nejaky symbol, kt. nikde inde nepouzivam a nan musim najprv nacitat niekolko znakov zo vstupu, pokym zacnem aplikovat nejake tie pravidla – ide to ale akoby odspodu – od hotoveho slova sa snazime dopracovat k S, pricom ak je na zasobniku len poc. symbol a S, tak prejdem do konc. stavu a akceptujem – je to akoby derivacia spravanapr.: (abaaba, q, Z) (baaba, q, Za) (aaba, q, Zab) (aaba, q, ZA) ...

15. DATOVÉ STRUKTURY A JEJICH IMPLEMENTACE (navrh algoritmov)

seznamZoznam nad bazovym typom B je linearna datova struktura typu S s nasledujucimi operaciami. Pre tieto operacie a kazdu hodnotu x typu B a kazdy zoznam s typu S musia platitaxiomy zoznamu.nil: S Axiomy: null(nil) = Truecons: B x S -> S null(cons(x,s)) = Falsehead: S -–> B head(cons(x,s)) = xtail: S -–> S tail(cons(x,s)) = snull: S -> Bool

zásobníkZasobnik nad bazovym typom B je linearna datova struktura typu S a nasledujucimi operaciami: Pre tieto operacie a kazdu hodnotu x typu B a kazdy zasobnik typu S musia platit axiomy zasobniku.empty: S Axiomy: isempty(empty) = truepush: B × S -> S isempty(push(x,s)) = Falsetop: S -–> B top(push(x,s)) = xpop: S -–> S (zvysok po vybrati horneho prvku) pop(push(x,s)) = sisempty: S -> Bool

Zasobnik a zoznam je teda ta ista datova struktura, lisia sa v pouziti. O zasobniku obvykle hovorime, ked pouzivame len zakladne operacie a pracujeme len s 1 al. malym poctom zasobnikov. zasobniky byvaju dane predom: meni sa ich obsah, ale nie ich pocet, nevznikaju nove. Preto sa v imperat. jazykoch zakladne operacie casto implementuju ako procedury, naviac ich parameter zasobnik sa vynechava, ak sa pracuje len s jednym zasobnikom.U zoznamov casto definujeme zlozitejsie operacie (spristupnenie ci zmenu n-teho prvku, rozdelenie zoznamov na dva,...) a behom vypoctu zoznamy vytvarame a rusime. Napr. zmenu

Page 22: Teoretické základy informatiky (18)statnice.dqd.cz/w_potitko/vypisky_I.pdfvariacie s opakovanim – cisla sa nam mozu opakovat (vraciame kartu naspat, hadzanie znova kockou atd):

tretieho prvku zoznamu s na cislo 5 mozno realizovat zlozenou operacou cons(a, cons(b, cons(5,t)))), kde a=head(s), b=head(tail(s)), t=tail(tail(tail(s)))

frontaFronta nad bazovym prvkom B je linearna datova struktura typu Q s nasledujucimi operaciami. Pre tieto operacie a kazde dve hodnoty x, y typu B a kazdu frontu q typu Q musia platit axiomy fronty.empty: Q Axiomy: isempty(empty) = Truehead: Q –-> B isempty(enqueue(x,q)) = Falseenqueue: B × Q -> Q (pridanie prvku) head(enqueue(x,empty)) = xdequeue: Q –-> Q (odobranie prvku) head(enqueue(x,enqueue(y,q)) = isempty: Q -> Bool head(enqueue(y,q))

dequeue(enqueue(x,empty) = empty dequeue(enqueue(x,(enqueue(y,q)) =

enqueue(x,dequeue(enqueue(y,q)))

implementacia datovych struktur: zasobnik (obmedzenej dlzky) pomocou pola, frontu pomocou 2 zasobnikov, frontu obmedzenej dlzky pomocou cyklickeho pola, ...

obecný stromstrom je suvisly graf bez kruznic. Najcastejsie pracujeme s tzv. korenovymi stromami, tj. stromami, v kt. je jeden vyznacny uzol, koren, a hrany su implicitne orientovane smerom od korena k listomAk je u uzol stromu a do uzlov u1, u2, ... uk vedu z uzla u hrany, potom uzly u1, ... , uk

nazyvame (bezprostredni) naslednici uzla u.Na bezprostrednych naslednikoch kazdeho uzla casto byva zavedene uplne usporiadanie. Potom sa naslednici uzlu znazornuju zlava doprava; u binarnych stromov sa teda rozlisuje lavy a pravy naslednik. Uzly bez naslednikov sa nazyvaju listy, ostatne uzly stromu su vnutorne.Stromy pevnej arityDef: Je dane prir. cislo n a tzv bazova mnozina (typ) B. Definujeme n-arny strom nad B takto:

• Prazdny strom ∅ je n-arny strom.

• Ak su T1, ..., Tn n-arne stromy a b € B, tak (n+1)-tica (b, T1, ..., Tn) je n-arny strom.Listy n-arneho stromu su uzly tvaru (x, ∅, ... , ∅) Def: Cestu z korena stromu do uzlu, ktoreho aspon jeden bezprostredny naslednik je prazdny strom, sa nazyva vetva stromu.Odpovedajuci datovy typ v Haskellu pre n=3: data Tree3 b = Empty | Node b (Tree3 b) (Tree3 b) (Tree3 b)

binární stromDef: binarny strom je strom arity 2. Zakladne operacie nad bin. stromom:empty: T Axiomy: isempty(empty) = Truenode: B × T × T -> T isempty(node(x,l,r)) = Falserootval: T –-> B rootval(node(x,l,r)) = xleft: T –-> T left(node(x,l,r)) = lright: T –-> T right(node(x,l,r)) = risempty: T -> Bool

Zakladne operacie maju konstantnu zlozitost, sluzia k popisu datovej struktury a k jej implementacii a k implementacii dalsich operacii, ako napr. vyhladanie/pridanie/odobranie uzlu, vyvazenie stromu a pod.)Stromy s neobmedzenym vetvenim – od stromov pevnej arity sa lisia tym, ze cislo k nie je predom dane, ale moze byt v danom strome pre rozne uzly rozne – teda (b,[T1, ... , Tk]) je pre kazde prir. cislo k ≥ 0 a kazdu k-prvkovu postupnost neprazdnych stromov neprazdnym stromom s neobmedzenym vetvenim– daju sa reprezentovat binarnymi stromami (n potomkov m1, m2, m3 uzlu m sa zoradi za sebou tak, ze m ma praveho potomka m1, ten ma praveho potomka m2, ten zas m3

Page 23: Teoretické základy informatiky (18)statnice.dqd.cz/w_potitko/vypisky_I.pdfvariacie s opakovanim – cisla sa nam mozu opakovat (vraciame kartu naspat, hadzanie znova kockou atd):

vyhledávací stromy a jejich modifikace, implementace binárních a vyhledávacích stromů a operací nad nimi

Def: Binarny vyhladavaci strom je binarny strom nad uplne usporiadanou mnozinou (tzv. klucov) (K, ≤) taky, ze pre kazdy jeho podstrom t plati: hodnoty uzlov v podstrome left(t) su mensie ako rootval(t) a hodnoty uzlov v podstrome right(t) su vacsie nez rootval(t).Datovy typ: data STree a = Empty | Node a (Stree a) (Stree a)Dalej operacie member, search, insert, delete – proste to vklada vpravo/vlavo, nestara sa o vyvazenost, proste to tam da.Vyska stromu nie je nijak obmedzena – moze byt az n, preto zlozitost vyhladavania v obecnom vyhlad. strome je linearna.member:: a -> STree a -> Bool search:: a -> STree a -> STreemember _ Empty = False search _ Empty = Emptymember k (Node v l r) = k == v search k t@(Node v l r)|| k < v && member k l | k == v = t|| k> v && member k r | k < v = search k l

| otherwise = search k rinsert:: a -> STree a -> STree ainsert k Empty = Node k Empty Emptyinsert k t@(Node v l r)

| k < v = Node v (insert k l) r| k > v = Node v l (insert k r)| otherwise = t

delete:: a -> STree a -> STree a join:: STree a -> STree a -> STree adelete _ Empty = Empty join l Empty = ldelete k (Node v l r) join Empty r = r

| k < v = Node v (delete k l) r join l r = Node u (delete u l) r| k > v = Node v l (delete k r) where u = rightmostkey l| otherwise = join l r rightmostkey(Node v _ Empty) = v

rightmostkey(Node_ _ r)=rightmostkey r

AVL stromy:Def: Vyhladavaci binarny strom je AVL, ked hlbka laveho a praveho podstromu lubovolneho uzlu sa lisi najviac o 1. Hlbka AVL stromu v zavislosti na pocte jeho uzlov je vzdy v Θ(log) – teda pouzite ako vyhladavacie stromy, tak operacia vyhladania polozky ma log. zlozitostDatova struktura: data AVL a = Empty | Node Int a (AVL a) (AVL a) -kazdy uzol nesie informaciu o hlbke (ako parameter konstruktorovej funkcie Node) Vyhladavanie sa nelisi – proste idem od korena a porovnavam v hodnotou v uzle – ak mensia, tak dolava, ak vacsia, tak dopravaPridanie a odobranie – uz ine – treba zachovat vyvazenost:Pridanie uzlu x: mame strom s korenom f, lavy podstrom B, pravy G – uvazujem ze pridavame do laveho podstromu (ak do praveho, tak postup zrkadlovy).- ak sa porusi vyvazenost stromu, najde sa najmensi podstrom, kt. je nevyvazeny (jeho hlbka

je o 1 vyssia ako bola pred pridanim) – v nasom pripade je to B – ma podstromy A a D- 1. pripad: x pridany do A. Potom strom A ma hlbku h-1, stromy D, G maju hlbku h-2.

Vytvorime strom T = Node h b A (Node (h-1) f D G). Potom T je AVL strom hlbky h s rovnakymi uzlami ako v F – tymto stromom nahradime povodny strom F.

- 2. pripad: x pridany do D. Potom stromy A, G maju hlbku h-2, strom D ma hlbku h-1. Oznacime C, E podstromy D a d jeho koren.Vytvorime strom T = Node h d (Node (h-1) b A C) (Node (h-1) f E G)Dva dielcie podpripady:

(a) uzol x bol pridany do stromu C. Potom C ma hlbku h-2, E ma hlbku h-3(b) uzol x bol pridany do stromu E. Potom C ma hlbku h-3, E ma hlbku h-2

Page 24: Teoretické základy informatiky (18)statnice.dqd.cz/w_potitko/vypisky_I.pdfvariacie s opakovanim – cisla sa nam mozu opakovat (vraciame kartu naspat, hadzanie znova kockou atd):

T ma hlbku h, je AVL a ma rovnake uzly ako F. F nahradime s T. Prepocitame hlbky na ceste od korena stromu T k uzlu x.Zlozitost vkladania: pridanie uzlu trva log n, rovnako aj najdenie najm. nevyvazeneho podstromu -> celkovo Θ (log n)Rusenie uzlu x: rusenie polozky prevedieme na rusenie listu (podobne ako u vyhlad. stromu) - obdobne riesenie nevyvazenosti ako v pripade vkladania – vyvazenim jedneho podstromu sa ale moze znizit jeho hlbka a tym vznikne nevyvazenie niekde inde -> treba algoritmus opakovat, az sa vyvazi cely strom – zlozitost tiez Θ (log n)

- 1. pripad: hlbka G ≥ hlbka D -> T = Node h‘ f (Node (h‘-1) b A D) G- 2. pripad: hlbka G < hlbka D -> T = Node h‘ d (Node (h‘-1) b A C) (Node (h‘-1) f E G)Fibonaciho stromy – pre k ≥ 1 je Fib. strom FTk minimalny AVL strom hlbky k-1FT0 = emptyFT1 = node(empty, empty)pre k € N FTk+2 = node(FTk, FTk+1)hlbku ma logφ n (n je pocet uzlov, φ =(1+√5)/2

Ciernobiele stromy:Ciernobiele stromy su binarne vyhladavacie stromy, ktorych uzly nesu okrem kluca dalsi atribut: farbu (ciernu/bielu). Musia splnovat tieto podmienky:

1. koren stromu je cierny2. ak je vnutorny uzol biely, jeho naslednici (ak existuju) su cierni3. vsetky vetvy obsahuju rovnaky pocet ciernych uzlov

Cierna hlbka cb stromu t je pocet ciernych uzlov na lub. vetve. Znacime ju bh(t). Hlbka cb stromu na n uzloch je nanajvys 2*log2(n+1).Vyhladavanie (oparacie member a search) maju zlozitost Θ (log n) – aj algoritmy rovnake ako v nevyvazenom vyhladavacom strome.CB stromy v Haskelli: data Barva = Ce | Bidata CBS a = E | N Barva a (CBS a) (CBS a)

pridanie uzlu do cb stromu: pridavany uzol bude biely. Tym sa nezmeni cierna hlbka podstromov, ale mozu sa dostat pod seba dva biele uzly. S 2 bielymi uzlami nad sebou a ciernym nad nimi urobime taku rotaciu, aby sme znizili hlbku stromu, ale prefarbime ich tak, aby cierna hlbka stromu zostala zachovana: koren bude biely a jeho 2 naslednici cierni. Tym sa opat mohli dostat pod seba 2 biele uzly. Preto cely postup opakujeme tak dlho, pokym su niekde pod sebou dva biele uzly. Ak ostane biely koren, ofarbime ho na cierno a tym sa cierna hlbka celeho stromu zvysi o 1. – zlozitost Θ (log n) (vyvazenie ma konst. zlositost)rusenie uzlu z cb stromu: prevedieme znamym sposobom na rusenie listu. Ak je ruseny list biely, je zrusenie trivialne – strom aj bez listu zosane ciernobiely. Ak je ruzeny list cierny, je nutne ho najprv „odfarbit“. Ak odfarbime cierny list, stane sa tento list bielym a mozme ho lahko zrusit. Operacia odfarbenia spociva v presunuti prebytocnej ciernej farby blizsie ku korenu tak, aby cierne dlzky vsetkych vetiev zostali rovnake. Pritom moze dojst k „prifarbeniu“ cierneho uzlu – ak presunieme ciernu farbu na uzol, kt. sam bol cierny, stane sa tento uzol „dvojnasobne cierny“ a je nutne ho dalej odfarbovat (presunut ciernu stale blizsie ku korenu), aby bol kazdy uzol „najviac raz cierny“. Ak sa stane dvojnasobne ciernym koren celeho stromu, prebytocnu ciernu farbu z neho zmazeme a nechame ho „raz cierny“. Tym sa znizi cierna hlbka celeho stromu.1. Brat odfarbeneho uzlu je biely 2. Brat odfarbeneho uzlu je cierny- prevedieme na pripad 2 2a blizsi synovec je biely

Page 25: Teoretické základy informatiky (18)statnice.dqd.cz/w_potitko/vypisky_I.pdfvariacie s opakovanim – cisla sa nam mozu opakovat (vraciame kartu naspat, hadzanie znova kockou atd):

2. Brat odfarbeneho uzlu je cierny 2. Brat odfarbeneho uzlu je cierny2b vzdialenejsi synovec je biely 2c ziady synovec nie je biely

16. TŘÍDĚNÍ (navrh algoritmov)Asociativny radiaci algoritmus je algoritmus, ktoreho mnozinu pripustnych vstupnych dat tvoria vsetky konecne postupnosti celych ciesiel, a taky, ze jeho vysledkom je neklesajuca permutacia vstupnej postupnosti. Casova zlozitost problemu asociativneho radenia je v mnozine Θ (n* log n).

základní algoritmyalgoritmus radenia vkladanim - InSort – ma kvadraticku zlozitost1 const MAX = 999; 2 type Elem = Integer; 3 Posl = array [1..MAX] of Elem; 4 procedure iInsSort (n:Integer; var A:Posl); 5 var i, j : Integer; x : Elem; 6 begin 7 for i := 2 to n do 8 begin 9 x := A[i]; j := i-1; 10 while (j>0) && (A[j]>x) do 11 begin 12 A[j+1] := A[j]; 13 j := j-1 14 end; 15 A[j+1] := x 16 end 17 end

funkcionalna verzia: fInsSort [] = []fInsSort (x:s) = ins x (fInsSort s)

where ins x [] = [x] ins x (y:t) = if x≤y then x:(y:t) else y:(ins x t)

alebo teda strucnejsie: fInsSort = foldr ins []- cize sa nam vytvori postupnost (ins xn ...(ins x2 (ins x1 []))...) – v priebehu to vyzera tak, sa beru prvky postupne po rade, ako su vo vstupnom zozname a vytvara sa usporiadana postupnost – prave aktivny prvok sa testuje postupne so vsetkymi prvkami v novom zozname a donho sa zaradi na prislusne miesto – cize vlastne VKLADAM prvok na prislusne miesto v zoradenom zozname (v imperativnej verzii sa to implementuje tak, ze novy usporiadany zoznam je na zaciatku povodneho zoznamu – teda v kazdom priechode cyklom sa hlada vhodne ulozenie prvku do lavej (usporiadanej) casti)- zlozitost: musim prejst cez vsetky prvky zoznamu a ich zoradit do novej postupnosti => n, dalej ale kazdy takyto prvok musim porovnat s dalsimi n prvkami, teda n*n = n2

Page 26: Teoretické základy informatiky (18)statnice.dqd.cz/w_potitko/vypisky_I.pdfvariacie s opakovanim – cisla sa nam mozu opakovat (vraciame kartu naspat, hadzanie znova kockou atd):

algoritmus radenia zlucovanim – MergeSort – ma zlozitost n*log(n)mergeSort :: [Int] -> [Int]mergeSort [] = []mergeSort [x] = [x]mergeSort s = merge (mergeSort u) (mergeSort v)

where (u,v) = splitAt (n ‘div‘ 2) an = length s

merge s [] = smerge [] t = tmerge (x:u) (y:v) = if x≤y then x: merge u (y:v)

else y: merge (x:u) v

- mergeSort funguje tak, ze najprv rozlozi cely zoznam na polovicu, kazdu polovicu zas na polovicu atd., az vzniknu len jednoprvkove alebo prazdne zoznamy. Medzi nimi je zas funkcia merge, pre [6,5,4,3,2,1]: merge(merge[6](merge[5][4]))(merge[3](merge[2][1]))). Funkcia merge vychadza z toho, ze ma vstupne zoznamy uz usporiadane – vrati z nich usporiadany zoznam. Mergujem, ZLUCUJEM rozdelene zoznamy do jedneho

- zlozitost merge je linearna (Θ(n) – porovnava totiz prvok v najhorsom pripade s kazdym), kym sme to predtym rozdelili na polovice, tak nam to trvalo log n, preto dokopy Θ(n*log n)

algoritmus radenia rozdelovanim – QuickSort – ma zlozitost kvadraticku, v priemernom pripade ale tiez n*log(n)quickSort :: [Int] -> [Int]quickSort [] = []quickSort (p:t) = quickSort lt ++ [p] ++ quickSort ge

where lt = [ x | x <- t, x<p]ge = [ x | x <- t, x≥p]

- zoraduje prvky tak, ze berie postupne prvky zoznamu a nalavo ulozi prvky, kt. su mensie ako on, napravo zas vacsie – rozdelenie na dva zoznamy lt a ge nam trva vzdy linearny cas + pre kazdy prvok toto urobit => v najhorsom kvadraticka Θ (n2) (t.j. pre pripad, ze by uz povodny zoznam bol dobre zoradeny, inak v priemere to dava n*log(n))

algoritmus řazení haldou – HeapSort – ma zlozitost n*log(n)HaldaDef: Nech K je uplne usporiadana mnozina tzv. klucov (typicky mnozina cisiel s prirodz. usporiadanim ≤). Binarna halda je binarny strom, ktoreho uzly su ohodnotene prvkami mnoziny K, a ktory splnuje tieto vlastnosti:

1. Dlzky vsetkych vetiev sa lisia najviac o 1: maju dlzku k, pripadne k-1. Cislu k potom hovorime hlbka haldy.

2. Hodnoty uzlov sa kazdej vetve su vzostupne (zostupne) usporiadane.Ak su hodnoty uzlov na kazdej vetve zoradene vzostupne (cim dalej od korena, tym vacsie hodnoty), je v koreni haldy najmensi prvok. Hovorime potom o minimovej halde (min-heap). – ak je to prave naopak, tak ide o maximovu haldu (max-heap)Def: Neprazdna binarna halda na n uzloch ma hlbku [log2n].Def: Binarny strom, v ktoreho kazdom podstrome sa pocet uzlov laveho a praveho podstromu lisi najviac o 1, sa nazyva uzlovo vyvazeny binarny strom.Veta: Kazdy uzlovo vyvazeny binarny strom je haldou (az na ohodnotenie uzlov).Operacie s binarnou haldou: data Heap = Empty | Node Elem Heap HeapZakladne operacie: konstruktory a selektory – maju konst. zlozitostKonstruktory: Empty: HeapNode: Elem -> Heap -> Heap -> Heap Selektory:rootVal: Heap –--> ElemleftHeap: Heap ––-> Heap

Page 27: Teoretické základy informatiky (18)statnice.dqd.cz/w_potitko/vypisky_I.pdfvariacie s opakovanim – cisla sa nam mozu opakovat (vraciame kartu naspat, hadzanie znova kockou atd):

rightHeap: Heap ––-> HeapisEmpty: Empty -> Bool

Vyhladanie minimalneho prvku (v minimovej halde - je teda v koreni): - zlozitost Θ(1)minH: Heap –--> ElemminH = rootVal

Odstranenie minimalneho prvku (z minimovej haldy): - zlozitost Θ (log n)extractMinH: Heap ––>Heap

Odstranenie maximalneho prvku (z maximovej haldy): - zlozitost Θ (log n)extractMaxH: Heap ––>Heap

Pridanie prvku: – zlozitost Θ (log n)insertH: Elem -> Heap ->Heap

Odstranenie prvku: - zlozitost Θ (log n)removeH: Elem -> Heap ---> Heap

Algoritmus radenia haldou:data Heap = Empty | Node Int Heap HeapinsHeap :: Int -> Heap -> HeapinsHeap u Empty = Node u Empty EmptyinsHeap u (Node v p q) = if u ≥ v then Node v (insHeap u q) p

else Node u (insHeap v q) p toHeap :: [Int] -> HeaptoHeap s = foldr insHeap Empty s

toList :: Heap -> [Int]toList Empty = []toList (Node x l r) = x : merge (toList l) (toList r)

heapSort :: [Int] -> [Int]heapSort = toList . toHeap

funkcia insHeap: postupne vklada prvky vstupnej postupnosti do minimovej haldy (teda sa zachovava vyvazenost a ze su prvky zoradene vzostupne) – ma zlozitost v O(log n) (jedno vlozenie prvku nam trva tolko, kolko je vyska stromu (haldy)) – toto ale pre kazdy prvok, preto Θ(n*log n) – tie dalsie algoritmy nemaju horsiu zlozitost ako n*log n, preto je celkova zlozitost n*log n

17. GRAFOVÉ ALGORITMY (navrh algoritmov)Nech V, HV, HE su mnoziny, E je podmn. V2, hV: V→HV, hE: E → HE. Stvoricu (V, E, hV, hE) nazyvame uzlovo a hranovo ohodnoteny orientovany graf.Ak vynechame hE, prip. hV, tak sa zrusi prislusne hranove/ vrcholove ohodnotenie.Ak nepripustime v mnozine E dvojice tvaru (x, x), mame graf bez smyciek.Ak povieme, ze E je nejaka podmnozina 2 alebo 1 prvkovych podmnozin V, tak vznikne uzlovo a hranovo ohodnoteny neorientovany graf.Reprezentacia: Graf mozno reprezentovat maticou susednosti: Neohodnoteny graf G = (V, E) na n uzloch je reprezentovany stvorcovou maticou G = [gi,j]1≤i≤n, 1≤j<v nul a jedniciek tak, ze gi,j = 1, prave ked (i, j) € E. Ak je graf hranovo ohodnoteny, G = (V, E, hE), hE: E→HE, su v matici susednosti priamo hodnoty hran: pre (i, j) € E je gi,j = h(i, j), pre (i, j) !€ E je gi,j = v, kde v !€ HE.riedke grafy aj pomocou mnozin susedov: neohodnoteny graf G = (V, E) na n uzloch je reprezentovany postupnostou [s1, ... , sn] mnozin naslednikov kazdeho uzlu. Ak su v1,...,vk

vsetci naslednici uzlu u, je su = v1, ... , vk

procházení grafu Problem: prejst systematicky vsetky uzly grafu.

Page 28: Teoretické základy informatiky (18)statnice.dqd.cz/w_potitko/vypisky_I.pdfvariacie s opakovanim – cisla sa nam mozu opakovat (vraciame kartu naspat, hadzanie znova kockou atd):

do hloubkyAlgoritmus dfs (depth-firts search) G=(V, E), V = 1,...,n, W je podmn. Vbudeme oznacovat vsetky navstivene uzly pomocou procedury mark. Na zaciatku su vsetky uzly nenavstivene (marked(u) = False). Pre kazdy uzol u je Successors(u) zoznam uzlov – naslednikov uzlu u. Vychadzame z uzlov z mnoziny W a postupujeme stale dalej po hranach do zatial nenavstivenych uzlov. Cesty z oznacenych do novo navstivenych uzlov tovria les s korenmi v W. Ak chceme prejst do hlbky vsetky uzly grafu G = (V, E), polozime W=V. Algoritmus dfs navstivi vsetky uzly grafu dosiahnutelne z uzlov z mnoziny W.Algoritmus funguje rovnako pre orient. aj neorient. grafy. Tento alg. obecne nie je deterministicky, kedze nemusi byt specifikovane poradnie naslednikov.procedure dfs (G: Graph; var W: Nodeset; var P:Nodearray);

procedure dfs1 (u:Node);begin

if not marked (u)then begin mark (u);

for v € Successors (u) dobegin P[v] := u;

dfs1 (v)end

endend;

begin dfsfor u € V do begin unmark (u);

P[u] := empty end;

for u € W doif not marked (u) then dfs1 (u)

end;zlozitost algoritmu dfs na grafe G=(V, E) je O(|V|+|E|)

do šířkyAlgoritmus bfs(breadth-first search) prechadza uzly v inom poradi ako do hlbky: uzly, kt. lezia blizsie pociatocnym uzlom (uzlom, v kt. prechadzanie zacina), su navstivene skor nez uzly leziace dalej.Pomocne datove struktury: fronta Q uzlov, lez najkratsich ciest (ulozeny v poli P)Navstivene uzly sa opat oznacuju pomocou procedury mark, uzol u bude oznaceny, prave ked marked(u) = True.

Page 29: Teoretické základy informatiky (18)statnice.dqd.cz/w_potitko/vypisky_I.pdfvariacie s opakovanim – cisla sa nam mozu opakovat (vraciame kartu naspat, hadzanie znova kockou atd):

procedure bfs (G: Graph; var W: Nodeset; var P:Nodearray);var Q:Queue;procedure bfs1 (q:Queue);

begin while not (isempty(q)) dobegin u := headq(q);dequeue(q);for v € Successors (u) do

if not (marked(v))then begin mark (v);

enqueue (v,q); P[v] := u

endend

endbfs1;

beginbfsfor u € V do begin unmark (u);

P[u] := empty end; Q := emptyq;for u € W do

begin mark (u); enqueue (u, Q)end;

bfs1 (Q)end bfs

složitost procházení grafu do sirkyNech G = (V, E) je graf a W je podmn. V je mnozina pociatocnych uzlov (vstupneho stupna 0). Potom dlzka vypoctu bfs(G, W) v najhorsom pripade je v Θ(|W| + |E|). Dokaz: Kazdy uzol bude oznaceny a zaradeny do fronty a u vsetkych uzlov z fronty sa pytame na oznacenost jeho naslednikov. Teda dlzka vypoctu bude iste v Ω(|E|). Nakolko zaradujeme do fronty vsetky uzly z W, je dlzka vypoctu tiez v Ω(|W|). Z tychto dvoch faktov vyplyva, ze je v Ω(|E|) ∩ Ω(|W|) = Ω(|W| + |E|).Do fronty zaradujeme iba uzly, kt. az do tej doby neboli oznacene, a pritom ich hned oznacime. Odtial plynie, ze kazdy uzol je do fronty zaradeny len raz.. Teda vonkajsi cyklus while prebehle О(|W| + |E|)-krat. Test vo vnutornom cykle for prebehne vzdy tolkokrat, kolko hran vychadza z uzlu v, dokopy tolkokrat, kolko ma cely graf hran. Odtial opat dostavame, ze dlzka vypoctu je v О(|W| + |E|+ |E|) = О(|W| + |E|).Dokopy dostavame Θ(|W| + |E|).

Page 30: Teoretické základy informatiky (18)statnice.dqd.cz/w_potitko/vypisky_I.pdfvariacie s opakovanim – cisla sa nam mozu opakovat (vraciame kartu naspat, hadzanie znova kockou atd):

8. DŮKAZY PROGRAMŮ (navrh algoritmov)

dokazování vlastností programůAlgoritmus mozno chapat ako parcialnu funkciu z mnoziny vs. moznych vstupov do mnoziny vs. moznych vystupov. funkcia: Vstupy - -> Vystupy (kazdemu algoritmu sice odpoveda parc. funkcia, ale nie kazdu takuto fuknciu je mozno vyjadrit algoritmom – aby to bol algoritmus, musi pre tuto funkciu existovat konecny popis v urcitom formalizme (progr. jazyk))Funkcie z mnoziny vstupov do mnoziny vystupov, kt. mozno vyjadrit algoritmom, sa nazyvaju rekurzivne spocetne.Program, kt. je implemenotvany algoritmom, pri vypocte precita vstup, spracuje ho (vstupne data transformuje na vystupne), vypise vystup a skonci.reaktivny system je program, ktoreho beh normalne nemusi skoncit (napr. operacne systemy, interaktivne programy) – sucastou nich su ale algoritmy

Korektnost algoritmuIn – mnozina vstupnych datOut – mnozina vystupnych datA: In - - > Out algoritmus (na vstupe z In vypisujuci vystup z Out)φ: In → Bool vstupna podmienka – urcuje, ci je dany vstup pre algoritmus pripustny, vymedzuje teda podmnozinu vstupnych dat In (je unarny prredikat na mnozine vstupnych dat)ψ: In × Out → Bool vystupna podmienka hovori, ci dany vystupny udaj je ci nie je vysledkom vypoctu algoritmu na nejakom vstupnom udaji (je binarny predikat na mnozine vstupnych a vystupnych dat)Vstupne a vystupne podmienky nie su sucastou algoritmu. Korektnost algoritmu mozno skumat vzhladom k roznym vstuonym a vystupnym podmienkam.A je konvergenty vzhladom k φ, ked mnozina x € In | φ(x) je podmnozinou definicneho oboru funkcie A, tj. ked pre kazdu vstupnu hodnotu x, pre kt. plati φ(x), je vysledok vypoctu podla algoritmu definovany (vypocet sa zastavi).A je parcialne korektny vzhladom k φ a ψ, ked pre kazdu vstupnu hodnotu x z definicneho oboru funkcie A splnujucu vstupnu podmienku φ (tj. pre kazde x, pre k. je A(x) definovane a φ(x)) plati ψ (x, A(x)).A je totalne korektny vzhladom k φ a ψ, ked je konvergentny vzhladom k φ a parcialne korektny vzhladom k φ a ψ.Dosledok: Algoritmus A je totalne korektny vzhladom k φ a ψ, prave ked pre kazdu vstupnu hodnotu x splnujucu vstupnu podmienku vypocet podla algoritmu A skonci a jeho vysledok splnuje aj vystupnu podmienku.Vstupnej a vystupnej podmienke sa tiez hovori specifikacia algoritmu. O totalne korektnom algoritme potom hovorime, ze vyhovuje specifikacii. (teda robi, co ma)

induktivní metodyKed chceme dokazat, ze program „robi co ma“, tak dokazujeme jeho totalnu korektnost. Teda musime dokazat: konvergentnost a parc. korektnost. Napr. pre funkciu faktorial:function fact (n:Integer): Integer;begin

if n==0 then fact:= 1 return 1 else fact:= n*fact(n-1) return n*fact(n-1)

end

Funkcia fact konverguje vzhladom ku vstupnej podmienke φ(n) ≡ n € N.Funkcia fact je parcialne korektna vzhladom k φ a k vystupnej podmienke ψ(n, k) ≡ k = n!Dosledok: Funkcia fact je totalne korektna vzhladom k φ a ψ.Dokaz:

Page 31: Teoretické základy informatiky (18)statnice.dqd.cz/w_potitko/vypisky_I.pdfvariacie s opakovanim – cisla sa nam mozu opakovat (vraciame kartu naspat, hadzanie znova kockou atd):

• konvergentnost vzhladom ku vstupnej podmienke (ze vypocet skonci pre kazdu vstupnu hodnotu) – ak je vstupnou mnozinou N: indukciou: musime dokazat, ze vypocet skonci pre n = 0. Dalej ze ked skonci pre n, ze skonci aj pre n+1. (V tomto pripade trivialne)

• parcialnu korektnost vzhladom ku vstupnej a vyst. podmienke – opat ak je vstupnou mnozinou N: indukciou podla n:fact(0) = 1 = 0!. (bazovy krok)Nech n>0 a tvrdenie plati pre n-1. Potom fact(n) = n * fact(n-1) = n*(n-1)! = n! (indukcny krok), teda tvrdenie plati aj pre n.

invarianty cyklůImperativna verzia faktorialu:function factorial (n:Integer): Integer; var i, k: Integer; begin

i := 0; k := 1; while i < n do

begin i := i+1; k := k*i

end; factorial:= k return k

end

Dokaz konvergencie vzhladom ku vstupnej podmienke φ(n) ≡ n € N: Dokaz spociva v najdeni ciselnej hodnoty (zavislej na obsahu programovych premennych), kt. v ziadnom okamziku vypoctu nemoze byt zaporna a pritom pri kazdom priechode telom cyklu klesne najmenej o jednicku. V tomto pripade je touto hodnotou cislo n-i (variant) a dokaz nezapornosti aj klesania je lahky.Dokaz parcialnej korektnosti vzhladom k vystupnej podmienke ψ(n, k) ≡ k = n!: Dokaz spociva v najdeni medzilahlych podmienok, obzvlast invariantu cyklu while. Invariant cyklu v mieste testovania podmienky je k=i! and 0 ≤ i ≤ n – viaze sa k miestu testovania podmienky cykluInvariant cyklu je medzilahla podmienka, kt. je splnena v danom bode vypoctu podla algoritmu v kazdom priechode cyklom.Dokaz parcialnej korektnosti funkcie factorial sa potom rozlozi do krokov:1. Ak plati na zaciatku φ(n), potom po vykonani uvodnych priradeni bude splneny invariant.2. Ak je v nejakom okamziku spleneny invariant cyklu a vykona sa telo cyklu, potom po

jeho vykonani bude opat slneny invariant.3. Ak je splneny invariant cyklu a nie je splnena podmienka cyklu, potom je splnena

medzilahla podmienka za cyklom, teda ψ(n, k)

Pre miesta v algoritme leziace medzi prikazmi stanovime tzv. medzilahle podmienky. Podmienka na zaciatku bude φ(n), podmienka na konci bude ψ(n, k). Z ostatnych bodov v algoritme pre dokaz parcialnej korektnosti obvykle staci vybrat iba vyznacne miesta, v kt. sa stav vypoctu vyznamne meni. Takymi miestami su body vovnutri cyklov, napr. na ich zaciatku. Medzilahla podmienka pre miesto vovnutri cyklu sa nazyva invariant cyklu.