Datové struktury I - cvičení

Tato stránka je věnována cvičení z datových struktur I (NTIN066) k přednášce Jiřího Finka.
Cvičení se konají každé pondělí od 9:00 v S10 a každý pátek od 12:20 v S1 na Malé Straně.
Pokud máte nějaký dotaz nebo chcete něco konzultovat, napište mi e-mail na adresu chmel(zavinutá ryba)iuuk.mff.cuni.cz.
Účast na cvičení je dobrovolná (ale doporučená). Budeme rozebírat řešení domácích úkolů z předchozího týdne, otázky k tématům z přednášky a pokud zbyde čas, budeme řešit teoretické úlohy pro lepší porozumění.


Podmínky získání zápočtu

Pro zápočet je potřeba získat alespoň 75 bodů, přičemž celkem bude možné získat alespoň 115 bodů.

Domácí úkoly

Přesnější pravidla naleznete zde (pozor, toto jsou loňská pravidla, oproti letošku se liší počtem zadaných úloh a bodů potřebných na zápočet).

Krátká verze: po téměř každém cvičení bude zadán jeden domácí úkol, celkem garantujeme, že bude alespoň sedm programovacích (implementačních) úkolů po 10 bodech, a alespoň tři experimentální úlohy po 15 bodech. Na řešení každého úkolu budou dva týdny a všechny úkoly se odevzdávají výhradně přes ReCodEx. Zadání můžete nalézt na Gitlabu KAMu zde.

Co jsme dělali

DatumObsah
30. 9. 2024Úvod, opakování z bakalářského studia: Dijkstra a haldy, asymptotika a binární vyhledávací stromy. Úlohy na cvičení. Řešení úloh ze cvik.

Začali jsme s úvodem do předmětu a pravidly zápočtu. Potom jsme řešili opakovací úlohy, vesměs jsme zvládli úlohy 1 a 2, na tabuli jsem poté naznačil řešení úloh 3-5.

7. 10. 2024Amortizace. Úlohy na cvičení. Řešení úloh ze cvik.

Prvně jsme si zadali úkol tree_successor s deadlinem 20. 10. 2024 ve 23:59. Potom jsme se trochu pobavili o amortizaci, a řešili jsme rúzné úlohy. Celkem jsme po skupinkách stihli úlohy 1-3, a já jsem na tabuli naznačil část řešení úloh 4 a 5.

14. 10. 2024Líně vyvažované stromy a úvod do splay stromů. Úlohy na cvičení. Shrnutí splay stromů Ondry Mičky, vizualizace, řešení úloh ze cvik.

Začali jsme se zadáním úkolu splay_operation s deadlinem 27. 10. 2024 ve 23:59. Pak jsme se věnovali líně vyvažovaným stromům a splay stromům. Připomněli jsme si dvojrotace, a jak se má splay implementovat. Při řešení úloh jsme pak zjistili jak zkonstruovat staticky optimální strom v kubickém čase, jak se chová splay při hledání v rostoucím pořadí, a proč splayujeme a neprovádíme jenom naivní rotace. Úlohy 1-2 jste vyřešili sami, na tabuli jsem pak ukázal úlohy 3-4 a nakonec jsem se krátce zmínil o nějakých vlastnostech splay stromů a dynamické optimalitě. Úlohu 5 si necháme na příště, na zbývající úlohy se případně podívejte sami.

21. 10. 2024Pokračování splay stromů. Úlohy na cvičení. Řešení úloh ze cvik.

Začali jsme se zadáním úkolu splay_experiment s deadlinem 3. 11. 2024 ve 23:59. Jako zajímavé zdroje pro ilustraci toho, co přibližně čekáme, můžou sloužit ukázkové řešení "nultého" úkolu a povídání o domácích úkolech od cvičících pro minulou akreditaci. Na druhou stranu, ne všechno je nutně relevantní: protože měříme rotace, není třeba řešit konfiguraci vašeho počítače, a taky není potřeba řešit přesný odhad multiplikativních konstant. U povídání jsou asi nejzajímavější kapitolky Měření, Tvorba grafů a Popis výsledků (stránky 6-8).

Potom jste řešili úlohy, první úlohu jste lehce prošli, a zbytek času jsme strávili s druhou úlohou, kterou jsem pak také vyřešil na tabuli.

28. 10. 2024Cvičení se nekoná: Den vzniku samostatného československého státu
4. 11. 2024(a,b)-stromy. Úlohy na cvičení. Vizualizace (a,b)-stromů, řešení úloh ze cvik.

Zadali jsme si úkol ab_tree s deadlinem 17. 11. 2024 ve 23:59 a poté jsme se na (a,b)-stromy podívali. Naším cílem byly hlavně první tři úlohy s tím, že druhou a třetí jsme pak prodiskutovali na tabuli.

