Úvod do informatiky. Miroslav Kolařík

Podobné dokumenty
Naproti tomu gramatika je vlastně soupis pravidel, jak

Úvod do teorie grafů

Automaty a gramatiky(bi-aag) Motivace. 1. Základní pojmy. 2 domácí úkoly po 6 bodech 3 testy za bodů celkem 40 bodů

Základní pojmy teorie grafů [Graph theory]

Kostry. 9. týden. Grafy. Marie Demlová (úpravy Matěj Dostál) 16. dubna 2019

doplněk, zřetězení, Kleeneho operaci a reverzi. Ukážeme ještě další operace s jazyky, na které je

Grafy. RNDr. Petra Surynková, Ph.D. Univerzita Karlova v Praze Matematicko-fyzikální fakulta.

5 Orientované grafy, Toky v sítích

Vzdálenost uzlů v neorientovaném grafu

Konstrukce relace. Postupně konstruujeme na množině všech stavů Q relace i,

Regulární výrazy. Definice Množina regulárních výrazů nad abecedou Σ, označovaná RE(Σ), je definována induktivně takto:

Syntaxí řízený překlad

Obsah prezentace. Základní pojmy v teorii o grafech Úlohy a prohledávání grafů Hledání nejkratších cest

Turingovy stroje. Teoretická informatika Tomáš Foltýnek

Množinu všech slov nad abecedou Σ značíme Σ * Množinu všech neprázdných slov Σ + Jazyk nad abecedou Σ je libovolná množina slov nad Σ

H {{u, v} : u,v U u v }

Grafy. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 13.

Základy informatiky. Teorie grafů. Zpracoval: Pavel Děrgel Úprava: Daniela Szturcová

Rekurze. Pavel Töpfer, 2017 Programování 1-8 1

AUTOMATY A GRAMATIKY. Pavel Surynek. Kontextové uzávěrové vlastnosti Turingův stroj Rekurzivně spočetné jazyky Kódování, enumerace

Metody síťové analýzy

Drsná matematika III 10. demonstrovaná cvičení Kostry grafů

Grafové algoritmy. Programovací techniky

Grafové algoritmy. Programovací techniky

Zadání a řešení testu z matematiky a zpráva o výsledcích přijímacího řízení do magisterského navazujícího studia od podzimu 2014

OSTRAVSKÁ UNIVERZITA V OSTRAVĚ PŘÍRODOVĚDECKÁ FAKULTA

3. Třídy P a NP. Model výpočtu: Turingův stroj Rozhodovací problémy: třídy P a NP Optimalizační problémy: třídy PO a NPO MI-PAA

Prohledávání do šířky = algoritmus vlny

Modely teorie grafů, min.kostra, max.tok, CPM, MPM, PERT

Automaty a gramatiky(bi-aag) Formální překlady. 5. Překladové konečné automaty. h(ε) = ε, h(xa) = h(x)h(a), x, x T, a T.

Zásobníkový automat. SlovoaaaabbbbpatřídojazykaL={a i b i i 1} a a a a b b b b

TGH05 - aplikace DFS, průchod do šířky

Stromy. Strom: souvislý graf bez kružnic využití: počítačová grafika seznam objektů efektivní vyhledávání výpočetní stromy rozhodovací stromy

Regulární výrazy. M. Kot, Z. Sawa (VŠB-TU Ostrava) Úvod do teoretické informatiky 14. března / 20

TGH02 - teorie grafů, základní pojmy

Z. Sawa (VŠB-TUO) Teoretická informatika 5. listopadu / 43

4. NP-úplné (NPC) a NP-těžké (NPH) problémy

VLASTNOSTI GRAFŮ. Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky, FIT České vysoké učení technické v Praze. BI-GRA, LS 2010/2011, Lekce 5

Výhody a nevýhody jednotlivých reprezentací jsou shrnuty na konci kapitoly.

TGH05 - aplikace DFS, průchod do šířky

Formální jazyky a gramatiky Teorie programovacích jazyků

4EK311 Operační výzkum. 5. Teorie grafů

Úvod do programování 10. hodina

Výpočetní modely pro rozpoznávání bezkontextových jazyků zásobníkové automaty LL(k) a LR(k) analyzátory

Přijímací zkouška - matematika

Teorie grafů. Kostra grafu. Obsah. Radim Farana Podklady pro výuku pro akademický rok 2013/2014

4. Rekurze. BI-EP1 Efektivní programování Martin Kačer

