Algoritmus: Porovnání verzí

Z WikiKnihovna
m (26 revizí: IMPORT 1: °import všech stránek v hl. jmenném prostoru z KiskWiki (http://kisk.phil.muni.cz/))
 
(Není zobrazeno 6 mezilehlých verzí od jednoho dalšího uživatele.)
Řádek 1: Řádek 1:
 
'''Autor:''' Petr Věžník
 
'''Autor:''' Petr Věžník
  
'''Klíčová slova:'''
+
'''Klíčová slova:''' algoritmus, vlastnosti algoritmů, definice algoritmů, reprezentace a zápis algoritmů
  
'''Synonyma:''' ---
+
'''Synonyma:''' návod, postup
  
 
'''Související pojmy:'''
 
'''Související pojmy:'''
  
 
<blockquote>
 
<blockquote>
''nadřazené'' - </blockquote>
+
''nadřazené'' - informatika, matematika </blockquote>
 
<blockquote>
 
<blockquote>
''podřazené'' - ---</blockquote>
+
''podřazené'' - vývojový diagram, strukturogram, rozhodovací tabulka, HIPO diagram </blockquote>
  
  
  
 
== Definice ==
 
== Definice ==
[[Soubor:portret.jpg|thumb|right|Abū ʿAbdallāh Muḥammad ibn Mūsā al-Khwārizmī]]
+
[[Soubor:portret.jpg|thumb|right|al-Khwārizmī]]
Slovo algoritmus pochází ze jména významného perského matematika žijícího v první polovině 9. století (cca 780–840 n. l.), kterým byl Abū ‘Abd Allāh Muhammad ibn Mūsā al-Khwārizmī. Tento učenec ve svém díle prakticky vytvořil systém arabských číslic a základy algebry (konkrétně metody řešení lineárních a kvadratických rovnic), jejíž název pochází přímo z titulu tohoto díla (Kitūb al-jabr waāl-muqūbala). Jeho jméno bylo do latiny převedeno jako algorismus, a původně znamenalo: „provádění aritmetiky pomocí arabských číslic
+
Samotné slovo algoritmus je odvozeno ze jména významného perského matematika a astronoma jménem Abū ‘Abd Allāh Muhammad ibn Mūsā al-Khwārizmī[[#Literatura|[4]]]. Ten ve svém díle vytvořil systém arabských číslic a základy algebry. Jeho jméno bylo do latinky převedeno jako algoritmus a stalo se synonymem pro označení různých matematických postupů. Teprve zhruba od 20. století se používá v dnešním významu slova a je jedním ze základních pojmů v matematice. ''„Algoritmem rozumíme soubor přesně stanovených pravidel, určující pořadí daného konečného systému operací, který zabezpečuje řešení všech úloh daného typu"''[[#Literatura|[2]]]. Nebo také můžeme říci, že ''„algoritmus je možno chápat i jako mlýnek na data. Nasypeme-li do něj správná data a zameleme, obdržíme požadovaný výsledek“'' [[#Literatura|[3, s. 28]]].
  
Pojem algoritmus je jedním ze základních pojmů v matematice. Algoritmem se rozumí soubor přesně stanovených pravidel, určující pořadí daného konečného systému operací, který zabezpečuje řešení všech úloh daného typu.
+
Přestože se pojem algoritmus objevuje především v informatice a matematice, do jisté míry se s ním můžeme setkat i v dalších vědních oborech. V širším slova smyslu se jedná o jakýsi návod nebo postup. V užším slova smyslu se algoritmem rozumí pouze takové postupy, které splňují definované vlastnosti.
  
Přestože se pojem algoritmus objevuje především v informatice, do jisté míry se s ním můžeme setkat i v dalších vědních oborech. V širším slova smyslu se jedná o jakýsi návod nebo postup. V užším slova smyslu se algoritmem rozumí pouze takové postupy, které splňují jasně definované vlastnosti.
 
  
 
== Vlastnosti algoritmů ==
 
== Vlastnosti algoritmů ==
; ''Konečnost'' : Požadovaný výsledek musí být poskytnut v „rozumném" čase (pokud by výpočet trval na nejrychlejším počítači např. jeden milion let, těžko bychom mohli hovořit o algoritmu řešení, nemluvě o výpočtu, který by neskončil vůbec). Za rozumný lze považovat čas, kdy nám výsledek výpočtu k něčemu bude.
+
Jak již bylo řečeno výše, každý postup musí splňovat definované vlastnosti, abychom jej mohli klasifikovat jako algoritmus. Jaké to jsou vlastnosti je nastíněno dále v textu. Nejprve je však nutné varovat, že teorie se zde trochu rozchází. Můžeme nalézt jak rozličné definice vlastností, tak nesjednocenou terminologii. Proto v textu zaměříme pouze na ty nejdůležitější.
; ''Hromadnost'' : Vstupní data nejsou v popisu algoritmu reprezentována konkrétními hodnotami, ale spíše množinami, ze kterých lze data vybrat (např. při řešení trojúhelníka mohou být velikosti stran desetinná čísla). Při popisu algoritmu v programovacím jazyce se to projeví tím, že vstupy do algoritmu jsou označeny symbolickými jmény.
+
; ''Konečnost'' : Každý algoritmus musí obsahovat pouze konečné množství kroků, po kterých skončí (jinými slovy, nezacyklí se). Bez této vlastnosti by byl algoritmus nepoužitelný.
; ''Jednoznačnost'' : Každý předpis je složen z kroků, které na sebe navazují. Každý krok můžeme charakterizovat jako přechod z jednoho stavu algoritmu do jiného, přičemž každý stav je určen zpracovávanými daty. Tím, jak data v jednotlivých stavech algoritmu vypadají, musí být jednoznačně určeno, který krok následuje (např: V řešení trojúhelníka může nastat situace, kdy vychází na základě vstupních dat jedno nebo dvě řešení. Situace je tedy nejednoznačná, řešení musí být jednoznačné, tzn. v předpisu se s touto možností musí počítat a musí v něm být návod, jak ji řešit.).
+
; ''Opakovatelnost'' : Jsou-li zadána stejná data, algoritmus vždy dospěje ke stejným výsledkům
; ''Opakovatelnost'' : Při použití stejných vstupních údajů musí algoritmus dospět vždy k témuž výsledku.
+
; ''Rezultativnost'' :Algoritmus vede vždy ke správnému výsledku
; ''Rezultativnost'' : Algoritmus vede ke správnému výsledku.
+
V literatuře je možné se dočíst také o dalších vlastnostech, jako je např. obecnost, determinovatelnou, hromadnost, jednoznačnost, aj.
 +
 
  
 
== Dělení algoritmů ==
 
== Dělení algoritmů ==
Algoritmy můžeme klasifikovat různými způsoby, přičemž jeden algoritmus může patřit zároveň do více skupin
+
Algoritmy můžeme klasifikovat různými způsoby, přičemž jeden algoritmus může patřit zároveň do více skupin. Narozdíl od vlastností algoritmů, zde je terminologie poměrně sjednocená.
* '''Rekurzivní algoritmy''', které využívají (volají) samy sebe.
+
* '''Rekurzivní algoritmy ''' - využívají a odkazují sami na sebe
* '''Hladové algoritmy''' se k řešení propracovávají po jednotlivých rozhodnutích, která, jakmile jsou jednou učiněna, už nejsou dále revidována.
+
* '''Hladové algoritmy''' - propracovávají se k řešení pomocí jednotlivých rozhodnutí, která jakmile jsou učiněna, už nejsou dále revidována
* '''Algoritmy typu rozděl a panuj''' dělí problém na menší podproblémy, na něž 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čí.
+
* '''Iterativní algoritmy ''' - opakují některou svou část (cykly)
* '''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ů. Mnoho úloh se řeší převedením na grafovou úlohu a aplikací příslušného grafového algoritmu.
+
* '''Algoritmy typu rozděl a panuj''' - problém na menší podproblémy a dílčí řešení slučují
* '''Pravděpodobnostní algoritmy''' (někdy též probabilistické) provádějí některá rozhodnutí náhodně či pseudonáhodně.
+
* '''Algoritmy dynamického programování''' - řeší problémy od nejjednodušších po složitější, přičemž využívají výsledky již vyřešených jednodušších problémů
* 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'''.
+
* '''Pravděpodobnostní algoritmy ''' - některá rozhodnutí provádějí náhodně
* '''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ápany jako možná řešení daného problému.
+
* '''Paralelní algoritmy''' - využívají více počítačů, úlohu mezi ně rozdělí a díky tomu dospějí k rychlejšímu výsledku
* '''Heuristické 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 vůbec známy).
+
* '''Genetické algoritmy''' – napodobují biologické evoluční procesy
 +
* '''Heuristické algoritmy''' – nehledají přesná řešení, pouze nějaká vhodná přiblížení
 +
 
 +
 
 +
 
 +
== Reprezentace a zápis algoritmů ==
 +
[[Soubor:diagram.jpg|thumb|right|ukázka vývojového diagramu]]
 +
Zde je vysvětleno několik základních způsobů, jak můžeme zapsat algoritmy. Správně zapsat algoritmus je důležité především pro jeho další využití, případně úpravu.  
 +
* '''Slovní popis''' – slovní popis v přirozeném jazyce. Vysvětlení krok po kroku, co algoritmus v dané fázi provádí a jak bude reagovat
 +
* '''Vývojový diagram''' - grafické znázornění algoritmu, řešení úlohy jednotnými značkami a zkratkami
 +
* '''Strukturogram''' – Úspornější znázornění algoritmu, kombinace grafického a textového popisu
 +
* '''Datově orientovaný diagram HIPO ''' – (z angl. Hierarchy plus Input- Process- Output), 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 [[#Literatura|[3]]].
 +
* '''Rozhodovací tabulka''' – používá se zejména při složitějších větvení, tabulka rozdělená do kvadrantů
 +
 
 +
 
  
 
== Použitá literatura ==
 
== Použitá literatura ==
 
# DVORSKÝ, Jiří. ''Algoritmy I : Pracovní verze skript'' [online]. 2008 [cit. 2010-06-10]. Dostupné z WWW: <http://www.cs.vsb.cz/dvorsky/Download/Algoritmy/ZakladyAlgoritmizace28022007.pdf>.
 
# DVORSKÝ, Jiří. ''Algoritmy I : Pracovní verze skript'' [online]. 2008 [cit. 2010-06-10]. Dostupné z WWW: <http://www.cs.vsb.cz/dvorsky/Download/Algoritmy/ZakladyAlgoritmizace28022007.pdf>.
# ŠALÁT, TIBOR. ''Malá encyklopedie matematiky''. 1. vyd. Bratislava : Obzor, 1967. 692 s. ISBN 65-083-87.
+
# ŠALÁT, Tibor. ''Malá encyklopedie matematiky''. 1. vyd. Bratislava : Obzor, 1967. 692 s. ISBN 65-083-87.
 
# ''Algoritmy: Teoretický úvod'' [online]. 2006 [cit. 2010-06-11]. Dostupný z WWW: <http://www.manualy.net/article.php?articleID=12>.
 
# ''Algoritmy: Teoretický úvod'' [online]. 2006 [cit. 2010-06-11]. Dostupný z WWW: <http://www.manualy.net/article.php?articleID=12>.
 
# ''History of mathematics for young mathematicians: Al-Khwarizmi'' [online]. [cit. 2010-06-11]. Dostupný z WWW: <http://www.mathsisgoodforyou.com/people/alkhwarizmi.htm>.
 
# ''History of mathematics for young mathematicians: Al-Khwarizmi'' [online]. [cit. 2010-06-11]. Dostupný z WWW: <http://www.mathsisgoodforyou.com/people/alkhwarizmi.htm>.

Aktuální verze z 6. 2. 2012, 10:40

Autor: Petr Věžník

Klíčová slova: algoritmus, vlastnosti algoritmů, definice algoritmů, reprezentace a zápis algoritmů

Synonyma: návod, postup

Související pojmy:

nadřazené - informatika, matematika

podřazené - vývojový diagram, strukturogram, rozhodovací tabulka, HIPO diagram


Definice

al-Khwārizmī

Samotné slovo algoritmus je odvozeno ze jména významného perského matematika a astronoma jménem Abū ‘Abd Allāh Muhammad ibn Mūsā al-Khwārizmī[4]. Ten ve svém díle vytvořil systém arabských číslic a základy algebry. Jeho jméno bylo do latinky převedeno jako algoritmus a stalo se synonymem pro označení různých matematických postupů. Teprve zhruba od 20. století se používá v dnešním významu slova a je jedním ze základních pojmů v matematice. „Algoritmem rozumíme soubor přesně stanovených pravidel, určující pořadí daného konečného systému operací, který zabezpečuje řešení všech úloh daného typu"[2]. Nebo také můžeme říci, že „algoritmus je možno chápat i jako mlýnek na data. Nasypeme-li do něj správná data a zameleme, obdržíme požadovaný výsledek“ [3, s. 28].

Přestože se pojem algoritmus objevuje především v informatice a matematice, do jisté míry se s ním můžeme setkat i v dalších vědních oborech. V širším slova smyslu se jedná o jakýsi návod nebo postup. V užším slova smyslu se algoritmem rozumí pouze takové postupy, které splňují definované vlastnosti.


Vlastnosti algoritmů

Jak již bylo řečeno výše, každý postup musí splňovat definované vlastnosti, abychom jej mohli klasifikovat jako algoritmus. Jaké to jsou vlastnosti je nastíněno dále v textu. Nejprve je však nutné varovat, že teorie se zde trochu rozchází. Můžeme nalézt jak rozličné definice vlastností, tak nesjednocenou terminologii. Proto v textu zaměříme pouze na ty nejdůležitější.

Konečnost
Každý algoritmus musí obsahovat pouze konečné množství kroků, po kterých skončí (jinými slovy, nezacyklí se). Bez této vlastnosti by byl algoritmus nepoužitelný.
Opakovatelnost
Jsou-li zadána stejná data, algoritmus vždy dospěje ke stejným výsledkům
Rezultativnost
Algoritmus vede vždy ke správnému výsledku

V literatuře je možné se dočíst také o dalších vlastnostech, jako je např. obecnost, determinovatelnou, hromadnost, jednoznačnost, aj.


Dělení algoritmů

Algoritmy můžeme klasifikovat různými způsoby, přičemž jeden algoritmus může patřit zároveň do více skupin. Narozdíl od vlastností algoritmů, zde je terminologie poměrně sjednocená.

  • Rekurzivní algoritmy - využívají a odkazují sami na sebe
  • Hladové algoritmy - propracovávají se k řešení pomocí jednotlivých rozhodnutí, která jakmile jsou učiněna, už nejsou dále revidována
  • Iterativní algoritmy - opakují některou svou část (cykly)
  • Algoritmy typu rozděl a panuj - problém na menší podproblémy a dílčí řešení slučují
  • Algoritmy dynamického programování - řeší problémy od nejjednodušších po složitější, přičemž využívají výsledky již vyřešených jednodušších problémů
  • Pravděpodobnostní algoritmy - některá rozhodnutí provádějí náhodně
  • Paralelní algoritmy - využívají více počítačů, úlohu mezi ně rozdělí a díky tomu dospějí k rychlejšímu výsledku
  • Genetické algoritmy – napodobují biologické evoluční procesy
  • Heuristické algoritmy – nehledají přesná řešení, pouze nějaká vhodná přiblížení


Reprezentace a zápis algoritmů

ukázka vývojového diagramu

Zde je vysvětleno několik základních způsobů, jak můžeme zapsat algoritmy. Správně zapsat algoritmus je důležité především pro jeho další využití, případně úpravu.

  • Slovní popis – slovní popis v přirozeném jazyce. Vysvětlení krok po kroku, co algoritmus v dané fázi provádí a jak bude reagovat
  • Vývojový diagram - grafické znázornění algoritmu, řešení úlohy jednotnými značkami a zkratkami
  • Strukturogram – Úspornější znázornění algoritmu, kombinace grafického a textového popisu
  • Datově orientovaný diagram HIPO – (z angl. Hierarchy plus Input- Process- Output), 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 [3].
  • Rozhodovací tabulka – používá se zejména při složitějších větvení, tabulka rozdělená do kvadrantů


Použitá literatura

  1. DVORSKÝ, Jiří. Algoritmy I : Pracovní verze skript [online]. 2008 [cit. 2010-06-10]. Dostupné z WWW: <http://www.cs.vsb.cz/dvorsky/Download/Algoritmy/ZakladyAlgoritmizace28022007.pdf>.
  2. ŠALÁT, Tibor. Malá encyklopedie matematiky. 1. vyd. Bratislava : Obzor, 1967. 692 s. ISBN 65-083-87.
  3. Algoritmy: Teoretický úvod [online]. 2006 [cit. 2010-06-11]. Dostupný z WWW: <http://www.manualy.net/article.php?articleID=12>.
  4. History of mathematics for young mathematicians: Al-Khwarizmi [online]. [cit. 2010-06-11]. Dostupný z WWW: <http://www.mathsisgoodforyou.com/people/alkhwarizmi.htm>.