KUPAC TĺPUSÚ ADATSZERKEZETEK

Méret: px
Mutatás kezdődik a ... oldaltól:

Download "KUPAC TĺPUSÚ ADATSZERKEZETEK"

Átírás

1 XI. Erdélyi Tudományos Diákköri Konferencia Kolozsvár, 08. május KUPAC TĺPUSÚ ADATSZERKEZETEK Témavezető Dr. Ionescu Klára, adjunktus Babeş-Bolyai Tudományegyetem Matematika-Informatika Kar Programozási nyelvek és módszerek tanszék Szerző Molnár Andrea-Éva Babeş-Bolyai Tudományegyetem Matematika-Informatika Kar Matematika-Informatika Szak III. év Kolozsvár, 08

2 Tartalomjegyzék 0 KIVONAT... 3 BEVEZETÉS BINÁRIS KUPACOK A BINÁRIS KUPAC FOGALMA MINIMUM ÉS MAXIMUM KUPACOK, KUPAC-TULAJDONSÁG KUPAC MAGASSÁGA NÉHÁNY ALAPVETŐ ALGORITMUS A KUPAC TULAJDONSÁG FENNTARTÁSA A KUPAC ÉPĺTÉSE KUPACRENDEZÉS KUPAC TĺPUSÚ ADATSZERKEZETEK ALKALMAZÁSA ELSŐBBSÉGI SOROK AZ ELSŐBBSÉGI SOR FOGALMA ELSŐBBSÉGI SOROK ALKALMAZÁSI TERÜLETEI NÉHÁNY ALAPVETŐ ALGORITMUS BINOMIÁLIS KUPACOKKAL VÉGEZHETŐ MŰVELETEK ELVÉGZÉSÉHEZ BINOMIÁLIS KUPACOK BINOMIÁLIS FÁK BINOMIÁLIS KUPAC FOGALMA NÉHÁNY ALAPVETŐ ALGORITMUS BINOMIÁLIS KUPACOKKAL VÉGEZHETŐ MŰVELETEK ELVÉGZÉSÉHEZ ÜRES BINOMIÁLIS KUPAC LÉTREHOZÁSA LEGKISEBB ELEM MEGKERESÉSE MÁS ALGORITMUSOK...26 AZ OKTATÓPROGRAM ISMERTETÉSE A MULTIMÉDIÁS OKTATÓPROGRAMOK MEGJELENÉSE AZ OKTATÓPROGRAM FELÉPĺTÉSE. MÓDSZERTANI SZEREP KÖNYVÉSZET

3 0 KIVONAT Ezen dolgozat célja a kupac típusú adatszerkezetek bemutatása, rávilágítva ezek fontosságára. A bináris kupacok segítségével egy hatékony rendezési algoritmus írható, de használják elsőbbségi sorok kezelésére is. A binomiális kupacok használata általában akkor javasolt, ha gyakran kell az alkalmazásban kupacokat egyesítenünk. Egy oktatóprogramon keresztül bemutatásra kerülnek ezen adatszerkezetek. A személyi számítógépek rohamos elterjedése módot teremtett a pedagógus számára, hogy a tanórán éljen a multimédiás számítógépek, oktatóprogramok, valamint az internet nyújtotta lehetőségekkel. Ezen oktatóprogram segítséget nyújthat a mai pedagógusnak a kupac típusú adatszerkezetek oktatásában, ugyanakkor az otthoni önálló tanulás egyik fontos eszköze lehet, mind középiskolai -, mind egyetemi hallgatók számára. Azonban nem szabad elfeledkeznünk arról a tényről, hogy egy számítógép sohasem helyettesítheti a tanárt, főleg nem a középiskolában. BEVEZETÉS A számítástechnika mai állása megköveteli a programozótól a minél jobb és gyorsabb alkalmazások/programok írását. Ebben nyújtanak segítséget a kupac típusú adatszerkezetek. A kupac (heap) elnevezés a kupacrendezéssel kapcsolatban jelent meg először. A Lisp és C nyelvekben egészen más jelentéssel bír, mint a kupacrendezés esetében ( hulladékgyűjtéses memória-kezelés garbage-collected storage). Ugyanakkor ezt a kifejezést memória-foglalással kapcsolatban is használják. Ezen dolgozatban a kupac elnevezés, mint adatszerkezet fog szerepelni, hisz a cél ezek bemutatása. A kupac egy speciális fa alapú adatszerkezet, mely kielégíti az úgynevezett kupactulajdonságot: ha a B csúcs fia az A csúcsnak, akkor érték(a) érték(b). Ezen tulajdonság maga után vonja azt a tényt, miszerint a legnagyobb értékű csúcs mindig a gyökérben található. Ekkor maximum-kupacról beszélünk. Ha azonban a rendezés irányát megfordítjuk (érték(a) érték(b)), akkor a minimum-kupacokat definiáltuk. Ekkor a legkisebb elem kerül a gyökérbe. A kupac típusú adatszerkezeteknek rengeteg fajtája ismert, beszélhetünk: bináris -, binomiális -, Fibonacci -, intervallum -, párosítós -, min-max -, valamint r - kupacokról, stb. 3

4 2 BINÁRIS KUPACOK 2. A BINÁRIS KUPAC FOGALMA A kupac adatszerkezet hatékonyan implementálható bináris kupac segítségével. A bináris kupac adatszerkezet úgy tekinthető, mint egy majdnem teljes bináris fa, melyet egy tömbben ábrázolunk i) A kupac bináris faként ábrázolva ii) A kupac tömbként ábrázolva A kupac elemeit egy bináris fában tároljuk. A bináris fa egy olyan fa, melynek csúcsai szinteken helyezkednek el. A fa legalacsonyabb szintjét kivéve, mindenhol teljesen kitöltött. A legalacsonyabb szinten csak egy adott csomópontig vannak elemek. A bináris fában mindig balról jobbra haladva töltjük ki az éleket. A legfelső szinten egyetlen csúcs található, a gyökér. Tetszőleges két csomópontból maximum két él indul ki. Ezeket a csúcs bal-, illetve jobb fiainak (gyerekeinek) nevezzük. Minden gyökértől különböző csúcsnak egy és csakis egy apja (őse) van. Az a csúcs, aminek nincs fia (gyereke) a levél. Egy tömb bináris fának is tekinthető. A fa minden csúcsa a tömb egy elemének felel meg, melyben a csúcs értékét tároljuk. Legyen egy A tömb, melynek segítségével kupacot szeretnénk alkotni. Ebben a tömbben fogjuk tárolni a kupac elemeit. Egy kupachoz 2 tulajdonság tartozik. A hossz, mely a tömb elemeinek számát határozza meg, és a méret, mely a kupac méretét. Az A tömb hossza (elemeinek száma) legyen n, a kupac elemeinek számát pedig jelöljük kupac_méret-tel. Vegyük észre, hogy az A[..n] tömb minden eleme fontos adatot tartalmaz. Az A kupac_méret utáni értékek, ahol kupac_méret n, azonban már nem a kupac elemei. A

5 kupacot ábrázoló fa gyökere a tömb első eleme (A ). Ha i a bináris fa egy adott csúcsának tömbbeli indexének felel meg, akkor a következő egyszerű képletekkel könnyen kiszámíthatjuk a csúcs ősének (szülőjének) Szülő(i), baloldali utódának (gyerekének) Bal(i), illetve jobboldali utódának (gyerekének) Jobb(i) indexét: Algoritmus Szülő(i): visszatéríti [i/2]-t Vége(algoritmus) Algoritmus Bal(i): visszatéríti 2 i-t Vége(algoritmus) Algoritmus Jobb(i): visszatéríti 2 i + -t Vége(algoritmus) A képletek alapján elmondhatjuk a következőket: az A i csúcs bal fia és jobb fia A 2 i, illetve A 2 i+, az A i csúcs apja pedig A i/ MINIMUM ÉS MAXIMUM KUPACOK, KUPAC-TULAJDONSÁG A maximumkupac bináris faként és tömbként ábrázolva. A körök belsejébe a fa csúcsának értéke került, a kör mellé írt számok pedig a csúcsnak a tömbben megfelelő elem indexét adják meg. A tömb alatt és felett ívek húzódnak, melyek a szülő-gyerek viszonyokat hivatottak ábrázolni; a szülő mindig balra található a gyerekeihez képest. A bináris kupacnak két fajtája van: a maximum-kupac és a minimum-kupac. Mindkét fajta kupacban a csúcsok értékei kielégítik a kupac-tulajdonságot, melynek jellemző vonása függ a kupac fajtájától.

