Domácí úkoly

Úkoly jsou automaticky testovány systémem BRUTE.

Seznam domácích úkolů

Číslo úkolu a název Body celkem Body, které je nutné získat Termín odevzdání Počet uploadů
HW 01 - Prohledávání do hloubky 10b 5b 23. 3. 2025 20
HW 02 - Řadící algoritmy 10b 5b 20. 4. 2025 20
HW 03 - Hašování 12b 6b 4. 5. 2025 20
HW 04 - Dynamické programování 18b 9b 25. 5. 2025 20
Termíny domácích úkolů jsou stanoveny tak, aby nedošlo k časové tísní. Procvičována témata jsou ale obvykle probírána mnohem dříve. Doporučujeme na úkolech pracovat průběžně v dostatečném předstihu před termínem odevzdání!
Domácí úkoly jsou definovány tak, abyste je dokázali vypracovat sami na základě studia a znalostí předmětu. Pokud byste přesto něčemu nerozuměli, pomohou Vám se základními myšlenkami řešení Vaši cvičící. Konkrétní dotazy na práci a vyhodnocení úkolů v BRUTE směřujte na adresu nagyoing@fel.cvut.cz.

Obecné pokyny pro vypracování úkolů

Úkoly jsou zaměřeny na implementaci algoritmů, které jsou probírány na přednáškách a cvičeních. Důraz je kladen na algoritmus, jeho použití, správnou implementaci, ale také na jeho časovou a prostorovou náročnost.

Úlohy je možné zpracovat v jenom z programovacích jazyků C/C++, Java nebo Python. Každou úlohu můžete odevzdat v jiném programovacím jazyce. U testů je řešení konfrontováno s referenčním řešením ve stejném programovacím jazyce. Přesto doporučujeme přemýšlet nad výběrem programovacího jazyka podle typu úlohy.

Podle zadání je nutné odevzdat řešení v jednom souboru s daným názvem.

Řešení čte vstup vždy ze standardního vstupu (stdin) a výsledky vypisuje na standardní výstup (stdout) nebo v případě chyby na standardní chybový výstup (stderr). Součástí implementace řešení je čtení a výpis dat podle zadání. Odevzdáváte zdrojový kód, který je podle zvoleného jazyka (C/C++, Python, Java) přeložen a následně spuštěn s tím, že řeší úlohu podle zadání.

Pro testování úloh jsou připravené testovací vstupy uložené v souborech. Při testování řešení jsou data ze souboru posílána na standardní vstup a kontrolován je standardní výstup. Důvodem je správné čtení vstupu a také jeho časová složitost, která může mnohdy významně ovlivnit celkovou složitost řešení. To stejné platí o výstupu programu a výpisu výsledků.

Jednotlivé testy mají své jméno. To je využito jednak v popisech testovacích vstupů a rovněž ve výpisech z odevzdávacího systému. Veřejné testovací vstupy jsou připravené ke stažení v souborech, jejichž název odpovídá názvu testu s příponou “.in”.

Obecné principy hodnocení

Úlohy jsou členěny na části, které jsou hodnoceny samostatně - podle popisu v zadání úlohy. Celkem lze za řešení úlohy získat až 10 bodů.

Úloha je uznána jako splněna, pokud za ní získáte alespoň na 5 bodů. Takové řešení zahrnuje základní funkcionalitu programu, tj. načtení vstupu, výpis výsledků a základní algoritmus úlohy, který je funkční na “menších” vstupech.

Dalších pět bodů je možné získat za řešení, které zahrnuje optimalizaci, ať již časovou nebo prostorovou. Počítáme, že takové řešení je nutné více testovat a ladit, kontrolovat jeho funkčnost s referenčním řešením. Povoleno je proto až 20 uploadů bez penalizace. Přesto doporučujeme základní část řešení testovat na počítači pomocí dostupných vstupních dat a uploady využít spíše k testování optimálního řešení.

Nenechte se zmást počtem uploadů, který ukazuje BRUTE. Penalizaci za překročení limitu uploadů řídí přímo evaluační skript.

Penalizace je po překročení limitu 20 uploadů řízená vztahem $ points = points_{max} \cdot \frac{20}{uploads_{num}} $.

Kromě penalizace za překročení povoleného počtu uploadů systém uděluje penalizaci i za pozdní odevzdání úlohy.

Testy na “velkých” datech jsou často generovány náhodně, výsledky hodnocení se v BRUTE zobrazují pouze orientačně.

Soutěž o časově nejrychlejší řešení

Pro každou z domácích úloh vyhlašujeme soutěž o nejrychlejší řešení. Podmínkou účasti v soutěži je:

  • odevzdání úkolu v řádném termínu,
  • úkol musí projít všemi testy správnosti řešení, náročné časové testy nemusí být stoprocentně splněné.

V soutěži je hodnocen celkový čas řešení všech úloh. Zkušenosti z minulých let ukazují, že nemusí být nutně nejrychlejší řešení v jazyce C/C++. Vše závisí na celkové koncepci Vašeho řešení, na rychlosti načtení vstupů, jejich zpracování apod. V soutěži je podle typu úkolu možné vyhrát s programem v kterémkoliv programovacím jazyce.

Tři nejlepší řešení v soutěži budou vyhlášeny a ohodnoceny třemi, dvěma a jedním bonusovým bodem.

Technické informace o odevzdávacím systému

Operační systém (lsb_release -da)

Distributor ID:	Debian
Description:	Debian GNU/Linux 12 (bookworm)
Release:	12
Codename:	bookworm

Jazyk C/C++

Použitý kompilátor (clang –version)

Debian clang version 14.0.6
Target: x86_64-pc-linux-gnu
Thread model: posix

Jazyk Python

Verze (python3 –version)

Python 3.11.2

Jazyk Java

Použitý kompilátor (javac -version)

javac 21.0.1

Verze (java -version)

java version "21.0.1" 2023-10-17 LTS
Java(TM) SE Runtime Environment (build 21.0.1+12-LTS-29)
Java HotSpot(TM) 64-Bit Server VM (build 21.0.1+12-LTS-29, mixed mode, sharing)

Technické parametry odevzdávacího systému jsou dány pluginy instalovanými v BRUTE a nelze je ovlivnit.

courses/b6b36dsa/ukoly/start.txt · Last modified: 2025/02/13 10:44 by nagyoing