STROMY. v 7 v 8. v 5. v 2. v 3. Základní pojmy. Řešené příklady 1. příklad. Stromy

1. Převeďte dané číslo do dvojkové, osmičkové a šestnáctkové soustavy: a) b)

Slepé prohledávání do šířky Algoritmus prohledávání do šířky Při tomto způsobu prohledávání máme jistotu, že vždy nalezneme koncový stav, musíme ale p

TGH02 - teorie grafů, základní pojmy

TGH02 - teorie grafů, základní pojmy

Operační výzkum. Síťová analýza. Metoda CPM.

Zadání a řešení testu z matematiky a zpráva o výsledcích přijímacího řízení do magisterského navazujícího studia od podzimu 2015

Pumping lemma - podstata problému. Automaty a gramatiky(bi-aag) Pumping lemma - problem resolution. Pumping lemma - podstata problému

Algoritmus pro hledání nejkratší cesty orientovaným grafem

Dijkstrův algoritmus

Algoritmizace prostorových úloh

Úvod do informatiky. Miroslav Kolařík

Formální jazyky a automaty Petr Šimeček

1 Nejkratší cesta grafem

Základy umělé inteligence

ALGORITMY A DATOVÉ STRUKTURY

Problém obchodního cestujícího(tsp) Vstup: Množina n měst a vzdálenosti mezi nimi. Výstup: Nejkratší okružní cesta procházející všemi městy.

GRAFY A GRAFOVÉ ALGORITMY

Úvod do informatiky. Miroslav Kolařík

Úvod do informatiky. Miroslav Kolařík. Zpracováno dle učebního textu R. Bělohlávka: Úvod do informatiky, KMI UPOL, Olomouc 2008.

Kapitola 11. Vzdálenost v grafech Matice sousednosti a počty sledů

Použití dalších heuristik

Základy informatiky. 07 Teorie grafů. Kačmařík/Szturcová/Děrgel/Rapant

Implementace LL(1) překladů

Základní datové struktury III: Stromy, haldy

Vlastnosti regulárních jazyků

Stromy, haldy, prioritní fronty

Jan Březina. 7. března 2017

Vztah jazyků Chomskeho hierarchie a jazyků TS

Složitost Filip Hlásek

TEORIE GRAFŮ TEORIE GRAFŮ 1

Kapitola 6. LL gramatiky. 6.1 Definice LL(k) gramatik. Definice 6.3. Necht G = (N, Σ, P, S) je CFG, k 1 je celé číslo.

= je prostý orientovaný graf., formálně c ( u, v) 0. dva speciální uzly: zdrojový uzel s a cílový uzel t. Dále budeme bez

8 Přednáška z

10 Přednáška ze

i=1 Přímka a úsečka. Body, které leží na přímce procházející body a a b můžeme zapsat pomocí parametrické rovnice

Časová a prostorová složitost algoritmů

Dynamické programování

Definice 7.2. Nejmenší přirozené číslo k, pro které je graf G k-obarvitelný, se nazývá chromatické číslo (barevnost) grafu G a značí se χ(g).

Řešení: PŘENESVĚŽ (N, A, B, C) = přenes N disků z A na B pomocí C

2. úkol MI-PAA. Jan Jůna (junajan)

07 Základní pojmy teorie grafů

Maturitní témata. IKT, školní rok 2017/18. 1 Struktura osobního počítače. 2 Operační systém. 3 Uživatelský software.

Třídy složitosti P a NP, NP-úplnost

Graf. Uzly Lokality, servery Osoby fyzické i právní Informatické objekty... atd. Hrany Cesty, propojení Vztahy Informatické závislosti... atd.

Jarníkův algoritmus. Obsah. Popis

Bezkontextové jazyky. Bezkontextové jazyky 1 p.1/39

Rekurze. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 12.

3 Co je algoritmus? Trocha historie Definice algoritmu Vlastnosti algoritmu... 3

Binární soubory (datové, typované)

Stromové rozklady. Definice 1. Stromový rozklad grafu G je dvojice (T, β) taková, že T je strom,

Minimalizace KA - Úvod

Informatika navazující magisterské studium Přijímací zkouška z informatiky 2018 varianta A

Transkript:

Úvod do informatiky přednáška desátá Miroslav Kolařík Zpracováno dle R. Bělohlávek, V. Vychodil: Diskrétní matematika 2, http://phoenix.inf.upol.cz/esf/ucebni/dm2.pdf P. Martinek: Základy teoretické informatiky, http://phoenix.inf.upol.cz/esf/ucebni/zti.pdf http://cs.wikipedie.org/wiki/