6 Maximum-kupac esetén a kupac minden gyökértől különböző i eleme maximum-kupac tulajdonságú: A Szülő(i) A i, azaz az elem értéke legfeljebb akkora, mint a szülőjének értéke (vagy ennél kisebb). A minimum-kupac a maximum-kupac fordítottja; minden gyökértől különböző elem minimum-kupac tulajdonságú: A Szülő(i) A i, vagyis az elem ősének értéke kisebb vagy egyenlő, mint magának az elemnek az értéke. Tehát a maximum-kupacban a gyökérben található a legnagyobb elem, egy adott csomópontban lévő elem értéke pedig nagyobb vagy egyenlő, mint bármely, az adott csúcspont alatti részfához tartozó elemek értéke. Ezzel szemben a minimum-kupac legkisebb eleme van a gyökérben, és egy adott csomópont alatti részfa minden elemének értéke nagyobb vagy egyenlő, mint az adott csomópontban lévő elem értéke. Megjegyzés: A kupacrendezés algoritmusban maximum-kupacot használunk. A minimum-kupacot általában az elsőbbségi soroknál alkalmazzák. A továbbiakban tehát maximum-kupacokkal foglalkozunk, a minimum-kupacokkal legközelebb a 3. fejezetben találkozunk. 2.3 KUPAC MAGASSÁGA A kupac magasságának vizsgálatához, a kupacot egy faként kell vizsgáljuk. Ekkor azt mondhatjuk, hogy a kupac magassága megfelel a gyökérben található elem magasságának. Egy adott elem magasságán azon élek számát értjük, melyek a csúcstól a levélhez vezető leghosszabb egyszerű úton találhatóak. A kupac magassága Θ(log n). Ez abból következik, hogy egy n elemből álló kupac ugyancsak egy teljes bináris fán alapszik. A későbbiekben be fogjuk látni azt a tényt, hogy a kupacon végzett műveletek végrehajtási ideje O(log n) idejű, vagyis arányos a fa magasságával. 2.4 NÉHÁNY ALAPVETŐ ALGORITMUS Az alábbiakban bemutatásra kerül néhány alapvető algoritmus és ezek alkalmazása a kupacrendezésben. Ezen algoritmusok maximum-kupacokra íródtak, de hasonlóan meg lehet őket szerkeszteni minimum-kupacokra is. ĺgy a minimum-kupacokra vonatkozó algoritmusok leírásától eltekintünk. Elsőként a Maximum-Kupacol algoritmussal ismerkedünk meg, mely alapvető fontosságú a maximum-kupac tulajdonság fenntartásához. O(log n) futási idejű. 6

7 Ezután a Maximum_Kupacot_Épít algoritmus bemutatása következik, mely lineáris időben képes tetszőleges adatokat tartalmazó tömböt maximum-kupaccá alakítani. A kupacok segítségével egy tömb elemeit helyben rendezhetjük. Ezen algoritmus neve Kupacrendezés (a bonyolultsága O(n log n)) A KUPAC TULAJDONSÁG FENNTARTÁSA Kupacok esetén a legfontosabb a kupac-tulajdonság fenntartása. A továbbiakban bemutatunk egy algoritmust, melynek szerepe e tulajdonság fenntartása maximum-kupacok esetén. Hasonlóan megszerkeszthető egy eljárás minimum-kupacokra is, ezért ezen algoritmus bemutatásától most eltekintünk. Legyen a Maximum-Kupacol(A,i) eljárás, melynek bemenő adatai: az A tömb, és annak egy i indexe. Az eljárás meghívásakor feltételezzük, hogy a Bal(i) és Jobb(i) gyökerű részfák már eleve maximum-kupac felépítésű. Előfordulhat azonban, hogy A i megsérti a maximum-kupac tulajdonságot azzal, hogy értéke kisebb a gyerekei értékénél. A Maximum-Kupacol(A,i) szerepe, hogy lefele tolja az A i értéket a maximum-kupacban mindaddig, míg az i gyökerű részfa maximum-kupaccá nem alakul A MAXIMUM_KUPACOL(A,i) ALGORITMUS Algoritmus Maximum_Kupacol(A,i): b Bal(i) j Jobb(i) Ha (b kupac_méret) és (A b > A i ) akkor maximum b különben maximum i vége(ha) Ha (j kupac_méret) és (A j > A maximum ) akkor maximum j vége(ha) Ha maximum i akkor A i A maximum Maximum_Kupacol(A,maximum) vége(ha) Vége(algoritmus) 7

8 AZ ALGORITMUS RÖVID LEĺRÁSA Az algoritmus rekurzív, melynek minden lépésében megállapítjuk, hogy az A i (apa), A Bal(i) és A Jobb(i) (gyerekek) közül melyik a legnagyobb, s ennek az elemnek az indexét a maximum változóba helyezzük. Ha A i a legnagyobb, akkor vége az algoritmusnak, hisz az i gyökerű részfa teljesíti a kupac-tulajdonságot. Különben A i két utóda közül az egyik lesz a legnagyobb elem. Tehát felcseréljük A i -t A maximum -mal (vagyis az apa és a nagyobbik értékű fia elemei helyet cserélnek). Ekkor az i gyökerű részfa biztosan maximum-kupac szerkezetű. Azonban mivel a maximum indexű csúcs most már az eredeti A i értékét tárolja, most a maximum gyökerű részfa elemei sérthetik a maximum-kupac tulajdonságot. Vagyis a Maximum_Kupacol(A,i) algoritmust ismét le kell futtatni erre a részfára. A következő ábrákon a Maximum_Kupacol(A,i) algoritmus működését követhetjük nyomon. Adott egy 0 elemű A tömb: A Maximum_Kupacol(A,2) működése, ahol kupac_méret = i (i) Első alkalommal figyeljük meg az A 2 csúcsot. Észrevehetjük, hogy nem nagyobb a gyerekeinél, tehát erre a részfára nem teljesül a maximum-kupac tulajdonság. Ezt a tulajdonságot helyre tudjuk állítani, ha az A 2 és A 4 elemeket felcseréljük. 8

9 i (ii) Az előbbi lépéssel elrontottuk a maximum-kupac tulajdonságot a 4-es csomópontra nézve. A Maximum_Kupacol(A,4) rekurzív hívása i-t 4-re állítja. A kupac-tulajdonság visszaállításához az A 4 és A 8 csúcspontokat felcseréljük i (iii) Látható, hogy a 7 értékű elem helyére kerül. Még egyszer meghívódik a Maximum_Kupacol(A,8) eljárás, ami azonban már nem talál olyan csúcsot, mely sértené a maximum-kupac tulajdonságot AZ ALGORITMUS FUTÁSI IDEJE A Maximum_Kupacol(A,i) algoritmus futási ideje O(log n). Más szóval a Maximum_Kupacol(A,i) eljárás futási idejét egy h magasságú csomópontra O(h)-val jellemezhetjük A KUPAC ÉPĺTÉSE Legyen a Maximum-Kupacot_Épít(A,n,kupac_méret) eljárás, melynek bemenő adatai: az A tömb, annak hossza és a kupac mérete. A Maximum-Kupacot_Épít(A,n,kupac_méret) feladata, hogy felépítse a maximum-kupacot.

10 A KUPACÉPĺTÉS ALGORITMUSA Algoritmus Maximum_Kupacot_Épít(A,n,kupac_méret): kupac_méret n Minden i [n/2], végezd el: Maximum_Kupacol(A,i) vége(minden) Vége(algoritmus) AZ ALGORITMUS RÖVID LEĺRÁSA A Maximum_Kupacot_Épít(A,n,kupac_méret) algoritmus az n elemű A tömböt maximum kupaccá alakítja. Ezen folyamatot lentről felfelé haladva végzi az algoritmus, hisz a csomópontok ilyen formában történő feldolgozása biztosítja, hogy amikor egy i csúcsra meghívjuk az eljárást, ezután az i csúcs gyerekei már biztosan maximum-kupacot alkotnak. Az A tömb azon elemei, amelyeknek indexei [n/2] és n közöttiek levelek, ezért ezen elemek egyelemű kupacnak tekinthetők. Tehát a Maximum_Kupacot_Épít(A,n,kupac_méret) algoritmusnak csak a többi csomópontot kell megvizsgálnia, valamint meg kell hívnia minden egyes csúcsra a Maximum_Kupacol(A,i) eljárást. A következő ábrákon bemutatásra kerül a Maximum_Kupacot_Épít(A,n,kupac_méret) algoritmus működése. Legyen egy 0 elemű A tömb: Az A tömb, mint egy bináris fa: i (a) Kiinduláskor az i ciklusváltozó a tömb középső elemére, vagyis az -dik csúcsra mutat. Erre fogjuk meghívni a Maximum_Kupacol(A,i) eljárást, ami azonban nem fog változtatni az adatszerkezeten, hisz nagyobb, mint az utóda. 0

11 i (b) Ekkor i=4. 7 nem nagyobb, mint a bal oldali gyereke, ezért felcseréljük a cel 2 3 i (c) A következő lépésben i a 3-dik csúcsra mutat. 8 nem nagyobb, mint az utódai. Mivel 3 nagyobb, mint 2, ezért 8-at 3-al cseréljük fel. 2 3 i (d) i= 2: nem nagyobb, mint a gyerekei, így csere történik és között, majd és között, így a helyére kerül.

