Algoritmy a datové struktury 1
Přednáška z Algoritmů a datových struktur 1 [NTIN060] se koná v LS 2022/2023 v pondělky od 10:40 v N1.
Kdybyste čemukoliv nerozuměli, rád si s vámi domluvím konzultaci. Ozvěte se mi prosím na adresu mares+ads@kam.mff.cuni.cz.
Co se přednášelo
datum | téma | video |
---|---|---|
13. 2. |
Pokus o definici algoritmu. Výpočetní model RAM:
paměť, aritmetické a řídicí instrukce.
Čas a prostor konkrétního výpočtu (různé varianty: jednotková cena, logaritmická
cena, omezený rozsah čísel), časová a prostorová složitost algoritmu.
Programování na RAMu a počítání složitosti: příklad s bublinkovým tříděním.
Připomenutí asymptotické notace (O, Ω, Θ).
Pokud vám nefungují videa, vypněte si AdBlock. Jedno z jeho
pravidel zakazuje všechna URL s podřetězcem /ads1/ :D
| video |
20. 2. | Přednáška se nekoná, místo toho bude dvojpřednáška z Programování 2. Naopak 6. 3. budou dvě přednášky z ADS1. | |
27. 2. | Prohledávání grafu do hloubky (DFS). Klasifikace hran v DFS (stromové, zpětné, dopředné, příčné). Hledání mostů. | video |
6. 3. 9:00 | Aplikace DFS: Detekce cyklů a topologické uspořádání. Algoritmy pro acyklické grafy (počet cest, plánování činností). Rozklad na komponenty silné souvislosti. | video |
6. 3. 10:40 | Dokončení silné souvislosti. Nejkratší cesty v ohodnocených grafech: trojúhelníková nerovnost pro vzdálenosti, nejkratší cesta versus nejkratší sled, problémy se zápornými cykly. Odvození Dijkstrova algoritmu z BFS pomocí podrozdělování hran a „budíků“. Dijkstrův algoritmus, implementace pomocí haldy. | video |
13. 3. | Nejkratší cesty: haldy pro Dijkstrův algoritmus (binární a d-regulární). Princip relaxace a důkaz korektnosti Dijkstrova algoritmu. Bellmanův-Fordův algoritmus. Omlouvám se za nekvalitní zvuk v nahrávce, zlobil mikrofon. | video |
20. 3. | Problém minimální kostry: Jarníkův a Borůvkův algoritmus, lemma o řezech. Jednoznačnost minimální kostry a její určenost uspořádáním hran. Kruskalův algoritmus, udržování komponent souvislosti a Union-Find problem. | video |
27. 3. | Datové struktury: obecný úvod, problém reprezentace slovníku a množiny. Binární vyhledávací stromy a operace s nimi. Dokonale vyvážené stromy. Hloubkově vyvážené (AVL) stromy: definice a důkaz logaritmické hloubky, nástin vyvažování pomocí rotací. | video |
3. 4. 9:00 | AVL stromy: vyvažování při Insertu a Deletu. (a,b)-stromy: definice, odhad hloubky. | video |
3. 4. 10:40 | (a,b)-stromy: Insert a Delete, nastavení parametrů. Zmínka o červeno-černých stromech. Reprezentace řetězců pomocí písmenkových stromů (trie), použití pro čísla. Hešování: přihrádky s řetězci prvků, volba hešovací funkce, c-univerzální systémy funkcí a jejich použití. Přečtěte si v Průvodci: Konstrukce 1-univerzálního systému pomocí skalárního součinu (oddíl 11.5). | video |
10. 4. | Přednáška se nekoná: Ēostre, Paasfees, Великден, Ülestõusmispühad, Πάσχα, Páskar, 復活祭, Pace. | |
17. 4. | Přednáška se nekoná, místo toho bude dvojpřednáška z Programování 2. | |
24. 4. | Ještě k hešování: dynamické rozšiřování tabulky a jeho amortizace. Metoda Rozděl a panuj: třídění sléváním (Mergesort), násobení n-ciferných čísel v čase O(nlog23), obecná technika rozboru rekurzivních algoritmů pomocí stromů rekurze. | video |
1. 5. | Přednáška se nekoná: Státní svátek. | |
8. 5. | Přednáška se nekoná: Státní svátek. | |
15. 5. | Rozděl a panuj: věta o časové složitosti rekurzivních algoritmů (kuchařka alias Master theorem). Strassenovo násobení matic (vzorce). Hledání k-tého nejmenšího prvku a různé způsoby volby pivota. Randomizace a průměrná časová složitost. QuickSort: princip, analýza průměrné složitosti. Lineární algoritmus na výběr k-tého nejmenšího prvku (trik s pěticemi). | video |
22. 5. | Dynamické programování: Fibonacciho čísla, nejdelší rostoucí podposloupnost, editační vzdálenost, Floydův-Warshallův algoritmus pro výpočet matice vzdáleností v grafu. | video |
Cvičení
Existuje jen jedna česká paralelka přednášky, můžete si tedy vybrat libovolné cvičení.
Studentům kombinovaného studia doporučuji vybrat si libovolného cvičícího a domluvit se s ním na získání zápočtu za domácí úkoly. Účast na cvičení není nutná, ale hodí se alespoň občas se tam stavit, abyste měli přehled, co se dělá. Za mnou samozřejmě můžete přijít na konzultaci, domluvte se e-mailem.
Zkoušky
Předtermín se koná 22. 5. (poslední den semestru). Pozor, zkouším i látku z poslední přednášky; měla by nicméně být pokryta doporučenou literaturou.
Zkoušet budu každý týden zkouškového období. Termíny jsou vypsány v SISu, zapisujte se, prosím, tam. Kdybyste potřebovali vyzkoušet během prázdnin nebo v září, je to možné, dejte mi vědět.
Zkouška bude ústní s písemnou přípravou: Na začátku zadám otázky. Vy si odpovědi rozmyslíte (času bude dost) a sepíšete. Pak si o nich spolu popovídáme a na základě toho dostanete buďto známku, nebo nápovědu k další práci. Cílem je, aby každý vyřešil všechno, a známka se bude odvíjet od toho, jak moc jsem vám musel napovídat :)
Ke zkoušce je potřeba:
- Znalost teorie z přednášky – viz požadavky.
- Schopnost řešit algoritmické úlohy podobné těm, jež jsme dělali na cvičení.
- Zápočet není povinné získat předem, ale je to doporučené.
- Doporučuji klidnou mysl a dobrou náladu :)
Literatura
- Martin Mareš, Tomáš Valla: Průvodce labyrintem algoritmů
- Videozáznamy z roku 2021
- Mé minulé přednášky z let 2021, 2018, 2017, 2015, 2013, 2011, 2009, 2007.
- Dasgupta, Papadimitriou, Vazirani: Algorithms (velice pěkná knížka pokrývající většinu přednášky, navíc dostupná online)
- Programátorská kuchařka KSP (nepříliš formální textíky o různých algoritmech)
- Cormen, Leiserson, Rivest, Stein: Introduction to Algorithms (2nd Edition), Mc Graw Hill 2001 (vpravdě monumentální dílo)
Ostatní zajímavé knihy:
- Jiří Demel: Grafy a jejich aplikace (grafové algoritmy)
- Martin Mareš: Krajinou grafových algoritmů (lahůdky pro pokročilé a zvídavé)
- Matoušek, Nešetřil: Kapitoly z diskrétní matematiky (kombinatorické pozadí, také úvod do pravděpodobnosti)
- Pavel Töpfer: Algoritmy a programovací techniky (pěkná úvodní knížka)
Sbírky příkladů:
- Martin Mareš, Pavel Töpfer: Korespondeční seminář z programování 1987–1998
- Archiv KSP a MO-P na webu
- Ivan Libicher, Pavel Töpfer: Od problému k algoritmu a programu
Různé:
- Animovaný výklad algoritmů v Algovision Luďka Kučery
- Robert Sedgewick: Left-Leaning Red-Black Trees (varianta červeno-černých stromů zmíněná na přednášce)