Az algoritmus olyan jól meghatározott, véges lépésekből álló eljárás vagy szabályrendszer, amely egy adott feladat megoldására vagy probléma eldöntésére szolgál. Egy algoritmus pontosan meghatározza, milyen bemenet(ek)re van szükség, milyen műveleteket kell végrehajtani, és milyen kimenetet állít elő.
A recept gyakran említett hétköznapi példa az algoritmusra: lépésről lépésre mutatja meg, mit kell tenni, bemenetként (hozzávalók, eszközök) dolgozik, és kimenetként egy kész ételt ad. Hasonlóan algoritmusok irányítanak minden olyan folyamatot, ahol előre megírt utasítások szerint kell cselekedni — akár emberi, akár gépi végrehajtásról van szó.
A szó eredete egy perzsa matematikus nevéhez kötődik: Al-Khwārizmī (perzsa: خوارزمی, 780–850 körül). Nevét a középkori latin fordításokban és a későbbi európai irodalomban a mai "algoritmus" alakra vezették vissza.
Algoritmus a számítástechnikában
A számítástechnikában az algoritmus olyan műveletek pontos és részletes listája, amelyeket egy elméleti modell — például egy Turing-gép — elvégezhet. Gyakorlati célokra az algoritmusokat leírhatjuk pszeudokódban, folyamatábrákban vagy programozási nyelveken, attól függően, hogy emberi olvasásra, tervezésre vagy gépi futtatásra készülnek.
Fontos jellemzők
- Véget érés (finiteness): minden algoritmusnak véges számú lépés után be kell fejeződnie.
- Meghatározottság (definiteness): minden lépés pontosan meg van határozva; nincs helye kétértelműségnek.
- Bemenet és kimenet: az algoritmus bizonyos bemenet(ek)et használ és kimenetet állít elő.
- Hatékonyság (effectiveness): az egyes lépések végrehajthatók kell legyenek elképzelhető erőforrásokkal.
- Determináltság vs. nem-determináltság: egy algoritmus lehet determinisztikus (mindig ugyanazt a lépést hajtja végre ugyanazon feltételek mellett) vagy nem-determinisztikus/randromizált.
Algoritmusok típusai és megközelítések
- Iteratív és rekurzív megoldások — ismétléssel vagy önhívással dolgoznak.
- Grédy (greedy), oszd meg és uralkodj (divide and conquer), dinamikus programozás — klasszikus tervezési stratégiák.
- Párhuzamos és elosztott algoritmusok — több feldolgozóegységen futnak egyszerre.
- Heurisztikák és approximációk — olyan problémák esetén, ahol pontos megoldás költséges vagy nem ismert.
Példák
- Egyszerű példák: recept, útvonalterv, szerelési útmutató.
- Klasszikus számítástechnikai algoritmusok: rendezés (pl. buborék-, gyorsrendezés), keresés (pl. bináris keresés), gráfalgoritmusok (pl. Dijkstra legrövidebb útja), titkosítási algoritmusok, tömörítési eljárások.
- Gyakorlati alkalmazások: keresőmotorok rangsorolása, ajánlórendszerek, útvonaltervezés, képfeldolgozás, mesterséges intelligencia modellek tanítása.
Algoritmusok és hatékonyság
Az algoritmusok értékelésekor gyakran vizsgáljuk az idő- és memóriaigényüket. Az elméleti számítástudományban a komplexitáselmélet (például a Big O jelölés) segít összehasonlítani algoritmusok teljesítményét nagy bemenetméretek mellett. Emellett fontos a helyes működés formális bizonyítása és a legrosszabb/átlag/legjobb esetek elemzése.
Történeti és elméleti háttér
Bár a hétköznapi értelemben vett algoritmusok (pl. receptek, számítási szabályok) régóta ismertek, a modern algoritmusfogalom az arab és középkori matematikai munkákra, majd a 20. századi elméleti alapokra — különösen az olyan modellekre, mint a Turing-gép — épül. A Church–Turing tézis a számolhatóság elméleti határait fogalmazza meg: elvileg minden számolható eljárás modellezhető ezen elméleti konstrukciók valamelyikével.
Gyakorlati tanácsok tanuláshoz és tervezéshez
- Gyakorold a problémamegoldást egyszerű példákon (rendezés, keresés, fa- és gráfproblémák).
- Írj pszeudokódot vagy készíts folyamatábrát a logika tisztázására, mielőtt programkódot írnál.
- Figyeld a komplexitást: válaszd a feladathoz megfelelő algoritmust a hatékonyság és az implementálhatóság alapján.
- Ismerkedj meg különböző programozási nyelveken való implementációval — gyakran a nyelv adottságai befolyásolják a megvalósítás egyszerűségét.
Összefoglalva: az algoritmus egy strukturált, ismételhető és ellenőrizhető recept a feladatok megoldására. A jó algoritmus egyszerre helyes és hatékony, és a leírása lehet emberi-olvasmányos (pszeudokódban, folyamatábrában) vagy közvetlenül futtatható programozási nyelveken.



