teaching:ads11314
Rozdíly
Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
Obě strany předchozí revizePředchozí verzeNásledující verze | Předchozí verze | ||
teaching:ads11314 [2014/03/08 18:04] – Martin Koutecky | teaching:ads11314 [2019/09/24 13:25] (aktuální) – Martin Koutecky | ||
---|---|---|---|
Řádek 11: | Řádek 11: | ||
* [[https:// | * [[https:// | ||
* [[http:// | * [[http:// | ||
+ | - Zaskakoval Tom Gavenčiak: | ||
+ | * Násobení dlouhých čísel v $n^{1.6}$ | ||
+ | * Hanojské věže - převod mezi dvěma konkrétními stavy pomocí rekurze: pokud je třeba přeložit největší disk, pak je potřeba přeskládat $k-1$ disků na třetí trn, a pak zas $k-1$ disků z třetího trnu do cílové pozice. | ||
+ | * Majorita posloupnosti čísel je prvek, který se vyskytuje na více než polovině pozic (takový nemusí existovat). Na majoritu jsme nejdřív vymysleli pár normálních algoritmů (AVL stromy, hashe) a pak analyzovali jednoduchý algoritmus v čase $O(n)$ a prostoru $O(1)$ registrů. | ||
+ | - {{: | ||
+ | - {{: | ||
+ | - DFS a BFS -- opakování, | ||
===== Domácí úkoly ===== | ===== Domácí úkoly ===== | ||
Řádek 38: | Řádek 45: | ||
Navrhněte algoritmus pro sloučení dvou AVL stromů $A$ a $B$, kde všechny prvky $A$ leží před všemi prvky $B$, do jediného AVL stromu $C$. Hledáme řešení s lepší složitostí než $O(min(|A|, | Navrhněte algoritmus pro sloučení dvou AVL stromů $A$ a $B$, kde všechny prvky $A$ leží před všemi prvky $B$, do jediného AVL stromu $C$. Hledáme řešení s lepší složitostí než $O(min(|A|, | ||
+ | |||
+ | |||
+ | **Úloha rekurence-1 (5b, plný počet do 3. 4.)** | ||
+ | |||
+ | Mějme rekurzivní algoritmus pracující v čase $T(n)$ na datech velikosti $n$. Jeho rekurence je popsána jako | ||
+ | $$T(n) = k T(n/k) + c k n.$$ | ||
+ | |||
+ | Odvoďte uzavřenou formulku pro funkci $T(n) = f(c,k,n)$ a zapište v $O$ notaci. | ||
+ | |||
+ | Kdybyste měli k dispozici tři verze tohoto algoritmu, pracující s $k = 2,3$ nebo $4$, který byste si vybrali? | ||
+ | |||
+ | **Úloha rekurence-2 (6b, plný počet do 3. 4.)** | ||
+ | |||
+ | Odvoďte uzavřenou formulku pro funkci | ||
+ | $$T(n) = \frac{2}{n}(T(0) + T(1) + \cdots + T(n − 1)) + c,$$ | ||
+ | kde $T(0) = 0$, a zapište ji v $O$ notaci. | ||
+ | |||
+ | **Úloha min-strom (8b, plný počet do 3. 4.)** | ||
+ | |||
+ | //Minimový binární strom// $M(a)$ pro zadanou posloupnost $a=(a_1\dots a_n)$ bez opakujících se prvků je definován takto: | ||
+ | |||
+ | Buď $a_i$ minimální prvek $a=(a_1\dots a_n)$; pak kořen $M(a)$ je $a_i$, jeho levý podstrom je $M(a_1\dots a_{i-1})$ a pravý podstrom $M(a_{i+1}\dots a_n)$. $M(\emptyset)$ je prázdný strom. | ||
+ | |||
+ | Pro zadanou posloupnost postavte minimový strom v čase $O(n)$. | ||
+ | |||
+ | **Úloha tridena-majorita (5+5b, plný počet do 3. 4.)** | ||
+ | Majorita posloupnosti je prvek, který se v ní vyskytuje na více než polovině pozic (posloupnost tedy má jednu nebo žádnou majoritu). Na cvičení jsme dělali příklad, kdy je úkolem najít majoritu, pokud existuje, s pamětí $O(1)$ (resp. $O(\log n)$ na RAMu) v čase $O(n)$. | ||
+ | |||
+ | Pokud je posloupnost setříděná, | ||
+ | |||
+ | Pro 5 bodů navíc dokažte, že rychleji toto není možné zjistit. Pro plný počet by tento důkaz měl být jasný a úplný. | ||
+ | |||
+ | **Úloha stříhání (7b, plný počet do 17. 4. 14:00)** | ||
+ | |||
+ | Mějme souvislý graf $G$. Jak graf ostříhat, tedy v jakém pořadí můžeme postupně (po jednom) smazat všechny jeho vrcholy tak, aby byl po každém kroku mazání graf stále souvislý? Miřte na složitost $O(n+m)$ nebo velmi blízkou a rozeberte, jestli je to možné udělat pro každý souvislý graf nebo ukažte nějaký, kde to nepůjde. | ||
+ | |||
+ | **Úloha zakázka (10b, plný počet do 17. 4. 14:00)** | ||
+ | |||
+ | Olga Opatrná najala Láďu Lenocha, aby ji pro daný neorientovaný graf $G=(V,E)$, vrchol $s\in V$ a // | ||
+ | |||
+ | Olga ale moc nevěří Láďově pečlivosti, | ||
+ | |||
+ | - $d(s)=0$ | ||
+ | - $\pi(s)=\mathrm{NIL}$ | ||
+ | - $\forall (u,v)\in E: d(v) \leq d(u) + w(u, v)$ | ||
+ | - $\forall v\in V: \pi(v)\neq\mathrm{NIL}\Rightarrow d(v) = d(\pi(v)) + w(\pi(v), | ||
+ | - $\forall v\in V, v\neq s: d(v) < \infty \Rightarrow \pi(v) \neq\mathrm{NIL}$ | ||
+ | | ||
+ | Jak může Láďa Olze dát data $d$ a $\pi$, která nejsou korektní podle Olžina zadání, ale splňují tyto ověřovací podmínky? Konkrétně: | ||
+ | |||
+ | **Úloha housenka (9b, plný počet do 24. 4. 14:00)** | ||
+ | Najděte v zadaném stromě housenku na co nejvíce vrcholech. < | ||
+ | na jejímž každém vrcholu jsou až čtyři listy (nožičky), | ||
+ | co nejdelší cesta, protože nejde o housenku co nejdelší, ale na největším počtu vrcholů (tedy i s nožičkami). Řešení by mělo být v $O(n)$. | ||
+ | |||
+ | **Úloha kůň (8b, plný počet do 24. 4.)** | ||
+ | Na jedné šachovnici $N\times N$ žil byl kulhavý kůň. To je je šachová figurka, která v sudém tahu táhne | ||
+ | jako jezdec, v lichém jako pěšec (o 1 dopředu, vždy stejným směrem). Jak pro zadaná dvě políčka najít nejkratší cestu kulhavým koněm? | ||
+ | |||
+ | **Úloha polosouvislost (9b, plný počet do 15. 5.)** | ||
+ | |||
+ | Řekněme, že orientovaný graf $G$ je // | ||
+ | |||
+ | **Úloha holubi (9b, plný počet do 15. 5.)** | ||
+ | Každý poštovní holub, je-li vypuštěn se zprávou, s ní doletí jen na jedno místo, které je pro konkrétního holuba pevné. Ve spolku pěstitelů holubů má každý člen holuby, kteří mohou doručit zprávu k několika dalším členům. Svolat všepěstitelské setkání je možné jen tak, že ho jeden ze členů vyhlásí rozesláním zpráv všem členům, na které má holuby, a ti pak pošlou zprávu dál svými holuby. | ||
+ | |||
+ | Když znáte strukturu spolku, v čase lineárním s počtem zúčastněných holubů a členů zjistěte, zda vůbec existuje někdo, kdo má možnost setkání všech členů svolat. | ||
+ | |||
+ | **Úloha abeceda (9b, plný počet do 22. 5.)** | ||
+ | Nalezli jste knihovnu ztracené civilizace a zkoumáte její abecedu o $n$ prapodivných znacích. | ||
+ | Každá kniha má na svém hřbetu nápis touto abecedou a doufáte, že jsou knihy seřazené abecedně (lexikograficky). | ||
+ | Rádi byste věděli, jestli z pořadí knížek lze zjistit jednoznačné pořadí znaků abecedy, jestli je pro to | ||
+ | informací málo, či zda dokonce takové pořadí nemůže existovat (a knihovnu tedy někdo přeházel). | ||
+ | |||
+ | Zadání si představte třeba jako seznam slov bez mezer z abecedy " | ||
+ | v hledané abecedě. Zkuste najít algoritmus, který to zvládne v lineárním čase s velikostí vstupu. Můžete | ||
+ | předpokládat, | ||
+ | |||
+ | **Úloha negative-floyd (8b, plný počet do 22. 5.)** | ||
+ | |||
+ | Co udělá F-W algoritmus na grafu se zápornými vahami, ale bez záporných cyklů? | ||
+ | A co udělá F-W na grafu se záporným cyklem? Svá tvrzení dokažte. | ||
+ | |||
+ | Pro bonus vysvětlete (potenciálně chybný) výsledek algoritmu a význam získaných hodnot | ||
+ | (tedy zda výsledná čísla přeci jen něco popisují). | ||
+ | |||
+ | **Úloha cheating (7b, plný počet do 22. 5.)** | ||
+ | |||
+ | Závod bludištěm z živých plotů! Jste rozhodnuti vyhrát a to i za cenu malé ... zkratky, kterou | ||
+ | pravidla zapomněla zmínit. Nejste ale ochotni se křovím prodrat víc než jednou, ještě by si toho někdo | ||
+ | všiml a mohl by to ... špatně pochopit. | ||
+ | |||
+ | Bludiště je popsáno grafem se startem, cílem, délkami hran a dvěma typy hran; chodby bludištěm | ||
+ | a zkratky křovím, kterými se ještě jde prodrat. Navrhněte algoritmus pro nejkratší cestu do cíle | ||
+ | v co nejlepším čase. | ||
+ | |||
+ | **Úloha listy-kostry (10b, plný počet do 22. 5.)** | ||
+ | |||
+ | Máme dánu $U$ jako podmnožinu vrcholů souvislého grafu $G$ s váhami hran $w$. | ||
+ | Najděte minimální kostru $G$ ze všech takových koster, které mají vrcholy z $U$ jako listy. | ||
+ | Algoritmus by měl být stejně rychlý jako jiné vám známé algoritmy na min. kostru a měl by | ||
+ | rozpoznat situaci, že taková kostra neexistuje. | ||
===== Požadavky na zápočet ===== | ===== Požadavky na zápočet ===== | ||
Řádek 55: | Řádek 164: | ||
Termín na domluvení programu je do 15. června, termín odevzdání hotové verze pak konec června. Ostatní domácí úlohy mají až na výjimky termín do konce května. | Termín na domluvení programu je do 15. června, termín odevzdání hotové verze pak konec června. Ostatní domácí úlohy mají až na výjimky termín do konce května. | ||
- | ==== Nápady na zápočťáky ==== | ||
- | - Implementovat R-B-stromy a (2, | + | {{page> |
+ | |||
+ | |||
+ | ===== Body za úkoly ===== | ||
+ | |||
+ | [[https://docs.google.com/spreadsheet/ccc? | ||
- | ==== Články k rozebrání ==== | ||
- | [Časem budu doplňovat.] | + | {{url> |
teaching/ads11314.1394298248.txt.gz · Poslední úprava: 2014/03/08 18:04 autor: Martin Koutecky