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.

Vygenerovat materiály k hodině

Vygenerujte si, prezentaci, pracovní listy, testy, hru, kvíz, křížovky a další materiály k této hodině.

Začít zdarma Přihlásit se