Datové struktury 1

Vítejte na stránkách cvičení k předmětu Datové struktury I, které přednáší Michal Koucký. Jsme rozvrženi na pondělí 10:40 v místnosti S7 (plánek budovy).

Pokud máte pocit, že

napište mi (tung@kam.mff.cuni.cz) dříve, než bude pozdě. Sedneme si na to společně (v kyberprostoru je-li třeba) a nějak to vyřešíme.

Účast na cvičení je dobrovolná. Většinou budeme rozebírat, jak se měl řešit domácí úkol z předchozího týdne, jaké byly typické chyby, atd. Také si občas vyřešíme nějakou teoretickou úlohu (rozumějte důkazy), která by měla prohloubit Vaše znalosti.

Jak získat zápočet

Tyto informace už mnohem lépe než já sepsal Ondra Mička. Tl;dr každý týden budete něco programovat. Pravidla naleznete taktéž na stránkách Ondry Mičky.

Obsah cvičení

Třinácté cvičení -
Pokusili jsme se pochopit první tři sekce z paperu o ledovcovém hashování.
Dvanácté cvičení -
Konstrukce LCP pole. Worst-case dotaz pro kd-stromy. Zrychlení intervalového dotazu o jednu mocninu logaritmu.
Jedenácté cvičení -
Optimální počet hashovacích funkcí pro bloom filter. Jak zrychlit vyhledávání vzorku v suffixovém poli. Range minimum query (RMQ).
Desáté cvičení -
Hashování řetězců. Rabin-Karpův algoritmus.
Deváté cvičení -
Vlastnosti systémů nezávislých či univerzálních hashovacích funkci.
Osmé cvičení -
Perfektní hashování. Narozeninový paradox. Kukaččí hashování.
Sedmé cvičení -
Pokusil jsem se vysvětlit, proč je LRU špatná strategie, ledaže mu dáme větší cache než optimálnímu algoritmu (tj. Sleator-Tarjanova věta).
Šesté cvičení -
Pověděli jsme si, jak udělat cache-oblivious analýzu MergeSortu.
Páté cvičení -
Je velmi nepovinné, neboť odpadá předcházející přednáška. Neplánuji říct nic, co byste nevěděli.
Čtvrté cvičení -
Vysvětlili jsme si alternativní definici (a,b)-stromů, které si ukládají klíče ve vnitřních vrcholech a listy mají prázdné. Tuto implementaci budete potřebovat v domácích úkolech souvisejících s (a,b)-stromy. Více informací najdete ve skriptech.

Také jsme si pověděli o častých chybách v domácím úkolu splay_operation.

Třetí cvičení -
Pověděli jsme si o alternativní implementaci vkládání a mazání prvků ze Splay stromu. Více informací najdete ve skriptech na straně 9 v sekci Splitting and joining.
Druhé cvičení -
Vysvětlili jsme si, co je to splay strom a proč je potřeba dělat dvojté rotace.
První cvičení -
Vysvětlili jsme si pravidla pro získání zápočtu. Řešili jsme následující úlohy: