Vissza az előzőleg látogatott oldalra (nem elérhető funkció)Vissza a tananyag kezdőlapjára (P)Ugrás a tananyag előző oldalára (E)Ugrás a tananyag következő oldalára (V)Fogalom megjelenítés (nem elérhető funkció)Fogalmak listája (nem elérhető funkció)Oldal nyomtatása (nem elérhető funkció)Oldaltérkép megtekintése (D)Keresés az oldalon (nem elérhető funkció)Súgó megtekintése (S)

Informatika oktatása / Az informatika kulcsfogalmai /B. Algoritmus

Az informatika kulcsfogalmai

2. A kulcsfogalmak áttekintése

B. Algoritmus

Úgy gondoljuk, hogy az algoritmus az informatika egyik legfontosabb fogalma. Ha az informatikaoktatásban háttérbe szorítjuk, akkor egy torzót kapunk, amely az informatikaoktatást tévutakra viheti.

Az iskolai és a mindennapi életben lépten-nyomon algoritmusokat hajtunk végre, tevékenységsorozatokat, információáramlási folyamatokat tervezünk, s ezt a világot az érti igazán, aki tisztában van ezen tevékenységek alapjaival.

Az algoritmizálás először nem számítógépes megvalósításról szól. Csak egy klasszikus, több ezer éves algoritmusra, a két egész szám legnagyobb közös osztóját meghatározó Euklideszi algoritmusra kell gondolnunk! Az algoritmus végrehajtója – a processzor – sok esetben lehet maga az algoritmust megalkotó, azt értelmező ember. (Sőt egy új probléma megoldásánál a rutinos programozó is magát „képzeli” a számítógép helyébe, s így próbálja ki a megoldás működőképességét.) Algoritmusokat mindenki hajt végre nap, mint nap, sőt az emberek többsége alkot is algoritmusokat saját maga és mások számára (pl. közlekedés, dolgok összeszerelése, ...).

Csak ezután következhet az, hogy a precízen megfogalmazott algoritmus végrehajtását egy automatára, a számítógépre bízzuk. Ez alapvetően azért igényel más gondolkodást, mert egy intelligens algoritmus végrehajtó az algoritmusainkat is ésszerűen hajtja végre, kontrollálja, időnként kijavítja az általunk elkövetett hibákat. Egy automata azonban nem gondolkodik, ami a programjában szerepel, azt végre is hajtja (ha tudja).

Megállapíthatjuk, hogy az emberek többsége alkot algoritmusokat mások (és saját maguk) számára, algoritmust végrehajtani azonban kivétel nélkül mindenkinek gyakori feladat.

Mi köze ennek a programozáshoz? Egy lehetséges válasz Donald Knuth-tól:

If you want to learn something, teach it. You are successful if people understand. They may say they understand even if they don't. The ultimate test if you are doing well is to teach it to a machine!

1-4. évfolyam fejlesztési feladatai

Az algoritmus ebben a korosztályban egy tevékenységsorozat, amelynek a végrehajtója lehet maga az algoritmus alkotója – még akkor is így van, ha a végrehajtó ténylegesen egy Lego robot [PAPSzRLTE,PMPB] vagy egy Logo teknőc. Mindegyiknek az a lényege, hogy az algoritmus és az adatok szétválaszthatók, az adatok a végrehajtó „memóriájában” vannak, a végrehajtó (mint egy véges automata) állapotkomponenseiként írhatók le, miközben az algoritmust olvashatja valamely más helyről. [KI]

Az ábra azt mutatja, hogy az 1-4. évfolyamon az algoritmust meg kell érteni, és végre kell tudni hajtani.Algoritmusfogalom az 1-4. évfolyamon

Az algoritmikus gondolkodás legelemibb szintje az, amikor felismerünk algoritmusokat, algoritmussal megoldható problémákat.

Megfogalmazhatjuk, mit nevezünk algoritmusnak: lépésekre bontható; végrehajtható (tartozik hozzá végrehajtó), rögzített végrehajtási sorrenddel rendelkezik – ezt nagyon nehéz megérteni [DVSMEV]; a lépések során valamivel valami történik; a lépések vagy elemi tevékenységek (amit a végrehajtó már megért) vagy maguk is algoritmusok (további pontosítást feltételez).

A megértést két szintre bonthatjuk:

