Articles

Jak jsme se sem dostali? Příběh algoritmů.

Do nedávna byly algoritmy doménou informatiků. Nyní však vstoupily do našeho života a stávají se všudypřítomnými. Algoritmus už není cizí slovo. Algoritmické obchodování, algoritmická zaujatost, algoritmus Facebooku, dokonce i algoritmická válka – všechny tyto pojmy se v posledních letech staly součástí našeho slovníku. Někteří lidé jdou tak daleko, že tvrdí, že žijeme v novém věku: ve věku algoritmu. Algoritmy však až tak nové nejsou. Používáme je, ať už vědomě, nebo ne, už stovky a tisíce let. Algoritmy jsou pouze konkrétní popisy krokových akcí, které je třeba provést, aby bylo dosaženo určitého výsledku. Jsou jedním z nejběžnějších nástrojů sdílení znalostí.

Prakticky jakýkoli proces, kdy někoho učíme, jak něco dělat, využívá algoritmy.

Některé aspekty algoritmů se však v posledních desetiletích změnily. Zejména zavedení počítačů znamená, že mnohé algoritmy jsou dnes dramaticky složitější, než jsme si v minulosti dokázali představit. Jak se algoritmy vyvinuly, že jsou dnes mnohem složitější než v minulosti? Podívejme se stručně na jejich historii.

Algoritmy řídící lidské jednání

Známka vydaná 6. září 1983 v Sovětském svazu k (přibližným) 1200. narozeninám al-Chwárizmího; prostřednictvím Wikimedia Commons

Termín algoritmus je odvozen od jména Muhammada ibn Músá al’Khwārizmího, perského matematika z 9. století. Jeho latinizované jméno Algoritmi znamenalo „desítková číselná soustava“ a v tomto významu se používalo po staletí. Moderní pojem algoritmus se v angličtině objevil v devatenáctém století a začal se běžněji používat od padesátých let 20. století, což bylo vyvoláno vznikem prvních komerčně dostupných počítačů.

Dávno předtím, než algoritmy dostaly svůj moderní název, však byly běžně vytvářeny a používány.

První algoritmy byly zachyceny na papíře ve starém Řecku. Učenci jako Nikomachos z Gerasy nebo Euklides tehdy vytvářeli základní kameny moderní matematiky. Aby usnadnili pochopení a použitelnost svých myšlenek, vyjádřili mnohé z nich jako postupné kroky.

Nikomachos z Gerasy představil Eratosthenovo síto. Síto dodnes používají studenti, kteří se učí psát efektivní počítačový kód. Pomohlo zjednodušit proces určování prvočísel. Prvočísla jsou přirozená čísla větší než jedna, která nelze vytvořit vynásobením dvou menších přirozených čísel. Například čtyřka není prvočíslo, protože ji lze vytvořit vynásobením dvou dvěma. Naproti tomu pět je prvočíslo, protože žádné přirozené číslo menší než pět nelze vynásobit tak, aby vzniklo pět. Zatímco určit několik prvních prvočísel není příliš obtížné (například 2, 3, 5, 7, 11, 13, 17, 19, 23 a 29), nalezení velkých prvočísel zabere hodně času. A velká prvočísla mají v kryptografii zásadní význam. Eratosthenovo síto poskytuje krok za krokem návod, jak z definované množiny čísel (například mezi 1 a 10 000) rychle odstranit všechna neprvočísla, dokud nezůstanou pouze prvočísla. Dnes je k dispozici řada algoritmů, které identifikaci takových čísel zjednodušují. Eratosthenovo síto odstartovalo celou rodinu algoritmů, které mají stejný cíl a jsou stále lepší (rychlejší nebo vyžadují méně kroků) při odhalování prvočísel.

Eratosthenovo síto podle SKoppa na německé Wikipedii

