Articles

Hogyan kerültünk ide? Az algoritmusok története.

Az algoritmusok a közelmúltig az informatikusok területe volt. Mostanra azonban beléptek az életünkbe, és egyre inkább áthatóvá válnak. Az algoritmus már nem idegen szó. Algoritmikus kereskedés, algoritmikus elfogultság, a Facebook-algoritmus, sőt, még az algoritmikus hadviselés is – ezek a kifejezések mind a szókincsünk részévé váltak az elmúlt években. Egyesek odáig mennek, hogy azt állítják, új korban élünk: az algoritmus korában. Pedig az algoritmusok nem is olyan újak. Évszázadok és évezredek óta használjuk őket, tudatosan vagy nem tudatosan. Az algoritmusok csupán olyan lépésről-lépésre történő cselekvések konkrét leírásai, amelyeknek meg kell történniük egy adott eredmény eléréséhez. Ezek a tudásmegosztás egyik legelterjedtebb eszközei.

gyakorlatilag minden olyan folyamat, amelynek során valakit megtanítunk arra, hogyan kell valamit csinálni, algoritmusokat használ.

Az algoritmusok néhány aspektusa azonban megváltozott az elmúlt évtizedekben. Különösen a számítógépek bevezetése jelenti azt, hogy sok algoritmus ma már drámaian összetettebb, mint ahogyan azt a múltban valaha is el tudtuk volna képzelni. Hogyan fejlődtek ki az algoritmusok, hogy ma már sokkal kifinomultabbak, mint a múltban voltak? Vessünk egy rövid pillantást a történetükre.

Az emberi cselekvéseket irányító algoritmusok

A Szovjetunióban 1983. szeptember 6-án, al-Khwārizmī (hozzávetőlegesen) 1200. születésnapjára emlékezve kiadott bélyeg; via Wikimedia Commons

Az algoritmus kifejezés Muhammad ibn Mūsā al’Khwārizmī, egy IX. századi perzsa matematikus nevéből származik. Latinosított neve, Algoritmi, “a tizedes számrendszert” jelentette, és évszázadokon át ebben a jelentésben használták. Az algoritmus modern fogalma a tizenkilencedik században alakult ki az angol nyelvben, és az 1950-es évektől vált általánosan használatossá, amit az első kereskedelmi forgalomban kapható számítógépek megjelenése váltott ki.

Az algoritmusok azonban már jóval azelőtt, hogy modern nevüket megkapták volna, általánosan létrehozták és használták őket.

Az első algoritmusokat az ókori Görögországban papírra vetették. Az olyan tudósok, mint a geraszai Nikomachosz vagy Euklidész akkoriban alkották meg a modern matematika építőköveit. Hogy megkönnyítsék ötleteik megértését és alkalmazhatóságát, sokukat lépésről lépésre történő műveletek formájában fejezték ki.

Geraszai Nikomachosz mutatta be Eratoszthenész szitáját. A szitát a mai napig használják a diákok, akik hatékony számítógépes kódot tanulnak írni. Segített leegyszerűsíteni a prímszámok azonosítását. A prímszámok olyan egynél nagyobb természetes számok, amelyek nem képezhetők két kisebb természetes szám szorzatából. Például a négy nem prímszám, mert kettő kettővel való szorzásával is kialakítható. Az öt ezzel szemben prímszám, mert ötnél kisebb természetes számok szorzatából nem lehet ötöt alkotni. Míg az első néhány prímszámot (például 2, 3, 5, 7, 11, 13, 17, 19, 23 és 29) nem túl nehéz azonosítani, a nagy prímszámok megtalálása sok időt vesz igénybe. A nagy prímszámok pedig nélkülözhetetlenek a kriptográfiában. Eratoszthenész szitája lépésről lépésre utasításokat ad arra, hogyan lehet egy meghatározott számhalmazból (például 1 és 10 000 között) gyorsan eltávolítani az összes nem prímszámot, amíg csak prímszámok maradnak. Ma már számos olyan algoritmus áll rendelkezésre, amely leegyszerűsíti az ilyen számok azonosítását. Eratoszthenész szitája algoritmusok egész családját indította el, amelyeknek ugyanaz a céljuk, és egyre jobbak (gyorsabbak, vagy kevesebb lépést igényelnek) a prímszámok felismerésében.

Eratoszthenész szitája by SKopp at German Wikipedia

