NMIN112 Programování 2 pro matematiky
Od 11. 3. 2020 je do odvolání přerušena prezenční výuka na všech typech škol. Přecházíme proto na distanční formu výuky. Na stránce doc. Töpfera budou zveřejňovány materiály ke samostudiu. Na této stránce budu zadávat domácí úkoly. Konzultace poskytuji mailem, nebo po domluvě formou videohovoru.
Praktické cvičení: Po 9:00 K4, teoretické cvičení: Čt 12:20 K6.
Zápočet se udílí za:
- získání nejméně 80 bodů za domácí úkoly v ReCodExu,
- odevzdání adekvátního zápočtového programu,
- získání nejméně 75 bodů za domácí úkoly a aktivitu v teoretickém cvičení.
Teoretické cvičení
Domácí úkoly je možné odevzdávat na následujícím cvičení, nebo kdykoliv před ním mailem s předmětem „NMIN112“. Pokud posíláte řešení mailem, nepoužívejte prosím formáty MS Word, naopak ideální je PDF.
20. 2. 2020 |
Opakování. Domácí úkol:
|
27. 2. 2020 |
Algoritmy pro práci s dlouhými čísly. Úvodní příklady na třídění. Domácí úkol:
Písemně je možné úkol odevzdat nejpozději na cvičení 4. 5. 2020, elektronicky do 10. 3. 2020 23:59. |
5. 3. 2020 |
Algoritmy pro třídění. Domácí úkol:
Písemně je možné úkol odevzdat nejpozději na cvičení 16. 3. 2020, elektronicky do 17. 3. 2020 23:59. |
1. vzdálené cvičení |
Projděte si prezentaci ke spojovým seznamům. Domácí úkol:
Úkol odevzdávejte mailem nejpozději do 31. 3. 2020 23:59. |
2. vzdálené cvičení |
Přečtěte si kapitolu 10.1 Hanojské věže z knihy Průvodce labyrintem algoritmů (str. 235–237). Domácí úkol: Ze cvičení 1–4 na straně 237 si vyberte až 3, každé za 5 bodů. Úkol odevzdávejte mailem nejpozději do 16. 4. 2020 23:59. |
3. vzdálené cvičení |
Domácí úkol: 1. Navrhněte algoritmus, který v čase O(n + m), kde n je počet vrcholů a m počet hran, zjistí, zda zadaný graf je bipartitní. Tak se říká grafům, jejichž vrcholy lze rozdělit na dvě množiny tak, aby koncové vrcholy každé hrany patřily do různých množin. [5 bodů] 2. Na jisté šachovnici žil kulhavý kůň. To je zvláštní šachová figurka, která v sudých tazích táhne jako jezdec, v lichých jako pěšec. Vymyslete algoritmus, který z jednoho zadaného políčka dokulhá na druhé na nejmenší možný počet tahů. [5 bodů] 3. Mějme souvislý orientovaný graf. Chceme mazat jeho vrcholy jeden po druhém tak, aby graf zůstal stále souvislý. Jak takové pořadí mazání najít? Správnost postupu dokažte. [5 bodů] K řešení se může hodit znát algoritmy z přednášky. Pokud je řešením varianta některého z těchto standardních algoritmů, nemusíte rozepisovat celý postup v pseudokódu, stačí vysvětlit potřebné úpravy algoritmu. K inspiraci může posloužit také Průvodce labyrintem algoritmů, ze kterého tyto úlohy pocházejí. Úkol odevzdávejte mailem nejpozději do 29. 4. 2020 23:59. |
4. vzdálené cvičení |
Vymyslete, jak najít komponenty souvislosti grafu s pomocí jediného spuštění DFS. [3 body] V orientovaném grafu jsou některé vrcholy obarvené zeleně. Jak zjistit, jestli existuje cyklus obsahující alespoň jeden zelený vrchol? [4 body] Najděte algoritmy pro tyto grafové problémy. Pokaždé existuje řešení pracující v lineárním čase vzhledem k velikosti grafu.
Úkol odevzdávejte mailem nejpozději do 12. 5. 2020 23:59. |
poslední vzdálené cvičení |
1) Spletitý kabel: Mějme dlouhý kabel, z jehož obou konců vystupuje po n drátech. Každý drát na levém konci je propojen s právě jedním na konci druhém a my chceme zjistit, který s kterým. K tomu můžeme používat následující operace: (1) přivéstnapětí na daný drát na levém konci, (2) odpojit napětí z daného drátu na levém konci, (3) změřit napětí na daném drátu na pravém konci. Navrhněte algoritmus, který pomocí těchto operací zjistí, co je s čím propojeno. Snažte se počet operací minimalizovat. [4 body] 2) Šroubky a matičky: Na stole leží n různých šroubků a n matiček. Každá matička pasuje na právě jeden šroub a my chceme zjistit, která na který. Umíme ale pouze porovnávat šroub s matičkou – tím získáme jeden ze tří možných výsledků: matička je příliš velká, příliš malá, nebo správně velká. Nalezněte co nejefektivnější algoritmus. [5 bodů] 3) Náhodná k-tice: Máme-li obrovský soubor a chceme o něm získat alespoň hrubou představu, hodí se prozkoumat náhodnou k-tici řádků. Vymyslete algoritmus, který ji vybere tak, aby všechny k-tice měly stejnou pravděpodobnost. Vstup se celý nevejde do paměti a jeho velikost ani předem neznáme; k-tice se do paměti spolehlivě vejde. Zvládnete to na jediný průchod daty? [4 body] 4) Kopcem nazveme podposloupnost, která nejprve roste a pak klesá. Vymyslete algoritmus, který v zadané posloupnosti nalezne nejdelší kopec. [4 body] |
Výsledky
Body za znaménkem „+“ jsou za aktivitu na cvičení.
přezdívka | 1. cv | 2. cv | 3. cv | 4. cv | 5. cv | 6. cv | 7. cv | 8. cv | součet |
1573 | 12 | 10 | 10 | 9 | 15 | – | 7 | 13 | 76 |
32591 | 7 | 12 | 12 | 13 | 15 | 13 | 13 | 85 | |
63505105 | 13 | 12 | 7 | 13 | 15 | 14 | 13 | 87 | |
80208604 | 12+2 | 11 | 7 | 13 | 15 | 14 | 12 | 86 | |
pročež | 8+3 | 13+1 | 8 | 13 | 15 | 15 | 14 | 90 | |
búno | 15 | 10 | 4 | 13 | 15+3 | 13 | 12 | 85 | |
***** | 15+1 | 10 | 12 | 13 | 15 | 15 | 13 | 94 | |
10 náhodně vygenerovaných znaků | 12+2 | 10+2 | –(+3) | 9 | – | 14 | 10 | 17 | 79 |
AK | 11 | 13+3 | – | 13 | – | 13 | 13 | 16 | 82 |
Gosta | 8 | 11 | – | 13 | 15 | – | 11 | 17 | 75 |
já | 10 | 12+1 | 8+1 | 13 | 15 | 9 | 8 | 77 | |
Mr. Incognito | 9+1 | 12 | 12 | 13 | 15 | 15 | 16 | 93 | |
pandita | 9 | 12 | 7 | 13 | 15 | 14 | 15 | 85 | |
Q.I.L.I | 11 | 11 | 12 | 13 | 15 | 15 | 15 | 92 |
Praktické cvičení
Zápočtový program
Téma zápočtového programu by si měli studenti domluvit do 16. 4. 2020, specifikaci odevzdat do konce semestru, zápočtový program do konce června. Součástí zápočtového programu je uživatelská a programátorská dokumentace. Doporučený minimální rozsah zápočtového programu je 350 řádek kódu, v případě zajímavého zadání vyřešeného elegantním způsobem může být i kratší. Inspiraci k tématům je možné čerpat například na stránkách Martina Mareše nebo v seznamu Tomáše Holana.
Cvičení
17. 2. 2020 |
Úvod, opakování |
24. 2. 2020 |
NumPy |
2. 3. 2020 | |
9. 3. 2020 |
Matplotlib https://colab.research.google.com/drive/1CRC3q9COgQNopalcZB5xCVFzmr45-HKW |
Další materiály ke cvičení najdete na stránkách Martina Mareše.