12 i (e) Az i változó az -es csomópontra mutat. Az -es csúcs utódai olyan részfák gyökerei, amelyek már kupacok. azonban kisebb a gyerekeinél, így lesüllyesztjük a helyére (f) A Maximum_Kupacot_Épít(A,n,kupac_méret) algoritmus hívásának végeredménye AZ ALGORITMUS FUTÁSI IDEJE Láttuk, hogy a Maximum_Kupacol(A,i) eljárás futási ideje O(log n). Mivel O(n) hívás történik, legfeljebb O(n log n) lehet a kupacépítés futási ideje. Tudva, hogy a fa magassága log n, elmondhatjuk, hogy bármilyen tömbből kupac építhető lineáris idő alatt KUPACRENDEZÉS A kupacrendezés ahogy a neve is utal rá egy rendezési algoritmus, mely két másik rendező algoritmus jó tulajdonságait ötvözi: a beszúró -, illetve az összefésülő rendezését. A beszúró rendezés helyben rendez ugyan, de nem túl kedvező a futási ideje, az összefésülő rendezésnek a futási ideje n elemre O(n log n), azonban nem helyben rendez. A kupacrendezés futási ideje O(n log n), helyben rendez, és csak állandó számú változóra van szükségünk, a bemeneti tömbön kívül. 2

13 Legyen a Kupacrendezés(A,n) eljárás, melynek bemenő adatai: az A tömb és annak hossza. A Kupacrendezés(A,n,kupac_méret) feladata, hogy rendezze az A tömböt A KUPACRENDEZÉS ALGORITMUSA Algoritmus Kupacrendezés(A,n): Maximum_Kupacot_Épít(A,n,kupac_méret) Minden i n-től 2-ig végezd el: Csere(A, A i ) kupac_méret kupac_méret Maximum_Kupacol(A,) vége(minden) Vége(algoritmus) AZ ALGORITMUS RÖVID LEĺRÁSA Az algoritmus első sora a Maximum_Kupacot_Épít(A,n,kupac_méret) eljárást hívja meg, amely maximum-kupaccá alakítja az n elemű A tömböt. Tudjuk, hogy a maximum-kupacban a kupac tulajdonság miatt a legnagyobb elem a gyökérben található, mely pontosan az A tömb első eleme (A ). Épp ezért az i ciklusváltozót az utolsó elemtől indítjuk, hiszen ha felcseréljük a tömb első és utolsó elemét, a legnagyobb elem a helyére kerül. Eggyel csökkentve a kupac_méretet elérjük, hogy a már helyére került elemet az eljárás ne vegye figyelembe. A megmaradt n elem ekkor már könnyen maximum-kupaccá alakítható. A Maximum_Kupacol(A,) eljárás segítségével helyreállítjuk a maximum-kupac tulajdonságot a maradék n- elemre. Az eljárást minden lépésben a tömb első elemére hívjuk meg, ugyanis az új gyökérelem sértheti a maximum-kupac tulajdonságot, a gyökér gyerekei azonban maximum-kupacok maradnak. A fent leírtakat ismételjük mindaddig, míg az i ciklusváltozó értéke nem csökken 2-re. A következő ábrákon a Kupacrendezés(A,n) működését követhetjük nyomon. Adott egy 0 elemű A tömb:

14 Az A tömböt egy bináris faként tekintve: a. Az A tömbből a Kupacot_Épít(A,n,kupac_méret) eljárás kialakítja a maximum-kupacot i b. Az adatszerkezet a Maximum_Kupacol(A,i) eljárás első futása után i c. Az adatszerkezet a Maximum_Kupacol(A,i) eljárás második futása után i d. Az adatszerkezet a Maximum_Kupacol(A,i) eljárás harmadik futása után 4

15 7 8 3 i 2 3 e. Az adatszerkezet a Maximum_Kupacol(A,i) eljárás negyedik futása után i 2 3 f. Az adatszerkezet a Maximum_Kupacol(A,i) eljárás ötödik futása után 7 3 i g. Az adatszerkezet a Maximum_Kupacol(A,i) eljárás hatodik futása után 3 i h. Az adatszerkezet a Maximum_Kupacol(A,i) eljárás hetedik futása után

16 3 i i. Az adatszerkezet a Maximum_Kupacol(A,i) eljárás nyolcadik futása után i j. Az adatszerkezet a Maximum_Kupacol(A,i) eljárás kilencedik futása után A Az eredmény a rendezett A tömb: (, 2, 3, 4, 7, 8,, 0, 4, 6) AZ ALGORITMUS FUTÁSI IDEJE Mivelhogy a Kupacot_Épít(A,n) algoritmusnak O(n) a futási ideje, a Kupacol(A,i) eljárásnak pedig O(log n), melyet n -szer futtatunk le, a Kupacrendezés(A,n,kupac_méret) futási ideje O(n log n) lesz. 6

17 3 KUPAC TĺPUSÚ ADATSZERKEZETEK ALKALMAZÁSA Mint ahogy azt már a második fejezetben említettük, a kupac adatszerkezeteknek nagyon sok alkalmazási területe van. Ezek közül a rendezésben használt kupacrendezés algoritmust már bemutattuk. Ez egy rendkívül jó rendezési eljárás, a gyakorlatban mégis egy jól implementált gyorsrendezés hatékonyabbnak bizonyul. 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. ELSŐBBSÉGI SOROK 3.. 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 minimumelső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. 7

18 3..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 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 A MAXIMUM(A) ALGORITMUS Mivel a kupac legnagyobb eleme (maximum-kupacot tekintve) a gyökérben található, a Maximum(A) művelet Θ() idő alatt megtalálja a kupac legnagyobb elemét, hisz ez pontosan a tömb első elemének, vagyis az A -nek az értéke AZ ALGORITMUS Algoritmus Maximum(A): visszatéríti A -et Vége(algoritmus) 8

19 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,) meghívása előtt (melyről tudjuk, hogy O(n log n) a futási ideje) AZ ALGORITMUS Algoritmus Kivesz_Maximum(A): Ha kupac_méret < akkor Ki: 'Hiba: Kupacméret alulcsordulás.' vége(ha) maximum A A A kupac_méret kupac_méret kupac_méret Maximum_Kupacol(A,) Vége(algoritmus) 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 AZ ALGORITMUS Algoritmus Beszúr(A,kulcs): kupac_méret kupac_méret + i kupac_méret Amíg (i > ) és (A Szülő(i) < kulcs) végezd el: A i A Szülő(i) i Szülő(i) vége(amíg) A i kulcs Vége(algoritmus)

20 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: a. Az A tömböt egy bináris faként ábrázolva. Be szeretnénk szúrni a -es elemet a kupacba b. A fához hozzáadtunk egy új levelet 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 -es helyét.

21 d. Sikerült beszúrni a -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. 2

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 (78, A Data Structure for Manipulating Priority Queues). 4. 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 B k -val a k-ad rendű binomiális fát. Ekkor a következőket mondhatjuk el: a B 0, 0 rendű binomiális fa egyetlen csomópontot tartalmaz (a gyökeret), a B k, k-ad rendű binomiális fa gyökerének gyerekei a k-, k-2,, 2,, 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 )-ed rendű, B k- -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 Mélység B 0 3 B B 2 B B 0 B B 2 B Az ábrán 3, kétféleképpen megszerkesztett binomiális fa látható. 22

23 A B k binomiális fa az alábbi tulajdonságokkal rendelkezik: a fa magassága k, 2 k csúccsal rendelkezik, a fa i-edik mélységében C csúcs található, ahol i=, k. Innen származik a binomiális i k fa elnevezés, hisz a i C k 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, 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 log 2 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.-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 binomiális fa lehet, melynek rendje i, ahol i=, k. 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 log 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 -es bit egy-egy binomiális fát jelöl, az adott fa rendjét az adott -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). 23

24 A jobb megértés érdekében vegyünk egy példát: a -es szám bináris alakja 0 2, hiszen = =, ily módon a csúccsal rendelkező binomiális kupac 3 binomiális fát fog tartalmazni (B 3, B 2 illetve B 0 kupacrendezett binomiális fákat), melyek rendje 3, és 0. A bináris ábrázolásból azt is kiolvashatjuk, hogy a fák rendre 8, 2 és csúcsból állnak. A lenti ábra egy 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. Lista feje 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 24

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 Ü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 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) 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 log n + binomiális fa szerepel. 2

26 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) 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 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 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 26

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 Ú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 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. 27

28 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.. 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 28

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..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. 2

30 6 KÖNYVÉSZET. Ionescu Klára Adatszerkezetek, Kolozsvári Egyetemi Kiadó, Kolozsvár, Cormen T., Leiserson C., Rivest R. Algoritmusok, Műszaki Könyvkiadó, Budapest, Cormen T., Leiserson C., Rivest R., Stein, C. Új algoritmusok, Scolar Kiadó, Budapest, Iwatt Róbert, Tar Domokos Géza Számításelméleti szigorlat. Kidolgozott tételek (jegyzet), Budapesti Műszaki Tudományos Egyetem, 04. Elérhető a kidolgozott_tetelek.pdf címen.. Aszalós László - Informatikai algoritmusok. Szakmai segédanyag programtervező matematikusok részére, mobidiák könyvtár, Debreceni Egyetem Informatikai Kar, 06. Elérhető a címen. 6. Kevin Wayne - Binary and Binomial Heaps, Princeton University, 02. Elérhető a címen. 7. Mihai Scorţaru - Heap-uri binomiale, Gazeta de informatică, 4/7 noiembrie 04. Elérhető a címen. 8. Bernát László Az oktatóprogram készítés egy hatékony alternatívája, BGF Kereskedelmi, Vendéglátóipari és Idegenforgalmi Kara, Informatikai Intézet, Budapest, 03. Elérhető a címen.. Forgó Sándor - A multimédiás oktatóprogramok minőségének szerepe a médiakompetenciák kialakításában, Új Pedagógiai Szemle, 0/ Elérhető a címen. 30

