Anotace. zpět k rekurzi: teorie her. Martin Pergel,

Podobné dokumenty
Anotace. Dámy na šachovnici dominance a nezávislost. Aritmetické výrazy, notace a převody mezi nimi, nejdelší rostoucí podposloupnost.

Anotace. Středník II!! programování her.

Reprezentace aritmetického výrazu - binární strom reprezentující aritmetický výraz

Odstranění rekurze Binární soubory Programování her. Anotace. Středník II!! Odstranění rekurze, binární soubory, programování her.

Programovací jazyk Pascal

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

PROGRAMOVACÍ JAZYKY A PŘEKLADAČE LL SYNTAKTICKÁ ANALÝZA DOKONČENÍ, IMPLEMENTACE.

Teorie her a ekonomické rozhodování. 7. Hry s neúplnou informací

Stromy. Příklady. Rekurzivní datové struktury. Základní pojmy

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

Implementace LL(1) překladů

- speciální symboly + - * / =., < > <> <= >= a další. Klíčová slova jsou chráněnými útvary, které nelze použít ve významu identifikátorů.

Pascal. Katedra aplikované kybernetiky. Ing. Miroslav Vavroušek. Verze 7

Anotace. Spojové seznamy, haldy. AVL-stromy, A-B stromy. Martin Pergel,

Anotace. Jednotky (tvorba a využití), struktury (typ record),

Obsah přednášky. programovacího jazyka. Motivace. Princip denotační sémantiky Sémantické funkce Výrazy Příkazy Vstup a výstup Kontinuace Program

Implementace aritmetického stromu pomocí směrníků

Časová a prostorová složitost algoritmů

Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague

Paradigmata programování 1

Úvod do Matlabu. Praha & EU: Investujeme do vaší budoucnosti. 1 / 24 Úvod do Matlabu

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

Dynamické programování

Teorie her a ekonomické rozhodování. 4. Hry v rozvinutém tvaru

Test prvočíselnosti. Úkol: otestovat dané číslo N, zda je prvočíslem

Da D to t v o é v ty t py IB111: Datové typy

NPRG030 Programování I, 2018/19 1 / :25:37

SII - Informatika. 1. Atribut relace, jehož hodnota jednoznačně určuje prvek v jiné relaci, se nazývá:

Pokročilá algoritmizace amortizovaná složitost, Fibonacciho halda, počítačová aritmetika

Náznak ukázky syntaxe a sémantiky pro projekt. 1 Syntaktické prvky. Poslední aktualizace: 8.

Rekurze. Jan Hnilica Počítačové modelování 12

Stromy, haldy, prioritní fronty

Algoritmizace Dynamické programování. Jiří Vyskočil, Marko Genyg-Berezovskyj 2010

Funkce, podmíněný příkaz if-else, příkaz cyklu for

Informatika 8. třída/6

Rozklad problému na podproblémy

- znakové konstanty v apostrofech, např. a, +, (znak mezera) - proměnná zabírá 1 byte, obsahuje kód příslušného znaku

type Obdelnik = array [1..3, 1..4] of integer; var M: Obdelnik;

Rekurzivní algoritmy

Základy umělé inteligence

Přednáška 7. Celočíselná aritmetika. Návratový kód. Příkazy pro větvení výpočtu. Cykly. Předčasné ukončení cyklu.

Západočeská univerzita v Plzni Dokumentace překladače PL/0 v PHP Předmět KIV/FJP

B3B33ALP - Algoritmy a programování - Zkouška z předmětu B3B33ALP. Marek Boháč bohacm11

Struktura programu v době běhu

1 PRVOCISLA: KRATKY UKAZKOVY PRIKLAD NA DEMONSTRACI BALIKU WEB 1

ÚVODNÍ ZNALOSTI. datové struktury. správnost programů. analýza algoritmů

B3B33ALP - Algoritmy a programování - Zkouška z předmětu B3B33ALP. Marek Boháč bohacm11

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.

Datové struktury 2: Rozptylovací tabulky

Algoritmus Minimax. Tomáš Kühr. Projektový seminář 1

Virtuální počítač. Uživatelský program Překladač programovacího jazyka Operační systém Interpret makroinstrukcí Procesor. PGS K.

