I. Algoritmus, prostředky pro zápis algoritmu, algoritmické konstrukce. Složitost algoritmu, příklady algoritmů, algoritmicky neřešitelné problémy. Flashcards

1
Q

Co je to algoritmus?

A

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ší.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

vlastnosti algoritmu?

A

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

prostředky pro zápis algoritmu?

A

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

zápis pomocí: Programovací jazyk

A

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)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

zápis pomocí: Slovní popis

A

popsáno slovně

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

zápis pomocí: Vývojový diagram

A

Vývojový diagram je grafické znázornění algoritmu řešení úlohy jednotnými značkami a zkratkami

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

zápis pomocí: Strukturogramy

A

Strukturogramy - strukturogram je grafické znázornění algoritmu pomocí 3 základních programových struktur (posloupnost, opakování a větvení).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

zápis pomocí: Datově orientované diagramy HIPO

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

zápis pomocí: Rozhodovací tabulky

A

Rozhodovací tabulky - používané při složitých větveních. Např. obrázek - Rozhodovací tabulka se smíšenou volbou

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

zápis pomocí: Pseudokód

A

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Požadavky na Algoritmické konstrukce

A

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í
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

základní konstrukce algorytmu

A

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.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Složitost algoritmu

A

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ý.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Typy algoritmů

A

Typy algoritmů

  1. Rekurzivní algoritmy
  2. Hladové algoritmy
  3. Algoritmy typu rozděl a panuj
  4. Algoritmy dynamického programování
  5. Pravděpodobnostní algoritmy
  6. Genetické algoritmy
  7. 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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Rekurzivní algoritmy

A
  • Rekurzivní algoritmy – které využívají (volají) samy sebe.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Hladové algoritmy

A

Hladové algoritmy se k řešení propracovávají po jednotlivých rozhodnutích, která už nejsou dále revidována, jakmile jsou jednou učiněna.

17
Q

Algoritmy typu rozděl a panuj

A

Algoritmy typu rozděl a panuj dělí problém na menší podproblémy, na než se rekurzivně aplikují ( až po triviální podproblémy, které lze vyřešit přímo), po čemž se dílčí řešení vhodným způsobem sloučí.

18
Q

Algoritmy dynamického programování

A

Algoritmy dynamického programování pracují tak, že postupně řeší části problému od nejjednodušších po složitější s tím, že využívají výsledky již vyřešených jednodušších podproblémů. Moho úloh se řeší převedením na grafovou úlohu a aplikací příslušného grafového algoritmu.

19
Q

Pravděpodobnostní algoritmy

A

Pravděpodobnostní algoritmy (někdy též probabilistické) provádějí některá rozhodnutí náhodně či pseudonáhodně. V případě, že máme k dispozici více počítačů (procesorů nebo jader), můžeme úlohu mezi ně rozdělit, což nám umožní ji vyřešit rychleji; tomuto cíli se věnují paralelní algoritmy.

20
Q

Genetické algoritmy

A

Genetické algoritmy - pracují na základě napodobování biologických evolučních procesů, postupným “pěstováním” nejlepších řešení pomocí mutací a křížení. V genetickém programování se tento postup aplikuje přímo na algoritmy (resp. programy), které jsou zde chápány jako možná řešení daného problému.

21
Q

Heuristické algoritmy

A

Heurisitické algoritmy - si za cíl nekladou nalézt přesné řešení, ale pouze nějaké vhodné přiblížení; používají se v situacích, kdy dostupné zdroje (např. čas) nepostačují na využití exaktních algoritmů (nebo pokud nejsou žádné vhodné exaktní algoritmy známy).

22
Q

známé algoritmy

A
  • Eratosthenovo síto – algoritmus pro nalezení všech prvočísel menších než zadaná horní mez
  • Euklidův algoritmus – algoritmus, kterým lze určit největšího společného dělitele dvou přirozených čísel
  • Dijkstrův algoritmus – algoritmus sloužící k nalezení nejkratší cesty v grafu.
23
Q

Problém - Co musí být v zadání problému určeno?

A

Problém

V zadání problému musí být určeno:

  • co je množinou možných vstupů
  • co je množinou možných výstupů
  • jaký je vztah mezi vstupy a výstupy
24
Q

Rozhodovací problémy

A

Rozhodovací problémy

Situace, kdy množina výstupů je {Ano,Ne} je poměrně častá. Takovým problémům se říká rozhodovací problémy. Rozhodovací problémy většinou specifikujeme tak, že místo popisu toho, co je výstupem, uvedeme otázku.

Příklad:

Problém „Prvočíselnosti“

  • Vstup: Přirozené číslo n.
  • Otázka: Je n prvočíslo?