Obsah 1 Rekurze 2 Grafy a některé grafové algoritmy 3 Konečný automat

Obsah 1 Rekurze 2 Grafy a některé grafové algoritmy 3 Konečný automat

Rekurze znamená sebeopakování. Velmi často se používá v matematice a informatice. V programování rekurze představuje opakované vnořené volání stejné funkce (podprogramu); hovoříme o tzv. rekurzivní funkci. Nedílnou součástí rekurzivní funkce musí být ukončující podmínka určující, kdy se má rekurze zastavit. Po každém kroku volání sebe sama musí dojít ke zjednodušení problému. Pokud nenastane koncová situace, provede se rekurzivní krok. Poznámka: Každý algoritmus využívající rekurzi lze přepsat do nerekurzivního tvaru při použití zásobníku.

Rozlišujeme dva základní typy dělení rekurze: I. typ 1 přímá rekurze nastává pokud podprogram volá přímo sám sebe 2 nepřímá rekurze je situace, kdy vzájemné volání podprogramů vytváří "kruh"; např. v příkazové části funkce A je volána funkce B, ve funkci B voláme funkci C, která volá funkci A II. typ 1 lineární rekurze nastává pokud podprogram při vykonávání svého úkolu volá sama sebe pouze jednou vytváří se takto lineární struktura postupně volaných podprogramů 2 stromová rekurze nastává pokud se funkce nebo procedura v rámci jednoho vykonávání svého úkolu vyvolá vícekrát (vzniklou strukturu je možné znázornit jako strom)

Humor o rekurzi Některé definice rekurze v sobě zahrnují prvky humoru a parodie na výkladové slovníky: Cyklus nekonečný viz Nekonečný cyklus Nekonečný cyklus viz Cyklus nekonečný Tyto žerty v sobě nesou ponaučení. Zde je evidentní absence ukončující podmínky, která je nedílnou součástí rekurze a bez níž program často vede na nekonečný cyklus.

Ukázkou vhodného užití rekurze je rekurzivní algoritmus Quicksort nebo třeba průchod stromem nebo vykonávání určité operace se všemi soubory v adresářové struktuře na pevném disku (nebot na každý nalezený podadresář lze automaticky zavolat stejnou funkci). Poznámka: Zajímavou oblastí použití rekurze jsou fraktály. Fraktály jsou soběpodobné útvary, které mají na první pohled velmi složitý tvar, přestože jsou generovány opakovaným použitím jednoduchých pravidel. Příklad Nejčastějším příkladem rekurzivního postupu je výpočet faktoriálu N!, který lze pro N N 0 spočítat dle vztahu N!=N (N 1)!, přičemž 0!=1. faktorial(n): pokud N <= 0, potom vysledek = 1, jinak vysledek = N faktorial(n 1)

Poznámka: Nerekurzivní řešení dané úlohy bývá efektivnější, avšak většinou ztrácí na přehlednosti. Vhodnou metodou může být iterace: Příklad faktorial(n): pokud N < 0, potom konec, jinak vysledek = 1, pro i od 1 do N proved vysledek = vysledek i, konec Poznámka: Rekurze je pro programátora velmi silný a užitečný nástroj, je to však také nástroj nebezpečný a při jeho použití musíme být opatrní. Mechanické použití rekurze vede totiž často k algoritmům s exponenciální časovou složitostí, které jsou velice pomalé a prakticky použitelné jen pro malé vstupy.

Fibonacciho posloupnost je dobrou ukázkou, jak lze řešit rekurzivní úlohu různými a různě efektivními způsoby. Příklad Určete N-té Fibonacciho číslo pro dané N 0, je-li Fib(0)=0, Fib(1)=1 a Fib(N)=Fib(N 1)+Fib(N 2) pro N > 1. Nekonečná posloupnost Fibonacciho čísel tedy začíná čísly 0 1 1 2 3 5 8 13 21 34 55 89 144... Toto řešení má však exponenciální časovou složitost a provádí se v něm velké množství zbytečných výpočtů. Pro zásadní zrychlení výpočtu postačí, jestliže rekurzivní algoritmus doplníme o jedno pomocné pole F. Do něj si budeme průběžně ukládat všechna již jednou spočítaná Fibonacciho čísla. Před každým rekurzivním voláním se podíváme, zda by takové volání nebylo zbytečné, zda hledanou hodnotu již nemáme v poli F. Výsledný algoritmus má rázem lineární časovou složitost.