11. 11. 2024Cache-oblivious a cache-aware algoritmy. Úlohy na cvičení. Řešení úloh ze cvik.

Zadali jsme úkol ab_experiment s deadlinem 24. 11. 2024 ve 23:59. Dále jsme se zabývali cache-oblivious a cache-aware algoritmy - první dvě úlohy zvládly všechny skupiny, třetí a čtvrtou jsem naznačil na tabuli.

18. 11. 2024Cachování a příprava na hashování. Úlohy na cvičení. Řešení úloh ze cvik.

Zadali jsme úkol matrix_transpose s deadlinem 1. 12. 2024 ve 23:59, prošli jsme rychle úlohu ab_tree, a pak jsme vyřešili vlastně všechny úlohy, takže jsme prošli cachování, a zopakovali jsme si pravděpodobnost pro hashování na příští týden. Také jsem připomněl, že přiští týden za mě zaskočí Pavel Veselý.

25. 11. 2024Úvod do hashování, systémů a vlastností hashovacích funkcí s Pavlem Veselým. Úlohy na cvičení.

Tentokrát mě nahradil Pavel Veselý. Zadali jste se úkol matrix_experiment s deadlinem 8. 12. 2024 ve 23:59, řekli jste si něco k ab_experiment, a poté jste zkoumali systémy hashovacích funkcí, hlavně jste se zabývali nezávislostí a univerzalitou.

2. 12. 2024Hashovací systémy, tabulkové a kukaččí hashování. Úlohy na cvičení. Řešení úloh ze cvik.

Zadali jsme úkol cuckoo_hash s deadlinem 15. 12. 2024 ve 23:59, řekl jsem pár drobností k úloze matrix_transpose, a potom jsme se ponořili do tabulkového a kukaččího hashování, s čímž jsme strávili zbytek hodiny. Všichni zvládli úlohy 1-3, čtvrtou úlohu jsem poté naznačil na tabuli.

9. 12. 2024Pokračování hashování, Bloomovy filtry. Úlohy na cvičení. Řešení úloh ze cvik.

Zadali jsme úkol find_duplicates s deadlinem 5. 1. 2025 ve 23:59, zmínil jsem existenci Bloomových filtrů a rolling hashe, a pak jsme si naposledy hráli s hashováním. Prošli jsme úlohy 1-4.

16. 12. 2024Sufixové a LCP pole. Úlohy na cvičení. Řešení úloh ze cvik.

Zadali jsme si poslední úkol kgrams s deadlinem 31. 1. 2025 ve 23:59, a pak jsme se zabývali sufixovými a LCP poli. Stihnuli jsme úlohy 1-3.

6. 1. 2025Geometrické a paralelní datové struktury. Úlohy na cvičení. Řešení úloh ze cvik.

Podívali jsme se na geometrické a paralelní datové struktury, hlavně jsme se bavili o k-d stromech. Prošli jsme úlohy 1-2, 4 a 7.

DatumObsah
4. 10. 2024Úvod, opakování z bakalářského studia: Dijkstra a haldy, asymptotika a binární vyhledávací stromy. Úlohy na cvičení. Řešení úloh ze cvik.

Začali jsme s úvodem do předmětu a pravidly zápočtu. Dále jsme si zadali úkol tree_successor s deadlinem 17. 10. 2024 ve 23:59. Potom jsme řešili opakovací úlohy, vesměs jsme zvládli úlohy 1-3, na tabuli jsem poté naznačil řešení úloh 4-5, řešení úlohy 6 jsem naznačil vyloženě z rychlíku.

11. 10. 2024Amortizace. Úlohy na cvičení. Řešení úloh ze cvik.

Podívali jsme se na amortizaci, zopakovali jsme si tři způsoby amortizace, a nakonec jsme řešili úlohy. První tři jsme si řekli, úlohy 4-5 jsem odbyl jen pár slovy.

18. 10. 2024Líně vyvažované stromy a úvod do splay stromů. Úlohy na cvičení. Shrnutí splay stromů Ondry Mičky, vizualizace, řešení úloh ze cvik.

Začali jsme se zadáním úkolu splay_operation s deadlinem 27. 10. 2024 ve 23:59. Pak jsme se věnovali líně vyvažovaným stromům a splay stromům. Připomněli jsme si dvojrotace, a jak se má splay implementovat. Při řešení úloh jsme pak zjistili jak zkonstruovat staticky optimální strom v kubickém čase, jak se chová splay při hledání v rostoucím pořadí, a proč splayujeme a neprovádíme jenom naivní rotace. Úlohy 1-2 jste vyřešili sami, na tabuli jsem pak ukázal úlohy 3-4, kvadratické řešení úlohy 1 a nakonec jsem se krátce zmínil o nějakých vlastnostech splay stromů a dynamické optimalitě. Úlohu 5 si necháváme na příště, na zbývající úlohy se případně podívejte sami.

