XI. Erdélyi Tudományos Diákköri Konferencia Kolozsvár, 2008. május 23–24. KUPAC TĺPUSÚ ADATSZERKEZETEK Témavezető Szerző Dr. Ionescu Klára, adjunktus Babeş-Bolyai Tudományegyetem Matematika-Informatika Kar Programozási nyelvek és módszerek tanszék Molnár Andrea-Éva Babeş-Bolyai Tudományegyetem Matematika-Informatika Kar Matematika-Informatika Szak III. év Kolozsvár, 2008
30
Embed
KUPAC TĺPUSÚ ADATSZERKEZETEK - Adatbanketdk.adatbank.transindex.ro/pdf/info_molnar.pdf · 3 0 KIVONAT Ezen dolgozat célja a kupac típusú adatszerkezetek bemutatása, rávilágítva
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
2.1 A BINÁRIS KUPAC FOGALMA ........................................................................... 4 2.2 MINIMUM – ÉS MAXIMUM KUPACOK, KUPAC-TULAJDONSÁG.............. 5 2.3 KUPAC MAGASSÁGA........................................................................................... 6 2.4 NÉHÁNY ALAPVETŐ ALGORITMUS ................................................................ 6
2.4.1 A KUPAC TULAJDONSÁG FENNTARTÁSA .................................................7 2.4.2 A KUPAC ÉPĺTÉSE.............................................................................................9 2.4.3 KUPACRENDEZÉS ..........................................................................................12
A kupac adatszerkezet fontosságára és hasznosságára ez a fejezet világít rá.
Ebben a részben ismertetni fogom a kupac adatszerkezetek leggyakoribb alkalmazási
területét, vagyis azt, hogy hogyan használhatjuk az ilyen típusú adatszerkezeteket elsőbbségi
sorok kezelésére.
3.1 ELSŐBBSÉGI SOROK
3.1.1 AZ ELSŐBBSÉGI SOR FOGALMA
„Egyszerű” sorok (várakozási sorok) esetén az elemeket a lista egyik végére (az elejére)
szúrhatjuk be és a másik végéről (a legvégéről) törölhetjük. Ezen soroknál a FIFO szemantika
érvényesül (épp ezért FIFO listának is nevezik őket), hisz „az elsőnek érkezett lesz elsőként
kiszolgálva”.
Azonban előfordul, hogy a sorban levő elemeknek valamilyen rendezésük is van. A
legjobb példa erre a kórházban a vizsgálatra váró betegek sora, hisz az esetek súlyosság
szempontjából különbözhetnek. Ezt a rendezést prioritásnak (elsőbbségnek) nevezzük, az
ilyen tulajdonságú sorokat pedig elsőbbségi soroknak. Ezek esetén a cél az, hogy a sorban
levő elemek közül a legnagyobb/legkisebb prioritásút töröljük ki.
A kupachoz hasonlóan kétféle elsőbbségi sorról beszélhetünk: maximum- és minimum-
elsőbbségi sorról. Vizsgálatunk tárgya a maximum-elsőbbségi sor maximum-kupaccal
történő megvalósítása lesz (ennek alapján megvalósítható a minimum-elsőbbségi sor is).
Elsőbbségi sor (más néven prioritási sor) alatt egy P halmazt értünk. A halmaz minden
eleméhez hozzárendelünk egy kulcs értéket. Ez fogja megadni az adott elemek prioritását.
Elsőbbségi sorok esetén három alapvető műveletről beszélhetünk: beszúrás, legnagyobb elem
kiválasztása, illetve törlés. Ezen műveleteket a következő eljárások valósítják meg: a
Beszúr(P, x) hozzáfűz egy x elemet a P halmazhoz; a Maximum(P)/Minimum(P) algoritmus
meghatározza a P halmaz legnagyobb/legkisebb prioritású elemét; míg a Kivesz-
Max(P)/Kivesz_Min(P) megadja és törli ezt az elemet.
18
3.1.2 ELSŐBBSÉGI SOROK ALKALMAZÁSI TERÜLETEI
Esemény-vezérelt szimulációk esetén általában az elsőbbségi sorokat veszik igénybe. A
szimulálandó események lesznek a sor elemei, melyekhez kulcsként az adott esemény
bekövetkezésének időpontját rendeljük. Az események nem függetlenek egymástól, hisz egy
esemény bekövetkezése okozhatja egy másik esemény jövőbeli bekövetkezését. Épp ezért az
eseményeket bekövetkezési idejük sorrendjében kell szimulálni. Ennél az alkalmazásnál a sort
kezelő eljárások azok az algoritmusok lesznek, melyek a legkisebb kulcsú elemmel
dolgoznak. A Kivesz_Min(P) eljárás segítségével fogja a szimulációs program meghatározni a
következő eseményt. Új esemény felvételét a sorba a Beszúr(P,kulcs) eljárás végzi.
Elsőbbségi sorok alkalmazhatók osztott működésű számítógépeken is, ahol a munkák
ütemezéséhez nyújtanak segítséget. Ezen alkalmazásoknál az elsőbbségi sorban az
elvégzendő feladatokat és ezek relatív prioritását tárolják. Ha elkészült egy feladat, vagy
esetleg megszakítás következett be, akkor a Kivesz_Max(P) algoritmus a várakozók közül a
legnagyobb prioritású munkát fogja kiválasztani. A Beszúr(P,kulcs) lehetőséget ad új munkák
felvételére az elsőbbségi sorba.
Az elsőbbségi sorokat általában kupac típusú adatszerkezetek segítségével ábrázoljuk. Itt
már nem halmazzal dolgozunk, hanem egy A tömbbel.
3.1.3 NÉHÁNY ALAPVETŐ ALGORITMUS BINOMIÁLIS KUPACOKKAL
VÉGEZHETŐ MŰVELETEK ELVÉGZÉSÉHEZ
Az alábbiakban megismerkedünk az elsőbbségi sorokkal végezhető műveleteket
megvalósító algoritmusokkal: a Maximum(A), Kivesz_Max(A), illetve a Beszúr_Max(A)
eljárásokkal. Itt is beszélhetünk a Kivesz_Min(A), valamint a Beszúr_Min(A)
algoritmusokról. Ezen eljárások implementálása hasonlóan történik, így a leírásuktól
eltekintünk.
3.1.3.1 A MAXIMUM(A) ALGORITMUS
Mivel a kupac legnagyobb eleme (maximum-kupacot tekintve) a gyökérben található, a
Maximum(A) művelet Θ(1) idő alatt megtalálja a kupac legnagyobb elemét, hisz ez pontosan
a tömb első elemének, vagyis az A1-nek az értéke.
3.1.3.1.1 AZ ALGORITMUS Algoritmus Maximum(A):
visszatéríti A1-et
Vége(algoritmus)
19
3.1.3.2 A KIVESZ_MAXIMUM(A) ALGORITMUS
A Kivesz_Maximum(A) algoritmus valósítja meg a kupac legnagyobb elemének
keresését, s ezt fogja majd visszatéríteni. Az algoritmus kódjában felfedezhető a hasonlóság a
Kupacrendezés(A,n) Minden ciklusával.
Az eljárás futási ideje O(log n), hisz csak néhány, állandó idejű lépést tartalmaz a
Maximum_Kupacol(A,1) meghívása előtt (melyről tudjuk, hogy O(n log n) a futási ideje).
3.1.3.2.1 AZ ALGORITMUS Algoritmus Kivesz_Maximum(A):
Ha kupac_méret < 1 akkor Ki: 'Hiba: Kupacméret alulcsordulás.'
vége(ha)
maximum ← A1
A1 ← Akupac_méret
kupac_méret ← kupac_méret –1
Maximum_Kupacol(A,1)
Vége(algoritmus)
3.1.3.3 A BESZÚR(A,KULCS) ALGORITMUS
A kupachoz hozzáadhatunk egy elemet a Beszúr(A,kulcs) eljárás segítségével, mely
először megnövelve a kupac méretét, az elemet egy új levélként hozzáfűzi a fához, majd a
levéltől a gyökérig haladó utón végigszemléli az elemeket, hogy megtalálja a beszúrandó
elem helyét a fában.
Ha egy n elemű kupacot tanulmányozunk, a vizsgálandó út hossza a levéltől egészen a
gyökérig O(log n), így a Beszúr(A,kulcs) futási ideje is O(log n) lesz.
3.1.3.3.1 AZ ALGORITMUS Algoritmus Beszúr(A,kulcs):
kupac_méret ← kupac_méret + 1
i ← kupac_méret
Amíg (i > 1) és (ASzülő(i) < kulcs) végezd el:
Ai ← ASzülő(i)
i ← Szülő(i)
vége(amíg)
Ai ← kulcs
Vége(algoritmus)
20
3.1.3.3.2 AZ ALGORITMUS LEĺRÁSA A következő ábrák a Beszúr(A,kulcs) eljárást mutatják be.
Legyen a 2-es fejezetben szereplő A tömb: 1 2 3 4 5 6 7 8 9 10
20 15 13 9 5 12 8 7 3 1
1
9
20
15
5
13
12 8
7 3
a. Az A tömböt egy bináris faként ábrázolva. Be szeretnénk szúrni a 11-es elemet a
kupacba.
1
9
20
15
5
13
12 8
7 3
b. A fához hozzáadtunk egy új levelet
1
9
20
15
13
12 8
7 3 5
c. Azon az úton, mely az új levéltől a gyökérhez vezet, az elemeket eggyel lejjebb görgetjük
mindaddig, míg meg nem találjuk a 11-es helyét.
21
1
9
20
15
11
13
12 8
7 3 5
d. Sikerült beszúrni a 11-es kulcsú elemet.
Végezetül levonhatjuk a következtetést, miszerint ha az elsőbbségi sorok esetén kupac adatszerkezeteket használunk, akkor az összes, fent bemutatott műveletek logaritmikus idő alatt véget érnek.
22
4 BINOMIÁLIS KUPACOK A fentiekben láttuk, hogy bináris kupacok esetén egy új elem beszúrása a kupacba, a
maximális/minimális elem megkeresése vagy épp ezen elem törlése legrosszabb esetben is
logaritmikus bonyolultságú.
Azonban ha két kupacot szeretnénk egyesíteni, akkor a bináris kupacok nem olyan
hatékonyak, hiszen ezek összefűzése tulajdonképpen egy új kupac megalkotását jelenti, tehát
a futási idő legrosszabb esetben Θ(n).
Ebben a fejezetben egy másik kupac típusú adatszerkezettel fogunk megismerkedni,
mégpedig a binomiális kupacokkal. A binomiális kupacok használata általában akkor
javasolt, ha gyakran kell az alkalmazásban kupacokat egyesítenünk, hisz e kupacok esetén ez
a művelet rendkívül egyszerűen megoldható, a bonyolultsága pedig logaritmikus.
A binomiális kupac elnevezést először Vuillemin használta (1978, A Data Structure
for Manipulating Priority Queues).
4.1 BINOMIÁLIS FÁK A binomiális kupac binomiális fákból épül fel. Nézzük meg, mit is értünk binomiális fa
alatt.
A binomiális fát rekurzív módon írjuk le. Jelöljük Bk-val a k-ad rendű binomiális fát.
Ekkor a következőket mondhatjuk el:
• a B0, 0 rendű binomiális fa egyetlen csomópontot tartalmaz (a gyökeret),
• a Bk, k-ad rendű binomiális fa gyökerének gyerekei a k-1, k-2,…, 2, 1, 0 rendű
binomiális fák gyökerei (ebben a sorrendben)
Ezen egyedi szerkezet miatt a k-ad rendű binomiális fát két (k – 1)-ed rendű, Bk-1-el jelölt
binomiális fa alkotja. Ez a két fa össze van kapcsolva a következőképpen: a két fa közül,
egyiknek gyökere a másik fa gyökerének legbalra (vagy legjobbra) eső utóda. A binomiális fa
e jellemvonása központi szerepet játszik a binomiális kupacok összefésülő műveletében.
Mélység 3 0 1 2 3
B0 B1 B2 B3 Mélység 3 0 1 2 3
B0 B1 B2 B3
Az ábrán 3, kétféleképpen megszerkesztett binomiális fa látható.
23
A Bk binomiális fa az alábbi tulajdonságokkal rendelkezik:
• a fa magassága k,
• 2k csúccsal rendelkezik,
• a fa i-edik mélységében ikC csúcs található, ahol i= k,1 . Innen származik a binomiális
fa elnevezés, hisz a ikC kifejezéseket binomiális együtthatók néven ismerjük.
• a gyökér foka k s ez a legnagyobb fokszámú csúcs a binomiális fában. Ez a
tulajdonság abból a tényből adódik, hogy ha a gyökércsúcs utódait megszámozzuk
balról jobbra haladva k − 1, k − 2, . . . 0-val, akkor megállapíthatjuk, hogy a k-ad
rendű fa gyökerének pontosan k fia van. Ezt felhasználva a következő kijelentéseket
fogalmazhatjuk meg:
Egy k csomópontú binomiális fa foka legfennebb log2 k.
k csomóponttal rendelkező binomiális fában minden egyes csúcs foka
maximálisan log k lehet.
4.2 BINOMIÁLIS KUPAC FOGALMA A 4.1-es alfejezetben definiáltuk a binomiális fa fogalmát. Most már tudjuk, hogy a
binomiális kupac binomiális fák összessége. Azonban ez csak szükséges, de nem elégséges
feltétele annak, hogy egy kupac binomiális kupac legyen. Ehhez még teljesülnie kell az
úgynevezett binomiális-kupac tulajdonságnak:
• a binomiális kupachoz tartozó binomiális fák mindegyike kielégíti a minimum-kupac
tulajdonságot: akármelyik csomópontot is vizsgáljuk, ennek értéke mindig
nagyobb lesz, mint a szülőjének az értéke, vagyis a legkisebb elem a gyökérben
található
• egy k-ad rendű binomiális kupacban 0 vagy 1 binomiális fa lehet, melynek rendje i,
ahol i= k,1 .
A második tulajdonság azt mutatja meg, hogy egy n elemből álló binomiális kupac
olyan binomiális fákra bomlik fel, melyeknek száma ezek alapján legtöbb ⎣ ⎦ 1log +n lehet.
Valójában ezeknek a fáknak a számát és rendjeit egyértelműen meghatározza a kupac
elemeinek száma (n): az n szám kettes számrendszerbeli ábrázolásában az 1-es bit egy-egy
binomiális fát jelöl, az adott fa rendjét az adott 1-es helye adja meg a bináris ábrázolásban (a 0
azt jelzi, hogy az adott kupac nem tartalmaz olyan rendű binomiális fát).
24
A jobb megértés érdekében vegyünk egy példát: a 11-es szám bináris alakja 10112,
hiszen 23 + 21 + 20 = 8 + 2 + 1 = 11, ily módon a 11 csúccsal rendelkező binomiális kupac 3
binomiális fát fog tartalmazni (B3, B2 illetve B0 kupacrendezett binomiális fákat), melyek
rendje 3, 1 és 0. A bináris ábrázolásból azt is kiolvashatjuk, hogy a fák rendre 8, 2 és 1
csúcsból állnak. A lenti ábra egy 11 elemből álló kupacot mutat be. Az elemekhez természetes
számokat rendeltünk. A binomiális kupacot általában egy láncolt listával ábrázoljuk, melyben
a binomiális fákat tároljuk: a lista a gyökérelemek láncolt listája, ahol a fák sorrendjét a
listában a gyökércsúcsok fokszámának növekvő sorrendje adja meg.
4.3 NÉHÁNY ALAPVETŐ ALGORITMUS BINOMIÁLIS KUPACOKKAL
VÉGEZHETŐ MŰVELETEK ELVÉGZÉSÉHEZ Az alábbiakban megismerkedünk a binomiális kupacokon végezhető műveleteket
megvalósító algoritmusokkal, valamint összehasonlítjuk ezen algoritmusok futási idejét a
bináris kupacoknál bemutatott algoritmusokéval.
Mint már említettük, a binomiális kupacokat binomiális fák „egymásba fűzött” listájának
tekinthetjük. Az algoritmusok implementálásához illetve bemutatásához szükség van a
következő jelölések bevezetésére: minden csúcsnak lesz egy kulcs –, és egy fokszám mezője.
A kulcs mező a csomópont értékét tárolja, míg a fokszám mező az adott csúcs gyerekeinek
számát tartalmazza. A csúcsoknak további, adatokat tartalmazó mezői is lehetnek, ha ezt a
feladat szövege vagy éppen az alkalmazás megköveteli. Emellett minden x csomópontnak
lesz még három mutatója: az egyik a csúcs szülőjére mutat (szülő[x]), a másik a
legbaloldalibb gyerekére (gyerek[x]), a testvér[x] mutató pedig az x jobboldalán álló első
testvérére. Ha x az ősének legbalra eső utóda, akkor a testvér[x] értéke NIL. Ha azonban az x
csúcsnak nincs gyereke, akkor gyerek[x]=NIL. Természetesen a kupac azon csomópontjai
9 1
17
21 18
28
89
48 24
99
Lista feje 12
25
esetén, melyen nem gyökércsomópontok, a testvér mutató más jelentéssel bír, mint a
binomiális fák gyökereinek esetében: gyökércsúcs esetén a testvér[x] pointer a soron
következő binomiális fa gyökerére mutat. Ebből világosan kitűnik, hogy ha a gyökérlistának
az utolsó eleme épp a vizsgált x érték, akkor testvér[x]=NIL.
A legfontosabb mező egy H binomiális kupac esetén a fej[H], mellyel a
gyökércsomópontok listájára tudunk hivatkozni, ezen belül is az első gyökércsúcsra. Látható,
hogy a fej[H] mutató csak akkor kap NIL értéket, ha a H kupac üres.
4.3.1 ÜRES BINOMIÁLIS KUPAC LÉTREHOZÁSA
Új üres kupac létrehozása konstans idejű mind bináris -, mind pedig binomiális
kupacok esetén.
Üres binomiális kupac létrehozása nagyon egyszerű, hisz nincs más dolgunk, mint a fej[H]
mutató értékét egyszerűen NIL-re állítani.
4.3.1.1 A BINOMIÁLIS_KUPACOT_KÉSZĺT(H) ALGORITMUS
Algoritmus Binomiális_Kupacot_Készít(H):
fej[H] ←NIL
visszatéríti H-t
Vége(algoritmus)
4.3.2 LEGKISEBB ELEM MEGKERESÉSE
Ez lehet az a művelet, amely miatt megalkották a kupac típusú adatszerkezeteket. Ha
bináris kupacokkal dolgozunk, ez a művelet konstans időben fog végrehajtódni. Binomiális
kupacoknál csak a gyökérelemek között érdemes és kell keresnünk a minimális kulcsú elemet,
hiszen a kupacot olyan binomiális fák alkotják, melyek minimum-kupac tulajdonságúak,
vagyis minden fában a gyökér az adott fa legkisebb elemét tartalmazza. Látható, hogy nincs
más dolgunk, mint ezen értékek közül a legkisebbet kiválasztani és ezt az értéket
visszatéríteni. A Binomiális_Kupacban_Keres_Min(H) a legkisebb kulcs meghatározására
szolgáló függvény. Logaritmikus bonyolultságú, hiszen a binomiális kupacban legtöbb
⎣ ⎦ 1log +n binomiális fa szerepel.
26
4.3.2.1 A BINOMIÁLIS_KUPACBAN_KERES_MIN(H) ALGORITMUS
Algoritmus Binomiális_Kupacban_Keres_Min(H):
x ← fej[H]
y ← NIL
minimum ← végtelen
Amíg x ≠ NIL végezd el:
Ha kulcs[x] < min akkor
minimum ← kulcs[x]
y ← x
vége(ha)
x ← testvér[x]
vége(minden)
visszatéríti y-t
Vége(algoritmus)
4.3.2.2 A BINOMIÁLIS_KUPACBAN_KERES_MIN(H) ALGORITMUS
LEĺRÁSA
Az algoritmus legelején az x mutatót a kupachoz tartozó lista első elemére (a lista fejére)
állítjuk. Ezután végigmegyünk a kupac gyökércsúcsain, és ha találunk az eddigieknél kisebb
elemet, akkor a minimum változóban eltároljuk az adott elem kulcsértékét, y-ban pedig
megjegyezzük az illető gyökér helyét. Ezt a műveletsort addig végezzük, amíg el nem jutunk
a kupac végére. Minden lépésben a testvér mutató segítségével továbblépünk a következő
binomiális fa gyökerére. Az eljárás visszatérítési értéke egy y mutató, mely a minimális
gyökércsúcsú binomiális fa gyökerére mutat.
4.3.3 MÁS ALGORITMUSOK
A következőkben röviden ismertetjük a többi műveletet is, melyek elvégzésében a kupac
adatszerkezetek hasznos segítségnek bizonyulnak. Lássuk ezeket a műveleteket.
4.3.3.1 KÉT KUPAC EGYESÍTÉSE
Ez az a művelet, ahol fontos a binomiális kupacok használata.
Ha két bináris kupacot szeretnénk összefésülni, akkor ennek a műveletnek az a hátránya,
hogy lineáris algoritmussal oldható meg. Ezért olyan alkalmazásokban, amelyekben
27
kupacokat kell egyesítenünk, a binomiális kupac használata az előnyösebb, hisz ekkor az
összefésülés O(log n) idő alatt fut le.
Két binomiális kupac egyesítése két bináris szám összeadásához hasonlít. Tehát minden
lépésben egyesítjük azt a két binomiális fát, amelyeknek azonos a rendjük. A binomiális
kupac meghatározása szerint nem lehet két egyforma fokszámmal rendelkező binomiális fa,
így ha két k-ad rendű binomiális fát egyesítünk, akkor eredményül egy másik binomiális fát
kapunk, melynek rendje eggyel nagyobb, mint az egyesített fáké volt.
4.3.3.2 ÚJ ELEM BESZÚRÁSA BINOMIÁLIS KUPACBA
Új elem beszúrása logaritmikus idő alatt ér véget, a bonyolultság nem függ a kupac
fajtájától: mind bináris-, mind pedig binomiális kupac esetén a futási idő ugyanannyi.
Elsőbbségi soroknál láttuk, hogyan is valósul meg egy új csúcs beszúrása a bináris
kupacba. Binomiális kupacok esetén a beszúrás két lépésből áll. Először létrehozunk egy új,
üres kupacot, melyhez hozzácsatoljuk a beszúrandó elemet. Ezután már csak annyi teendőnk
maradt, hogy ezt az új kupacot egybeolvasztani a már meglevő binomiális kupacunkkal.
4.3.3.3 A MINIMÁLIS KULCCSAL RENDELKEZŐ CSÚCS TÖRLÉSE
Ez a művelet bináris -, illetve binomiális kupacok esetén is logaritmikus bonyolultságú. A
minimális kulcsú csúcs a gyökérelemek között keresendő, ezért először megkeressük azt a
binomiális fát, mely tartalmazza ezt az elemet. Ehhez végigpásztázzuk a gyökércsúcsok
listáját, majd ha megtaláltuk, akkor ebből a listából kitöröljük ezt a fát. Ezután készítünk egy
új, üres kupacot, mely azon fák halmazából fog állni, melyeknek gyökerei az eredeti kupacból
kitörölt binomiális fa gyerekei voltak. Ekkor már csak egyesítenünk kell a két kupacot,
megkapva így a kizárt kulcsot már nem tartalmazó binomiális kupacot.
A fenti műveletek megismerése után levonhatjuk a következtetést, miszerint a binomiális
kupacokat csak akkor érdemes használni, ha az alkalmazásban gyakorta szükséges a kupacok
egyesítése.
A binomiális kupacokat leggyakrabban több elsőbbségi sor feldolgozásakor használják, ha
szükséges ezeket egyesítése is.
28
5 AZ OKTATÓPROGRAM ISMERTETÉSE A dolgozathoz készült egy gyakorlati alkalmazás is. Ez egy oktatóprogram, mely azt
tűzte ki célul, hogy bemutassa a fent megismert adatszerkezeteket, biztosítva ez által az
elméleti rész könnyebb és gyorsabb megértését. Segítséget nyújthat mindazon
pedagógusoknak, akik a kupac típusú adatszerkezetek oktatására vállalkoztak, valamint azon
diákoknak, akik önállóan szeretnének ezen adatszerkezetekkel megismerkedni, vagy
egyszerűen csak az órán tanult elméleti részt szeretnék gyakorlatba átültetni.
5.1 A MULTIMÉDIÁS OKTATÓPROGRAMOK MEGJELENÉSE A személyi számítógépek rohamos elterjedése utat tört egy új oktatási formának,
melynek legfőbb eszköze maga a számítógép volt. Ennek hatására megjelentek a multimédiás
CD-ROM-ok, oktatóprogramok, melyek legfőbb célkitűzése az oktatás e területén az volt,
hogy egy, önálló tanulásra alkalmas eszközt teremtsen, mind középiskolai -, mind egyetemi
hallgatók számára.
A multimédiás CD-ROM-ok megjelenésekor még az a téves felfogás uralkodott,
miszerint ezek az alkalmazások már helyettesíteni tudják a pedagógust. Ez legfőképp annak
volt köszönhető, hogy a diákok a számítógépes ismeretek területén tanáraik előtt jártak, így
tehát érthető, hogy először a pedagógusok is kétkedve fogadták ezeket az új alkalmazásokat,
ódzkodtak a használatuktól.
Szerencsére mára ez a helyzet megváltozott, a tanárok felzárkóztak tanítványaikhoz s
világossá vált az is, hogy a számítógép sohasem helyettesítheti teljesen a tanárt, főleg igaz ez
a középiskolában. Itt ugyanis még fontos szerepe van a pedagógusnak, mind az új ismeretek
bemutatásakor, mind a diákokkal való kapcsolattartás szempontjából. A mai fiatal generáció
ugyanis már az Internet és számítógép mellett nőtt fel, így tehát szüksége van arra, hogy egy
láthatatlan kéz vezesse az ismeretek szövedékes erdejében, és ne kalandozzon el az általa oly
jól ismert számítógépen. Ezt a szerepet a tanár kell játssza. Azonban e korosztály számára is
előnyös lehet egyes témakörök ilyen módú tárgyalása, hisz ekkor minden tanuló a saját
ütemében dolgozhat, így a gyengébb képességű diákok is felzárkózhatnak a többiekhez.
Természetesen ekkor is elengedhetetlen a tanár közreműködése.
Azonban a felsőoktatásban már más a helyzet. Ugyanis itt már a tanár és a tanuló
szerepe nem azonos a középiskolában megszokott tanár-diák viszonnyal. A tanár szerepe
egyre jobban háttérbe szorul, miközben előtérbe kerül a diák szerepe az új ismeretek
29
elsajátításában. A legjobb példa erre az utóbbi években megjelent és egyre népszerűbbé vált
oktatási forma, a távoktatás, melynek szempontjából létfontosságú olyan eszközök készítése,
melyek elősegítik és megkönnyítik a diákok otthoni, önálló tanulását.
5.2 AZ OKTATÓPROGRAM FELÉPĺTÉSE. MÓDSZERTANI SZEREP Egy multimédia-oktatóprogram esetén lényeges egy minél felhasználó-barátibb
környezet kialakítása, ezáltal a programot azok is könnyen használhatják, akiknek
számítógépes ismeretei csak felületesek. Ezen oktatóprogram megírásakor is ez volt a legfőbb
cél. Nagy hangsúlyt fektettem arra, hogy a program használója könnyen eligazodhasson az
alkalmazásban. Ennek érdekében két részre osztottam a felhasználói felületet: a menü került
az ablak bal oldalára, mely minden lépésben a felületen marad, így biztosítva az egyes
„fejezetek” közti átjárhatóságot; míg a jobb oldalon mindig a kívánt információ lesz látható.
Ezenkívül az elkészítéskor szem előtt tartottam azt is, hogy az alkalmazás tegyen
eleget a pedagógiai és didaktikai elvárásoknak, a bemutatott ismeretek feleljenek meg az
aktuális tantervnek, az átadni kívánt információk legyenek egyszerűen megfogalmazva, a
szöveg, animáció legyen érthető, világos, igazodjon az elméleti részben leírtakhoz.
Ilyen segédeszközök esetén figyelni kell arra, hogy az ismeretek bemutatása egy adott
pillanatban ne váljon unalmassá, monotonná. Az animációk szerepe épp az érdeklődés
felkeltésében és fenntartásában rejlik, ezzel ösztönözve a diákot a tanulásra.
Ezért igyekeztem minél több animációt készíteni. Ezek segítségével megpróbáltam az
algoritmusokat még érthetőbbé, világosabbá tenni. Az animációk végigveszik az algoritmusok
lépéseit, s így a diák szeme előtt fog „lefutni” a program a megadott értékekre. Minden
animáció esetén két lehetőség közül választhatunk: vagy elindítjuk az animációt az Indít
gombbal (ekkor az összes lépés animálva fog megjelenni a képernyőn) – természetesen
bármikor le is állíthatjuk a műveletet – , vagy pedig előre -, illetve visszaléphetünk az
animációban a megfelelő gombokra kattintva (ekkor viszont csak az egyes lépések
„végterméke” fog megjelenni a képernyőn).
Maga az oktatóprogram végigveszi a dolgozat fejezeteit és megpróbálja tömören
összefoglalni mindazt, amit a fentiekben bemutattunk. A felhasználó megismerkedik a kupac
adatszerkezet fogalmával, a bináris -, illetve binomiális kupacokkal végezhető műveletekkel,
az ezeket megvalósító algoritmusokkal, valamint ezek alkalmazásaival.
30
6 KÖNYVÉSZET 1. Ionescu Klára – Adatszerkezetek, Kolozsvári Egyetemi Kiadó, Kolozsvár, 2007.
2. Cormen T., Leiserson C., Rivest R.–Algoritmusok, Műszaki Könyvkiadó, Budapest,
1997.
3. Cormen T., Leiserson C., Rivest R., Stein, C. – Új algoritmusok, Scolar Kiadó,
Budapest, 2003.
4. Iwatt Róbert, Tar Domokos Géza – Számításelméleti szigorlat. Kidolgozott tételek
(jegyzet), Budapesti Műszaki Tudományos Egyetem, 2004. Elérhető a