Martin Milata, Pokud je alespoň jeden rozměr čokolády sudý (s výjimkou tabulky velikosti 1x2, která už je od

Binární vyhledávací strom pomocí směrníků Miroslav Hostaša L06620

téma: Výběrové dotazy v MS Access

Operátory, výrazy. Tomáš Pitner, upravil Marek Šabo

Úvod do teorie grafů

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

Jednoznačné a nejednoznačné gramatiky

Stručný návod k programu Octave

Předmět: Algoritmizace praktické aplikace

5 Rekurze a zásobník. Rekurzivní volání metody

1. Od Scheme k Lispu

Algoritmizace a programování

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

Bezkontextové gramatiky. Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května / 49

Anotace. Informace o praktiku z programování!!! Direktivy překladače Soubory (textové) Quicksort Metoda rozděl a panuj

Hledání správné cesty

Vyučovací hodina. 1vyučovací hodina: 2vyučovací hodiny: Opakování z minulé hodiny. Procvičení nové látky

NPRG030 Programování I, 2010/11

Skripta ke školení. Základy VBA. vypracoval: Tomáš Herout. tel:

Programování 2 (NMIN102) Soubory. RNDr. Michal Žemlička, Ph.D.

NPRG030 Programování I, 2018/19 1 / :03:07

Syntaktická analýza. Implementace LL(1) překladů. Šárka Vavrečková. Ústav informatiky, FPF SU Opava

NPRG030 Programování I, 2016/17 1 / :58:13

Implementace seznamů do prostředí DELPHI pomocí lineárního seznamu

IB111 Úvod do programování skrze Python

ŘÍDÍCÍ STRUKTURY - PODMÍNKY

Anotace. Pointery, dynamické proměnné

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

Přednáška 3. Rekurze 1

Příklady: (y + (sin(2*x) + 1)*2)/ /2 * 5 = 8.5 (1+3)/2 * 5 = /(2 * 5) = 1.3. Pavel Töpfer, 2017 Programování 1-3 1

LEKCE 6. Operátory. V této lekci najdete:

DSL manuál. Ing. Jan Hranáč. 27. října V této kapitole je stručný průvodce k tvorbě v systému DrdSim a (v

Sémantika Tabulka symbolů Intermediální kód Typová kontrola, přetypování Statická a dynamická sémantika. Sémantická analýza.

Algoritmizace a programování

SPJA, cvičení 1. ipython, python, skripty. základy syntaxe: základní datové typy, řetězce. podmínky: if-elif-else, vyhodnocení logických výrazů

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 21.

Anotace. Dijkstrův algoritmus,

Lomené výrazy sčítání a odčítání lomených výrazů

Zadání: TÉMA: Zápis algoritmu, čtení textového souboru, porovnání řetězců.

1. Implementace funkce počet vrcholů. Předmět: Algoritmizace praktické aplikace (3ALGA)

CZ.1.07/1.5.00/

Abstraktní datové typy FRONTA

Operátory. Základy programování 1 Tomáš Kühr

Anotace. Ordinalni typy - typ char, funkce ord, chr, succ, prev, inc, dec,

Anotace. Objekt self, Zapouzdření, polymorfismus,

TGH07 - Chytré stromové datové struktury

Dynamicky vázané metody. Pozdní vazba, virtuální metody

Basic256 - úvod do programování Příklady. ing. petr polách

Michal Krátký. Úvod do programování. Cíl kurzu. Podmínky získání zápočtu III/III

Transkript:

Anotace Hashování, zpět k rekurzi: Vyhodnocení výrazu, teorie her.

Hashování Máme-li data, kterými lze indexovat, ale hodnoty by byly příliš velké (například řetězce), má smysl zkusit spočítat nějakou funkci (například posčítat ordinální hodnoty jednotlivých znaků mod 256). Tuto funkci označíme h. Uděláme tak tabulku mnohem menší velikosti, než je universum. Tomu říkáme hashování. Jenže více prvků může kandidovat na totéž místo tabulky, tomu říkáme kolize.

Hashování řešení kolizí Různé metody řešení kolizí: Uděláme spojový seznam, srůstající hashování, tedy umíst ujeme prvky do přihrádek, kam nepatří, z toho plyne problém s implementací delete (mazat prakticky nelze, protože bychom mohli roztrhnout řetízek). Na to kam umístit prvek v kolizi existuje mnoho metod. Bud to vybereme další volné místo, nebo obstaráme funkci, která určí další kandidátské místo. Pokud známe množství dat, můžeme se pokusit o perfektní hashování, a to do pole kvadraticky velkého (se středním počtem kolizí menším než 1), nebo dokonce do pole velikosti 4n, ale pak předem musíme znát data.

Výrazy a notace Jakými způsoby lze zapsat aritmetický výraz? (10+5) (15 4)/2 tzv. infixní notace (operátor je mezi operandy), / + 10 5 15 4 2 tzv. prefixní notace (operátor je před operandy), / ( (+ 10 5) ( 15 4)) 2 (uzávorkování pro větší názornost), 10 5 + 15 4 2 / postfixní notace (operátor je za operandy), ((10 5 +) (15 4 ) ) 2 / (uzávorkováno), stromem: Ve vrcholu bud to operátor (vrchol má dva syny) nebo operand (číslo, takový vrchol je listem).

Aritmetické výrazy a různé notace Výhody a nevýhody jednotlivých notací... Lze všchny tyto notace (zápisy) vyhodnotit? Lze mezi těmito notacemi převádět? Ano a dokonce velmi snadno pomocí stromového zápisu.

Evaluace prefixní notace Rekurzí: function vyhodnot:integer; if (na vstupu je číslo) then vyhodnot:=hodnota čísla na vstupu else operator:=na vstupu(); arg1:=vyhodnot; arg2:=vyhodnot; vyhodnot:=proved(operator,arg1,arg2);

Strom z prefixní notace function pref strom:strom; if(na vstupu je číslo) then pref strom:=list(hodnota na vstupu); else pom:=vrchol(operator); pom.arg1:=vyhodnot; pom.arg2:=vyhodnot; vyhodnot:=pom; funkce list vytvoří list, funkce vrchol vytvoří vrchol stupně 2, vrchol stupně 2 obsahuje prvky arg1 a arg2.

Jak ze stromu vygenerovat všechny notace? Rekurzívně: Prolezeme strom tak, že v jedné fázi vlezeme do levého syna, v jedné fázi do pravého syna a v jedné fázi vypíšeme údaj o operátoru. Všechny tři notace získáme správným uspořádáním těchto tří fází. Do pravého syna půjdeme vždy až po návštěvě levého syna, lišit se tedy bude jen okamžik výpisu údajů!

Generování prefixní notace procedure gen pref(v:vrchol); if(list(v)) then vypis(v); else vypis(v); gen pref(v.arg1); gen pref(v.arg2); Funkce vypis vypíše operátor resp. číslo. funkce list zjistí, zda je současný vrchol list.

Generování postfixní notace procedure gen post(v:vrchol); if(list(v)) then vypis(v); else gen post(v.arg1); gen post(v.arg2); vypis(v); Funkce vypis vypíše operátor resp. číslo. funkce list zjistí, zda je současný vrchol list.

Generování infixní notace skoro správně procedure gen post(v:vrchol); if(list(v)) then vypis(v); else gen post(v.arg1); vypis(v); gen post(v.arg2); Funkce vypis vypíše operátor resp. číslo. funkce list zjistí, zda je současný vrchol list.

Generování infixní notace správně leč ošklivě procedure gen post(v:vrchol); if(list(v)) then vypis(v); else write( ( ); gen post(v.arg1); vypis(v); gen post(v.arg2); write( ) );

Evaluace postfixní notace function eval post:integer; while not eof do if (na vstupu cislo) then push(cislo); if (na vstupu operator) then arg2:=pop; arg1:=pop; push(operator(arg1,arg2)); writeln(pop);{výsledek je na vrchu zásobníku}

Strom z postfixní notace function strom post:vrchol; while not eof do if (na vstupu cislo) then push(list(cislo)); if (na vstupu operator) then pom:=vrchol(operator); pom.arg2:=pop; pom.arg1:=pop; push(pom); strom post:=pop;{výsledek na vrchu zásobníku}

Evaluace stromu je snad jasná, ale přesto: function eval tree(v:vrchol); if(list(v)) then eval tree:=value(v) else arg1:=eval tree(v.arg1); arg2:=eval tree(v.arg2); op:=operator(v); eval tree:=op(arg1,arg2);

Evaluace infixní notace aneb Masakr u katova stromu Jedna možnost je najít operátor, který se provede jako poslední, výraz podle něj rozdělit, zavolat se na každou část zvlášt a nakonec provést operátor. Výhoda: Po rozmyšlení, jak najít poslední operátor snadno implementovatelné. Nevýhoda: Traverzujeme výrazem a hledáme operátory. Jak třeba lze najít poslední provedený operátor: 1 Najdi poslední operátor sčítání nebo odčítání mimo závorky, 2 pokud nebyl nalezen, hledej poslední operátor násobení mimo závorky, 3 pokud koukáme na samotné číslo, vyhodnot ho, 4 jinak oloupej závorky, 5 V případech 1, 2 a 4 se rekurzívně zavolej.

Teorie her Kombinatorická hra je hrou dvou hráčů. Stav hry je určen pozicí nějakých předmětů. Všechny zúčastněné předměty jsou viditelné. Jde o tzv. hru s úplnou informací. Příklad: Nimm, Podivná hra, Dáma, Šachy, Halma, Mlýn, Otrávená čokoláda... Kombinatorickými hrami nejsou: Poker, Prší, Mariáš, Black Jack, závody formuĺı... Zaměříme se na hrací část, ne na vstup a výstup. U her předpokládáme, že hrají rozumně se chovající jedinci (s motivací vyhrát). Nejjednodušší příklad: Hra Al-Capone a Babinský na sebe práskají.