Eukleidész, a másik fent említett tudós, aki manapság sokkal ismertebb, mint Nikomachosz, bevezetett egy algoritmust két szám legnagyobb közös osztójának azonosítására. Ismét nem mindig könnyű feladat, de sok helyzetben nélkülözhetetlen. Euklidész algoritmusa segített abban, hogy ez a számítás egyszerű legyen. Miért hasznos Euklidész algoritmusa? Képzeld el, hogy van egy szobád, amelynek pontos mérete 612 x 2006 centiméter, és új padlóra van szüksége. Euklidész algoritmusa segít megtalálni a legnagyobb négyzet alakú lapok méretét, amelyek szépen lefednék a padlót. Az algoritmus által adott válasz 34 cm x 34 cm, ami egy 18 x 59 csempéből álló elrendezést eredményez. Természetesen minden burkoló azt fogja mondani, hogy a válasz rossz, és hogy fogalma sincs, mit csinál, mert az algoritmus nem veszi figyelembe a fugaszélességet, és nem hagy neki helyet. Ne félj: ez is kiszámítható, és szépen ki lehet fejezni algoritmusként.

Gépi műveleteket irányító algoritmusok

Az ezt követő több száz év alatt még sok algoritmust alkottak és vetettek papírra. Ezeket aztán egyének használták és követték lépésről lépésre. Az első, gépi végrehajtásra szánt algoritmust Ada Lovelace (született Byron) alkotta meg, és 1843-ban publikálta.

Ada Byron, négyéves. Hamarosan ő lesz a világ első számítógépes programozója. A művésztől: Alfred, Comte d’Orsay. Digitális kép; Somerville College, Oxford – Somerville College, Oxford, Public Domain, https://commons.wikimedia.org/w/index.php?curid=44246375

Ada érdekes személyiség volt. A költő Lord Byron egyetlen törvényes gyermekeként született 1815-ben. Nagy tehetséget fejlesztett ki a matematikában. És mivel a költészet szeretete egyértelműen benne volt a génjeiben, valahogyan sikerült kifejlesztenie és egyensúlyba hoznia a tudomány és a költészet szeretetét. Ada önmaga “költői tudományként” jellemezte gondolkodásmódját. Mint képzett matematikus, találmányainak köszönhetően megismerkedett Charles Babbage-dzsel, akit gyakran neveznek “a számítógépek atyjának”. Mindkettőjük között munkakapcsolat és barátság alakult ki. Adát nagyon érdekelte Charles egyik tervezete, az Analitikus motor.

Az Analitikus motor ábrája. Szerző: ArnoldReinhold – Saját munka, CC BY 4.0, https://commons.wikimedia.org/w/index.php?curid=69497631

Az Analytical Engine egy mechanikus számítógép volt – egy gép, amely automatizálta a számításokat. Az Analytical Engine volt az, amelyhez megírta az első algoritmust. Munkája egy képlet volt, amely megmutatta, hogyan lehet a Motort úgy beállítani, hogy egy bizonyos összetett számsorozatot, az úgynevezett Bernoulli-számokat számítsa ki. A képlet ma már széles körben elismert, mint a történelem első számítógépes algoritmusa.

Ada nem csak a tisztán matematikai számításokra szorítkozott. Tekintettel arra, hogy a tizenkilencedik században élt, igazi látnok volt.

Míg kortársai közül sokan az első mechanikus számítógépekben elsősorban számhúzókat láttak, ő azt kérdezte, mi van a számítások elvégzésén túl. Kíváncsi volt a mechanikus számítógépekben mint együttműködési eszközökben rejlő szélesebb körű lehetőségekre. Azt remélte, hogy a számítógépek sokkal többre fogják képessé tenni az embert, mint pusztán a számítások automatizálása révén.

Lovelace diagramja Ada Lovelace “G feljegyzéséből”, az első közzétett számítógépes algoritmusból – http://www.sophiararebooks.com/pictures/3544a.jpg, Public Domain, https://commons.wikimedia.org/w/index.php?curid=37285970

Az Analytical Engine építése sajnos nem fejeződött be Ada halála előtt, így soha nem láthatta algoritmusát működés közben. Sajnos az Analytical Engine a mai napig nem épült meg. Charles Babbage egy másik tervét, a Difference Engine №2-t csak 1991-ben építette meg a Londoni Tudományos Múzeum. Működését Charles Babbage számára elérhető anyagok és technológiák felhasználásával mutatták be. Úgy tűnik, Babbage-nak egyszerűen nem volt szerencséje, amikor a tervei megépítéséről volt szó. Charles munkájának máshol is léteznek részleges megvalósításai, de sajnos Ada Byron algoritmusát nem tudjuk futtatni egy valódi Analytical Engine-en.

A XIX. század a “gépekbe ágyazott algoritmusok” kora lett.

