Jarní soustředění KSP 2009

Seznam přednášek

Tento spisek jest nabídkou přednášek, které byste na soustředění mohli slyšet, čili jakási obdoba matfyzácké Karolínky (ta je ale, pravda, ještě stále o něco tlustší). Přednášek je daleko víc, než kolik se dá za pár dní stihnout, a tak je na vás, abyste si vybrali, o které máte opravdu zájem; pokud byste rádi slyšeli ještě o něčem dalším, klidně to k přednáškám připište, třeba se najde někdo, kdo by vám o tom rád pověděl. Berte a vychutnávejte!

Údaje o jedné přednášce vypadají asi takto:

Stručný úvod do základů teorie vlkodlaků ("Za dne ukryt v hloubi lesa, děs temný zvečera se plazí...") [LYK]
RNDr. Á. Cula

Úvod do moderní teorie vlkodlaků, čili též praktická dæmonologie a naiadologie.

Předpoklady: Měsíc v úplňku.

Dozvíte se (čteno v obvyklém pořadí): jméno přednášky, v uvozovkách motto přednášky, kód (pro snadnější odkazování na konkrétní předměty), jméno přednášejícího a nakonec stručný obsah přednášky.

Povinně dobrovolné přednášky

Základy programování ("Má x=x+1 řešení?") [ZAKL]
Michal Vaner

Úvodní několikadílná přednáška pro ty, kteří mají s programováním malé nebo dokonce žádné zkušenosti. Od základů si vysvětlíme problematiku programování a představíme programovací jazyk Python, který je jednoduchý na naučení, přestože se v praxi používá. Od jednoduchých problémů se postupně přesuneme k složitějším úlohám, ukážeme si základní datové typy (pole, záznamy) a datové struktury (fronta, zásobník) a základní algoritmy a programátorské techniky, jako je rekurze, backtrack (řešení hrubou silou) a další. Vše bude doprovázeno příklady.

Jak vypadá řešení ("Jen jeden bod, když jsem napsal 18 stránek?") [SOL]

Jak má správně vypadat řešení KSP? Na co si dát pozor, co je úplně špatně a za co organizátoři strhávají body a sobě vlasy. Přednáška, která by mohla pomoci i mnohým déle aktivním řešitelům.

Grafy & algoritmy I ("Pojďme si hrát s obrázky") [GA1]

Co to jsou grafy, jak je v programech reprezentovat a hlavně k čemu se dají použít. Prohledávání grafu do šířky i do hloubky. Hledání nejkratších cest: Dijkstrův a Floydův algoritmus. Union-find problem, hledání minimální kostry, topologické třídění grafů a kreslení grafů jedním tahem.

Datové struktury pro začátečníky [DS1]

Jak si ukládat data natolik šikovně, abychom je nejen neztratili, ale také našli dříve, než si pro nás přijde Smrť. Klasické struktury jako pole, seznamy, vyhledávací stromy (vyvážené, AVL, a-b, splay), haldy (binární a obecně regulární) a v neposlední řadě hashování.

Algoritmy a jejich složitost ("Čím menší je časová složitost algoritmu, tím větší je složitost kódu.") [SLOZ]

Problém, algoritmus a program. Časová a paměťová složitost problémů i algoritmů. Složitost rekurzivních algoritmů, složitost v průměrném případě.

Dynamické programování ("Kampak jsem si to jenom schoval?") [DYNP]
Michal Vaner, Martin Mareš

Dynamické programování je programátorská technika využívající velice prostinkého nápadu: Proč něco počítat několikrát, když to mohu spočítat jednou a výsledek si uložit? Na této přednášce si ukážeme, že tento jednoduchý nápad může pomoci efektivně vyřešit i poměrně obtížné úlohy.

Základní algoritmy [ZALG]

Základní výbavou každého informatika jsou různé standardní algoritmy, zde si ukážeme ty nejdůležitější z nich: Třídící algoritmy včetně vnějšího třídění. Vyhledávání v polích, hledaní mediánu, resp. k-tého největšího prvku v lineárním čase. Vyhodnocování výrazů, předzpracování vstupních dat.