25. 10. 2024Pokračování splay stromů. Úlohy na cvičení. Řešení úloh ze cvik.

Začali jsme se zadáním úkolu splay_experiment s deadlinem 7. 11. 2024 ve 23:59. Jako zajímavé zdroje pro ilustraci toho, co přibližně čekáme, můžou sloužit ukázkové řešení "nultého" úkolu a povídání o domácích úkolech od cvičících pro minulou akreditaci. Na druhou stranu, ne všechno je nutně relevantní: protože měříme rotace, není třeba řešit konfiguraci vašeho počítače, a taky není potřeba řešit přesný odhad multiplikativních konstant. U povídání jsou asi nejzajímavější kapitolky Měření, Tvorba grafů a Popis výsledků (stránky 6-8). Také jsem zmínil pár vět, které se můžou při řešení experimentu hodit.

Potom jste řešili úlohy, prošli jsme první dvě.

1. 11. 2024(a,b)-stromy. Úlohy na cvičení. Vizualizace (a,b)-stromů, řešení úloh ze cvik.

Zadali jsme si úkol ab_tree s deadlinem 14. 11. 2024 ve 23:59 a poté jsme se na (a,b)-stromy podívali. Řešili jsme hlavně na první tři úlohy s tím, že druhou a třetí jsme prodiskutovali na tabuli, a čtvrtou jsem poté lehce naznačil.

8. 11. 2024Cache-oblivious a cache-aware algoritmy. Úlohy na cvičení. Řešení úloh ze cvik.

Zadali jsme úkol ab_experiment s deadlinem 21. 11. 2024 ve 23:59. Dále jsme se zabývali cache-oblivious a cache-aware algoritmy - první dvě úlohy zvládly všechny skupiny, třetí a čtvrtou jsem naznačil na tabuli.

15. 11. 2024Cachování a příprava na hashování. Úlohy na cvičení. Řešení úloh ze cvik.

Zadali jsme úkol matrix_transpose s deadlinem 28. 11. 2024 ve 23:59, úlohu ab_tree jsem lehce okomentoval, a pak jsme vyřešili vlastně všechny úlohy kromě šestky, kterou jsem nestihnul ukázat na tabuli, takže jsme prošli cachování, a zopakovali jsme si pravděpodobnost pro hashování na příští týden.

22. 11. 2024Úvod do hashování, systémů a vlastností hashovacích funkcí. Úlohy na cvičení. Řešení úloh ze cvik.

Zadali jsme úkol matrix_experiment s deadlinem 5. 12. 2024 ve 23:59 a něco jsme si řekli k ab_experimentu. Pak jsme se zabývali hlavně nezávislostí a univerzalitou hashovacích systémů a zmínil jsem, jak funguje tabulkové hashování, stihnuli jsme první tři úlohy.

29. 11. 2024Cvičení odpadá.
6. 12. 2024Hashovací systémy, tabulkové a kukaččí hashování. Úlohy na cvičení. Řešení úloh ze cvik.

Zadali jsme úkol cuckoo_hash s deadlinem 19. 12. 2024 ve 23:59 a řekl jsem pár vět k matrix_experimentu. Pak jsme se zabývali kukačkovým hashováním a tabulkovým hashováním, stihnuli jsme první tři úlohy, a čtvrtou jsem ještě naznačil na tabuli.

13. 12. 2024Pokračování hashování, Bloomovy filtry. Úlohy na cvičení. Řešení úloh ze cvik.

Zadali jsme úkol find_duplicates s deadlinem 9. 1. 2025 ve 23:59, zmínil jsem existenci Bloomových filtrů a rolling hashe, a pak jsme si naposledy hráli s hashováním. Prošli jsme úlohy 1-4.

20. 12. 2024Sufixové a LCP pole. Úlohy na cvičení. Řešení úloh ze cvik.

Zadali jsme si poslední úkol kgrams s deadlinem 31. 1. 2025 ve 23:59, a pak jsme se zabývali sufixovými a LCP poli. Stihnuli jsme vánočně vyřešit úlohy 1-3.

10. 1. 2025Geometrické a paralelní datové struktury. Úlohy na cvičení. Řešení úloh ze cvik.

Podívali jsme se na geometrické a paralelní datové struktury, hlavně jsme se bavili o k-d stromech. Nakonec jsme si ještě trochu něco řekli o online a streamovacích algoritmech. Prošli jsme úlohy 1-2, 4 a 7.

Zajímavé odkazy