Euklides, další výše zmíněný učenec, v dnešní době mnohem známější než Nikomachos, zavedl algoritmus pro určení největšího společného dělitele dvou čísel. Opět ne vždy snadný úkol, ale v mnoha situacích zásadní. Euklidův algoritmus pomohl tento výpočet usnadnit. Proč je Euklidův algoritmus užitečný? Představte si, že máte místnost o přesných rozměrech 612 krát 2006 centimetrů, která potřebuje novou podlahu. Euklidův algoritmus vám pomůže najít velikost největších čtvercových dlaždic, které by podlahu úhledně pokryly. Odpověď daná algoritmem je 34 × 34 cm, což vede k rozložení 18 × 59 dlaždic. Každý obkladač vám samozřejmě řekne, že odpověď je špatná a že nemáte ponětí, co děláte, protože algoritmus nezohledňuje šířku spárovací hmoty a nenechává na ni prostor. Nebojte se: i to lze vypočítat a úhledně vyjádřit jako algoritmus.

Algoritmy řídící činnost strojů

V průběhu několika set následujících let bylo vytvořeno a na papír zachyceno mnoho dalších algoritmů. Jednotlivci je pak používali a postupovali podle nich krok za krokem. První algoritmus určený k provádění na stroji vytvořila Ada Lovelace (rozená Byronová) a zveřejnila jej v roce 1843.

Ada Byronová, čtyři roky. Brzy se stane první počítačovou programátorkou na světě. Podle výtvarníka: Alfred, hrabě d’Orsay. Digitální snímek; Somerville College, Oxford – Somerville College, Oxford, Public Domain, https://commons.wikimedia.org/w/index.php?curid=44246375

Ada byla zajímavá postava. Narodila se v roce 1815 jako jediné legitimní dítě básníka lorda Byrona. Rozvinulo se u ní velké matematické nadání. A protože lásku k poezii měla zjevně v genech, podařilo se jí nějakým způsobem rozvinout a vyvážit jak lásku k vědě, tak k poezii. Ada sama popsala své myšlení jako „poetickou vědu“. Jako zdatná matematička se díky svým vynálezům seznámila s Charlesem Babbagem, který je často nazýván „otcem počítačů“. Oba navázali pracovní vztah a přátelství. Ada se velmi zajímala o jeden z Charlesových návrhů – analytický motor.

Schéma analytického motoru. Autor: ArnoldReinhold – vlastní tvorba, CC BY 4.0, https://commons.wikimedia.org/w/index.php?curid=69497631

Analytický motor byl mechanický počítač – stroj, který automatizoval výpočty. Právě pro Analytical Engine napsala první algoritmus. Její prací byl vzorec, který ukazoval, jak Motor nastavit tak, aby vypočítal určitou složitou posloupnost čísel, tzv. bernoulliho čísla. Tento vzorec je dnes všeobecně uznáván jako první počítačový algoritmus v historii.

Ada se neomezila jen na čistě matematické výpočty. Vzhledem k tomu, že žila v devatenáctém století, byla skutečným vizionářem.

Zatímco mnozí její současníci vnímali první mechanické počítače především jako počítadla, ona se ptala, co je nad rámec provádění výpočtů. Zajímal ji širší potenciál mechanických počítačů jako nástrojů pro spolupráci. Doufala, že se dočkáme počítačů, které budou lidem dávat mnohem větší možnosti než jen prostřednictvím automatizace výpočtů.

Lovelaceův diagram z „poznámky G“, prvního zveřejněného počítačového algoritmu, od Ady Lovelace – http://www.sophiararebooks.com/pictures/3544a.jpg, Public Domain, https://commons.wikimedia.org/w/index.php?curid=37285970

Naneštěstí konstrukce Analytického motoru nebyla dokončena před Adinou smrtí, a tak svůj algoritmus nikdy nemohla vidět v akci. Analytický motor bohužel nebyl sestrojen dodnes. Další návrh Charlese Babbage, Difference Engine č. 2, postavilo Londýnské muzeum vědy až v roce 1991. Byla prokázána jeho funkčnost s využitím materiálů a technologií, které měl Charles Babbage k dispozici. Zdá se, že Babbage měl při stavbě svých návrhů prostě smůlu. Jiné částečné implementace Charlesovy práce existují i jinde, ale algoritmus Ady Byronové bohužel nemůžeme spustit na skutečném Analytical Engine.

Devatenácté století se stalo érou „algoritmů zabudovaných do strojů“.