A „miért” kérdése már egy magasabb gondolkodási szinthez, az algoritmus elemzéséhez tartozik. Az elemzés az alternatívák felismerését, elvetését, variálását és szelektálását jelenti.

Ugyancsak különböző szintű tudás egy adott, ismert algoritmus megértése (mert pl. elmagyarázták), illetve új, eddig ismeretlen algoritmusok megértésének képessége. Ez utóbbi az algoritmikus gondolkodás harmadik kompetencia szintjét alkotja.

Ha egy tőlünk független személytől (különösen függőségi viszonyban) lépésenként kapnánk az utasításokat, akkor minimális mérlegeléssel hajthatnánk végre az algoritmusokat, ha azonban magunknak kell ezt megtenni, akkor ennél többről van szó.

Az algoritmusok végrehajtási képessége egy fokozattal magasabb szintű, mint a megértési képesség. Itt nemcsak arra van szükség, hogy egy folyamatot megértsünk, hanem arra is, hogy a végrehajtása közbeni állapotokat folyamatosan kövessük (észben tartsuk, nyilvántartsuk). Azaz nem arra kell figyelnünk, hogy mi történik, hanem arra, hogy mitől függően mit csinálunk.

Az ábra az algoritmus 1-4. évfolyamon érvényes fogalmát ábrázolja egy összetett hierarchia-diagrammal.Algoritmusfogalom az 1-4. évfolyamon

5-6. évfolyam fejlesztési feladatai

Bár az előző korosztályban is megfogalmazhattuk volna, de itt a fontosabb annak megértése, hogy a saját magunk által végrehajtott algoritmus és a számítógép által végrehajtott algoritmus, bár hasonló, mégis alapvetően különbözik egymástól. A magunk által végrehajtott algoritmust egy intelligens végrehajtó (azaz mi magunk) hajtja végre, végrehajtás közben automatikusan kijavítva a megfogalmazáskor elkövetett hibákat. A számítógép azonban nem javít, azt hajtja végre, amit leírtunk. Ennél filozófiailag talán fontosabb, hogy a számítógép számára leírt algoritmusok módszerek akárhány problémamegoldásra, míg mi magunk csak véges sokszor (sok esetben egyszer) hajtjuk végre őket.

Az ábra azt mutatja, hogy az 5-6. évfolyamon az algoritmus megértésén és a végrehajtásán túl elemezni is tudni kell.Algoritmusfogalom az 5-6. évfolyamon

Az algoritmusok elemzése részben arról szól, hogy felismerjük az algoritmusok alapvető felépítési szabályait:

Mivel az algoritmus egyes lépései maguk is lehetnek újabb algoritmusok, s ezek elnevezhetők (sőt a hivatkozás miatt elnevezendők), kialakulhat az eljárás absztrakt fogalma.

Az algoritmusok elemzése más szempontból azt jelenti, hogy megértjük, hogy az egyes részei miért vannak, mi volt a célunk vele, a teljes feladatmegoldást hogyan bontottuk fel részfeladatok megoldására.

A fentieken túl az algoritmusolvasási képesség is idesorolandó. Azaz valamely – akár ismeretlen – algoritmusleíró nyelven, más által megfogalmazott összetett tevékenységet képesek legyünk megérteni: az egyes részek célját, többiekkel való kapcsolatát lássuk, képesek legyünk elmagyarázni (a verbalizálás nem biztos, hogy azonos a megértéssel; sőt alighanem egy újabb, magasabb fokozat).

Aki képes algoritmusok megértésére, végrehajtására, az még nem biztos, hogy alkotni is tud újabb algoritmusokat. A többlet: itt először el kell képzelni, hogy [HJ,HJKJ]

Ez egyrészt az olvasási tevékenység írási tevékenységre cserélését jelenti, de ennél sokkal többről van szó. Az alacsonyabb kompetencia-szinteknél voltak támpontjaink, amelyek a gondolkodásunkat segítették, itt azonban mindent magunknak kell kitalálnunk.

Az algoritmus megvalósítása már kifejezetten informatikai feladatról szól: az algoritmust le kell írni egy olyan eszközzel, amit egy automata (pl. a számítógép) végre tud hajtani. Ez nyilván azzal is jár, hogy meg kell ismerni azt az eszközt (praktikusan programozási nyelvet), amellyel az algoritmust leírjuk.[SMPJJW]

Az egyes eszközökhöz is tartozik egy sajátos, rá jellemző gondolatvilág, amelyek megismerésére és átlátására szükségünk van:

Mint az 1-4. osztályosok esetében, itt is fontos az algoritmusok megértése érdekében az algoritmusok eljátszhatósága, számítógép nélküli kipróbálhatósága. Nem véletlen emiatt a Logo nyelv szinte egyeduralkodó szerepe ebben a korosztályban, mert benne könnyű az algoritmusokat a végtermékhez kötni. Ehhez a végtermékhez köthetjük az algoritmusok „részeit” az eljárásokat is. (Ezek részletesebb kifejtése kivinne az algoritmusfogalomból a hozzá persze szorosan köthető programozási nyelvek fogalmához, valamint az első programozási nyelv szerepéhez.) Az algoritmusfogalom más műveltségi területhez kötése is hasznos lehet [KZKLIKZMGyFKFF].

Másrészről – mivel ritka lehet az az eset, hogy elsőre tökéleteset alkotunk – szükségünk lehet a megvalósított algoritmusok helyességének belátásra, a hibák felismerésére és kijavítására. Ez utóbbi látszólag az algoritmus egyszerű elemzését jelenthetné, az informatikában azonban ennél több lehetőségünk is van. Léteznek olyan komplex rendszerek (programfejlesztői környezetek), amelyek használatával ez a tevékenység a puszta gondolkodásnál hatékonyabbá tehető (bár természetesen nem pótolja a gondolkodást).

A tesztelés „nem szeretem” kötelessége jóval több gondolkodást kíván, mint várnánk. (Újabb kitérő: ha olyan algoritmusvilágot és hozzá tartozó programozási nyelvet választunk, amelyen a hibás programok is érdekesek – a hibával is lehet dicsekedni, akkor a tesztelés és a hibakeresés pozitív tevékenységgé válhat.)

A tesztelés célja: a kód helyesség belátásának partitúrát, menetrendet adni. Ahhoz, hogy a célt elérhessük, módszert kell találni arra, hogy milyen adatokkal lehet a kódot minden pontján „megmozgatni”. Ehhez kézenfekvő a 3.-ként említett elemző képességre építeni, habár nem az egyedüli szisztéma. A feladat (tehát nem a megoldás!) értő ismerete segíthet a releváns esetek megtalálásában. A hibajelenség detektálása után a hibakeresésnél megint csak az elemző képesség jut szóhoz.

Az ábra egy hierarchia-diagram, amely az algoritmus összetett fogalomrendszerét mutatja, 4 szinten.Algoritmusfogalom az 5-6. évfolyamon

7-8. évfolyam fejlesztési feladatai

Ebben a korosztályban óriási fogalmi átalakulás következhet be: az algoritmus már nem tevékenységsorozat, hanem kiszámítás. Az előző korosztályokban az algoritmusok a valós világ objektumaival dolgoznak, működésüket a külvilágból érkező jelek és esetleg paraméterek befolyásolják. Most a valós világ objektumait adatokkal írjuk le (szoros kapcsolatban az adatfogalom fejlődésével), amelyek bejutnak a számítógépbe, ott valahogyan ábrázoljuk őket és az algoritmus ezekből más adatokat számít ki, amiket ki kell juttatni a felhasználónak, esetleg segíteni kell a kapott adatok értelmezését is.

Az ábra azt mutatja, hogy a 7-8. évfolyamon az algoritmus megértésén,végrehajtásán,elemzésén túl átalakítani is tudni kell.Algoritmusfogalom a 7-8. évfolyamon

Mások által készített algoritmus megértése is viszonylag könnyű feladat, egy saját algoritmus elkészítése is viszonylag könnyű feladat ahhoz képest, hogy egy más által elkészített algoritmust módosítanunk, továbbfejlesztenünk kell.

Itt ugyanis nemcsak a végrehajtást kell elképzelnünk, hanem meg kell értenünk, hogy az eredeti algoritmus készítője hogyan gondolkodott, miért úgy készítette az algoritmusát, ...

Azt is meg kell értenünk, hogy ebbe a más gondolatvilágba hol léphetünk be, mit módosíthatunk, milyen beavatkozás lesz hatásos. Ez sokkal nehezebb lehet, mint a semmiből egy saját algoritmust készíteni. Sokszor kapunk másoktól pontatlanul megtervezett algoritmusokat (az informatika világában programokat), amelyek nem felelnek meg a céljainknak. Ezért képesnek kell lennünk ezek átalakítására úgy, hogy számunkra hasznosak legyenek!