Volitelné přednášky

Programování v jazyce C [C]
Martin Mareš, Pavel Machek, Cyril Hrubiš

Datové typy jazyka C, programové konstrukce, základy práce s ukazateli. Seznámení se standardními knihovnami jazyka C.

Objektově orientované programování v C++ a Object Pascalu ("I život je objektový, tak proč ne programování ...") [OBJ]
Michal Vaner

Objektově orientované programování přináší jiný náhled na návrh řešení problémů. Vysvětlíme, jak se liší objektové a procedurální programování. Co je to objekt a co třída. Základní vlastnosti objektů (dědičnost, zabalení, polymorfismus). Co je to metoda, překrývání metod, virtuální metody (pozdní vazba) a čistě virtuální (abstraktní) metody. Syntaxe deklarací tříd v C++ a Delphách, viditelnost a přístupová práva ke členům tříd. A také, že to není jediný přístup k objektům.

Předpoklady: Znalosti procedurálního programování v Pascalu a/nebo v C.
Kompilátory ("Jak se dělají kompilátory (a nebo komplikátory?)") [KOMP]
Martin Mareš

Povídání o tom, jak překladače fungují uvnitř – jak se program parsuje, jak se optimalizuje kód atd. Co je to front end, back end, „middle-end“, mezikód a jiná arkána umění kompilátorového. Jak psát programy tak, aby kompilátoru chutnaly, co optimalizovat ručně a co naopak udělá kompilátor lépe než my.

Předpoklady: Základní povědomí o tom, co to je procesor a co dělá.
Sítě a Internet ("Sítě nejen na ryby.") [NET]
Pavel Machek, Martin Mareš

Jak funguje Internet a počítačové sítě vůbec: od elektronů v drátech (fotonů v optických kabelech nebo elektromagnetických vln) přes packety a jejich routing až k jednotlivým síťovým službám. Protokoly rodiny TCP/IP, síťové topologie (a proč Internet vlastně nemá žádnou), internetworking. Pár taktů hudby budoucnosti: IPv6, multicasting, přenos v reálném čase atd.

Operační systémy ("Mám 3GHz procesor, tak co ty Windowsy už půl hodiny dělaj?!") [OS]
Pavel Machek

Jak vypadá architektura dnešních operačních systémů aneb co musí programátor vědět, aby mu nepadala Wokýnka/Tučňáci. Správa procesů a vláken, plánování, synchronizace. Paměť, adresace a její přidělování. Správa souborů, filesystémy. Čemu se říká jádro a proč se spojuje s pudlem.

UNIX ("UNIX gives you enough rope to hang yourself.") [UNIX]
Martin Mareš, Pavel Machek, Cyril Hrubiš

Kamarád u černobílého textového okna září blahem. Chcete poznat, proč? Jak UNIX vznikl, k čemu je dobrý a k čemu třeba není. UNIXová filosofie. Kouzlo scriptů. Kouzlo speciálních souborů. Kouzlo propojování programů. Kouzlo nechtěného. UNIX byl napsán v C a C vzniklo pod UNIXem.

Principy počítačů ("A opravdu uvnitř počítače běhají malí trpaslíci?") [HW]
Pavel Machek, Martin Mareš

Historie a vývoj počítačových technologií a současných architektur. Co je to procesor, jak se programuje (instrukční sady) a jak se chová. Přehled tříd procesorů (skalární a vektorové, RISC). Jak procesor komunikuje s okolím (čipová sada). Nezbytné periferie: vnitřní a vnější paměti, vstupní a výstupní zařízení.

Logické programování ("Detektivem za 90 minut.") [LOGP]
Mária Vámošová

Proč psát dlouhé a složité programy, když stačí dostatečně přesně popsat situaci a pak se prostě zeptat? Toť princip logického programování, který si ukážeme na Prologu.