25
Q

Optimalizační problémy

A

Optimalizační problémy

Dalším speciálním případem jsou tzv. optimalizační problémy. Optimalizační problém je problém, kde je úkolem vybrat z nějaké množiny přípustných řešení takové řešení, které je v nějakém ohledu optimální.

26
Q

Algoritmicky řešitelné problémy

A

máme problém P.

existuje li algoritmus, který P řeší, pak P je algoritmicky řešitelný.

Jestliže P je rozhodovací problém a existuje algoritmus, který P řeší, pak říkáme, že problém P je rozhodnutelný.

Když chceme ukázat, že problém P je algoritmicky řešitelný, stačí ukázat nějaký algoritmus, který ho řeší (a případně ukázat, že daný algoritmus problém P skutečně řeší).

27
Q

Třídy složitosti

A

Algoritmy můžeme podle f(N) rozřadit do tříd.

  • P - polynomiální algoritmus.
  • NP - nedeterministicky polynomiálních problémy.
  • NP-Complete
  • NP-Hard
28
Q

Třídy složitosti

A
  • P - Pokud je rozhodovací problém řešitelný algoritmem o složitosti O(N), pak se jedná o polynomiální algoritmus.
  • NP - Pokud pro daný rozhodovací problém neexistuje polynomiální algoritmus, který řešení nalezne, ale existuje polynomiální algoritmus, který řešení ověří, hovoříme o nedeterministicky polynomiálních problémech. Problémy, které patří do této třídy jsou například problém obchodního cestujícího a splnitelnost formule výrokové logiky. Jednou z největších současných otevřených otázek teoretické informatiky je, zda se třídy P a NP rovnají. Vše nasvědčuje tomu, že to pravda není (viz NP-úplnost).
  • NP-Complete - Taková podmnožina NP problémů, na jejíž prvky (=NPC problémy) lze převést všechny NP problémy. Patří sem například problém obchodního cestujícího, Hamiltonovy cesty, hledání kliky grafu a obarvení grafu.
  • NP-Hard - Obchodní cestující je NP-Hard problém, který je zároveň i NP-C a tedy i NP. NPH problém nemusí být NP, protože nemusí být rozhodovacím problémem. Příkladem takového problému je Halting problém, který je NPH, ale není NPC. Je to považováno za algoritmicky neřešitelný problém.
29
Q

Některé asymptotické složitosti mají i své triviální pojmenování (jsou seřazeny od nejrychlejších k nejpomalejším):

A

Některé asymptotické složitosti mají i své triviální pojmenování (jsou seřazeny od nejrychlejších k nejpomalejším):

O(1) – konstantní

O(log N) – logaritmická

O(N) – lineární

O(N log N) – lineárně logaritmická

O(N^2) – kvadratická

O(N^3) – kubická

obecně O(N^k) – polynomiální

obecně O(k^N) – exponenciální

O(N!) – faktoriálová

30
Q

Typické příklady časové složitosti

A

Typické příklady časové složitosti

  • O(1) přístup k prvku pole pomocí indexu
  • O(log 2 N) vyhledání prvku v seřazeném poli metodou půlení intervalu
  • O(N) vyhledání prvku v neseřazeném poli lineárním (sekvenčním) vyhledáváním
  • O(N log N) seřazení pole čísel podle velikosti algoritmem Mergesort
  • O(N2) diskrétní Fourierova transformace (DFT)
  • O(2^N) přesné řešení problému obchodního cestujícího (či jiného NP-úplného problému hrubou silou)

Existují i funkce, u nichž nelze složitost vůbec shora rozumně omezit. Příkladem budiž Ackermannova funkce.

31
Q

Snižování výpočetní složitosti algoritmů

A

Snahou programátorů je asymptotickou složitost dostat alespoň na polynomiální úroveň, horší složitosti jsou v reálných aplikacích (tedy u vyšších N) nepoužitelné. Typickým příkladem je diskrétní Fourierova transformace (DFT), která v obecném tvaru má asymptotickou složitost O(N2), proto je nevhodná pro transformaci vektorů větších délek. Existuje rychlá verze této transformace označovaná jako FFT (Fast Fourier Transform), která využívá skutečnosti, že pro délky vektorů N=KM (kde K je určeno tzv. radixem transformace 2,4,8,… a M je přirozené číslo), lze tento problém zjednodušit na složitost O(N log N).

32
Q

neřešitelné problémy

A

za neřešitelné považujeme takové ke kterým nelze najít algorytmus. nejznámější jsou:
Obracejte a přidávejte, dokud nevznikne palindrom
Problém zastavení - používá teoretický model algorytmického počítače
Wangovy dlaždice - domino čtyřstranné