2.1 Počítání a abstrakce

Matematika dala světu řadu algoritmů, výpočetních postupů, které lze vzít a přímo použít na konkrétní, často velmi úzce zaměřený, problém. Za všechny uveďme třeba rychlou Fourierovu transformaci (FFT, uplatnění při zpracování signálu, např. v mp3 formátu), Simplexový algoritmus (uplatnění v algoritmech strojového učení a optimalizačních úlohách), nebo kryptosystémy jako např. RSA založené na teorii čísel, či kryptosystémy založené na eliptických křivkách (ECC), atd. Další zajímavé příklady algoritmů může čtenář nalézt v článku (Cipra, b.r.).

Otázkou ovšem je, jestli lze při studiu IT matematiku zredukovat pouze na tento její výpočetní aspekt, tak jak se zpravidla děje na středních školách. Nejen dle autora tohoto textu není vhodné takovouto kastraci vysokoškolské matematiky provádět hned z několika důvodů. Pokusme se na tomto místě zmínit alespoň ty nejdůležitější.

Matematika je velmi úzce spjata s tzv. vědeckou metodou poznání, o které lze bez velkého přehánění prohlásit, že tvoří základ naší civilizace. Častým lidským cílem je hledání hlubšího porozumění světa a řešení různých problémů. Matematika v této činnosti nehraje roli pouhého početní stroje. Nejprve je nutné problém analyzovat, rozebrat ho na části a zkoumat jejich vztahy a chování. Typicky dojde k vytvoření matematického modelu, který (více či méně) dobře vystihuje náš problém. Následně se v rámci tohoto abstraktního modelu snažíme dobrat k závěrům a poznání původního problému.

Podobně abstraktně lze (a velmi často se tak děje) uvažovat nad programováním, tedy tvorbou programů řešících zadaný problém. Typicky je programátor postaven před reálný problém, který nejprve musí analyzovat a popsat. Navrhnout jeho řešení, rozmyslet si jak o problému uvažovat (vytvořit například podrobný objektový či databázový model). Následně se pustí do implementace, řešení. Bez dobrého návrhu založeného na porozumění problému je nepravděpodobné, že by jeho řešení bylo kvalitní.

K tomu jak program logicky strukturovat – jak abstraktně uvažovat nad jednotlivými částmi kódu – slouží několik programovacích paradigmat, například

Není náhodou, že poslední tři uvedená paradigmata jsou úzce inspirována matematickým způsobem myšlení. Cílem těchto snažení je vnést do řešení daného problému řád a zlepšit jeho pochopení. Výše uvedená paradigmata představují různé abstraktní způsoby jak o modelech a algoritmech uvažovat a přemýšlet.

Dále je dobré si uvědomit, že některé praktické úlohy nemají efektivní řešení. To může být pro studenty čerstvě přicházející ze středních škol malý šok. Školní příklady jsou ale hodně speciální druh problémů často vybraných právě tak, aby měly hezké řešení. Neexistence efektivního řešení znamená neexistenci vhodného algoritmu, který by danou úlohu efektivně řešil. Opět lehce překvapivě, tento fakt nemusí být vždy na škodu, ba naopak může mít dobré využití, například v počítačové bezpečnosti.

Příklad 2.1

Uvažme například úlohu rozhodnout o přirozeném čísle \(n\) zda-li je prvočíslem či složeným číslem. Můžeme se snažit hledat faktory (netriviální dělitele) čísla \(n\), to je ale těžká úloha. Na druhou stranu lze efektivně rozhodnout o neprvočíselnosti čísla \(n\) aniž bychom jeho faktory znali. Na tomto pozorování je založen výše zmíněný kryptosystém RSA.

Na závěr této abstraktněji laděné části textu si dovolme ještě jednu poznámku. Absolvent vysoké školy by měl zejména umět přemýšlet o tom, co a jak dělá. Práce, kterou lze automatizovat, byla, je a bude prováděna nemyslícími roboty. Dále by měl mít chuť se učit a poznávat nové věci. U studentů IT toto platí několikanásobně. Nikdy nevíte, před jaký problém budete v budoucnu postaveni, ani nevíte, kam se za dobu vašeho studia posunou v oboru používané technologie a nástroje. Matematika, jakožto systematický a logický způsob uvažování, vám v tomto snažení může jen pomoci. Navíc je matematika krásná.