A képi világhoz kötött algoritmusvilág (Logo) kifejezetten könnyűvé teszi a rekurzió fogalmának megértését. Az alábbi példán látható, hogy a fa egy törzsből és kettő kisebb fából áll.

tanuld fa :db :hossz
előre :hossz
ha :db>1 [balra 60
fa :db-1 :hossz/2 jobbra 120
fa :db-1 :hossz/2 balra 60]
hátra :hossz
vége

Ezen a ponton válhat el a végrehajtás lépésenkénti követésének igénye az algoritmus fogalomtól. A fentieket például magyarázhatjuk úgy, hogy megrajzolom a fa törzsét, majd a törzs végén a megfelelő irányokban megrajzoltatok valakikkel két, eggyel kisebb magasságú fát. Ez a lépés jó átmenetet biztosíthat a későbbi objektumorientált szemlélet felé is.

Az ábra egy hierarchia-diagram, amely az algoritmus összetett fogalomrendszerét mutatja, 4 szinten.Algoritmusfogalom a 7-8. évfolyamon

9-10. évfolyam fejlesztési feladatai

Az algoritmusok tervezése olajozottan csak úgy mehet, ha elsajátítunk valamilyen szisztematikus módszert algoritmusok (és hozzájuk kapcsolódó adatmodellek) alkotására. Arra kell módszert találni, hogy az algoritmusok végtelen halmazát leszűkítsük kezelhetően kévés számúra. Természetesen ez nem megy, csak a feladatok nagyfokú korlátozásával, illetve csak akkor, ha megengedjük, hogy a kevés számú algoritmus helyett kevés számú algoritmus sémát adjunk meg. Az alkotás folyamata ez esetben a megfelelő algoritmus sémák kiválasztását, kombinálását és a konkrét tevékenységhez adaptálását jelenti. A sémarendszer felállítása analogikus és absztrakt gondolkodást igényel. A lényegi és lényegtelen jellemzők megkülönböztetése: absztrahálás; a hasonlóságok felismerése: analógia felismerés.

A kódolás jóval kevésbé fárasztó tevékenységgé tehető, ha megfogalmazzuk azokat a szabályokat, amelyekkel a megoldás lényegi leírását tartalmazó algoritmusból az adott nyelvű kódmegfelelőt hozzuk létre. Ilyen szabályok definiálhatók bármely nyelvhez, és az átültetés 90%-ig mechanikussá tehető. [MLHÉ]

Az algoritmusok méretének növekedésével a befektetett munka nem lineárisan növekszik. Előbb-utóbb elérünk arra a szintre, amikor egy lépésben nem látjuk át a megoldandó feladatot. Ekkor lehet határozottan erős szerepe az absztrakciónak, az algoritmusok szisztematikus tervezésének. [HÉSzPZsL]

Itt jöhet szóba a részcélok kitűzése, az egyes részcélokhoz tartozó tevékenységsorozat megtervezése (a programozásban nem feltétlenül – bár nagy programrendszerek fejlesztésekor mindig, de a hétköznapi életben általában több ember együttes munkájaként). Természetesen az is komoly feladat, hogy belássuk: a részcélok teljesülésével, valamint jó összeépítéssel a feladat megoldható.

Az ábra egy hierarchia-diagram, amely az algoritmus összetett fogalomrendszerét mutatja, 4 szinten.Algoritmustervezés a 9-10. évfolyamon

A megalkotott algoritmusainkkal nem lehetünk mindig elégedettek. Elképzelhető, hogy egy feladatra nem találunk egyáltalán algoritmust (ami azt is jelentheti, hogy algoritmikusan megoldhatatlan problémával találkoztunk), de az is, hogy a számítógépes megoldás kivárhatatlan idejű (exponenciális lépésszámú). Ennek felismeréséhez először tudni kell valamit a programok futási idejéről, a felhasznált algoritmusok lépésszámáról.

Az ábra egy hierarchia-diagram, amely az algoritmus összetett fogalomrendszerét mutatja, 3 szinten.Algoritmuselemzés a 9-10. évfolyamon

Vissza a tartalomjegyzékhez

Új Széchenyi terv
A projekt az Európai Unió támogatásával, az Európai Szociális Alap társfinanszirozásával valósul meg.

A tananyag az ELTESCORM keretrendszerrel készült