Cvičení z Algoritmů a datových struktur I

Pondělí 17:20 v S10. Obyčejné cvičení, jako všechna ostatní :) Co říct víc? Třeba:

Co jsme dělali

datum co se cvičilo
23. 2. Rekurzivní hádanky.
2. 3. Házení vajíček. Půlící algoritmus na největší společné dělitele. Kráva za plotem. Čísla ve tvaru 2i3j5k. Největší prázdná podmatice.
9. 3. Programování na RAMu. Proč jsme si RAM nezavedli jinak? (nekonečné programy, reálná čísla, neomezená čísla?) Hrátky s grafy a prohledáváním do šířky: komponenty souvislosti, případ rozbitého autíčka, kulhavý kůň, dva roboti v bludišti.
16. 3. Grafové algoritmy: jak poznat, že je v grafu cyklus? Agenti a jejich šéf. Kreslení grafů jedním, případně více tahy. Hledání nejmenšího kladného čísla zapsaného pomocí nul a jedniček, které je dělitelné daným číslem (jak upravit algoritmus z přednášky? existuje takové číslo vždy?).
23. 3. Opět grafové algoritmy: počítání cest, vyvážená a skoro vyvážená orientace grafu, artikulace, asfaltování (rozklad grafu na cesty délky 2), barvení rovinných grafů šesti barvami. Jak se barví pěti?
30. 3. Nejkratší cesty: Dijkstrův algoritmus kontra záporné hrany, jak vyzrát na vrcholová ohodnocení vrcholů, jak se zbavit záporných hran pomocí potenciálů. Nejspolehlivější cesta.
Do konce dubna si rozmyslete svou zápočtovou práci a domluvte se se mnou na tématu.
6. 4. Jak zbohatnout na devizových kursech? Hladový algoritmus. Minimální kostry kontra více stejně těžkých hran. Nejkratší cesty a minimální kostry v grafech ohodnocených malými celými čísly. Jak najít minimální kostru, v níž jsou zadané vrcholy listy (nebo právě zadané vrcholy)?
20. 4. Násobení čísel na mnoho způsobů, algoritmy se složitostí Θ(nlog35) a Θ(n1+ε). Může být umocňování rychlejší než násobení? Propojování drátů.
27. 4. Od náhodných bitů k náhodným číslům. Míchání karet aneb náhodné permutace. Sumy naše vezdejší. Nejbližší dvojice bodů v rovině.
4. 5. K-tý nejmenší prvek na mnoho způsobů. Jak dopadnou trojice a jak sedmice? Přihrádkové třídění v poli, třídění řetězců pro malé i velké abecedy.
11. 5. Přehlídka stromových struktur a jejich srovnání. Operace s vyhledávacími stromy: následníci, intervalové dotazy apod. Ochutnávka amortizované složitosti.
18. 5. Otázky a odpovědi. Příklady téměř zkouškové. Cesty dané délky ve stromech.

Zápočet

Zápočet je za vypracování zápočtové práce. Ta by měla pojednávat o řešení nějakého (nepříliš) jednoduchého algoritmického problému a měli byste v ní popsat problém, svůj algoritmus, rozebrat jeho časovou a paměťovou složitost a pokud není zjevné, že je algoritmus správný, dokázat ještě jeho správnost. Doporučuji vám (ale není to povinné), abyste si také algoritmus zkusili naprogramovat, mnoho potřebných detailů si uvědomíte až při tom. Za používání cizích myšlenek (vět či algoritmů z knížek, materiálů z přednášky atd.) se není třeba stydět, pokud je budete náležitě citovat.

Než začnete práci psát, domluvte se se mnou, prosím, na tématu, nejlépe mailem.

Svou práci mi buďto přineste na papíře, nebo mi ji pošlete e-mailem. V takovém případě ovšem, prosím, použijte nějaký otevřený formát (tím myslím formát, jehož struktura je všeobecně známa) – to je třeba čistý text, PostScript, PDF nebo TeX. Tuto podmínku naopak nesplňuje Microsoft Word ani RTF.

Inspirace pro zápočtovou práci

Stránku spravuje Martin Mareš