Název tématického celku: Cíl: ALGORITMY A DATOVÉ STRUKTURY Metodický list č. 1 Časová složitost algoritmů Základním cílem tohoto tematického celku je vysvětlení potřebných pojmů a definic nutných k popisu časové složitosti algoritmů. Příslušné pojmy jsou vysvětleny na několika příkladech. Tématický celek je rozdělen do těchto dílčích témat: 1. měření velikosti vstupních dat, definice elementárních kroků algoritmu 2. definice časové složitosti, asymptotická notace 3. třídy algoritmů s různou časovou složitostí a jejich porovnání 1. dílčí téma: měření velikosti vstupních dat, definice elementárních kroků algoritmu K prvnímu dílčímu tématu si přečtěte příslušné kapitoly v: 1. Znát pojmy velikost vstupních dat (a různé metody jejího měření) elementární krok algoritmu (v závislosti na použitém výpočetním modelu) 2. Pochopit jak měřit velikost zápisu čísla (zopakovat látku z matematiky o logaritmech) 2. dílčí téma: definice časové složitosti, asymptotická notace K druhému dílčímu tématu si přečtěte příslušné kapitoly v: 1. Znát pojmy časová složitost algoritmu asymptotická notace pro popis funkcí 2. Umět vysvětlit 1
jak časová složitost algoritmu souvisí s velikostí vstupních dat daného algoritmu a počtem elementárních kroků, které daný algoritmus vykoná jak zapisovat složitost pomocí asymptotické notace 3. dílčí téma: třídy algoritmů s různou časovou složitostí a jejich porovnání K třetímu dílčímu tématu si přečtěte příslušné kapitoly v: 1. Znát pojmy lineární algoritmus, kvadratický algoritmus, polynomiální algoritmus exponenciální algoritmus 2. Pochopit zásadní rozdíl v praktické použitelnosti polynomiálních a exponenciálních algoritmů Způsob zakončení: Zápočet, zkouška 2
Název tématického celku: Cíl: ALGORITMY A DATOVÉ STRUKTURY Metodický list č. 2 Třídící algoritmy Základním cílem tohoto tematického celku je vysvětlení několika různých metod (algoritmů) na setřídění nesetříděné posloupnosti hodnot (čísel). Zároveň tyto algoritmy slouží jako vhodné příklady pro procvičení látky z první lekce (analýza časové složitosti algoritmů). Tématický celek je rozdělen do těchto dílčích témat: 4. naivní kvadratické algoritmy 5. heapsort 6. dolní odhad časové složitosti třídění pomocí porovnávání dvojic hodnot 1. dílčí téma: naivní kvadratické algoritmy K prvnímu dílčímu tématu si přečtěte příslušné kapitoly v: 3. Znát pojmy insertion-sort bubble-sort 4. Pochopit jak zmíněné dva algoritmy pracují proč je jejich časová složitost kvadratická 2. dílčí téma: heapsort K druhému dílčímu tématu si přečtěte příslušné kapitoly v: 3. Znát pojmy binární halda heapsort 4. Umět vysvětlit 3
jak zmíněný algoritmus pracuje jaká je jeho časová složitost 3. dílčí téma: dolní odhad časové složitosti třídění pomocí porovnávání dvojic hodnot K třetímu dílčímu tématu si přečtěte příslušné kapitoly v: 3. Znát pojmy rozhodovací strom časová složitost v nejhorším případě 4. Pochopit důkaz dolního odhadu složitosti třídění pomocí odhadu výšky příslušného rozhodovacího stromu Způsob zakončení: Zápočet, Zkouška 4
Název tématického celku: Cíl: ALGORITMY A DATOVÉ STRUKTURY Metodický list č. 3 Reprezentace grafů a jednoduché grafové algoritmy Základním cílem tohoto tematického celku je seznámení s konceptem neorientovaného a orientovaného grafu. Dalším cílem je ukázat jakými způsoby lze grafy reprezentovat pomocí standardních datových struktur a navrhnout algoritmus, řešící jednoduchou úlohu na grafech. Tématický celek je rozdělen do těchto dílčích témat: 7. neorientovaný graf, orientovaný graf a jejich reprezentace 8. naivní kvadratický algoritmus na nalezení topologického očíslování 1. dílčí téma: neorientovaný graf, orientovaný graf a jejich reprezentace K prvnímu dílčímu tématu si přečtěte příslušné kapitoly v: 5. Znát pojmy neorientovaný graf orientovaný graf matice sousednosti, seznamy sousedů 6. Umět pro graf zadaný obrázkem vytvořit jeho reprezentaci maticí sousednosti a naopak pro graf zadaný obrázkem vytvořit jeho reprezentaci pomocí seznamů sousedů a naopak 2. dílčí téma: naivní kvadratický algoritmus na nalezení topologického očíslování K druhému dílčímu tématu si přečtěte příslušné kapitoly v: 5. Znát pojmy acyklický graf topologické očíslování 6. Umět vysvětlit 5
jak zkonstruovat topologické očíslování acyklického grafu v kvadratickém čase Způsob zakončení: Zápočet, Zkouška 6
Název tématického celku: Cíl: ALGORITMY A DATOVÉ STRUKTURY Metodický list č. 4 Pokročilé grafové algoritmy Základním cílem tohoto tematického celku je navázání na látku předchozí lekce a návrh několika relativně sofistikovaných algoritmů řešících různé úlohy na grafech. Tématický celek je rozdělen do těchto dílčích témat: 9. prohledávání orientovaného grafu do hloubky 10. test acykličnosti grafu, topologické očíslování v lineárním čase 11. detekce silně souvislých komponent orientovaného grafu 1. dílčí téma: prohledávání orientovaného grafu do hloubky K prvnímu dílčímu tématu si přečtěte příslušné kapitoly v: 7. Znát pojmy čas objevení a čas opuštění vrcholu stromová hrana, zpětná hrana, dopředná hrana, příčná hrana 8. Porozumět jak pracuje algoritmus prohledávání do hloubky na orientovaném grafu jakou roli hrají jednotlivé typy hran 2. dílčí téma: test acykličnosti grafu, topologické očíslování v lineárním čase K druhému dílčímu tématu si přečtěte příslušné kapitoly v: 7. Znát pojmy acyklický graf topologické očíslování 8. Umět vysvětlit jak otestovat přítomnost cyklu v orientovaném grafu v lineárním čase 7
jak zkonstruovat topologické očíslování acyklického grafu v lineárním čase 3. dílčí téma: detekce silně souvislých komponent orientovaného grafu K třetímu dílčímu tématu si přečtěte příslušné kapitoly v: 1. Znát pojmy silně souvislá komponenta orientovaného grafu acyklická kondenzace orientovaného grafu 2. Umět vysvětlit jak pracuje třífázový lineární algoritmus na detekci silně souvislých komponent Způsob zakončení: Zápočet, Zkouška 8
Název tématického celku: Cíl: ALGORITMY A DATOVÉ STRUKTURY Metodický list č. 5 Algoritmy typu rozděl a panuj Základním cílem tohoto tematického celku je ukázání několika klasických algoritmů typu rozděl a panuj a vysvětlení metody pro analýzu jejich časové složitosti. Součástí zmíněné metody je i návod na řešení rekurentních rovnic jistého speciálního typu. Tématický celek je rozdělen do těchto dílčích témat: 12. obecný popis metody rozděl a panuj pro návrh algoritmů, mergesort 13. analýza složitosti rekurzivních algoritmů, master theorem 14. Strassenův algoritmus na násobení matic, hledání mediánu v lineárním čase 1. dílčí téma: obecný popis metody rozděl a panuj pro návrh algoritmů, mergesort K prvnímu dílčímu tématu si přečtěte příslušné kapitoly v: 9. Znát pojmy rekurzivní algoritmus mergesort 10.Porozumět jak pracuje obecný algoritmus typu rozděl a panuj jak sestavit rekurzivní rovnici vyjadřující jeho časovou složitost 2. dílčí téma: analýza složitosti rekurzivních algoritmů, master theorem K druhému dílčímu tématu si přečtěte příslušné kapitoly v: 9. Znát pojem rekurentní rovnice 9
10. Umět používat master theorem, tj. kuchařku pro řešení rekurentních rovnic speciálního typu 3. dílčí téma: Strassenův algoritmus na násobení matic, hledání mediánu v lineárním čase K třetímu dílčímu tématu si přečtěte příslušné kapitoly v: 3. Znát pojmy násobení matic medián posloupnosti 4. Umět vysvětlit jak pracuje Strassenův rekurzivní algoritmus pro násobení čtvercových matic a jaká je jeho časová složitost jak pracuje rekurzivní algoritmus pro hledání mediánu posloupnosti a proč je jeho časová složitost lineární Způsob zakončení: Zápočet, Zkouška 10
Název tématického celku: Cíl: ALGORITMY A DATOVÉ STRUKTURY Metodický list č. 6 Deterministické a nedeterministické algoritmy Základním cílem tohoto tematického celku je seznámení s konceptem nedeterministického algoritmu a zavedení příslušných formálních tříd časové složitosti. Tématický celek je rozdělen do těchto dílčích témat: 15. rozhodovací problémy, řešitelnost v polynomiálním čase 16. determinismus a nedeterminismus, třídy P a NP 17. polynomiální převoditelnost mezi problémy 1. dílčí téma: rozhodovací problémy, řešitelnost v polynomiálním čase K prvnímu dílčímu tématu si přečtěte příslušné kapitoly v: 11.Znát pojmy rozhodovací problém, optimalizační úloha řešitelnost v polynomiálním čase 12.Porozumět vztahem mezi rozhodovacími problémy a optimalizačními úlohami rozdílu mezi řešitelností v polynomiálním a v exponenciálním čase 2. dílčí téma: determinismus a nedeterminismus, třídy P a NP K druhému dílčímu tématu si přečtěte příslušné kapitoly v: 11. Znát pojmy deterministický výpočet, nedeterministický výpočet třída P, třída NP 11
12. Porozumět zásadnímu rozdílu mezi deterministickými výpočty a třídou P na straně jedné a nedeterministickými výpočty a třídou NP na straně druhé 3. dílčí téma: polynomiální převoditelnost mezi problémy K třetímu dílčímu tématu si přečtěte příslušné kapitoly v: 5. Znát pojem polynomiální transformace mezi rozhodovacími problémy 6. Umět vysvětlit jak lze algoritmicky řešit jeden rozhodovací problém pomocí jiného, na nějž je daný problém polynomiálně převoditelný Způsob zakončení: Zápočet, Zkouška 12
Název tématického celku: Cíl: ALGORITMY A DATOVÉ STRUKTURY Metodický list č. 7 Obtížně řešitelné problémy Základním cílem tohoto tematického celku je ukázání několika klasických problémů, které nelze řešit efektivně žádným algoritmem, zavedení pojmů NP-úplnost a NP-těžkost a vysvětlení důkazové techniky pro zařazování problémů do těchto efektivně neřešitelných tříd. Tématický celek je rozdělen do těchto dílčích témat: 18. příklady efektivně neřešitelných problémů ze třídy NP 19. třídy NP-úplných problémů a NP-těžkých úloh 20. důkazová technika pro ověřování NP-úplnosti problémů 1. dílčí téma: příklady efektivně neřešitelných problémů ze třídy NP K prvnímu dílčímu tématu si přečtěte příslušné kapitoly v: 13.Znát příklady efektivně neřešitelných rozhodovacích problémů efektivně neřešitelných optimalizačních úloh 2. dílčí téma: třídy NP-úplných problémů a NP-těžkých úloh K druhému dílčímu tématu si přečtěte příslušné kapitoly v: 13. Znát pojmy NP-úplnost NP-těžkost 14. Porozumět významu existence NP-úplných problémů a NP-těžkých optimalizačních úloh 13
3. dílčí téma: důkazová technika pro ověřování NP-úplnosti problémů K třetímu dílčímu tématu si přečtěte příslušné kapitoly v: 7. Umět vysvětlit jak použít polynomiální transformaci k důkazu NP-úplnosti zkonstruovat příslušnou polynomiální transformaci pro jednoduché případy Způsob zakončení: Zápočet, Zkouška 14