Poznámka: Úlohu nalézt N-té Fibonacciho číslo je možné řešit také bez použití rekurze a bez pomocného pole, přes dvě proměnné, ve kterých uchováváme poslední dvě hodnoty Fibonacciho posloupnosti. (Pamět ová složitost je pak konstantní.)

Obsah 1 Rekurze 2 Grafy a některé grafové algoritmy 3 Konečný automat

Graf je grafické vyjádření vztahů mezi nějakými objekty. Objekty jsou v grafu reprezentovány kroužky nazýváme je vrcholy (uzly) grafu. Vztah mezi dvěma objekty je v grafu zobrazen čárou, tzv. hranou, která spojuje vrcholy, které objekty reprezentují. Přitom každý z obou konců hrany musí vycházet z vrcholu; speciálním případem je hrana, jejíž oba dva konce vycházejí ze stejného vrcholu, tzv. smyčka. Hrany mohou být orientované nebo neorientované (či vícenásobné). Neorientovaný graf je dvojice G= V,E, kde V je neprázdná množina vrcholů a E {{u,v} u,v V,u v} je množina dvouprvkových množin vrcholů, tzv. (neorientovaných) hran. Orientovaný graf je dvojice G= V,E, kde V /0 je množina vrcholů a E V V je množina uspořádaných dvojic vrcholů, tzv. (orientovaných) hran.

Sled v neorientovaném grafu G= V,E je posloupnost v 0,e 1,v 1,e 2,v 2,...,e n,v n, kde v i V jsou vrcholy a e j E jsou hrany takové, že e i ={v i 1,v i } pro i = 1,...,n. Číslo n se nazývá délka sledu. Sled v 0,e 1,v 1,e 2,v 2,...,e n,v n, se nazývá uzavřený, je-li v 0 = v n, tah, neopakuje-li se v něm žádná hrana (i j e i e j ), cesta, neopakuje-li se v něm žádný vrchol (i j v i v j ), kružnice, je-li v 0 = v n a s výjimkou vrcholů v 0 a v n jsou každé dva vrcholy různé. Vzdálenost z vrcholu u do vrcholu v je délka cesty z u do v, která má ze všech cest z u do v délku nejmenší.

Hranové ohodnocení grafu G = V, E s množinou hodnot D je funkce w : E D. Poznámka: Podobně jednoduše lze zavést i pojem ohodnocení vrcholů. My jej ale nebudeme potřebovat. Dále si ukážeme dva grafové algoritmy: Dijsktrův a Kruskalův.

Dijkstrův algoritmus Dijkstrův algoritmus je nejznámější algoritmus na nalezení nejkratších cest z daného vrcholu. Vstup: neorientovaný graf G = V, E, hranové ohodnocení w : E R +, vrchol s V Výstup: hodnota d(v) pro každý v V, d(v) je hodnota nejkratší cesty z s do v Proměnné: funkce d : V R + 0, číslo m R+ 0, množiny A,N V Algoritmus: 1 A:= V ; d(s):= 0; pro v V {s}: d(v):= 2 pokud neexistuje v A takový, že d(v), skonči 3 m:= min{d(v) v A}; N :={v A d(v)=m}; A:= A N 4 pro všechny v N, u A takové, že {v,u} E: jestliže d(v)+w({v,u})<d(u), pak d(u):= d(v)+w({v,u}); pokračuj bodem 2.

Neorientovaný graf G = V, E se nazývá souvislý, právě když u,v existuje sled z u do v. Strom je neorientovaný souvislý graf bez kružnic. Neorientovaný graf V 1,E 1 je podgrafem grafu V 2,E 2, právě když V 1 V 2 a E 1 E 2. Kostra neorientovaného grafu G je jeho podgraf, který je stromem a obsahuje všechny vrcholy grafu G. Poznámka: Graf má kostru, právě když je souvislý.

Kruskalův algoritmus Kruskalův algoritmus je hladový algoritmus (z roku 1956) hledající minimální kostru souvislého grafu G = V, E. Vstup: souvislý graf G= V,E, V =n, E =m, hranové ohodnocení w : E R + Výstup: minimální kostra grafu, tj. kostra grafu s minimálním součtem ohodnocení jejích hran Algoritmus: Algoritmus postupně prochází hrany a vytváří z nich množiny E 0, E 1, E 2,..., z nichž poslední je minimální kostra grafu G= V,E : 1 uspořádej hrany z E dle váhy: w(e 1 ) w(e 2 ) w(e m ) 2 vytvoř prázdnou množinu hran E 0 3 pokud přidáním e i vznikne kružnice, ponechej E i := E i 1, jinak E i := E i 1 {e i } 4 opakuj krok 3, dokud i < m a E i ještě nemá n 1 hran.

