teaching:ads11920_cviceni
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:ads11920_cviceni [2020/02/20 20:21] – Martin Koutecky | teaching:ads11920_cviceni [2020/09/04 11:51] (aktuální) – [Požadavky na zápočet] 120 -> 100 Martin Koutecky | ||
---|---|---|---|
Řádek 7: | Řádek 7: | ||
* {{ : | * {{ : | ||
+ | * {{ : | ||
+ | * {{ : | ||
+ | * {{ : | ||
+ | * {{ : | ||
+ | * {{ : | ||
+ | * {{ : | ||
+ | * {{ : | ||
+ | * {{ : | ||
+ | * {{ : | ||
+ | * {{ : | ||
+ | * {{ : | ||
{{page> | {{page> | ||
Řádek 12: | Řádek 23: | ||
===== Požadavky na zápočet ===== | ===== Požadavky na zápočet ===== | ||
- | Zápočet vám udělím, získáte-li celkově | + | Zápočet vám udělím, získáte-li celkově |
Body lze získávat následujícími způsoby: | Body lze získávat následujícími způsoby: | ||
Řádek 39: | Řádek 50: | ||
//Hint:// Hledejte rekurzivně k-tý nejmenší ze dvou podposloupností. | //Hint:// Hledejte rekurzivně k-tý nejmenší ze dvou podposloupností. | ||
+ | |||
+ | **Úloha housenka (9b, plný počet do 11. 3.)** //[B]// | ||
+ | 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 abeceda (9b, plný počet do 25. 3.)** //[B]// | ||
+ | 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 polosouvislost (9b, plný počet do 25. 3.)** //[B]// | ||
+ | |||
+ | Řekněme, že orientovaný graf G je // | ||
+ | |||
+ | **Úloha holubi (9b, plný počet do 25. 3.)** //[B]// | ||
+ | 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 cheating (7b, plný počet do 25. 3.)** //[C]// | ||
+ | |||
+ | 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 zakázka (10b, plný počet do 25. 3.)** //[C]// | ||
+ | |||
+ | Olga Opatrná najala Láďu Lenocha, aby ji pro daný neorientovaný graf G=(V,E), vrchol s∈V a // | ||
+ | |||
+ | Olga ale moc nevěří Láďově pečlivosti, | ||
+ | |||
+ | - d(s)=0 | ||
+ | - π(s)=NIL | ||
+ | - ∀(u,v)∈E:d(v)≤d(u)+w(u,v) | ||
+ | - ∀v∈V:π(v)≠NIL⇒d(v)=d(π(v))+w(π(v),v) | ||
+ | - ∀v∈V,v≠s:d(v)<∞⇒π(v)≠NIL | ||
+ | | ||
+ | Jak může Láďa Olze dát data d a π, která nejsou korektní podle Olžina zadání, ale splňují tyto ověřovací podmínky? Konkrétně: | ||
+ | |||
+ | **Úloha listy-kostry (8b, plný počet do 15. 4.)** //[C]// | ||
+ | |||
+ | 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. | ||
+ | |||
+ | |||
+ | **Úloha rovnováha (9b, plný počet do 22. 4.)** //[D]// | ||
+ | |||
+ | Vymyslete algoritmus, který v lineárním čase přebuduje vyhledávací strom na dokonale vyvážený. Nemáte dost paměti na to, abyste si mohli pořídit ještě jednu kopii prvků – kromě stromu si smíte pamatovat O(1) hodnot (pointerů, počitadel do n, kopií hodnot). | ||
+ | |||
+ | **Úloha merge (10b, plný počet do 22. 4.)** //[D]// | ||
+ | |||
+ | 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|,|B|)). | ||
+ | |||
+ | **Úloha paren (10b, plný počet do 22. 4.)** //[D]// | ||
+ | Je dána posloupnost levých a pravých závorek délky n. Vymyslete datovou strukturu, která umí operace "otoč závorku na pozici i" (v O(logn) a " | ||
+ | |||
+ | **Úloha min-strom (8b, plný počet do 22. 4.)** | ||
+ | |||
+ | //Minimový binární strom// M(a) pro zadanou posloupnost a=(a1…an) bez opakujících se prvků je definován takto: | ||
+ | |||
+ | Buď ai minimální prvek a=(a1…an); pak kořen M(a) je ai, jeho levý podstrom je M(a1…ai−1) a pravý podstrom M(ai+1…an). M(∅) je prázdný strom. | ||
+ | |||
+ | Pro zadanou posloupnost postavte minimový strom v čase O(n). | ||
+ | |||
+ | **Úloha tridena-majorita (5+5b, plný počet do 22. 4.)** //[D]// | ||
+ | |||
+ | 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í ukážeme (ukázali jsme) příklad, kdy je úkolem najít majoritu, pokud existuje, s pamětí O(1) (resp. O(logn) 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 union (12b)** //[E]// | ||
+ | |||
+ | Dokažte, že pro množiny reprezentované binárními vyhledávacími stromy není možné spočítat sjednocení v lepším než lineárním čase, a to ani v případě, kdy na vstupu dostanete dokonale vyvážené stromy a výstup nemusí být vyvážený. | ||
+ | |||
+ | **Úloha addmin (10b)** //[E]// | ||
+ | |||
+ | Navrhněte datovou strukturu, která udržuje posloupnost x1,…,xn celých čísel. Na počátku posloupnost obsahuje samé nuly. K dispozici jsou operace Add(i, | ||
+ | |||
+ | **Úloha prank (10b)** //[E]// | ||
+ | |||
+ | Uvažme posloupnost všech permutací na množině 1,…,n uspořádanou lexikograficky. Jak nalézt k-tou permutaci v této posloupnosti? | ||
+ | |||
+ | |||
+ | **Úloha podobne (9b)** //[E]// | ||
+ | |||
+ | V posloupnosti čísel na vstupu najděte nejdelší souvislý úsek, ve kterém je rozdíl libovolných dvou prvků nejvýše k. | ||
+ | |||
+ | **Úloha matsoucin (9b)** //[E]// | ||
+ | |||
+ | Násobíme-li matice X∈Ra×b | ||
+ | a~Y∈Rb×c podle definice, počítáme a⋅b⋅c | ||
+ | součinů čísel. Pokud chceme spočítat maticový součin X1×…×Xn, | ||
+ | výsledek nezávisí na uzávorkování, | ||
+ | počtem součinů čísel) ano. Vymyslete algoritmus, který stanoví, jak výraz uzávorkovat, | ||
+ | abychom složitost minimalizovali. | ||
+ | } | ||
+ | |||
+ | **Úloha triangul (9b)** //[E]// | ||
+ | |||
+ | // | ||
+ | neprotínajícími se úhlopříčkami na trojúhelníky. Nalezněte takovou triangulaci, | ||
+ | součet délek řezů byl nejmenší možný. | ||
+ | |||
+ | **Úloha mindmap (20b)** //[E]// | ||
+ | |||
+ | Speciální úloha: vytvořte myšlenkovou mapu (na papíře či pomocí svého oblíbeného softwarového nástroje, např. [[https:// | ||
teaching/ads11920_cviceni.1582226505.txt.gz · Poslední úprava: 2020/02/20 20:21 autor: Martin Koutecky