Zpět na přehled
Python a algoritmizace
Informatika
Střední škola
Petr
21.10.2026
Hodina se zaměřuje na základy algoritmizace a praktické programování v jazyce Python. Studenti se naučí psát algoritmy, chápat jejich složitost a implementovat je v reálném kódu s důrazem na čitelnost a efektivitu.
Osnova hodiny
1. Úvod do algoritmizace
- Definice algoritmu a jeho vlastnosti (determinismus, konečnost, efektivita)
- Rozdíl mezi algoritmem a programem
- Základní reprezentace algoritmů: pseudokód, vývojové diagramy, příkazy v přirozeném jazyce
- Příklad: Euklidův algoritmus pro nalezení největšího společného dělitele (NSD)
- Praktická cvičení: Zápis jednoduchého algoritmu v pseudokódu
2. Základní datové struktury v Pythonu
- Primitivní typy: int, float, str, bool – operace a konverze
- Seznamy (list) – vytváření, indexování, slicing, metody (append, extend, remove)
- N-tice (tuple) – nemutabilita a použití
- Slovníky (dict) – klíč-hodnota páry, iterace
- Množiny (set) – operace sjednocení, průniku, rozdílu
- Praktika: Práce s daty – filtrování, transformace, agregace
3. Řídící struktury a jejich algoritmizace
- Sekvenční struktura – lineární provádění příkazů
- Podmínková struktura (if-elif-else) – větvení, vnořené podmínky
- Iterační struktury – cykly for a while, break, continue
- Porovnání cyklů: kdy používat kterou variantu
- Příklad algoritmu: Řazení seznamu bublinkou (Bubble Sort)
- Praktické úlohy: Hledání extrémů, součty s podmínkami
4. Funkce a modularizace kódu
- Definice funkcí, parametry a návratové hodnoty
- Lokální a globální proměnné – scope
- Výchozí parametry a pojmenované argumenty
- Rekurze – princip, příklady (faktoriál, Fibonacciho posloupnost)
- Problém hluboké rekurze – stack overflow
- Lambda funkce a jejich použití s map(), filter(), sorted()
- Příklad: Implementace binárního vyhledávání jako funkce
5. Časová a prostorová složitost algoritmů
- Notace Big O – asymptotické chování
- Složitost $O(1)$, $O(n)$, $O(n^2)$, $O(\log n)$, $O(n \log n)$
- Praktické příklady: Analýza konkrétních algoritmů
- Prostorová složitost – počet použitých proměnných a paměti
- Optimalizace: Jak zlepšit algoritmus – příklad: od Bubble Sort k Quick Sort
- Měření výkonu v Pythonu – modul timeit
6. Klasické algoritmy
- Algoritmy vyhledávání: lineární vyhledávání $O(n)$, binární vyhledávání $O(\log n)$
- Algoritmy řazení: Selection Sort, Insertion Sort, Merge Sort, Quick Sort
- Tabulka složitostí jednotlivých algoritmů
- Dynamické programování – princip (memoizace), příklad: Fibonacciho čísla
- Algoritmy na grafech: DFS, BFS (základní představa)
- Praktické implementace: Naprogramování alespoň tří algoritmů
7. Ladění a testování kódu
- Běžné chyby v algoritmech a jejich prevence
- Debugování v Pythonu – print statements, debugger
- Unit testy – modul unittest, pytest
- Příklady testovacích případů
- Psaní robustního kódu – validace vstupů, ošetřování výjimek (try-except)
- Praktika: Napsání testů pro algoritmus
8. Praktické projekty a aplikace
- Projekt 1: Kalkulátor s jednoduchou gramatikou (parsování výrazů)
- Projekt 2: Řešení sudoku pomocí backtrackingu
- Projekt 3: Analýza dat – počítání frekvencí, vyhledávání trendů
- Projekt 4: Simulace – např. Game of Life nebo jednoduché systémy
- Integrace algoritmů do reálných aplikací
- Práce s vestavěnými funkcemi – sorted(), min(), max() vs. vlastní implementace
Klíčové pojmy
Algoritmus
Konečná posloupnost přesně definovaných kroků vedoucích k řešení úlohy. Musí být determinističtý, konečný a efektivní.
Časová složitost
Míra závislosti počtu elementárních operací na velikosti vstupu, vyjadřovaná asymptoticky (Big O notací, např. $O(n^2)$).
Prostorová složitost
Množství paměti potřebné k provedení algoritmu, vyjadřovaná jako funkce velikosti vstupu.
Rekurze
Technika, kdy funkce volá sama sebe s modifikovanými parametry, používá se pro problémy s přirozenou hierarchickou strukturou.
Binární vyhledávání
Efektivní algoritmus vyhledávání v seřazeném poli s časovou složitostí $O(\log n)$, funguje na principu půlení intervalu.
Merge Sort
Algoritmus řazení s časovou složitostí $O(n \log n)$ v nejhorším případě, založený na principu rozděl a panuj.
Dynamické programování
Technika řešení problémů kombinací řešení podproblémů a ukládáním (memoizací) již vypočítaných výsledků.
Big O notace
Matematická notace popisující asymptotické chování funkcí, používaná pro analýzu složitosti algoritmů. Například $O(n^2)$ znamená kvadratické chování.
Backtracking
Algoritmus pro řešení problémů, který systematicky prozkoumává všechna možná řešení a vrací se (backtrack) při zjištění slepé cesty.
Pseudokód
Formální zápis algoritmu podobný programovacímu jazyku, ale nezávislý na konkrétní syntaxi; slouží k popisu logiky algoritmu.
Scope
Rozsah platnosti proměnné – určuje, kde v programu lze proměnnou používat (lokální scope vs. globální scope).
Mutabilita
Vlastnost datové struktury – mutabilní objekty (list, dict) lze měnit po vytvoření, nemutabilní (tuple, str) nelze modifikovat.