Algoritmusok és adatszerkezetek gyakorlat 07

Algoritmusok és adatszerkezetek gyakorlat 07 Algoritmusok és adatszerkezetek gyakorlat 0 Keresőfák Fák Fa: összefüggő, körmentes gráf, melyre igaz, hogy: - (Általában) egy gyökér csúcsa van, melynek 0 vagy több részfája van - Pontosan egy út vezet

Részletesebben

Kupac adatszerkezet. A[i] bal fia A[2i] A[i] jobb fia A[2i + 1]

Kupac adatszerkezet. A[i] bal fia A[2i] A[i] jobb fia A[2i + 1] Kupac adatszerkezet A bináris kupac egy majdnem teljes bináris fa, amely minden szintjén teljesen kitöltött kivéve a legalacsonyabb szintet, ahol balról jobbra haladva egy adott csúcsig vannak elemek.

Részletesebben

Haladó rendezések. PPT 2007/2008 tavasz.

Haladó rendezések. PPT 2007/2008 tavasz. Haladó rendezések szenasi.sandor@nik.bmf.hu PPT 2007/2008 tavasz http://nik.bmf.hu/ppt 1 Témakörök Alapvető összehasonlító rendezések Shell rendezés Kupacrendezés Leszámláló rendezés Radix rendezés Edényrendezés

Részletesebben

A számítástudomány alapjai. Katona Gyula Y. Számítástudományi és Információelméleti Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem

A számítástudomány alapjai. Katona Gyula Y. Számítástudományi és Információelméleti Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem A számítástudomány alapjai Katona Gyula Y. Számítástudományi és Információelméleti Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem Bináris keresőfa, kupac Katona Gyula Y. (BME SZIT) A számítástudomány

Részletesebben

B-fa. Felépítés, alapvető műveletek. Programozás II. előadás. Szénási Sándor.

B-fa. Felépítés, alapvető műveletek. Programozás II. előadás.  Szénási Sándor. B-fa Felépítés, alapvető műveletek előadás http://nik.uni-obuda.hu/prog2 Szénási Sándor szenasi.sandor@nik.uni-obuda.hu Óbudai Egyetem,Neumann János Informatikai Kar B-fa Felépítése Beszúrás művelete Törlés

Részletesebben

Rendezések. Összehasonlító rendezések

Rendezések. Összehasonlító rendezések Rendezések Összehasonlító rendezések Remdezés - Alapfeladat: Egy A nevű N elemű sorozat elemeinek nagyság szerinti sorrendbe rendezése - Feltételezzük: o A sorozat elemei olyanok, amelyekre a >, relációk

Részletesebben

Kupac adatszerkezet. 1. ábra.

Kupac adatszerkezet. 1. ábra. Kupac adatszerkezet A bináris kupac egy majdnem teljes bináris fa, amely minden szintjén teljesen kitöltött kivéve a legalacsonyabb szintet, ahol balról jobbra haladva egy adott csúcsig vannak elemek.

Részletesebben

A programozás alapjai előadás. [<struktúra változó azonosítók>] ; Dinamikus adatszerkezetek:

A programozás alapjai előadás. [<struktúra változó azonosítók>] ; Dinamikus adatszerkezetek: A programozás alapjai 1 Dinamikus adatszerkezetek:. előadás Híradástechnikai Tanszék Dinamikus adatszerkezetek: Adott építőelemekből, adott szabályok szerint felépített, de nem rögzített méretű adatszerkezetek.

Részletesebben

Edényrendezés. Futási idő: Tegyük fel, hogy m = n, ekkor: legjobb eset Θ(n), legrosszabb eset Θ(n 2 ), átlagos eset Θ(n).

Edényrendezés. Futási idő: Tegyük fel, hogy m = n, ekkor: legjobb eset Θ(n), legrosszabb eset Θ(n 2 ), átlagos eset Θ(n). Edényrendezés Tegyük fel, hogy a rendezendő H = {a 1,...,a n } halmaz elemei a [0,1) intervallumba eső valós számok. Vegyünk m db vödröt, V [0],...,V [m 1] és osszuk szét a rendezendő halmaz elemeit a

Részletesebben

Adatszerkezetek. Nevezetes algoritmusok (Keresések, rendezések)

Adatszerkezetek. Nevezetes algoritmusok (Keresések, rendezések) Adatszerkezetek Nevezetes algoritmusok (Keresések, rendezések) Keresések A probléma általános megfogalmazása: Adott egy N elemű sorozat, keressük meg azt az elemet (határozzuk meg a helyét a sorozatban),

Részletesebben

Adatszerkezetek és algoritmusok

Adatszerkezetek és algoritmusok 2010. január 8. Bevezet El z órák anyagainak áttekintése Ismétlés Adatszerkezetek osztályozása Sor, Verem, Lengyelforma Statikus, tömbös reprezentáció Dinamikus, láncolt reprezentáció Láncolt lista Lassú

Részletesebben

15. A VERSENYRENDEZÉS

15. A VERSENYRENDEZÉS 15. A VERSENYRENDEZÉS A versenyrendezés (tournament sort) a maximum-kiválasztó rendezések közé tartozik, ugyanis az elemek közül újra és újra kiválasztja (eltávolítja és kiírja) a legnagyobbat. Az eljárás

Részletesebben

Algoritmusok és adatszerkezetek gyakorlat 06 Adatszerkezetek

Algoritmusok és adatszerkezetek gyakorlat 06 Adatszerkezetek Algoritmusok és adatszerkezetek gyakorlat 06 Adatszerkezetek Tömb Ugyanolyan típusú elemeket tárol A mérete előre definiált kell legyen és nem lehet megváltoztatni futás során Legyen n a tömb mérete. Ekkor:

Részletesebben

Algoritmuselmélet 2. előadás

Algoritmuselmélet 2. előadás Algoritmuselmélet 2. előadás Katona Gyula Y. Budapesti Műszaki és Gazdaságtudományi Egyetem Számítástudományi Tsz. I. B. 137/b kiskat@cs.bme.hu 2002 Február 12. ALGORITMUSELMÉLET 2. ELŐADÁS 1 Buborék-rendezés

Részletesebben

1. ábra. Egy rekurzív preorder bejárás. Egy másik rekurzív preorder bejárás

1. ábra. Egy rekurzív preorder bejárás. Egy másik rekurzív preorder bejárás Preorder ejárás Fa bejárásán olyan algoritmust értünk, amelynek bemenete egy F fa és egy M művelet, és az algoritmus adott sorrendben pontosan egyszer végrehajtja az M műveletet a fa pontjaiban lévő adatokra.

Részletesebben

Programozási segédlet

Programozási segédlet Programozási segédlet Programozási tételek Az alábbiakban leírtam néhány alap algoritmust, amit ismernie kell annak, aki programozásra adja a fejét. A lista korántsem teljes, ám ennyi elég kell legyen

Részletesebben

Fák 2009.04.06. Témakörök. Fa definíciója. Rekurzív típusok, fa adatszerkezet Bináris keresőfa, bejárások Bináris keresőfa, módosítás B-fa

Fák 2009.04.06. Témakörök. Fa definíciója. Rekurzív típusok, fa adatszerkezet Bináris keresőfa, bejárások Bináris keresőfa, módosítás B-fa Fák szenasi.sandor@nik.bmf.hu PPT 2007/2008 tavasz http://nik.bmf.hu/ppt 1 Rekurzív típusok, fa adatszerkezet Bináris keresőfa, bejárások Bináris keresőfa, módosítás B-fa Témakörök 2 Fa (Tree): csomópontok

Részletesebben

Adatszerkezet - műveletek

Adatszerkezet - műveletek Adatszerkezet - műveletek adatszerkezet létrehozása adat felvétele adat keresése adat módosítása adat törlése elemszám visszaadása minden adat törlése (üresít) adatszerkezet felszámolása (megszüntet) +

Részletesebben

file:///d:/okt/ad/jegyzet/ad1/b+fa.html

file:///d:/okt/ad/jegyzet/ad1/b+fa.html 1 / 5 2016. 11. 30. 12:58 B+ fák CSci 340: Database & Web systems Home Syllabus Readings Assignments Tests Links Computer Science Hendrix College Az alábbiakban Dr. Carl Burch B+-trees című Internetes

Részletesebben

Algoritmuselmélet. 2-3 fák. Katona Gyula Y. Számítástudományi és Információelméleti Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem. 8.

Algoritmuselmélet. 2-3 fák. Katona Gyula Y. Számítástudományi és Információelméleti Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem. 8. Algoritmuselmélet 2-3 fák Katona Gyula Y. Számítástudományi és Információelméleti Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem 8. előadás Katona Gyula Y. (BME SZIT) Algoritmuselmélet 8. előadás

Részletesebben

Adatszerkezetek 7a. Dr. IványiPéter

Adatszerkezetek 7a. Dr. IványiPéter Adatszerkezetek 7a. Dr. IványiPéter 1 Fák Fákat akkor használunk, ha az adatok között valamilyen alá- és fölérendeltség van. Pl. könyvtárszerkezet gyökér () Nincsennek hurkok!!! 2 Bináris fák Azokat a

