I. Algoritmus, prostředky pro zápis algoritmu, algoritmické konstrukce. Složitost algoritmu, příklady algoritmů, algoritmicky neřešitelné problémy. Flashcards
Co je to algoritmus?
Postup při řešení určité třídy úloh, který je tvořen seznamem jednoznačně definovaných příkazů. má konečný počet kroků k řešení/výsledkům.
Algoritmus pracuje se vstupy, ty mají definované množiny hodnot, jichž mohou nabývat.
Algoritmus má alespoň jeden výstup - odpověď na problém, jenž algoritmus řeší.
vlastnosti algoritmu?
Vlastnosti:
● Hromadnost - měnitelná vstupní data
● Determinovanost - každý krok je jednoznačně definován
● Konečnost a resultativnost - pro přípustná vstupní data se po provedení konečného počtu kroků dojde k požadovaným výsledkům
prostředky pro zápis algoritmu?
Prostředky pro zápis algoritmu:
● Programovací jazyk
● Slovní popis
● Vývojový diagram
● UML action diagram
● Strukturogramy
● Datově orientované diagramy HIPO
● Rozhodovací tabulky
● Pseudokód
zápis pomocí: Programovací jazyk
Porgram je předpis pro provedení určitých akcí počítačem.
zapsaný v programovacím jazyku
Programovací jazyky mohou být kompilované (do strojového kódu) nebo interpretované pomocí jiného programu (například shell, JVM)
zápis pomocí: Slovní popis
popsáno slovně
zápis pomocí: Vývojový diagram
Vývojový diagram je grafické znázornění algoritmu řešení úlohy jednotnými značkami a zkratkami
zápis pomocí: Strukturogramy
Strukturogramy - strukturogram je grafické znázornění algoritmu pomocí 3 základních programových struktur (posloupnost, opakování a větvení).
zápis pomocí: Datově orientované diagramy HIPO
Datově orientované diagramy HIPO - (z angl. hierarchical input process output model) je grafickým vyjádřením funkčního členění problému, struktury dat a postupu řešení problému při různém stupni podrobnosti.
zápis pomocí: Rozhodovací tabulky
Rozhodovací tabulky - používané při složitých větveních. Např. obrázek - Rozhodovací tabulka se smíšenou volbou
zápis pomocí: Pseudokód
Pseudokód je zápis algoritmu na papír aby tomu programátoři rozumněli, takový hybryd jazyka.
Příklady pseudokódu
pokud je číslo kreditní karty platné
proveď přenos, založený na číslech kreditní karty a objednávky
jinak
zobraz chybové hlášení
konec podmínky
Požadavky na Algoritmické konstrukce
Algoritmické konstrukce
Algoritmy lze teoreticky sestavovat libovolně, ale vzhledem k přehlednosti a úmyslně omezeným možnostem programovacích jazyků se musí dodržovat několik zásad:
Algoritmus
- má mít jeden začátek a jeden konec
- musí být složen pouze ze základních algoritmických konstrukcí
základní konstrukce algorytmu
základní konstrukce algorytmu:
- Sekvence je posloupnost příkazů, které se postupně provedou
- Větvení umožňuje rozdělit program do 2 větví podle toho, zda je nebo není splněna podmínka
- Větvení s prázdnou akcí umožňuje provést příkaz jenom tehdy, když je splněna podmínka
- Cyklus s podmínkou na začátku Když podmínka není na počátku splněna, cyklus nemusí proběhnout ani jednou.
- Cyklus s podmínkou na konci Tento cyklus musí proběhnout aspoň jednou.
- Cyklus se známým počtem průchodů Cyklus proběhne n krát v obecném případě (pro i od m do n) proběhne (n-m+1) krát pokud m>n tak neproběhne ani jednou.
Složitost algoritmu
Pod složitostí algoritmu rozumíme dobu prováděného algoritmu (časovou složitost) a rozsah použité operační paměti (prostorovou složitost).
Složitost závisí na velikosti vstupních dat, proto ji můžeme popsat jako funkci f(n), kde číslo n udává velikost vstupních dat.
Pro porovnání složitostí algoritmů se používá tzv. asymptotická složitost f(n)=O(g(n)), kde pro všechna čísla n od určitého čísla n0 a konstantu c>0 platí: f(n)<=c*g(n). Obdobně lze určit i spodní asymptotickou složitost f(n)=Ω(g(n)).
Za efektivní algoritmy považujeme takové postupy, jejichž složitost je nejvýše polynomiální (tedy n^k [n^127], nikoliv exponenciální k^n [2^n]). Provádění exponenciálních algoritmů či dokonce algoritmů o složitosti O(n!) může už jen při malém navýšení velikosti vstupních dat trvat příliš dlouho na to, aby v době ukončení výpočtu byl výsledek využitelný.
Typy algoritmů
Typy algoritmů
- Rekurzivní algoritmy
- Hladové algoritmy
- Algoritmy typu rozděl a panuj
- Algoritmy dynamického programování
- Pravděpodobnostní algoritmy
- Genetické algoritmy
- Heuristické algoritmy
Přitom jeden algoritmus může patřit do více skupin; například může být zároveň rekurzivní a typu rozděl a panuj
Rekurzivní algoritmy
- Rekurzivní algoritmy – které využívají (volají) samy sebe.