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

Ve školním roce 2008/2009 vedeme s Milanem Strakou speciální cvičení z předmětu Programování II [NPRG031] 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.

Cvičení se koná každé pondělí od 12:20 v S8, kdo chcete chodit, přihlašte se, prosíme, v SISu.

Tematicky bude navazovat na Programování I pro pokročilé z minulého semestru, ale jeho absolvování určitě nebude nutné pro účast na tomto cvičení.

Podmínky k získání zápočtu jsou (AND):

Kontakt

Svým cvičícím pište na adresu mami@ucw.cz (Martin+Milan).

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

DatumIDBodyPříklady
2. 3. lcsx15Vymyslete algoritmus na nalezení nejdelší společné posloupnosti, který bude efektivnější v případech, kdy do hledané posloupnosti padne většina vstupu.
9. 3. mtri15Je dán konvexní mnohoúhelník. Chceme jej triangulovat, tj. rozdělit nekřížícími se úhlopříčkami na trojúhelníky. Jak najít minimální triangulaci co do celkové délky použitých úhlopříček?
16. 3. tspx20Jistý obchodní cestující nabízí následující problém: mějme neorientovaný graf s ohodnocenými hranami a hledejme v něm nejkratší kružnici, na níž leží všechny vrcholy. Polynomiálně to zatím nikdo neumí, ale zkuste najít algoritmus, který beží v čase O(2N*Nk) pro co nejmenší k.
11. 5. 2sat20Jak vyřešit 2-SAT v lineárním čase?

Co jsme dělali

datum co se cvičilo
23. 2. Jak spočítat N nad K modulo M?
2. 3. Dynamické programování poprvé: dělíme text na slova, optimalizujeme mobilnici, hledáme nejdelší společnou podposloupnost.
9. 3. DP podruhé – úlohy o knihovně:
  1. Je dána šířka knihovny, spočítat minimální možnou výšku. Pořadí knih je pevné, výšky i šířky knih jsou libovolná kladná čísla.
  2. Je dána maximální výška, spočítat minimální možnou šířku. Opět pevné pořadí knih, všechny knihy jsou stejně široké, výšky se liší.
  3. Jako 2., ale na pořadí knih nezáleží.
  4. Jako 3., ale smíme použít nejvýše K polic.
  5. Jako 1., ale smíme knihy klást i do sloupečků.
16. 3. DP po3.: nejdelší vybraný kopec, optimální binární vyhledávací strom (včetně triku pro redukci na N2 operací), dlaždičkování dálnice.
23. 3. Geometrické algoritmy: problém obchodního cestujícího pro body v konvexní poloze, obsah mnohoúhelníka, těžiště a počítání mřížových bodů.
30. 3. Hamiltonovské kružnice a prostorová složitost. Ze života vánočních dárků. Nejkratší program pro RPN kalkulačku generující dané číslo. Nejdelší čtyřcyklus. Nejdelší úsek posloupnosti, jehož součet je dělitelný daným číslem.
6. 4. Hledáme průsečíky úseček zametáním roviny. Útěk robota z bludiště. Algoritmy pracující s komprimovanými daty.
20. 4. Transformování kvadrantových stromů. Problém malíře kvadrantisty. Ještě komprese. Jak přeuspořádat posloupnost, aby součet každých dvou (tří?) sousedních prvků nebyl dělitelný třemi?
27. 4. Polosouvislost orientovaných grafů. Uklízení kostek do obdélníku. Fibonacciho soustava.
4. 5. Řetězce na spoustu způsobů. Wildcardy, regulární výrazy a automaty a spleť vztahů mezi nimi.
11. 5. 2-SAT.
18. 5. Max-2-SAT a jeho pravděpodobnostní aproximace. Derandomizace pomocí podmíněných pravděpodobností. Aproximace Max-Cutu.
Stránku spravuje Martin Mareš