Algoritmy a datové struktury I
Přednáška z Algoritmů a datových struktur I [NTIN060] se koná v LS 2010/2011 ve čtvrtky od 14:00 v S3.
Druhou paralelku přednáší Jan Hric.
Co se přednášelo
datum | téma | zápis |
---|---|---|
24. 2. | Úvodní příklad s reportáží (nejdelší rostoucí podposloupnost) a přehlídka způsobů, jak ho vyřešit. Pokus o definici algoritmu. Výpočetní model RAM, časová a paměťová složitost. | 2011-05-31 |
3. 3. | Programování na RAMu a počítání složitosti. Srovnání růstu funkcí (obrázky). Asymptotická notace (O, Ω, Θ). Grafové algoritmy: Prohledávání do šířky (BFS), souvislost s nejkratšími cestami. | 2011-05-23 |
10. 3. | Reprezentace grafů a její vliv na časovou složitost BFS. Prohledávání do hloubky (DFS). Klasifikace hran v DFS (stromové, zpětné, dopředné, příčné). Použití DFS na detekci cyklů a topologické uspořádání. | 2011-05-24 |
17. 3. | Algoritmy pro acyklické grafy (hledání nejdelších cest a kritických hran). Další aplikace DFS: hledaní mostů, rozklad na komponenty silné souvislosti. | 2011-06-21 |
24. 3. | Nejkratší cesty v ohodnocených grafech: trojúhelníková nerovnost pro vzdálenosti (neplatí v grafech se zápornými cykly), nejkratší cesta versus nejkratší sled. Algoritmus pro nejkratší sledy dané délky. Bellmanův-Fordův algoritmus. Obecný průzkumnický algoritmus a jeho vlastnosti. | 2011-07-31 |
31. 3. | Přednáška se nekoná (je místo ní Matematická analýza II Roberta Šámala; naopak v pátek 27. 5. bude ADS1 místo analýzy). | — |
7. 4. | Nejkratší cesty: Dijkstrův algoritmus a dva důkazy jeho správnosti (přes průzkumnický algoritmus a pomocí podrozdělování a "budíků"). Implementace pomocí různých hald (binárních a k-regulárních). Floydův-Warshallův algoritmus pro výpočet matice vzdáleností. | 2011-05-24 (nehotové) |
14. 4. | 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 hladový algoritmus, udržování komponent souvislosti a Union-Find problem. | 2011-05-24 |
21. 4. | 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 a dolní odhad složitosti operací. Hloubkově vyvážené (AVL) stromy: definice, důkaz jejich logaritmické hloubky. | 2011-05-23 |
28. 4. | Vyvažování AVL stromů pomocí rotací. (a,b)-stromy: definice, odhad hloubky, operace. | 2011-05-23 |
5. 5. | Pozor! Přednáška odpadá. Místo ní bude Programování 2 kolegy Töpfera, naopak 12. 5. bude místo P2 další přednáška z ADS1. | — |
12. 5. | Vkládání do (a,b)-stromu štěpením shora dolů. Červeno-černé stromy: definice, isomorfismus s (2,4)-stromy, operace Insert. Reprezentace řetězců pomocí písmenkových stromů (trie). Hashování: princip, volba hashovací funkce, c-universální systémy funkcí, dynamické rozšiřování tabulky, 1-universální systém založený na skalárním součinu. | 2011-05-30 (část) |
19. 5. | Metoda Rozděl a panuj: třídění sléváním (Mergesort), násobení n-ciferných čísel v čase O(nlog23). Věta o časové složitosti rekurzivních algoritmů (kuchařka alias Master theorem). | Knížka |
26. 5. | Hledání k-tého nejmenšího prvku a různé způsoby volby pivota. Randomizace a průměrná časová složitost. Lineární algoritmus na výběr k-tého nejmenšího prvku (trik s pěticemi). QuickSort: princip, analýza průměrné složitosti. | Knížka |
27. 5. | Implementace QuickSortu (slidy). Dolní odhad složitosti třidění pomocí porovnávání. Přihrádkové třídění (záznamy s klíči z malého universa, k-tice čísel, třídění po číslicích). Mapa třídicích algoritmů. Strassenovo násobení matic (vzorce), aplikace na dosažitelnost v grafech. | 2011-07-31 |
Cvičení
Stránka mého cvičení (Čt 9:00 v S7)
Další cvičení k této paralelce vedou Honza Bulánek, Zdeněk Dvořák, Vladan Majerech, Milan Straka, Tomáš Valla.
Studentům kombinovaného studia doporučuji přečíst si úvodní informace, 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á.
Zkoušky
Termíny jsou vypsány v SISu, zapisujte se, prosím, tam.
Ke zkoušce je potřeba:
- Zápočet
- Znalost teorie z přednášky (definice, algoritmy a jejich rozbor, věty a jejich důkazy)
- Umět řešit algoritmické úlohy podobné těm, jež jsme dělali na cvičení.
- Nezkouším Strassenovy vzorce, ale měli byste vědět, k čemu slouží.
- Doporučuji čistou mysl a dobrou náladu :)
Předtermíny: pátky 20. 5. a 27. 5. od 13:00. Můžete přijít bez zápočtu (v takovém případě známku zapíši, až budete zápočet mít).
Pár zkouškových termínů vypíši i v září, viz SIS.
Zápisky
K přednáškám průběžně vznikají zápisky – viz odkazy u jednotlivých přednášek, případně všechny zápisky v jednom souboru: verze 2011-07-31.
Kde chybí, zkuste nahlédnout do zápisků z let 2009 a 2007.
Zdrojové texty zápisků v TeXu bydlí (včetně kompletní historie) v Gitové repository na git://git.ucw.cz/ads1.git.
Velice děkuji Karlovi Královi, Janu Moskytovi Matějkovi, Pavlu Tauferovi a Pavolovi Rohárovi za péči, jíž jim věnovali, a také zapisovatelům z minulých let, z jejichž textů vycházíme.
Pozor: Ne všechny zápisky jsem už stihl detailně zkontrolovat, takže je možné, že se v nich tu a tam vyskytují drobné chyby. Pokud narazíte na něco podezřelého, pak si to buďto rozmyslete sami, nebo se mi ozvěte, ale rozhodně to, prosím, nepapouškujte u zkoušky.
Literatura
Knížku v češtině, která by pokrývala celou přednášku, bohužel dosud nikdo nenapsal (ale pracujeme na tom). Zatím mohu doporučit:
- Mé minulé přednášky z let 2009 a 2007 a zápisy z nich.
- Dasgupta, Papadimitriou, Vazirani: Algorithms (velice pěkná knížka pokrývající většinu přednášky, navíc dostupná online; kň)
- Kapitoly z připravované knížky
- Programátorská kuchařka KSP (nepříliš formální textíky o různých algoritmech)
- Jakub Černý: Základní grafové algoritmy (online)
- Cormen, Leiserson, Rivest, Stein: Introduction to Algorithms (2nd Edition), Mc Graw Hill 2001 (vpravdě monumentální dílo; kň)
(tituly označené "kň" jsou k dispozici v knihovně MFF)
Ostatní zajímavé knihy:
- Jiří Demel: Grafy a jejich aplikace (grafové algoritmy; kň)
- Luděk Kučera: Kombinatorické algoritmy (grafové algoritmy; kň)
- Martin Mareš: Krajinou grafových algoritmů (lahůdky pro pokročilé a zvídavé; kň)
- Matoušek, Nešetřil: Kapitoly z diskrétní matematiky (kombinatorické pozadí, také úvod do pravděpodobnosti; kň)
- Pavel Töpfer: Algoritmy a programovací techniky (moc pěkná úvodní knížka; kň)
Sbírky příkladů:
- Martin Mareš, Pavel Töpfer: Korespondeční seminář z programování 1987-1998 (kň)
- Archiv KSP a MO-P na webu.
- Ivan Libicher, Pavel Töpfer: Od problému k algoritmu a programu (kň)
Různé:
- Animovaný výklad algoritmů v Algovision kolegy Kučery.
- Applet demonstrující vyhledávací stromy
- Robert Sedgewick: Left-Leaning Red-Black Trees (varianta červeno-černých stromů zmíněná na přednášce)