Ezekből rengeteg volt, mindenféle emberi műveletet automatizáltak. Ha bonyolult mintára volt szükséged egy darab szöveten, Joseph Marie Jacquard francia szövő és kereskedőnek volt egy megoldása: a Jacquard-szövőszék. Ez lehetővé tette a szövetgyártók számára, hogy kifinomult mintákat készítsenek egy sor perforált kártya segítségével, amelyek utasították a szövőszéket, hogyan kell szőni. Hasonló módon a korai telefonközpontok kifinomult mechanikus eszközöket használtak a telefonhívások összekapcsolására. Automatikusan, lépésről lépésre követték az utasításokat, hogy végül két ember beszélhessen egymással. Ezek a gépek, akár szövőszékről, akár telefonközpontról legyen szó, a maguk idejében úttörőnek számítottak, és a mai napig lenyűgözőek. Nehéz nem csodálni néhány ilyen gép bonyolultsági szintjét. Mindezek az eszközök azonban még mindig tisztán mechanikusak voltak. Karokból, kapcsolókból, tengelyekből álltak. Rengeteg zajt csapkodtak. És nagyon messze álltak attól, amit manapság számítógépeknek nevezünk.

Algoritmusok az általános célú számítógépeken

Csak az 1930-as években láttuk az első említéseket az algoritmusokról az elektronikus (nem mechanikus) számítógépekben. Alan Turing az első tudósok között volt, aki formálisan megörökítette, hogy az egyének hogyan végezték a számításokat. Turing célja az volt, hogy egy általános folyamatot rögzítsen, nem pedig egy adott feladatra, például a prímszámok azonosítására vagy a legnagyobb közös osztó kiszámítására jellemzőt. Az általános folyamatot aztán konkrét feladatok elvégzésére lehetett használni. Turing koncepcionális munkája vezetett a ma Turing-gépként ismert gép kifejlesztéséhez. A Turing-gép pedig az általános célú számítógépek megjelenéséhez vezetett. Az általános célú előtag itt lényeges. A korábbi gépekkel ellentétben az új számítógépek tetszőleges utasításkészleteket hajtottak végre. Olyan célokra lehetett őket használni, amelyeket még a megalkotóik sem láttak előre. Más szóval: Turing munkája olyan számítógépek kifejlesztéséhez vezetett, amelyekre alkalmazásokat telepíthetünk és futtathatunk.”

Nincs Flappy Bird az okostelefonon a Turing-gép fogalma nélkül.

Az algoritmusok évtizedekkel később rendkívül kifinomultak. Olyannyira kifinomultak, hogy gyakran képtelenség megmagyarázni a működésüket. A huszadik században sokan inkább úgy gondoltak a számítógépes algoritmusokra, mint fekete dobozokra. Nem kellett megérteni, hogy pontosan hogyan működnek. Csak a bemenetekkel – vagyis azzal, hogy mi kerül a fekete dobozba – és a kimenetekkel – vagyis azzal, hogy mi jön ki belőle – törődtek. Ez az egyszerűsítés egy választás volt. A huszonegyedik században néhány algoritmus esetében ez a választás már nem lehetséges: az emberek nem tudják pontosan megmagyarázni, hogy az algoritmusok hogyan érnek el bizonyos kimeneteket, ezért kénytelenek vagyunk úgy gondolni ezekre az algoritmusokra, mint fekete, vagy talán mágikus dobozokra. Az ilyen algoritmusok egyik csoportját a mesterséges intelligencia algoritmusai alkotják. Meg tudjuk magyarázni az elveiket. Mondhatjuk például, hogy egy algoritmus mesterséges neurális hálózatot használ. Azt is meg tudjuk magyarázni, hogyan jött létre a hálózat, és hogyan eredményezett a bemenet egy adott kimenetet. Azt azonban nem tudjuk megmagyarázni, hogy a tisztán mechanikus magyarázaton túl miért ez a bizonyos eredmény volt az algoritmus kimenete. Eric L. Loomis, akinek a börtönbüntetése hossza egy algoritmustól függött, megpróbálta megérteni, hogy a COMPAS algoritmus miért értékelte őt magas kockázatú bűnözőnek. Egyszerűen lehetetlen volt. Az algoritmusok kifinomultsága gyakran lehengerlő. És ez még csak a kezdet.

Egy olyan világban élünk, ahol az algoritmusok mindenütt jelen vannak – nem csak papíron vagy a fejünkben, hanem a gépeket, számítógépeket és robotokat irányítva.

Kicsik, mindenütt jelen vannak, és – legalábbis bizonyos esetekben – megmagyarázhatatlanok.

Az algoritmus formálisabb definíciója: “a problémák egy osztályának megoldására vonatkozó egyértelmű specifikáció” vagy “az elvégzendő műveletek önálló, lépésről-lépésre történő összessége”

www.oed.com/view/Entry/4959

2018 októberében a legnagyobb ismert prímszám a 277.232.917-1, amely 23.249.425 számjegyből áll. Csak annak ellenőrzése, hogy ez az egyetlen szám prímszám-e, hat napig tartott megállás nélkül számolni egy korabeli otthoni számítógépen. (https://www.mersenne.org/primes/press/M77232917.html)