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
něčemu nerozumíte,
nestíháte deadline (z jakéhokoliv důvodu),
nemáte dost bodů na zápočet,
nevíte něco, co byste měli vědět,
jsem Vám neřekl něco, co bych Vám měl říct,
bych měl něco (třeba sebe) vylepšit či změnit nebo
Vám něco jiného brání v získání jedničky z tohohle předmětu,
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.
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.
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:
Jak k natahovacímu poli přidat operaci mazání posledního prvku tak, aby taky mělo konstantní amortizovanou složitost?
Dokázali jsme, že binární čítačka s operací inkrementace má konstantní amortizovanou složitost.
Jak k natahovacímu poli přidat operaci přidání prvku na začátek, aby všechny operace měly konstantní amortizovanou složitost?
To jsme předvedli dvěma způsoby.
Jednak jsme to implementovali kruhovým polem (které jsme dále implementovali na obyčejném poli) a druhak jsme rozšířili natahovací pole z přednášky tak, aby mělo volné místo i na začátku.
Předvedli jsme si, že binární čítačka podporující operace inkrementace a dekrementace nemá konstantní amortizované složitosti.