---
i = 1
dokud i ≤ 10:
vypiš i
i = i + 1
---Martin Korbel
Co je algoritmus?
Postup kroků k vyřešení určitého problému.
Přesně definovaný, konečný a proveditelný.
Algoritmus používáme každý den:
Recept na vaření
Návod k montáži nábytku
Dopravní trasa na mapě
Algoritmizace = přeměna řešení problému na sadu kroků (algoritmus).
Krokový proces:
1. Porozumění problému
2. Návrh řešení (slovně, vývojové schéma, pseudokód)
3. Implementace v programovacím jazyce (např v Pythonu)
4. Testování a analýza složitosti
Slovo algoritmus pochází ze jména al-Chvárizmí (perský matematik, 9. století).
Algoritmy lidé používali dávno před vynálezem počítačů.
Vývoj algoritmů je spojen s matematikou, logikou a později s výpočetní technikou.
300 př. n. l. – Eukleidův algoritmus pro výpočet největšího společného dělitele.
Indie a Arábie – algoritmy pro výpočty s čísly, základy aritmetiky.
9. století – Muhammad ibn Músá al-Chvárizmí píše díla o aritmetice a algebře.
Jeho jméno dalo vznik slovu "algoritmus".
Díky němu se do Evropy dostaly arabské číslice.
Blaise Pascal (1623–1662) – sestrojil mechanickou kalkulačku.
Gottfried Wilhelm Leibniz (1646–1716) – představil binární soustavu a stroj na násobení.
Algoritmy se využívají v astronomii, geometrii a při stavbě tabulek.
Charles Babbage (1791–1871) – navrhl analytický stroj.
Ada Lovelace (1815–1852) – první „programátorka“, popsala algoritmus pro výpočet Bernoulliho čísel.
Rozvoj matematické logiky – George Boole (1815–1864) – základy booleovské algebry.
David Hilbert (1900) – kladl otázky řešitelnosti matematických problémů.
Alan Turing (1912–1954) – definoval Turingův stroj → teoretický základ algoritmů.
John von Neumann – koncepce architektury počítače (program uložený v paměti).
1940–1950: vznik prvních elektronických počítačů (ENIAC, UNIVAC).
Rozvoj programovacích jazyků: Fortran, COBOL, Lisp.
Algoritmy pro řazení, vyhledávání a šifrování.
1970–1980: teorie složitosti (NP-úplnost, algoritmy pro grafy).
Algoritmy pronikají do průmyslu a vědy.
Algoritmy jsou všude:
internetové vyhledávače
sociální sítě
kryptografie a bezpečnost
umělá inteligence a strojové učení
Výzkum složitosti, kvantových algoritmů a optimalizace.
Konečnost – musí skončit po konečném počtu kroků.
Determinovanost – každý krok je jednoznačný.
Obecnost – algoritmus lze použít na celou třídu úloh.
Hromadnost – funguje na více vstupech, nejen na jednom.
Slovní popis
Blokové schéma (vývojový diagram)
Pseudokód
Programovací jazyk
Načti číslo A a B.
Porovnej A a B.
Pokud A > B, vypiš A.
Jinak vypiš B.
Konec.
Načti N.
Nastav výsledek = 1.
Opakuj pro i = 1 až N: výsledek = výsledek * i.
Vypiš výsledek.
Konec.
Sekvence – kroky jdou za sebou.
Větvení (podmínka) – rozhodnutí podle situace.
Cykly (opakování) – opakovaný postup.
Přečti a pochop požadavek.
Vymysli příklad ručně (malá data).
Navrhni krokový postup (slovně nebo pseudokódem).
Zapiš kód v Pythonu.
Otestuj na okrajových případech.
Analyzuj složitost (čas / paměť).
Optimalizuj (pokud je potřeba).
Používej malé příklady (manuálně ověřitelné).
Tiskni mezivýsledky (print) během učení.
Piš jednoduché unit testy (modul unittest nebo jednoduché asserty).
Příklad pro cyklus:
---
i = 1
dokud i ≤ 10:
vypiš i
i = i + 1
---Obdélník – krok / akce
Kosočtverec – podmínka
Ovál – začátek/konec


Časová složitost – kolik kroků algoritmus potřebuje.
Paměťová složitost – kolik paměti spotřebuje.
Označujeme tzv. O-velkou notací:
O(1) – konstantní čas
O(n) – lineární
O(n^2) – kvadratická
O(log n) – logaritmická
Algoritmus je přesně definovaný postup řešení problému.
Může být zapsán různými způsoby – slovně, diagramem, pseudokódem nebo programem.
Každý algoritmus musí mít vlastnosti: konečnost, determinovanost, obecnost.
Důležitá je efektivita – časová a paměťová složitost.
Algoritmické myšlení je klíčové nejen v informatice, ale i v běžném životě.
Online aplikace https://www.yworks.com/yed-live/
Sestavte algoritmus pro parkovací automat (1h = 40,-, minimum 20,-).
Co musí splňovat algoritmus?
Jaké znáte základní řídicí struktury?
Jaký je rozdíl mezi O(n) a O(n^2)?
Dokážete uvést příklad algoritmu z běžného života?
Sestav algoritmus na výpočet aritmetického průměru čísel.
Sestav Eukleidův algoritmus pro výpočet největšího společného dělitele.
Sestav algoritmus, který vrátí druhé největší číslo zadané uživatelem.
Sestav algoritmus na kontrolu palindromu.
Sestav agoritmus pro sečtení všech lichých čísel, až do čísla zadaného uživatelem.
Sestav algoritmus, který z půjčené částky, úroku a doby zápůjčky vrátí celkovou částku úvěru.
Sestav algoritmus, který pro danou částku vypíše počet bankovek, které má vydat.