Részletesebben

Egyesíthető prioritási sor

Egyesíthető prioritási sor Egyesíthető prioritási sor Értékhalmaz: EPriSor = S E, E-n értelmezett a lineáris rendezési reláció. Műveletek: S,S 1,S 2 : EPriSor, x : E {Igaz} Letesit(S, ) {S = /0} {S = S} Megszuntet(S) {} {S = S}

Részletesebben

7. BINÁRIS FÁK 7.1. A bináris fa absztrakt adattípus 7.2. A bináris fa absztrakt adatszerkezet

7. BINÁRIS FÁK 7.1. A bináris fa absztrakt adattípus 7.2. A bináris fa absztrakt adatszerkezet 7. BINÁRIS FÁK Az előző fejezetekben már találkoztunk bináris fákkal. Ezt a központi fontosságú adatszerkezetet most vezetjük be a saját helyén és az általános fák szerepét szűkítve, csak a bináris fát

Részletesebben

10. előadás Speciális többágú fák

10. előadás Speciális többágú fák 10. előadás Adatszerkezetek és algoritmusok előadás 2018. április 17., és Debreceni Egyetem Informatikai Kar 10.1 A többágú fák kezelésére nincsenek általános elvek, implementációjuk elsősorban alkalmazásfüggő.

Részletesebben

10. tétel. Adatszerkezetek és algoritmusok vizsga Frissült: 2013. január 28.

10. tétel. Adatszerkezetek és algoritmusok vizsga Frissült: 2013. január 28. 10. tétel Adatszerkezetek és algoritmusok vizsga Frissült: 2013. január 28. 2-3 fák Hatékony keresőfa-konstrukció. Ez is fa, de a binárisnál annyival bonyolultabb hogy egy nem-levél csúcsnak 2 vagy 3 fia

Részletesebben

17. A 2-3 fák és B-fák. 2-3 fák

17. A 2-3 fák és B-fák. 2-3 fák 17. A 2-3 fák és B-fák 2-3 fák Fontos jelentősége, hogy belőlük fejlődtek ki a B-fák. Def.: Minden belső csúcsnak 2 vagy 3 gyermeke van. A levelek egy szinten helyezkednek el. Az adatrekordok/kulcsok csak

Részletesebben

Adatszerkezetek I. 7. előadás. (Horváth Gyula anyagai felhasználásával)

Adatszerkezetek I. 7. előadás. (Horváth Gyula anyagai felhasználásával) Adatszerkezetek I. 7. előadás (Horváth Gyula anyagai felhasználásával) Bináris fa A fa (bináris fa) rekurzív adatszerkezet: BinFa:= Fa := ÜresFa Rekord(Elem,BinFa,BinFa) ÜresFa Rekord(Elem,Fák) 2/37 Bináris

Részletesebben

Módosítható Prioritási sor Binomiális kupaccal. Wednesday, March 21, 12