Kryptologie ("Gbgb arav zbp gnwan mcenin.") [CRYPT]
Martin Mareš

Kryptologie čili tajuplná nauka o šifrách, jejich konstrukci a hlavně o jejich luštění. Přísně tajné. Šifrovací systémy jako lego: základními kostičkami nám budou symetrické a asymetrické šifry a jednosměrné funkce, stavět z nich budeme kryptografické protokoly na bezpečný přenos, autentikaci, digitální podpisy a třeba i jak si hodit korunou po telefonu. Předvedeme nerozluštitelnou šifru a dokonce to o ní i dokážeme.

Počítačová grafika ("Namaluj mi beránka...") [GFX]
Martin Mareš

Kreslení a zpracování obrazu na počítači. Souřadnice (rovinné, prostorové i barevné) a jejich transformace. Základní grafická primitiva: body, úsečky, kružnice, elipsy, Bézierovy křivky a jejich rasterizace. Vyplňování n-úhelníků a křivkou ohraničených oblastí, flood fill. Pár triků navíc: maticové filtry, anti-aliasing a dithering. Grafické formáty a komprese obrázků. Základy trojrozměrného promítání a vykreslování scény.

Pravděpodobnost a algoritmy ("Nejen že Bůh hraje v kostky, ale ještě při tom občas švindluje!") [PPALG]
Martin Mareš

K čemu jsou při programování dobrá náhodná čísla a jak je generovat. Algoritmy pravděpodobnostní a randomizované, časová složitost v průměrném případě. Proč používat a proč nepoužívat Quicksort. Inkrementální algoritmy (třeba na konvexní obal), vyhledávání v poli v konstantním čase za pomoci hashování, konstrukce perfektního hashování, randomizované datové struktury (skip listy a treapy). Interaktivní protokoly aneb jak vyhrát nad falešným hráčem. Problém studny na Pražském hradě. Míchání karet.

Toky v sítích ("Když je v grafu povodeň, těsní?") [TOKY]
Martin Mareš, Michal Vaner, Martin Böhm

K čemu je dobré, když grafem teče voda. Předvedeme si klasický problém toků v sítích a jeho všelijaké, mnohdy dosti překvapivé aplikace. Jak rozestavět n věží na šachovnici a jak ji místo toho pokrýt dominovými kostkami? Další souvislosti, jako třeba násobná souvislost grafů.

Předpoklady: Umět plavat (zejména v matematice)
MFF UK aneb co obnáší matfyzákem býti ("Maminko, ptá se tatínka, kdy už budu matfyzákem?") [MFF]
Martin Mareš & kdokoliv další

Nezávazné povídání o Matfyzu a základním matfyzáckém folklóru. Určitě si přečteme matfyzáky sepsaný Úvod do matfyzáka a zazpíváme pár matfyzáckých písní. Zbytek už bude záležet na tom, co budete chtít slyšet.

Logika ("Tato věta sem nepatří.") [LOGI]
Martin Mareš

Pokud budeme v životě věřit všemu, co je „přeci zřejmé“, dostaneme se brzy do potíží a v matematice to platí dvojnásob. Ale co s tím? Přírodní vědy si vymyslely verifikovatelné experimenty a matematici logiku a dokazování. Co je to výrok, co jeho důkaz a proč se axiomy nedokazují. Jenže jak si je zvolit? A jak se z toho všeho postaví celá matematika? A bude vůbec matematika někdy celá? Studená sprcha pana Gödela coby sebevražedné dovršení snahy získat dokonalý jazyk. Logika coby hra a problém líného profesora. Důkazy boží existence a neexistence.

Předpoklady: LOGI
Hradla ("Vše co jste chtěli vědět o hradlech a báli jste se zeptat.") [HRAD]
Cyril Hrubiš

Shrnutí hradlového seriálu KSP. Tedy krátký úvod do historie, nástin vnitřností, schémata, schematické značky, konvence. Trocha teorie, Booleova algebra a De Morganovy zákony. V neposlední řadě si ukážeme, jak rychle a efektivně umíme problémy hradly řešit.

