Cvičení z programování I pro pokročilé

Ve školním roce 2012/2013 vedeme s Vojtou Tůmou speciální cvičení z předmětu Programování I [NPRG030] pro pokročilé studenty, kteří již nasbírali nějaké zkušenosti z programování (třeba v olympiádách a korespondenčních seminářích) a chtěli by se naučit víc. Viz též letáček :-)

Cvičení se koná každou středu od 15:40 v S8. Kdo chcete chodit, přihlašte se, prosíme, v SISu, případně nám pošlete mail, pokud vám to SIS nedovolí.

Zápočet získáte za vypracování zápočtového programu a domácích úkolů za alespoň 100 bodů.

Svým cvičícím pište na adresu mami@ucw.cz.

Zápočtový program

Domácí úkoly

Domácí úkoly jsou dvou druhů:

Na získání kýžené stovky bodů bohatě stačí praktické úlohy, pokud je řešíte včas.

Teoretické úkoly

DatumKódBodyZadání
3. 10. funf5Co dělá funkce f() z letáčku?
funb5Co dělá funkce bc() z letáčku?
2mis15Princezně se rozsypaly perly z náhrdelníku (očíslované 1 až N) a dvě z nich se ztratily. Jak v lineárním čase a konstantní paměti zjistit, které?
31. 10. mlowz7Dokažte, že úloha "A[i,j]=i+j" z cvičení není řešitelná v lepším čase než Θ(n).
mlowr7Dokažte, že úloha "A[i,j]=i+j" není pro matice reálných čísel řešitelná v lepším čase než Θ(n2).
28. 11. rgb15Dořešte úlohu o RGB třídění z cvičení. Ukažte dolní i horní odhad 2/3*n prohození.
9. 1. jerab20Vymyslete datovou strukturu pro zjišťování pozic háků stromového jeřábu. Měla by podporovat operace "otoč úsekem X o Y stupňů okolo kloubu, na němž je připojen" a "zjisti pozici háku H".

Co jsme dělali

datum co se cvičilo
3. 10. Pár příkladů na úvod: Chybějící číslo (aneb princeznin náhrdelník). Číslo s lichým počtem výskytů. Amor a princezny: V rovině je N bodů, najděte polopřímku, na které leží nejvíce z nich.
10. 10. Nejdelší úsek bez opakování znaků (nebo slov). Úlohy o posloupnostech: dvojice s daným součtem, úsek s daným součtem. Také jejich verze pro monotónní nebo nezápornou posloupnost.
17. 10. Ještě posloupnosti: úsek se součtem co nejbližším zadanému, nejdelší vyvážený úsek. Největší nulová podmatice (dané velikosti, čtvercová, jakákoliv).
24. 10. Podmatice: největší nulová, s maximálním součtem. Hledání v setříděné matici. Budou volby…
31. 10. Volby na mnoho způsobů: půlení, bity, randomizace a konečně i lineární řešení. Házíme vajíčka.
7. 11. Cvičení se nekoná, jsouc imatrikulace. Gaudeamus igitur!
14. 11. Kompromisy mezi časem a pamětí: spočtěte všechna yk = x1 * … * xk-1 * xk+1 * … xn (kde * je nějaká asociativní operace). Generování posloupností nul a jedniček.
21. 11. Další generování: změna na právě jedné pozici (Grayův kód), právě k jedniček, všechna dobrá uzávorkování. Do příště: generování permutací a N dam na šachovnici.
28. 11. Ještě trocha generování. RGB třídění.
5. 12. Třídění: Šroubky a matičky aneb o síle randomizace. Třidíme n čísel od 1 do n3. Nebo posloupnost, v níž je jen O(log n) různých hodnot. Dotřiďujeme knihovnu.
12. 12. O stromech, strážnících, mafiánech a vojenských posádkách – obyčejně, váženě i (vy)počítavě. Asfaltéři na stromech.
19. 12. Prohledávání grafů: Indiana Jones v bludišti. Přihrádkové struktury. Wanted: kostra grafu. Agenti a jejich šéf (TODO).
2. 1. Šéf agentů na mnoho způsobů. Asfaltéři v neorientovaném městě. Symetrická a skoro symetrická orientace grafu.
9. 1. Jeřábníkovy starosti. Jak najít pozici háku? Jak dostat hák na danou pozici? Co když je jeřáb strom? Kdy se jeřáb protne?
Stránku spravuje Martin Mareš