Zde jsou informace pro studenty předmětu Algoritmy a datové struktury I (2016/2017), cvičení v pondělí od 9:00.
Za úkoly lze získat plný počet bodů až do uvedeného deadline. Po tomto deadline jdou odevzdávat až do konce semestru nejvýše za polovinu bodů. Počet bodů za domácí úkol se odvíjí jak od zpracování, tak od kvality navrženého algoritmu.
Úkoly zatím posílejte e-mailem na adresu stinovlas+ads@kam.mff.cuni.cz a do předmětu uveďte název úlohy. Samotné řešení nechť je přiloženo ve formátu PDF a jeho součástí musí být i vaše jméno (ideálně někde v záhlaví). Nezapomeňte se podepsat celým jménem!
matpower
(6 bodů, do 6. 3.):
Navrhněte algoritmus na mocnění matic 2×2 a zapište jej v pseudokódu.
Dokažte, že je algoritmus korektní a konečný a určete a dokažte jeho časovou
složitost.eggsalad
(6 bodů, do 13. 3.):
Máme mrakodrap s n patry a k vajíček. Víme, že pro všechna patra nižší
než nějaké p se vajíčko z nich hozené nerozbije a naopak, vajíčko hozené z
patra p či vyššího se vždy rozbije. Navrhněte postup, jak zjistit p na
asymptoticky co nejmenší počet pokusů pro obecné n a k.smalldiff
(6 bodů, do 13. 3.):
Navrhněte co nejrychlejší algoritmus, který pro danou posloupnost n čísel a
číslo k nalezne co nejdelší úsek posloupnosti takový, že rozdíl libovolných
dvou prvků úseku je nanejvýš k. Algoritmus zapište v pseudokódu, dokažte že
je korektní a konečný a dokažte jeho časovou složitost.ramswitch
(6 bodů, do 22. 3.):
Vymyslete, jak na RAMu prohodit obsah dvou paměťových buněk, aniž byste použili
jakoukoliv jinou paměťovou buňku a napište program pro RAM, který prohodí
paměťové buňky [0] a [1]. Nezapomeňte, že registry jsou také
paměťové buňky.
recursion
(6 bodů, do 3. 4.):
Vyřešte rekurenci T(n)=√n⋅T(√n)+Θ(n), T(1)=1. Pokud
nezvládnete výsledek určit přesně, pokuste se jej alespoň co nejlépe odhadnout
zdola i shora.
ghostlady
(6 bodů, do 22. 4.):
Ve čtverečkové síti máte zakreslenou mapu hradu. Každý čtvereček je buď volný,
nebo je zcela zaplněn zdí. Po hradu se pohybuje bílá paní, která začíná svou
cestu ve čtverečku X a chce se dostat co nejkratší cestou do čtverečku
Y. Chodit může pouze vodorovně nebo svisle, nikoliv diagonálně. Bílá paní
navíc umí procházet zdmi, ale takové procházení zdí není nic příjemného a proto
se mu snaží vyhýbat. Najděte proto cestu z bodu X do bod Y takovou,
že 1) prochází co nejméněkrát zdí, 2) je při daném počtu průchodů zdí co
nejkratší. Každé vstoupení na čtvereček se zdí se počítá jako jeden průchod
zdí (takže pokud mám zeď tlustou 3 čtverečky, počítá se jako 3 průchody zdí).
breakleg
(6 bodů, do 24. 4.):
Máte grafem zadanou mapu zasněženého a zamrzlého města. U každé hrany je
zaznamenána pravděpodobnost (číslo mezi 0 a 1), že si při jejím průchodů
zlomíte nohu. Navrhněte algoritmus, který najde mezi dvěma zadanými vrcholy
cestu s nejnižší pravděpodobností zlomení nohy.
parentheses
(6 Y [bonusových] bodů, do 28. 5.):
Máme 2N závorek a chceme nad numi umět rychle provádět operace "otoč i-tou
závorku" a "urči, zda je posloupnost správně uzávorkovaná". Navrhněte datovou
strukturu založenou na intervalových stromech, která nám umožní co nejrychlejší
odpovědi na zadané dotazy.
V průběhu semestru budou zadávány domácí úkoly a to jak teoretické, tak praktické. Počty bodů se budou lišit podle obtížnosti. V průběhu semestru bude také zadáno několik krátkých přepadových písemek. Body za písemky a domácí úkoly se sčítají.
Dohromady budou zadány písemky a domácí úkoly za X základních bodů a Y bonusových bodů, kde X≥Y≥0. Získané základní a bonusové body se sčítají.
V průběhu semestru bude několik checkpointů se stanoveným minimálním počtem bodů na projití. Kdo bude mít méně bodů, než je checkpointem vyžadováno, musí si povinně domluvit na další týden (ve výjimečných případech na přespříští týden) konzultaci.
Pro získání zápočtu je třeba získat alespoň 23X bodů a zúčastnit se všech povinných konzultací.
Pokud budou někomu chybět na konci semestru body, bude možné domluvit se na napsání zápočtového programu (implementace nějakého netriviálního algoritmu či datové struktury v nízkoúrovňovém programovacím jazyce) za až 29X bodů (podle náročnosti).
Např. pokud by bylo X=99, pak hranice pro získání zápočtu by byla 66 bodů a za zápočtový program by bylo možno dostat až 22 bodů.