Byla jich spousta a automatizovaly nejrůznější lidské činnosti. Pokud jste potřebovali složitý vzor na kusu látky, měl pro vás Joseph Marie Jacquard, francouzský tkadlec a obchodník, řešení: žakárový tkalcovský stav. Umožňoval výrobcům látek vyrábět složité vzory pomocí řady perforovaných karet, které dávaly tkalcovskému stavu pokyny, jak tkát. Podobným způsobem používaly první telefonní ústředny důmyslná mechanická zařízení ke spojení telefonních hovorů. Ty se automaticky řídily pokyny krok za krokem, aby nakonec dva lidé spolu mohli hovořit. Tyto stroje, ať už tkalcovské stavy nebo ústředny, byly ve své době převratné a dodnes působivé. Je těžké neobdivovat úroveň složitosti některých těchto strojů. Všechna tato zařízení však byla stále čistě mechanická. Skládaly se z pák, spínačů, hřídelí. Vydávaly spoustu hluku. A měly velmi daleko k tomu, čemu dnes říkáme počítače.

Algoritmy na univerzálních počítačích

První zmínky o algoritmech v elektronických (nemechanických) počítačích jsme zaznamenali až ve 30. letech 20. století. Alan Turing patřil mezi první vědce, kteří formálně zachytili, jak jednotlivci provádějí výpočty. Turingovým cílem bylo zachytit obecný postup, nikoliv postup specifický pro konkrétní úlohu, jako je určování prvočísel nebo výpočet největšího společného dělitele. Obecný proces pak bylo možné použít k provádění konkrétních úloh. Turingova koncepční práce vedla k vývoji toho, co je dnes známo jako Turingův stroj. Turingův stroj následně vedl ke vzniku počítačů pro všeobecné použití. Předpona obecný účel je zde zásadní. Na rozdíl od předchozích strojů by nové počítače prováděly libovolné sady instrukcí. Mohly být použity k účelům, které jejich tvůrci ani nepředpokládali. Jinými slovy: Turingova práce vedla k vývoji počítačů, na které můžeme instalovat a spouštět aplikace.

Bez konceptu Turingova stroje se neobejde žádný Flappy Bird na vašem smartphonu.

O několik desetiletí později se algoritmy staly nesmírně sofistikovanými. Dokonce tak sofistikované, že se nám často zdá nemožné vysvětlit, jak fungují. Ve dvacátém století mnozí raději uvažovali o počítačových algoritmech jako o černých skříňkách. Nemuseli jste rozumět tomu, jak přesně fungují. Zajímaly vás jen vstupy – co do černé skříňky přichází – a výstupy – co z ní vychází. Toto zjednodušení bylo volbou. V jednadvacátém století už to u některých algoritmů není volba: lidé nedokážou přesně vysvětlit, jak algoritmy dosahují konkrétních výstupů, a tak jsme nuceni o těchto algoritmech uvažovat jako o černých, nebo možná magických skříňkách. Jednou ze skupin takových algoritmů jsou některé algoritmy umělé inteligence. Jejich principy umíme vysvětlit. Můžeme například říci, že algoritmus používá umělou neuronovou síť. Můžeme také vysvětlit, jak byla síť vytvořena a jak vstupní data vyústila v určitý výstup. Co však nedokážeme vysvětlit, je to, proč byl výstupem algoritmu právě tento konkrétní výsledek, nad rámec čistě mechanického vysvětlení. Eric L. Loomis, jehož délka uvěznění závisela na algoritmu, se snažil pochopit, proč ho algoritmus COMPAS vyhodnotil jako vysoce rizikového zločince. Bylo to jednoduše nemožné. Propracovanost algoritmů je často ohromující. A to je teprve začátek.

Žijeme ve světě, kde jsou algoritmy všude – nejen na papíře nebo v našich myslích, ale ovládají stroje, počítače a roboty.

Jsou malé, všudypřítomné a – alespoň v některých případech – nevysvětlitelné.

Formálnější definice algoritmu zní: „jednoznačná specifikace způsobu řešení třídy problémů“ nebo „samostatný soubor operací, které mají být provedeny krok za krokem“

www.oed.com/view/Entry/4959

Od října 2018 je největší známé prvočíslo 277 232 917- 1, číslo s 23 249 425 číslicemi. Jen ověření, zda je toto jediné číslo prvočíslo, zabralo šest dní nepřetržitého počítání na současném domácím počítači. (https://www.mersenne.org/primes/press/M77232917.html)