Algoritmy a programovanie I.

Vyučujúci

Zaradený v študijných programoch

Výsledky vzdelávania

Po absolvovaní predmetu by študenti mali mať:
Znalosti
A. Orientovať sa v pojmovom aparáte v oblasti návrhu a tvorby algoritmov.
B. Porozumieť rôznym typom dátových štruktúr a spôsobom tvorby algoritmov nad týmito štruktúrami.
C. Sformulovať podstatu riešenej úlohy z pohľadu zásad algoritmizácie a návrhu riešení.
Zručnosti
D. Transformovať navrhnutý algoritmus do programovacieho jazyka Python na jednoduchých úlohách.
E. Porozumieť jednoduchým zdrojovým kódom vo vybraných programovacích jazykoch a rozpoznať základné riadiace štruktúry algoritmov.
F. Spolupracovať vo dvojiciach pri návrhu a ladení riešení úloh.
G. Komunikovať a zrozumiteľne vysvetľovať návrhy algoritmov.
Spôsobilosti
A. Samostatne identifikovať podstatu algoritmického problému a zvoliť vhodný prístup riešenia.
B. Integrovať poznatky o dátových štruktúrach pri návrhu efektívnych algoritmov.
D. Aplikovať algoritmické princípy v programovacom jazyku Python pri riešení základných úloh.
F. Efektívne spolupracovať v tíme pri návrhu algoritmických riešení.
G. Prezentovať a obhajovať navrhnuté algoritmické postupy.

Stručná osnova predmetu

1. Pojem algoritmu, jeho vlastnosti, pojem Turingovho stroja a súvis s algoritmom, reprezentácia algoritmu
2. Základné riadiace štruktúry algoritmu a algoritmizácia slovných úloh
3. Tvorba vývojového diagramu v aplikácii PS diagram
4. Základy programovanie v jazyku Python
5. Parsovanie vývojových diagramov do jazyka Python
6. Zložitosť algoritmov a notácia Big O
7. Triediace algoritmy a ich efektivita, hash tabuľky a ich význam
8. Triediace algoritmy a ich efektivita, rekurzia v programoch
9. Rôzne typy dátových štruktúr (lineárne zoznamy, stromy, haldy, grafy) a práca s nimi
10. Stavový priestor a neinformované algoritmy prehľadávania stavového priestoru (do šírky a do hĺbky)
11. Informované algoritmy prehľadávania stavového priestoru (kvantitatívne heuristiky hill climbing a jeho modifikácie)
12. Optimalizačné algoritmy A* a jeho modifikácie
13. Práca s modulmi.

Odporúčaná literatúra

1. Wengrow, J., A common-sense Guide to Data Structures and Algorithms, 2nd edition, The pragrmatic programmers, 2020
2. Skiena, S.S., The Algorithm Design Manual (Texts in Computer Science) 3rd ed., Springer, 2020
3. Wróblewski P.: Algoritmy, dátové a programovací techniky, Computer Press, Brno 2004
4. Pšenčíková, J., Algoritmizace, Computer Media, 2021
5. Pecinovský, J., Začínáme programovat v jazyku Python, Grada, 2020
6. Pecinovský, J., Python Kompletní příručka jazyka pro verzi 3.10, Grada, 2021

Sylabus predmetu