Obsah 1 Rekurze 2 Grafy a některé grafové algoritmy 3 Konečný automat

Konečný automat je teoretický výpočetní model používaný v informatice pro studium vyčíslitelnosti a obecně formálních jazyků. Popisuje velice jednoduchý počítač, který může být v jednom z několika stavů, mezi kterými přechází na základě symbolů, které čte ze vstupu. Množina stavů je konečná (odtud název). Konečný automat nemá žádnou další pamět kromě informace o aktuálním stavu. Konečné automaty se používají pro zpracování regulárních výrazů, například jako součást lexikálního analyzátoru v překladačích.

Deterministický konečný automat je pětice A = T,Q,δ,q 0,F, kde T je konečná množina vstupních symbolů (nazývaná abeceda) Q je konečná množina stavů δ je tzv. přechodová funkce, δ : Q T Q, popisující pravidla přechodů mezi stavy q 0 je počáteční stav, q 0 Q F je množina koncových stavů, F Q.

Popis činnosti automatu: Na počátku se automat nachází v definovaném počátečním stavu q 0. Dále v každém kroku přečte jeden symbol ze vstupu a přejde do stavu, který je dán přechodovou funkcí (aktuálním stavem a přečteným symbolem). Poté pokračuje čtením dalšího symbolu ze vstupu, dalším přechodem dle přechodové funkce atd. Skončí-li automat po přečtení vstupu v koncovém stavu, pak daný vstup přijal (rozpoznal). Jinak ho nepřijal. Poznámka: Existují i tzv. nedeterministické konečné automaty s přechodovou funkcí δ : Q T 2 Q. Lze o nich dokázat, že mají stejnou výpočetní sílu jako deterministické konečné automaty.

Konečný automat lze reprezentovat: přechodovou funkcí δ tabulkou (mírně modifikovaným) orientovaným grafem stavy jsou vrcholy, přechody jsou vyznačeny hranami, které jsou ohodnocené vstupními symboly, koncové stavy jsou vyznačeny dvojitým kroužkem. Příklad Reprezentujte (přechodovou funkcí δ, tabulkou, orientovaným grafem) DKA rozpoznávající všechna binární čísla, v nichž nejsou za sebou více než dvě nuly a nekončí dvěma nulama. (Automat tedy například přijímá vstupní slovo 1101001, ale nepřijímá vstupní slovo 100.) Řešení: viz přednáška.

řetězec, abeceda Řetězec α prvků množiny V je libovolná konečná posloupnost této množiny. Počet prvků v řetězci je jeho délkou a označuje se α. Speciálně pro prázdný řetězec ε definujeme ε = 0. Příklad Necht V ={0,1}. Pak pro α = 001011 a β = 0000 je α =6 a β =4. Abeceda V je konečná množina symbolů.

uzávěr, formální jazyk Pozitivní uzávěr V + konečné množiny V je množina všech neprázdných řetězců prvků množinyv. Uzávěr V je množina V + {ε}. Necht je dána abeceda V. Pak libovolná podmnožina uzávěru V je formální jazyk nad V. Příklad Pro V ={+,,0,1,2,3,4,5,6,7,8,9} je zřejmě množina celých čísel formální jazyk nad V.

Příklad Necht T ={a, b, c}. Sestavte konečný automat, který rozpozná slova, která obsahují podřetězec abc. Řešení: viz přednáška. Příklad Necht T ={0, 1}. Sestavte konečný automat, který přijímá regulární jazyk řetězců, které vyjadřují binární číslo dělitelné třemi (beze zbytku). Řešení: viz přednáška.

KA shrnutí Počáteční podmínky: na vstupu je nějaké slovo w T, automat je ve stavu q 0. V každém kroku: Odebere se nejlevější symbol x ze vstupního slova w a z aktuálního stavu q se přejde do stavu δ(q,x) (dle přechodové funkce). Ukončení činnosti KA: Bud je vstupní slovo celé zpracováno, nebo pro aktuální stav q a odebraný symbol x neexistuje funkční hodnota δ(q, x), tj. není možný další přechod. Slovo w je přijímáno KA, jestliže je celé zpracováno a KA skončil v koncovém stavu. Množinu všech slov w T přijímaných KA nazveme jazykem rozpoznávaným tímto automatem.