Módosítható Prioritási sor Binomiális kupaccal. Wednesday, March 21, 12 Módosítható Prioritási sor Binomiális kupaccal modosit(x,k) {! if (k>x.kulcs) {!! x.kulcs=k ;!! y=x!! z=x.apa ;!! while(z!=nil and y.kulcs

Részletesebben

Programozás alapjai 9. előadás. Wagner György Általános Informatikai Tanszék

Programozás alapjai 9. előadás. Wagner György Általános Informatikai Tanszék 9. előadás Wagner György Általános Informatikai Tanszék Leszámoló rendezés Elve: a rendezett listában a j-ik kulcs pontosan j-1 kulcsnál lesz nagyobb. (Ezért ha egy kulcsról tudjuk, hogy 27 másiknál nagyobb,

Részletesebben

Elemi adatszerkezetek

Elemi adatszerkezetek 2017/12/16 17:22 1/18 Elemi adatszerkezetek < Programozás Elemi adatszerkezetek Szerző: Sallai András Copyright Sallai András, 2011, 2014 Licenc: GNU Free Documentation License 1.3 Web: http://szit.hu

Részletesebben

Adatszerkezetek I. 8. előadás. (Horváth Gyula anyagai felhasználásával)

Adatszerkezetek I. 8. előadás. (Horváth Gyula anyagai felhasználásával) Adatszerkezetek I. 8. előadás (Horváth Gyula anyagai felhasználásával) Kereső- és rendezőfák Közös tulajdonságok: A gyökérelem (vagy kulcsértéke) nagyobb vagy egyenlő minden tőle balra levő elemnél. A

Részletesebben

Amortizációs költségelemzés

Amortizációs költségelemzés Amortizációs költségelemzés Amennyiben műveleteknek egy M 1,...,M m sorozatának a futási idejét akarjuk meghatározni, akkor egy lehetőség, hogy külön-külön minden egyes művelet futási idejét kifejezzük

Részletesebben

Tuesday, March 6, 12. Hasító táblázatok

Tuesday, March 6, 12. Hasító táblázatok Hasító táblázatok Halmaz adattípus U (kulcsuniverzum) K (aktuális kulcsok) Függvény adattípus U (univerzum) ÉT (értelmezési tartomány) ÉK (érték készlet) Milyen az univerzum? Közvetlen címzésű táblázatok

Részletesebben

7 7, ,22 13,22 13, ,28

7 7, ,22 13,22 13, ,28 Általános keresőfák 7 7,13 13 13 7 20 7 20,22 13,22 13,22 7 20 25 7 20 25,28 Általános keresőfa Az általános keresőfa olyan absztrakt adatszerkezet, amely fa és minden cellájában nem csak egy (adat), hanem

Részletesebben

15. tétel. Adatszerkezetek és algoritmusok vizsga Frissült: 2013. január 30.

15. tétel. Adatszerkezetek és algoritmusok vizsga Frissült: 2013. január 30. 15. tétel Adatszerkezetek és algoritmusok vizsga Frissült: 2013. január 30. Edényrendezés Tegyük fel, hogy tudjuk, hogy a bemenő elemek (A[1..n] elemei) egy m elemű U halmazból kerülnek ki, pl. " A[i]-re

Részletesebben

5. SOR. Üres: S Sorba: S E S Sorból: S S E Első: S E

5. SOR. Üres: S Sorba: S E S Sorból: S S E Első: S E 5. SOR A sor adatszerkezet is ismerős a mindennapokból, például a várakozási sornak számos előfordulásával van dolgunk, akár emberekről akár tárgyakról (pl. munkadarabokról) legyen szó. A sor adattípus

Részletesebben

file:///d:/apa/okt/ad/jegyzet/ad1/b+fa.html

file:///d:/apa/okt/ad/jegyzet/ad1/b+fa.html 1 / 6 2018.01.20. 23:23 B+ fák CSci 340: Database & Web systems Home Syllabus Readings Assignments Tests Links Computer Science Hendrix College Az alábbiakban Dr. Carl Burch B+-trees című Internetes tananyagának

Részletesebben

Adatszerkezetek 1. előadás

Adatszerkezetek 1. előadás Adatszerkezetek 1. előadás Irodalom: Lipschutz: Adatszerkezetek Morvay, Sebők: Számítógépes adatkezelés Cormen, Leiserson, Rives, Stein: Új algoritmusok http://it.inf.unideb.hu/~halasz http://it.inf.unideb.hu/adatszerk

Részletesebben

Ugrólisták. RSL Insert Example. insert(22) with 3 flips. Runtime?

Ugrólisták. RSL Insert Example. insert(22) with 3 flips. Runtime? Ugrólisták Ugrólisták Ugrólisták Ugrólisták RSL Insert Example insert(22) with 3 flips 13 8 29 20 10 23 19 11 2 13 22 8 29 20 10 23 19 11 2 Runtime? Ugrólisták Empirical analysis http://www.inf.u-szeged.hu/~tnemeth/alga2/eloadasok/skiplists.pdf

Részletesebben

5/1. tétel: Optimalis feszítőfák, Prim és Kruskal algorithmusa. Legrövidebb utak graphokban, negatív súlyú élek, Dijkstra és Bellman Ford algorithmus.

5/1. tétel: Optimalis feszítőfák, Prim és Kruskal algorithmusa. Legrövidebb utak graphokban, negatív súlyú élek, Dijkstra és Bellman Ford algorithmus. 5/1. tétel: Optimalis feszítőfák, Prim és Kruskal algorithmusa. Legrövidebb utak graphokban, negatív súlyú élek, Dijkstra és Bellman Ford algorithmus. Optimalis feszítőfák Egy összefüggő, irányítatlan

Részletesebben

Számjegyes vagy radix rendezés

Számjegyes vagy radix rendezés Számláló rendezés Amennyiben a rendezendő elemek által felvehető értékek halmazának számossága kicsi, akkor megadható lineáris időigényű algoritmus. A bemenet a rendezendő elemek egy n méretű A tömbben

Részletesebben

3/1. tétel: Linearis adatszerkezetek és műveleteik

3/1. tétel: Linearis adatszerkezetek és műveleteik 3/1. tétel: Linearis adatszerkezetek és műveleteik A gyűjtemények (collections) közé sorolhatók a halmaz (set), a csomag (bag, multiset) és a vector (sequence, list). Gyűjtemények általánosan Értelmezzük

Részletesebben

Adatszerkezetek 2. Dr. Iványi Péter

Adatszerkezetek 2. Dr. Iványi Péter Adatszerkezetek 2. Dr. Iványi Péter 1 Fák Fákat akkor használunk, ha az adatok között valamilyen alá- és fölérendeltség van. Pl. könyvtárszerkezet gyökér (root) Nincsennek hurkok!!! 2 Bináris fák Azokat

Részletesebben

Programozás alapjai II. (7. ea) C++ Speciális adatszerkezetek. Tömbök. Kiegészítő anyag: speciális adatszerkezetek

Programozás alapjai II. (7. ea) C++ Speciális adatszerkezetek. Tömbök. Kiegészítő anyag: speciális adatszerkezetek Programozás alapjai II. (7. ea) C++ Kiegészítő anyag: speciális adatszerkezetek Szeberényi Imre BME IIT M Ű E G Y E T E M 1 7 8 2 C++ programozási nyelv BME-IIT Sz.I. 2016.04.05. - 1

Részletesebben

Kiegészítő részelőadás 1. Az algoritmusok hatékonyságának mérése

Kiegészítő részelőadás 1. Az algoritmusok hatékonyságának mérése Kiegészítő részelőadás 1. Az algoritmusok hatékonyságának mérése Dr. Kallós Gábor 2014 2015 1 Az Ordó jelölés Azt mondjuk, hogy az f(n) függvény eleme az Ordó(g(n)) halmaznak, ha van olyan c konstans (c

Részletesebben

19. AZ ÖSSZEHASONLÍTÁSOS RENDEZÉSEK MŰVELETIGÉNYÉNEK ALSÓ KORLÁTJAI

19. AZ ÖSSZEHASONLÍTÁSOS RENDEZÉSEK MŰVELETIGÉNYÉNEK ALSÓ KORLÁTJAI 19. AZ ÖSSZEHASONLÍTÁSOS RENDEZÉSEK MŰVELETIGÉNYÉNEK ALSÓ KORLÁTJAI Ebben a fejezetben aszimptotikus (nagyságrendi) alsó korlátot adunk az összehasonlításokat használó rendező eljárások lépésszámára. Pontosabban,

Részletesebben

Struktúra nélküli adatszerkezetek

Struktúra nélküli adatszerkezetek Struktúra nélküli adatszerkezetek Homogén adatszerkezetek (minden adatelem azonos típusú) osztályozása Struktúra nélküli (Nincs kapcsolat az adatelemek között.) Halmaz Multihalmaz Asszociatív 20:24 1 A

Részletesebben

Önszervező bináris keresőfák

Önszervező bináris keresőfák Önszervező bináris keresőfák Vágható-egyesíthető halmaz adattípus H={2,5,7,11,23,45,75} Vag(H,23) Egyesit(H1,H2) H1= {2,5,7,11} H2= {23,45,75} Vágás A keresési útvonal mentén feldaraboljuk a fát, majd

Részletesebben

Programozás alapjai II. (7. ea) C++

Programozás alapjai II. (7. ea) C++ Programozás alapjai II. (7. ea) C++ Kiegészítő anyag: speciális adatszerkezetek Szeberényi Imre BME IIT M Ű E G Y E T E M 1 7 8 2 C++ programozási nyelv BME-IIT Sz.I. 2016.04.05. - 1

Részletesebben

Gyakorló feladatok ZH-ra

Gyakorló feladatok ZH-ra Algoritmuselmélet Schlotter Ildi 2011. április 6. ildi@cs.bme.hu Gyakorló feladatok ZH-ra Nagyságrendek 1. Egy algoritmusról tudjuk, hogy a lépésszáma O(n 2 ). Lehetséges-e, hogy (a) minden páros n-re

Részletesebben

III. Gráfok. 1. Irányítatlan gráfok:

III. Gráfok. 1. Irányítatlan gráfok: III. Gráfok 1. Irányítatlan gráfok: Jelölés: G=(X,U), X a csomópontok halmaza, U az élek halmaza X={1,2,3,4,5,6}, U={[1,2], [1,4], [1,6], [2,3], [2,5], [3,4], [3,5], [4,5],[5,6]} Értelmezések: 1. Fokszám:

Részletesebben

Algoritmusok és adatszerkezetek gyakorlat 09 Rendezések

Algoritmusok és adatszerkezetek gyakorlat 09 Rendezések Algortmusok és adatszerkezetek gyakorlat 09 Rendezések Néhány órával ezelőtt megsmerkedtünk már a Merge Sort rendező algortmussal. A Merge Sort-ról tuduk, hogy a legrosszabb eset dőgénye O(n log n). Tetszőleges

Részletesebben

Speciális adatszerkezetek. Programozás alapjai II. (8. ea) C++ Tömbök. Tömbök/2. N dimenziós tömb. Nagyméretű ritka tömbök

Speciális adatszerkezetek. Programozás alapjai II. (8. ea) C++ Tömbök. Tömbök/2. N dimenziós tömb. Nagyméretű ritka tömbök Programozás alapjai II. (8. ea) C++ Kiegészítő anyag: speciális adatszerkezetek Szeberényi Imre BME IIT Speciális adatszerkezetek A helyes adatábrázolás választása, a helyes adatszerkezet

Részletesebben

EGYSZERŰ, NEM IRÁNYÍTOTT (IRÁNYÍTATLAN) GRÁF

EGYSZERŰ, NEM IRÁNYÍTOTT (IRÁNYÍTATLAN) GRÁF Összefoglaló Gráfok / EGYSZERŰ, NEM IRÁNYÍTOTT (IRÁNYÍTATLAN) GRÁF Adott a G = (V, E) gráf ahol a V a csomópontok, E az élek halmaza E = {(x, y) x, y V, x y (nincs hurokél) és (x, y) = (y, x)) Jelölések:

Részletesebben

Felvételi vizsga mintatételsor Informatika írásbeli vizsga

Felvételi vizsga mintatételsor Informatika írásbeli vizsga BABEȘ BOLYAI TUDOMÁNYEGYETEM MATEMATIKA ÉS INFORMATIKA KAR A. tételsor (30 pont) Felvételi vizsga mintatételsor Informatika írásbeli vizsga 1. (5p) Egy x biten tárolt egész adattípus (x szigorúan pozitív

Részletesebben

Hierarchikus adatszerkezetek

Hierarchikus adatszerkezetek 5. előadás Hierarchikus adatszerkezetek A hierarchikus adatszerkezet olyan < A, R > rendezett pár, amelynél van egy kitüntetett r A gyökérelem úgy, hogy: 1. r nem lehet végpont, azaz a A esetén R(a,r)

Részletesebben

Algoritmusok és adatszerkezetek II.

Algoritmusok és adatszerkezetek II. Szegedi Tudományegyetem - Természettudományi és Informatikai Kar - Informatikai Tanszékcsoport - Számítógépes Algoritmusok és Mesterséges Intelligencia Tanszék - Németh Tamás Algoritmusok és adatszerkezetek

Részletesebben

Adatszerkezetek Adatszerkezet fogalma. Az értékhalmaz struktúrája

Adatszerkezetek Adatszerkezet fogalma. Az értékhalmaz struktúrája Adatszerkezetek Összetett adattípus Meghatározói: A felvehető értékek halmaza Az értékhalmaz struktúrája Az ábrázolás módja Műveletei Adatszerkezet fogalma Direkt szorzat Minden eleme a T i halmazokból

Részletesebben

A MAXIMUM-KUPACOL eljárás helyreállítja az A[i] elemre a kupactulajdonságot. Az elemet süllyeszti cserékkel mindaddig, amíg a tulajdonság sérül.

A MAXIMUM-KUPACOL eljárás helyreállítja az A[i] elemre a kupactulajdonságot. Az elemet süllyeszti cserékkel mindaddig, amíg a tulajdonság sérül. Kiválasztás kupaccal A bináris kupac egy majdnem teljes bináris fa, amely minden szintjén teljesen kitöltött kivéve a legalacsonyabb szintet, ahol balról jobbra haladva egy adott csúcsig vannak elemek.

Részletesebben

Láncolt listák. Egyszerű, rendezett és speciális láncolt listák. Programozás II. előadás. Szénási Sándor

Láncolt listák. Egyszerű, rendezett és speciális láncolt listák. Programozás II. előadás.  Szénási Sándor Láncolt listák Egyszerű, rendezett és speciális láncolt listák előadás http://nik.uni-obuda.hu/prog2 Szénási Sándor szenasi.sandor@nik.uni-obuda.hu Óbudai Egyetem,Neumann János Informatikai Kar Láncolt

Részletesebben

Általános algoritmustervezési módszerek

Általános algoritmustervezési módszerek Általános algoritmustervezési módszerek Ebben a részben arra mutatunk példát, hogy miként használhatóak olyan általános algoritmustervezési módszerek mint a dinamikus programozás és a korlátozás és szétválasztás

Részletesebben

Algoritmusok bonyolultsága

Algoritmusok bonyolultsága Algoritmusok bonyolultsága 9. előadás http://www.ms.sapientia.ro/~kasa/komplex.htm 1 / 18 Közelítő algoritmusok ládapakolás (bin packing) Adott n tárgy (s i tömeggel) és végtelen sok 1 kapacitású láda

Részletesebben

5. A gráf, mint adatstruktúra Gráfelméleti bevezető

5. A gráf, mint adatstruktúra Gráfelméleti bevezető 5. A gráf, mint adatstruktúra 5.1. Gráfelméleti bevezető Az irányított gráf (digráf) A G = ( V, E) rendezett párt irányított gráfnak (digráfnak) nevezzük. A rendezett pár elemeire tett kikötések: V véges

Részletesebben

Egyirányban láncolt lista

Egyirányban láncolt lista Egyirányban láncolt lista A tárhely (listaelem) az adatelem értékén kívül egy mutatót tartalmaz, amely a következő listaelem címét tartalmazza. A láncolt lista első elemének címét egy, a láncszerkezeten

Részletesebben

Buborékrendezés: Hanoi Tornyai: Asszimptótikus fv.ek: Láncolt ábrázolás: For ciklussal:

Buborékrendezés: Hanoi Tornyai: Asszimptótikus fv.ek: Láncolt ábrázolás: For ciklussal: Buborékrendezés: For ciklussal: Hanoi Tornyai: Asszimptótikus fv.ek: Láncolt ábr.: ha p egy mutató típusú változó akkor p^ az általa mutatott adatelem, p^.adat;p^.mut. A semmibe mutató ponter a NIL.Szabad

Részletesebben

Fa (Tree): csomópontok (nodes) halmaza, amelyeket élek (edges) kötnek össze, és teljesülnek az alábbi feltételek:

Fa (Tree): csomópontok (nodes) halmaza, amelyeket élek (edges) kötnek össze, és teljesülnek az alábbi feltételek: Fák szenasi.sandor@nik.bmf.hu PPT 2007/2008 tavasz http://nik.bmf.hu/ppt 1 Témakörök Rekurzív típusok, fa adatszerkezet Bináris keresőfa, bejárások Bináris keresőfa, módosítás Piros-fekete fa B-fa 2 Fa

Részletesebben

22. GRÁFOK ÁBRÁZOLÁSA

22. GRÁFOK ÁBRÁZOLÁSA 22. GRÁFOK ÁBRÁZOLÁSA A megoldandó feladatok, problémák modellezése során sokszor gráfokat alkalmazunk. A gráf fogalmát a matematikából ismertnek vehetjük. A modellezés során a gráfok több változata is

Részletesebben

Más szavakkal formálisan:, ahol olyan egész szám, hogy. Más szavakkal formálisan:, ahol olyan egész szám, hogy.

Más szavakkal formálisan:, ahol olyan egész szám, hogy. Más szavakkal formálisan:, ahol olyan egész szám, hogy. Bevezetés 1. Definíció. Az alsó egészrész függvény minden valós számhoz egy egész számot rendel hozzá, éppen azt, amely a tőle nem nagyobb egészek közül a legnagyobb. Az alsó egészrész függvény jele:,

Részletesebben

Adatszerkezetek Tömb, sor, verem. Dr. Iványi Péter

Adatszerkezetek Tömb, sor, verem. Dr. Iványi Péter Adatszerkezetek Tömb, sor, verem Dr. Iványi Péter 1 Adat Adat minden, amit a számítógépünkben tárolunk és a külvilágból jön Az adatnak két fontos tulajdonsága van: Értéke Típusa 2 Adat típusa Az adatot

Részletesebben

Számláló rendezés. Példa

Számláló rendezés. Példa Alsó korlát rendezési algoritmusokra Minden olyan rendezési algoritmusnak a futását, amely elempárok egymással való összehasonlítása alapján működik leírja egy bináris döntési fa. Az algoritmus által a

Részletesebben

Egyenletek, egyenlőtlenségek VII.

Egyenletek, egyenlőtlenségek VII. Egyenletek, egyenlőtlenségek VII. Magasabbfokú egyenletek: A 3, vagy annál nagyobb fokú egyenleteket magasabb fokú egyenleteknek nevezzük. Megjegyzés: Egy n - ed fokú egyenletnek legfeljebb n darab valós

Részletesebben

Tartalom Keresés és rendezés. Vektoralgoritmusok. 1. fejezet. Keresés adatvektorban. A programozás alapjai I.

Tartalom Keresés és rendezés. Vektoralgoritmusok. 1. fejezet. Keresés adatvektorban. A programozás alapjai I. Keresés Rendezés Feladat Keresés Rendezés Feladat Tartalom Keresés és rendezés A programozás alapjai I. Hálózati Rendszerek és Szolgáltatások Tanszék Farkas Balázs, Fiala Péter, Vitéz András, Zsóka Zoltán

Részletesebben

1. ábra. Számláló rendezés

1. ábra. Számláló rendezés 1:2 2:3 1:3 1,2,3 1:3 1,3,2 3,1,2 2,1,3 2:3 2,3,1 3,2,1 1. ábra. Alsó korlát rendezési algoritmusokra Minden olyan rendezési algoritmusnak a futását, amely elempárok egymással

Részletesebben

Bináris keresőfa. Felépítés, alapvető műveletek. Programozás II. előadás. Szénási Sándor

Bináris keresőfa. Felépítés, alapvető műveletek. Programozás II. előadás.  Szénási Sándor Bináris keresőfa Felépítés, alapvető műveletek előadás http://nik.uni-obuda.hu/prog2 Szénási Sándor szenasi.sandor@nik.uni-obuda.hu Óbudai Egyetem,Neumann János Informatikai Kar Bináris keresőfa Rekurzív

Részletesebben

Keresés és rendezés. A programozás alapjai I. Hálózati Rendszerek és Szolgáltatások Tanszék Farkas Balázs, Fiala Péter, Vitéz András, Zsóka Zoltán

Keresés és rendezés. A programozás alapjai I. Hálózati Rendszerek és Szolgáltatások Tanszék Farkas Balázs, Fiala Péter, Vitéz András, Zsóka Zoltán Keresés Rendezés Feladat Keresés és rendezés A programozás alapjai I. Hálózati Rendszerek és Szolgáltatások Tanszék Farkas Balázs, Fiala Péter, Vitéz András, Zsóka Zoltán 2016. november 7. Farkas B., Fiala

Részletesebben

Nagyságrendek. Kiegészítő anyag az Algoritmuselmélet tárgyhoz. Friedl Katalin BME SZIT február 1.

Nagyságrendek. Kiegészítő anyag az Algoritmuselmélet tárgyhoz. Friedl Katalin BME SZIT február 1. Nagyságrendek Kiegészítő anyag az Algoritmuselmélet tárgyhoz (a Rónyai Ivanyos Szabó: Algoritmusok könyv mellé) Friedl Katalin BME SZIT friedl@cs.bme.hu 018. február 1. Az O, Ω, Θ jelölések Az algoritmusok

Részletesebben

Shannon és Huffman kód konstrukció tetszőleges. véges test felett

Shannon és Huffman kód konstrukció tetszőleges. véges test felett 1 Shannon és Huffman kód konstrukció tetszőleges véges test felett Mire is jók ezek a kódolások? A szabványos karakterkódolások (pl. UTF-8, ISO-8859 ) általában 8 biten tárolnak egy-egy karaktert. Ha tudjuk,

Részletesebben

A 2016/2017 tanévi Országos Középiskolai Tanulmányi Verseny első forduló javítási-értékelési útmutató. INFORMATIKA II. (programozás) kategória

A 2016/2017 tanévi Országos Középiskolai Tanulmányi Verseny első forduló javítási-értékelési útmutató. INFORMATIKA II. (programozás) kategória Oktatási Hivatal A 2016/2017 tanévi Országos Középiskolai Tanulmányi Verseny első forduló javítási-értékelési útmutató INFORMATIKA II. (programozás) kategória Kérjük a tisztelt tanár kollégákat, hogy a

Részletesebben

Adatszerkezetek 1. Dr. Iványi Péter

Adatszerkezetek 1. Dr. Iványi Péter Adatszerkezetek 1. Dr. Iványi Péter 1 Adat Adat minden, amit a számítógépünkben tárolunk és a külvilágból jön Az adatnak két fontos tulajdonsága van: Értéke Típusa 2 Adat típusa Az adatot kódoltan tároljuk

Részletesebben

Adatszerkezetek 2. Dr. Iványi Péter

Adatszerkezetek 2. Dr. Iványi Péter Adatszerkezetek 2. Dr. Iványi Péter 1 Hash tábla A bináris fáknál O(log n) a legjobb eset a keresésre. Ha valamilyen közvetlen címzést használunk, akkor akár O(1) is elérhető. A hash tábla a tömb általánosításaként

Részletesebben

Adatbázis rendszerek Gy: Algoritmusok C-ben

Adatbázis rendszerek Gy: Algoritmusok C-ben Adatbázis rendszerek 1. 1. Gy: Algoritmusok C-ben 53/1 B ITv: MAN 2015.09.08 Alapalgoritmusok Összegzés Megszámlálás Kiválasztás Kiválasztásos rendezés Összefésülés Szétválogatás Gyorsrendezés 53/2 Összegzés

Részletesebben

A félév során előkerülő témakörök

A félév során előkerülő témakörök A félév során előkerülő témakörök rekurzív algoritmusok rendező algoritmusok alapvető adattípusok, adatszerkezetek, és kapcsolódó algoritmusok dinamikus programozás mohó algoritmusok gráf algoritmusok

Részletesebben

Ellenőrző kérdések. 36. Ha t szintű indexet használunk, mennyi a keresési költség blokkműveletek számában mérve? (1 pont) log 2 (B(I (t) )) + t

Ellenőrző kérdések. 36. Ha t szintű indexet használunk, mennyi a keresési költség blokkműveletek számában mérve? (1 pont) log 2 (B(I (t) )) + t Ellenőrző kérdések 2. Kis dolgozat kérdései 36. Ha t szintű indexet használunk, mennyi a keresési költség blokkműveletek számában mérve? (1 pont) log 2 (B(I (t) )) + t 37. Ha t szintű indexet használunk,

Részletesebben

Programozási módszertan. Mohó algoritmusok

Programozási módszertan. Mohó algoritmusok PM-08 p. 1/17 Programozási módszertan Mohó algoritmusok Werner Ágnes Villamosmérnöki és Információs Rendszerek Tanszék e-mail: werner.agnes@virt.uni-pannon.hu PM-08 p. 2/17 Bevezetés Dinamikus programozás

Részletesebben

Kupacrendezés. Az s sorban lévő elemeket rendezzük a k kupac segítségével! k.empty. not s.isempty. e:=s.out k.insert(e) not k.

Kupacrendezés. Az s sorban lévő elemeket rendezzük a k kupac segítségével! k.empty. not s.isempty. e:=s.out k.insert(e) not k. 10. Előadás Beszúró rendezés Használjuk a kupacokat rendezésre! Szúrd be az elemeket egy kupacba! Amíg a sor ki nem ürül, vedd ki a kupacból a maximális elemet, és tedd az eredmény (rendezett) sorba! 2

Részletesebben

Sorozatok I. Brósch Zoltán (Debreceni Egyetem Kossuth Lajos Gyakorló Gimnáziuma)

Sorozatok I. Brósch Zoltán (Debreceni Egyetem Kossuth Lajos Gyakorló Gimnáziuma) Sorozatok I. DEFINÍCIÓ: (Számsorozat) A számsorozat olyan függvény, amelynek értelmezési tartománya a pozitív egész számok halmaza, értékkészlete a valós számok egy részhalmaza. Jelölés: (a n ), {a n }.

Részletesebben

Programozás II. előadás

Programozás II. előadás Nem összehasonlító rendezések Nem összehasonlító rendezések Programozás II. előadás http://nik.uni-obuda.hu/prog2 Szénási Sándor Óbudai Egyetem,Neumann János Informatikai Kar Programozás II. 2 Rendezés

Részletesebben

6. előadás. Kiegyensúlyozottság, AVL-fa, piros-fekete fa. Adatszerkezetek és algoritmusok előadás március 6.

6. előadás. Kiegyensúlyozottság, AVL-fa, piros-fekete fa. Adatszerkezetek és algoritmusok előadás március 6. 6. előadás, AVL-fa, piros-fekete fa Adatszerkezetek és algoritmusok előadás 2018. március 6.,, és Debreceni Egyetem Informatikai Kar 6.1 Általános tudnivalók Ajánlott irodalom: Thomas H. Cormen, Charles

Részletesebben

Ionogram releváns területeinek meghatározása és elemzésének automatikus megvalósítása

Ionogram releváns területeinek meghatározása és elemzésének automatikus megvalósítása Ionogram releváns területeinek meghatározása és elemzésének automatikus megvalósítása Előadó: Pieler Gergely, MSc hallgató, Nyugat-magyarországi Egyetem Konzulens: Bencsik Gergely, PhD hallgató, Nyugat-magyarországi

Részletesebben

Rendezések. A rendezési probléma: Bemenet: Kimenet: n számot tartalmazó (a 1,a 2,,a n ) sorozat

Rendezések. A rendezési probléma: Bemenet: Kimenet: n számot tartalmazó (a 1,a 2,,a n ) sorozat 9. Előadás Rendezések A rendezési probléma: Bemenet: n számot tartalmazó (a 1,a 2,,a n ) sorozat Kimenet: a bemenő sorozat olyan (a 1, a 2,,a n ) permutációja, hogy a 1 a 2 a n 2 Rendezések Általánosabban:

Részletesebben

Összetett programozási tételek Rendezések Keresések PT egymásra építése. 10. előadás. Programozás-elmélet. Programozás-elmélet 10.

Összetett programozási tételek Rendezések Keresések PT egymásra építése. 10. előadás. Programozás-elmélet. Programozás-elmélet 10. Összetett programozási tételek Sorozathoz sorozatot relő feladatokkal foglalkozunk. A bemenő sorozatot le kell másolni, s közben az elemekre vonatkozó átalakításokat lehet végezni rajta: Input : n N 0,

Részletesebben

Diszkrét matematika 2. estis képzés

Diszkrét matematika 2. estis képzés Diszkrét matematika 2. estis képzés 2018. tavasz 1. Diszkrét matematika 2. estis képzés 10. előadás Nagy Gábor nagygabr@gmail.com nagy@compalg.inf.elte.hu compalg.inf.elte.hu/ nagy Komputeralgebra Tanszék

Részletesebben

Algoritmizálás. Horváth Gyula Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Algoritmizálás. Horváth Gyula Szegedi Tudományegyetem Természettudományi és Informatikai Kar Algoritmizálás Horváth Gyula Szegedi Tudományegyetem Természettudományi és Informatikai Kar horvath@inf.u-szeged.hu 0.1. Az algoritmikus tudás szintjei Ismeri (a megoldó algoritmust) Érti Le tudja pontosan

Részletesebben

Információk. Ismétlés II. Ismétlés. Ismétlés III. A PROGRAMOZÁS ALAPJAI 2. Készítette: Vénné Meskó Katalin. Algoritmus. Algoritmus ábrázolása

Információk. Ismétlés II. Ismétlés. Ismétlés III. A PROGRAMOZÁS ALAPJAI 2. Készítette: Vénné Meskó Katalin. Algoritmus. Algoritmus ábrázolása 1 Információk 2 A PROGRAMOZÁS ALAPJAI 2. Készítette: Vénné Meskó Katalin Elérhetőség mesko.katalin@tfk.kefo.hu Fogadóóra: szerda 9:50-10:35 Számonkérés időpontok Április 25. 9 00 Május 17. 9 00 Június

Részletesebben

1. előadás. Lineáris algebra numerikus módszerei. Hibaszámítás Számábrázolás Kerekítés, levágás Klasszikus hibaanalízis Abszolút hiba Relatív hiba

1. előadás. Lineáris algebra numerikus módszerei. Hibaszámítás Számábrázolás Kerekítés, levágás Klasszikus hibaanalízis Abszolút hiba Relatív hiba Hibaforrások Hiba A feladatok megoldása során különféle hibaforrásokkal találkozunk: Modellhiba, amikor a valóságnak egy közelítését használjuk a feladat matematikai alakjának felírásához. (Pl. egy fizikai

Részletesebben

összeadjuk 0-t kapunk. Képletben:

összeadjuk 0-t kapunk. Képletben: 814 A ferde kifejtés tétele Ha egy determináns valamely sorának elemeit egy másik sor elemeihez tartozó adjungáltakkal szorozzuk meg és a szorzatokat összeadjuk 0-t kapunk Képletben: n a ij A kj = 0, ha

Részletesebben

30. ERŐSEN ÜSSZEFÜGGŐ KOMPONENSEK

30. ERŐSEN ÜSSZEFÜGGŐ KOMPONENSEK 30. ERŐSEN ÜSSZEFÜGGŐ KOMPONENSEK A gráfos alkalmazások között is találkozunk olyan problémákkal, amelyeket megoldását a részekre bontott gráfon határozzuk meg, majd ezeket alkalmas módon teljes megoldássá

Részletesebben

Algoritmusok bonyolultsága

Algoritmusok bonyolultsága Algoritmusok bonyolultsága 5. előadás http://www.ms.sapientia.ro/~kasa/komplex.htm 1 / 27 Gazdaságos faváz Kruskal-algoritmus Joseph Kruskal (1928 2010) Legyen V = {v 1, v 2,..., v n }, E = {e 1, e 2,...,

Részletesebben

LINEÁRIS PROGRAMOZÁSI FELADATOK MEGOLDÁSA SZIMPLEX MÓDSZERREL

LINEÁRIS PROGRAMOZÁSI FELADATOK MEGOLDÁSA SZIMPLEX MÓDSZERREL LINEÁRIS PROGRAMOZÁSI FELADATOK MEGOLDÁSA SZIMPLEX MÓDSZERREL x 1-2x 2 6 -x 1-3x 3 = -7 x 1 - x 2-3x 3-2 3x 1-2x 2-2x 3 4 4x 1-2x 2 + x 3 max Alapfogalmak: feltételrendszer (narancs színnel jelölve), célfüggvény

Részletesebben

Rendezettminta-fa [2] [2]

Rendezettminta-fa [2] [2] Rendezettminta-fa Minden p ponthoz tároljuk a p gyökerű fa belső pontjainak számát (méretét) Adott elem rangja: az elem sorszáma (sorrendben hányadik az adatszekezetben) Adott rangú elem keresése - T[r]

Részletesebben