1. Úvod do algoritmizácie a informatiky. Pojem algoritmu, jeho vlastnosti. Turingov stroj. (História algoritmov, deterministickosť, konečnosť, efektivita. Úvod do teoretického modelu výpočtov – Turingov stroj. Diskusia: Čo je „dobrý“ algoritmus?) 2. Základné riadiace štruktúry algoritmu. Algoritmizácia slovných úloh. (Sekvencia, vetvenie, cyklus. Premena slovného zadania na algoritmus. Pseudokód a štruktúrované riešenia. Cvičenie: algoritmizácia každodenných úkonov.) 3. Tvorba vývojového diagramu. Aplikácia PS Diagram. (Pravidlá kreslenia diagramov. Vizualizácia logiky algoritmu. Použitie nástroja PS Diagram. Praktická úloha: tvorba vývojového diagramu pre jednoduchý problém.) 4. Základy programovania v jazyku Python. Dátové typy, vstup/výstup, podmienky. (Premenné, operátory, vstup od používateľa, vetvenie. Prepojenie medzi algoritmom a kódom. Prvé implementácie v prostredí Python.) 5. Parsovanie vývojových diagramov do jazyka Python. Funkcie a štruktúra programu. (Premena diagramov na kód. Deklarácia a volanie funkcií. Modularizácia programu. Cvičenie: funkčné prepisy algoritmov.) 6. Zložitosť algoritmov. Časová a pamäťová zložitosť. Notácia Big O. (Porovnanie algoritmov podľa efektivity. Odhadovanie zložitosti jednoduchých algoritmov. Vizuálne príklady rastu časovej náročnosti.) 7. Triediace algoritmy I. Bubble sort, Insertion sort. Hash tabuľky a ich význam. (Implementácia základných algoritmov triedenia. Princípy hashovania, využitie v praxi. Porovnanie výkonnosti.) 8. Triediace algoritmy II. Merge sort, Quick sort. Rekurzia v programovaní. (Rekurzívne implementácie, porovnanie s iteratívnymi. Vizualizácia a sledovanie volaní funkcií. Cvičenie: praktické príklady.) 9. Dátové štruktúry – lineárne zoznamy, stromy, haldy, grafy. (Reprezentácia a použitie dátových štruktúr. Vnorené štruktúry, operácie nad nimi. Úvod do objektovo orientovaného prístupu.) 10. Stavový priestor a neinformované algoritmy prehľadávania: BFS a DFS. (Modelovanie problému ako graf. Vyhľadávanie riešenia bez heuristiky. Implementácia prehľadávania v grafe.) 11. Informované algoritmy prehľadávania. Heuristiky, Hill Climbing a varianty. (Použitie heuristickej funkcie. Problémy lokálnych miním. Porovnanie efektivity so slepým prehľadávaním.) 12. Optimalizačné algoritmy A* a jeho modifikácie. (Heuristika a vzdialenosť cieľa. Algoritmus A, admissibility, efektivita. Príklady použitia v hrách a logistike.) 13. Práca s modulmi a knižnicami v jazyku Python. Záverečné opakovanie. (Použitie math, random, itertools, time. Tvorba vlastného modulu. Príprava na záverečný projekt/skúšku.)

Podmienky na absolvovanie predmetu

Podmienky na absolvovanie predmetu:
- záverečná skúška – písomná forma, 60% (absolvovanie skúšky znamená získanie min. 51% z hodnotenia skúšky). Skúška pozostáva z dvoch častí: overenie teoretických vedomostí (test s rôznymi typmi otázok). Teoretickou časťou sa overuje dosiahnutá úroveň výsledkov vzdelávania A, B, E. Overenie praktických zručností - tvorba vývojového diagramu v PS diagrame a programu v Pythone, kde sa overuje úroveň výsledkov vzdelávanie C, D, F, G.
Cvičenia
Priebežné testy 10%, priebežné riešenie úloh počas cvičení vo dvojiciach 10%, záverečná úloha-tvorba algoritmu 20%, ku skúške je potrebné 51% z tejto povinnosti
Hodnotením samostatnej úlohy a hodnotením práce v tímoch sa rozvíjajú a hodnotia nasledovné výsledky vzdelania C, D, F, G.

Pracovné zaťaženie študenta

Pracovné zaťaženie študenta (v hodinách):
6 kreditov x 26 hodín = 156 hodín
Rozdelenie študijného zaťaženia:
Účasť na prednáškach a seminároch: 52 hodín
Príprava na semináre: 25 hodín
Príprava projektu: 25 hodín
Príprava na záverečnú skúšku: 54 hodín

Jazyk, ktorého znalosť je potrebná na absolvovanie predmetu

Slovenský jazyk

Dátum schválenia: 04.03.2025

Dátum poslednej zmeny: 06.11.2025

Dátum schválenia: 04.03.2025

Dátum poslednej zmeny: 06.11.2025