Složitější složitost [SLOZ2]
Martin Mareš, Michal Vaner

Trochu hlouběji o složitosti: amortizovaná časová složitost, dolní odhady, nedeterministické výpočty a třída NP, NP-úplné problémy a příklady redukcí.

Předpoklady: SLOZ
Datové struktury pro pokročilé [DS2]
Martin Böhm

Důmyslnější datové struktury: trie, intervalové stromy, splay stromy, BB-α stromy; geometrické struktury pro lokalizaci bodů v rovině; binomiální a Fibonacciho haldy, leftist haldy a 2-3 haldy. Též několik přátelských randomizovaných datových struktur: skip listy a treapy.

Python (" print "Ffff".decode("rot13")") [PYTH]
Michal Vaner

Základy programování v Hroznýši (Pythonu), syntaxe, datové (ne)typy, funkce, třídy, moduly aneb všechno je slovník nebo prvek slovníku (nebo oboje). Výhody interaktivního interpretu.

Od zdrojáku k programu ("Jak přežít, když se nám IDE rozhodlo nepřekážet v cestě.") [NIDE]
Michal Vaner

Napsal jsem zdroják, co teď s ním? Počítač mu nerozumí a překládat to podle slovníku je otrava. Aneb kdo je to kompiler, jeho kamarád linker, kde se vezmou (nebo kam se dají) knihovny, Otrokář zvaný make a jemu podobní, k čemu je dobré nechat si ten celý blázinec zautomatizovat a jak to udělat, aby nebyl ještě větší.

Haskell ("fac n = product [1..n]") [HASK]
Michal Vaner

Ne v každém jazyce je potřeba popisovat, jak se má výsledek spočítat. V některých jazycích jej stačí jen dostatečně přesně popsat. Jak tím dokáže Haskell ulehčit práci, jak si ohlídá programátora, aby nesčítal hrušky a hruškovníky a jak naopak občas dovede přidělat práci. Kdo je to monáda a kdy kouše. A proč programátor s leností dojde k nekonečnu.

Základy kombinatoriky [KOMB]
Pavel Klavík

Co je kombinatorika a čím se zabývá. Kolika způsoby lze uspořádat prvky? Kolika způsoby lze vybrat několik prvků z množiny? Je více podmnožin liché, nebo sudé velikosti? Tyto a další otázky si zkusíme společně odpovědět a možná objevíme další nečekané souvislosti.

Základy lineární algebry ("Vektorový prostor je místo, kde žijí vektory.") [LA1]
Pavel Klavík

Lineární algebra vznikla jako formalizace geometrie a tuto souvislost si ukážeme. Popíšeme vektorové prostory, které se skládají z vektorů. Jaké operace s nimi umíme provádět a co všechno musí splňovat? Kdy jsou vektory závislé a kdy nezávislé? Co je to lineární kombinace, obal a generátor? Co je to dimenze vektorového prostoru a jaké má souvislosti s předchozími pojmy?

Úvod do teorie her ("Hraj fér, ale vytřískej z toho co nejvíc!") [GAME]
Kristýna Stodolová

Začneme Nimem a pak se podíváme, jak se dá co nejlépe hlasovat, soudit, pořádat reklamní kampaně či usilovat o zakázky. V druhé části se zameříme na vězňovo dilema a vyzkoušíme, kdo z vás by si užil kořisti a kdo zčernal v base.

Úvod do programátorských soutěží ("Za pár let chci třímat v rukou pohár!") [SOUT]
Martin Böhm

Přednáška pro ty, kteří by si jednou chtěli zasoutěžit v týmových (a dalších) soutěžích, ale netuší, jak začít. Online soutěže a judge, minimum Céčka, Unixu a Vimu. Jak programovat v týmu a jak rychle odhadnout, který algoritmus nasadit a o co se nestarat. Určeno i pro úplné začátečníky, finalisté IOI by se mohli nudit.