Datové struktury I
V zimním semestru 2019/2020 přednáším Datové struktury I [NTIN066]. Přednášky se konají v pondělí od 10:40 v S9. Anglická verze předmětu se bude přednášet až v letním semestru.
Pokud chcete cokoliv konzultovat, napište mi prosím e-mail na mares+ds@kam.mff.cuni.cz a domluvíme se.
Přečtěte si prosím pravidla hry.
Pokud se vám datové struktury líbí, přijďte také na cvičení z Analýzy datových struktur.
datum | co jsme dělali | zdroje |
---|---|---|
7. 10. | Co je to datová struktura – rozhraní/implementace, statičnost/dynamičnost, výpočetní model. Příklady rozhraní: fronta, množina, uspořádaná množina, slovník. Různé způsoby amortizované analýzy: agregace, účtování, penízky, potenciál. Příklady amortizace: nafukovací pole (se zvětšováním a zmenšováním), binární počítadlo. | [L01] [P9.1–9.3] |
14. 10. | Líně vyvažovaná varianta BB[α] stromů. Splay stromy: Operace Splay a její amortizovaná analýza. Implementace operací Find, Insert a Delete pomocí Splay. | [L02] [P9.4–9.5] [ST] |
21. 10. | Splay stromy: důkaz věty o amortizované ceně Splaye. Zmínka o dalších vlastnostech: sekvenční průchod, statická optimalita. (a,b)-stromy: definice, logaritmická hloubka, Find, Insert a Delete, volba parametrů. | [L02] [P9.5] [ST] [L03] [P8.3] |
28. 10. | Přednáška se nekoná: Slavíme státní narozeniny. Za domácí úkol se naučte věty o amortizovaném chování (a,2a-1) a (a,2a)-stromů z Lecture Notes. | [L03] |
4. 11. | Haldy: rozhraní hald, d-regulární haldy, použití v Dijkstrově algoritmu. Halda binomiální, líná binomiální a Fibonacciho. | [L04] [P4.2, 6.2, 18] |
11. 11. | Cache-oblivious algoritmy: Příklady rychlosti přístupu do paměti, zjednodušený popis hardwarové keše, množinová asociativita a aliasing. Teoretické modely: I/O, cache-aware, cache-oblivious. Scanování pole. Třídění: Mergesort, vícecestný Mergesort, zmínka o Funnelsortu a dolním odhadu. Transpozice matice: dlaždice a cache-aware algoritmus. | [L05] [CO] |
18. 11. | Cache-oblivious algoritmy: Transpozice matice. Model kontra realita – Sleatorova-Tarjanova věta o kompetitivitě LRU. Hešování: c-univerzální systémy funkcí, očekávaná délka řetězce. | [L05] [CO] [ST2] [L06] [P11.3] [P11.5] |
25. 11. | Hešování: c-univerzální a k-nezávislé systémy funkcí a jejich konstrukce. Systémy lineárních funkcí: 1-univerzalita, 2-nezávislost. Obecné lemma o nezávislosti modulo m. Další systémy: k-nezávislý systém polynomů, multiply-shift. | [L06] [P11.5] [T2] |
2. 12. | Tabelační hešování. Kukaččí hešování. Hešování s lineárním přidáváním a jeho analýza. | [L06] [KS] [T] [T2] |
9. 12. | Bloomovy filtry: 1-pásmové, k-pásmové, počítací. Hešování vektorů a řetězců: skalární součiny, okénkové hešování z polynomů, obecné lemma o skládání systémů funkcí (bez důkazu). | [L06] [T2] |
16. 12. | Vícerozměrné datové struktury: intervalové dotazy na binárních stromech, k-d stromy, intervalové stromy (range trees), jejich dynamizace částečnou rekonstrukcí a zrychlení pomocí kaskádování. | [L07] [G] [M7.2.1] |
6. 1. | Datové struktury pro řetězce: suffixové pole, rankové pole, LCP pole (nejdelší společné prefixy). Aplikace: hledání podřetězců, nejdelší opakující se podřetězec, nejdelší společný podřetězec dvou řetězců. Konstrukce LCP pole v lineárním čase (Kasaiův algoritmus). Konstrukce suffixového pole v čase O(n log n) zdvojováním. | [L08] |
Cvičení
Cvičení se konají každý týden, zapište se na jedno z nich v SISu. Primárně mají charakter konzultace, proto je na ně v rozvrhu vyhrazena dvouhodinovka, přestože oficiálně mají formát 0/1.
Zadání domácích úkolů najdete v ReCodExu, řešení se odevzdávají tamtéž. Založte si prosím účet a přihlašte se do skupiny k vašemu cvičení. Další materiály k úkolům (zejména zdrojové kódy) najdete v gitovém repozitáři. Také si je můžete prohlédnout na webu.
Zkoušky
Předtermín se koná 17. prosince od 9:30 v S322. Přihlašujte se prosím e-mailem.
Podívejte se na podrobné požadavky ke zkoušce.
Ke zkoušce není potřeba zápočet.
Materiály
- Stránka loňské přednášky
- Nápověda k programovacím jazykům: C++ tutorial, C++ reference, Python doc.
- [CO] Erik Demaine: Cache-Oblivious Algorithms and Data Structures
- [E] Erik Demaine: přednáška Advanced Data Structures z MIT
- [G] Mark de Berg, Otfried Cheong, Marc van Kreveld, Mark Overmars: Computational Geometry – Algorithms and Applications. ISBN 978-3-540-77973-5.
- [H] Handbook of Data Structures and Applications (dostupné online ze sítě MFF)
- [KS] Keith Schwarz: Slides on Linear Probing (přednáška na Stanford University)
- [L] Martin Mareš: Lecture notes on data structures
- [M] Kurt Mehlhorn: Data Structures and Algorithms (digitální verze knihy)
- [P] Martin Mareš, Tomáš Valla: Průvodce labyrintem algoritmů, CZ.NIC, 2017
- [ST] Sleator, Tarjan: Self-Adjusting Binary Search Trees, Journal of the ACM, 1985
- [ST2] Sleator, Tarjan: Amortized Efficiency of List Update and Paging Rules, Communicatons of the ACM, 1985
- [T] Mikkel Thorup: Lecture Notes on Linear Probing with 5-Independent Hashing
- [T2] Mikkel Thorup: High Speed Hashing for Integers and Strings
- Navazující předměty: Datové struktury 2, Pokročilé datové struktury