Cvičení z Algoritmů a datových struktur v LS11/12

Cvičení probíhá každý čtvrtek od 14:00 v učebně S10.

Podmínky získání zápočtu

Zde je seznam inspirací pro zápočtovou práci, průběžně budou přibývat. Vlastní nápady jsou preferovány. V případě nejasnosti zadání či jiných dotazů se mi ozvěte.

Na cvičení ke mně jsou přihlášeni tito studenti:

Seznam studentů
JménoCodex 1Codex 2Zápočťák
Tereza Baumová
Jozef Bednár
Marek BeňovičOKOKAI pro piškvorky OK
Michal FilippiOKOKStrassen+srovnání s klasickým násobením OK
Ján HankoOKOKB-trees se Split a Merge OK
Martin HofmanOKOKloupežníci
David HonzátkoOKOKparalelní AVL stromy OK
Vítězslav ImrýšekOKOKeditační vzdálenost OK
Tomáš KrejčíOKOKmax. černá plocha v RLE zkompresené bitmapě
Petr KubátOKOKorientace grafu na silně souvislý OK
Kateřina LorenzováOKOKobecné (a,b)-stromy
Filip MatznerOKOKmaximální kvádr co neobsahuje zadané body OK
Zdeněk MihulaOKOK5-barvení RG v O(n) OK
Martin MilotaOKOKnejbližší body v rovině OK
Karel NovákOKOKsázení textu OK
Václav SoukupOKOKDijkstra na steroidech
Vít ŠeflOKOKredblack trees + srovnání OK

Pokud máte problém s tím, že jste zde uvedeni, dejte mi vědět a já vás odstraním.


Co se dělalo

23. února

Seznámení s podmínkami zápočtu. Úloha o vajíčku házeném z paneláku - 1 vajíčko, 2 vajíčka, a více, co za nejlepší řešení se dá dostat, jde to lépe než logaritmicky(?). Jak v setříděném poli najít rychle dvojici s určitým součtem. Hledání lokálního minima (do příště). Odhad složitosti Eratosthenova síta (příště). Maximální černý obdélník v bitmapě (příště).

1. března

Lokální minimum. Složitost Eratosthenova síta. Maximální černý obdélník. Souvislý podblok posloupnosti čísel s maximálním součtem (důkaz sami doma). Body na kružnici, existuje dvojice jejíž spojnice prochází středem? (doma)

8. března

Proč nejde insertovat do BVS rychleji nez O(log n). Nejbližší vyšší prvek v BVS a jak tím projít celý strom v O(n). Jak hledat v BVS k-tý nejmenší prvek. Intervalový strom (doděláme příště). Hledání nejdelší cesty v stromu (příště).

15. března

Dodělány intervalové stromy. Výraz v C, který otestuje mocninu dvojky. Nejdelší cesta ve stromu, včetně vážené varianty. Do příště: problém batohu, alternativní algoritmus na nejdelší cestu ve stromu, hledání max. nezávislé množiny ve stromu.

22. března

Cesta s maximálním součtem v trojúhelníku čísel. Nafukovací pole. Problém batohu. Maximální vybraná rostoucí podposloupnost a její varianty.

29. března

Úloha s chybějící dvojicí čísel. Join a split B-stromů, opakování algoritmů pro B-stromy. Několik těžkých úloh pro koumáky: kontrukce optimálních vyhledávacích stromů, rozdělení čísel do přihrádek aby nejtěžší přihrádka byla co nejlehčí, problém batohu pro dva a více batohů. Splay stromy.

5. dubna

Bubblesort a důkaz správnosti. Quicksort a jeho pravděpodobnostní analýza. Hledání k-tého nejmenšího prvku. Hledání sqrt(n) nejmenších prvků pole v čase O(n). Dotřídění pole kde prvek je do K pozic od svého místa. Pro koumáky: in-place merge s pomocnou pamětí O(sqrt(n)), nebo dokonce O(1). Prohledávní grafů a stavových prostorů do hloubky a šířky. Indiana Jones a mumie, cooperative hra dvou hráčů v bludišti.

12. dubna

Třídění N čísel z rozsahu 1..N^3. Topologické třídění a makefiles. Jednoznačnost topologického uspořádání. Kostra grafu. Povídání o DFS stromu. Neudělali jsme: Eulerovský tah. Počet cest v DAG. Maximální cesta ve váženém DAG. 6-barvení rovinného grafu. Dláždění grafu pomocí K_{1,2}. Testování 2-souvislosti.

19. dubna

N měst s max. 2 cestami doprava. 6-barvení rovinného grafu. Hledání eulerovského tahu. Maximální bílá podoblast v RLE zakompresené bitmapě (neuděláno). Odvození Dijkstrova algoritmu.

26. dubna

Další vlastnosti Dijkstry: proč nefunguje na záporných hranách, proč proč funguje když všechny záporné hrany sousedí se startem, více kritérií, ohodnocené vrcholy. Bellman-Fordův algoritmus, jak pomocí něho hledat záporné cykly. Floyd-Warshallův algoritmus. Výpočet Fibonacciho čísel pomocí matice. Do příště: jak u F-W i vypsat nejkratší cestu, cyklus ve směnární tabulce, jak najít vrchol ze kterého se lze dostat do celého grafu, Dijkstra pro "nejspolehlivější" cestu.

3. května

Výpis cestu u F-W. Cyklus ve směnární tabulce. Nejbezpečnější cesta pomocí Dijkstry. Nejkratší desítkové číslo se zakázanými ciframi dělitelné K. DFS strom a hledání mostů (hranová 2-souvislost). Do příště: jak najít vrchol ze kterého se lze dostat do celého (orientovaného) grafu.

10. května

Jak najít vrchol ze kterého se lze dostat do celého (orientovaného) grafu. Algoritmus rozkladu na silně souvislé komponenty. A je rostoucí pole čísel, jak najít i takové že A[i]=i? Může být výpočet x^2 efektivnější než x.y? Do příště: testování polosouvislosti.

17. května

Úloha s vkládáním krabic do sebe. Polosouvislost. Rozděl a panuj. Rychlé násobení dlouhých čísel. Dynamické programování a minimální triangulace N-úhelníka.

24. května

Minimální kostry. Hladový (Kruskalův) algoritmus, důkaz správnosti, logaritmické slévání komponent. Stručně Jarníkův a Borůvkův algoritmus. Jak hledat MK v grafu váženém vahami 1..K. Jaký vliv na MK má změna váhy jedné hrany? Jak hledat MK když určité vrcholy mají být listy. Na problém batohu nefunguje hladový algoritmus.