Pokud se v látce ztrácíte, je nyní nejvyšší čas nějak na to reagovat (studium, dotazy na přednáškách a cvičeních, konzultace, počítání více příkladů, diskuse s kolegy). Později Vás to může stát neúměrně více úsilí a nemusí se to ani povést.
Stav, kdy víte, že nevíte, je normální a zvládne se studijním úsílím a konzultacemi.
Stav kdy nevíte, že nevíte, je nebezpečný, deprimující a demotivující, neměli byste se do něj dostat. V něm už nestačí jen se učit, je ale je třeba se hlouběji zamyslet nad motivacemi ke studiu, které máte, sebrat síly a a najít odvahu se s tím poprat - možná pak budete potřebovat i psychologickou podporu Vašich blízkých.
- Opakování:
rekurse, rekursivní naprogramování prohledávání stavového prostoru do hloubky
Hledání všech pozic N nezávislých dam na šachovnici N x N - volba datových struktur
umožňujících inkrementální aktualizaci - Program
- Nerekursivní a rekursivní
verze programu hledajícího všechny rozklady zadaného čísla na sčítance
rekursivní verzi jsme probrali detailně, rozmyslete si nerekursivní
- Strukturované a modulární programování
- měli byste se zamýšlet nad strukturou svých programů a tvořit spíše podprogramy, které budou data dostávat a odevzdávat prostřednictvím parametrů, než hlavní programy, které řeší vše.
- Kriteria pro užitečné rozdělení systému na části:
- Vazby jednotlivých částí (jejich inteface) musí být jednoduché
- Funkce celého systému musí jít jednoduše popsat jako spolupráce jeho částí
aniž bychom museli znát (detailní) vnitřní strukturu jeho částí
- Použití globálních proměnných může vést k sideefectům a pokud pro to nejsou vážné důvody, měl by podprogram komunikovat jen "přes svoji hlavičku" - pomocí parametrů
Jednou z vyjímek je použití globálních proměnných při tvorbě rekurzivních podprogramů (alternativa - předávat stále stejný parametr odkazem - je očividně horší)
- Přímá a nepřímá rekurse, direktiva forward,
někdy se používá i jen k tomu, abychom hlavičky podstatných podprogramů umístili hned na začátek programu
- Prohledávání grafu do hloubky a šířky .
- Společná implementace se seznamy OPEN a CLOSE,
ve které se tyto algoritmy liší jen implementací seznamu OPEN (zásobník/fronta)
- Animace: do hloubky,
do šířky,
tyto animace obsahují (poměrně závažnou chybu) Najděte ji!
- Algoritmus vlny
- prohledávání do šířky bez fronty, přímo do vrchlů grafu se zapisují vzdálenosti od startu
"zpětný chod" pro nalezení nejkratší cesty
- V úloze o dominanci šachovnice dámami
(hledáme nejmenší počet dam, které by ohrožovaly všechna políčka šachovnice)
pro inkrementální aktualizaci stavu si nestačí pamatovat pro každé políčko
zda je ohrožováno, ale stačí pamatovat si
kolikrát je ohrožováno
- Komentář k programování úlohy o hledání nejkratší cesty dané figury po šachovnici se zakázanými políčky,
šachovnici se zakázanými poli je vhodné si "nakreslit" v editoru a
jednoduše přečíst,
srovnej se čtením seznamu zakázaných políček
- Vnitřní třídění - specifikace úlohy, adresní a asociativní (založené na porovnávání klíčů) algoritmy
- radixové třídění jako zástupce adresních algoritmů