Előszó
Az algoritmus legáltalánosabb értelemben nem más, mint tervszerűség. Ha egy elvégzendő cselekvéssorozatot lépésről lépésre előre átgondolunk, megtervezünk, úgy is mondhatjuk, hogy algoritmust adunk egy bizonyos cél elérésére. Egy épület terve, vagy egy ételrecept - ilyen legtágabb értelemben vett algoritmus. Algoritmust követ a futballbíró, amikor mérkőzést vezet - hiszen előre el van tervezve, méghozzá nem is ő maga, hanem a játék szabályai mondják meg, hogy milyen szituációban mit kell ítélnie. Sok mindennapi tevékenységünk szigorúan véve nem algoritmikus. Megállhatunk közben töprengeni, vagy akár csak magunk elé meredni, hátha "beugrik" egy jó ötlet. Ha azonban sokszor kell őket végrehajtani, előbb-utóbb "algoritmizál" az ember. Gondoljunk például a csomagolásra valamilyen utazáshoz, vagy egy tárgy keresésére a lakásban. Egy tevékenységet csak akkor mondunk teljesen algoritmizáltnak, ha már pontosan leírtuk, elterveztük, hogy milyen lépéseket fogunk végrehajtani (esetleg a korábbi lépések eredményétől függően); végrehajtás közben további módosításra vagy gondolkodásra nincs szükség.
Nemcsak fizikai tevékenységet, hanem gondolatit is lehet tervezni, "algoritmizálni". A bolti pénztáros, ha visszaad, egy egyszerű algoritmust követ, melynek segítségével végül is eljuttatja a vásárlónak a visszajáró pénzt. Egy hivatal eljárási rendje, egy zene kottája, egy bridzs-licitrendszer - algoritmusok. Persze sok ezek közül nem elégíti ki a szigorúbb kikötéseket: ugyanabból a kottából ugyanazt a zenét sokféleképpen le lehet játszani, ugyanabból a lapból ugyanazzal a licitrendszerrel lehet kis szlemmet játszani és nagy szlemmet bukni. Mindezek a tevékenységek érdekességüket, sőt értelmüket vesztenék, ha teljesen algoritmizálva volnának. A legjobb példákat a mindennapi életben használatos algoritmusokra a matematika szolgáltatja. Hogyan adunk (vagy szorzunk) össze két számot? Megtanultunk rá egy mindig működő, pontosan leírt, gépiesen végrehajtható eljárást, egy algoritmust. Ugyanez a helyzet az osztással, a gyökvonással, a háromszög területének kiszámításával, a százalékszámítással stb. Az általános iskolai matematikaanyag, de még részben a középiskolai is, főként algoritmusokat tanít az ilyen gyakran felvetődő feladatok megoldására. Talán meglepő egy "Algoritmusok" c. könyv részéről, ha ezzel a gyakorlattal kapcsolatban kételyeknek ad hangot. Véleményünk azonban az, hogy az emberi szellemi tevékenység lényege nem algoritmusok végrehajtása, hanem algoritmusok alkotása. Természetes, hogy bizonyos alapvető algoritmusokat (összeadás, szorzás) mindenkinek ismernie kell. Azonban éppen az alapfeladatokat olyan sokszor, annyira változó körülmények között kell megoldanunk, hogy egy adott algoritmust - akár a legközönségesebbet, például a szorzásért - legjobbnak, "egyedül üdvözítőnek" deklarálni nem lehet. Éppen a szorzással kapcsolatban látni fogjuk, hogy nagyon sok jegyű számok szorzására van gyorsabb, jobb eljárás, mint amit az iskolában tanultunk! Ilyen sok jegyű számok szorzására ma talán még nincsen szükség, de ahogy a számítások mennyisége növekszik - a hibák halmozódása miatt -, a pontosságot, tehát a jegyek számát is növelni kell.
Könyvünk célja sem az, hogy algoritmusok lexikonja legyen. Sok feladatra adunk algoritmust, némelyekre több különbözőt is, de ezek főként példaként szolgálnak. Fő célunk az, hogy az olvasó arról kapjon képet, hogyan is kell algoritmust keresni, tervezni egy-egy feladat megoldására.
Vissza