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

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

Kupac adatszerkezet. 1. ábra.

... fi. ... fk. 6. Fabejáró algoritmusok Rekurzív preorder bejárás (elsőfiú-testvér ábrázolásra)

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

Az absztrakt adattípus egy (E,M) párral adható meg, ahol E az értékhalmaz, M a műveletek halmaza. Fő tulajdonságok. Verem

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.

Az B sorozatban a pontok helyes preorder sorrendben vannak. A preorder bejárásban p k -t közvetlenül q m követi.

Számjegyes vagy radix rendezés

Algoritmusok és adatszerkezetek gyakorlat 07

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

Korlátozás és szétválasztás elve. ADAGOLO adattípus

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

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

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

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

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

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

Példa 30 14, 22 55,

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

Adatszerkezetek és algoritmusok

Hátizsák feladat. Példa: A tárgyak (súly, fontosság) párokban (4,6) (3,5) (2,3) (2,3) a hátizsák kapacitása 8.

Adatszerkezetek 7a. Dr. IványiPéter

Adatszerkezet - műveletek

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

Egyesíthető prioritási sor

15. A VERSENYRENDEZÉS

Algoritmusok és adatszerkezetek II.

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

2. Milyen értéket határoz meg az alábbi algoritmus, ha A egy vektor?. (2 pont)

Algoritmusok vektorokkal keresések 1

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

A Verem absztrakt adattípus

Megoldás meghatározása Ez a szakasz kitölti a c és S táblázatokat, a kiíratás S alapján egy rekurzív algoritmussal megtehető.

Hierarchikus adatszerkezetek

Algoritmusok és adatszerkezetek gyakorlat 09 Rendezések

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

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

Bináris keresőfák. Adat : M Elemtip és Elemtip-on értelmezett egy lineáris rendezési reláció,

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

Elemi adatszerkezetek

Egyesíthető prioritási sor

end function Az A vektorban elõforduló legnagyobb és legkisebb értékek indexeinek különbségét.. (1.5 pont) Ha üres a vektor, akkor 0-t..

Információs Technológia

Hátizsák feladat. Példa: A tárgyak (súly, fontosság) párokban (4,6) (3,5) (2,3) (2,3) a hátizsák kapacitása 8.

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

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

Gyakori elemhalmazok kinyerése

Fák 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

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

Példa Hajtsuk végre az 1 pontból a Dijkstra algoritmust az alábbi gráfra. (A mátrixban a c i j érték az (i, j) él hossza, ha nincs él.

Algoritmusok és adatszerkezetek II.

Önszervező bináris keresőfák

Rendezettminta-fa [2] [2]

23. SZÉLESSÉGI BEJÁRÁS

Az optimális megoldást adó algoritmusok

Gyakorló feladatok ZH-ra

Algoritmuselmélet 2. előadás

Algoritmusok és adatszerkezetek gyakorlat 06 Adatszerkezetek

Programozási módszertan. Mohó algoritmusok

Algoritmusok és adatszerkezetek I. 3. előadás

Elmaradó óra. Az F = (V,T) gráf minimális feszitőfája G-nek, ha. F feszitőfája G-nek, és. C(T) minimális

Adatszerkezetek I. 4. előadás

Példa Hajtsuk végre az 1 pontból a Dijkstra algoritmust az alábbi gráfra. (A mátrixban a c i j érték az (i, j) él hossza, ha nincs él.

Hierarchikus adatszerkezetek

8. Mohó algoritmusok Egy esemény-kiválasztási probléma. Az esemény-kiválasztási probléma optimális részproblémák szerkezete

Specifikáció. B logikai formula, a bemeneti feltétel, K logikai formula, a kimeneti feltétel, A az algoritmus, amelyre az állítás vonatkozik.

Minimális feszítőfák Legyen G = (V,E,c), c : E R + egy súlyozott irányítatlan gráf. Terjesszük ki a súlyfüggvényt a T E élhalmazokra:

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

9. előadás. Programozás-elmélet. Programozási tételek Elemi prog. Sorozatszámítás Eldöntés Kiválasztás Lin. keresés Megszámolás Maximum.

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

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

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

30. ERŐSEN ÜSSZEFÜGGŐ KOMPONENSEK

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

Adatszerkezetek 2. Dr. Iványi Péter

BABEŞ-BOLYAI TUDOMÁNYEGYETEM MATEMATIKA-INFORMATIKA KAR Felvételi verseny - minta Informatika írásbeli

Neumann János Tehetséggondozó Program Gráfalgoritmusok II.

Specifikáció. B logikai formula, a bemeneti feltétel, K logikai formula, a kimeneti feltétel, A az algoritmus, amelyre az állítás vonatkozik.

Web-programozó Web-programozó

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

ÖNSZERVEZŐ BINÁRIS KERESŐFÁK HATÉKONYSÁGA

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

Általános algoritmustervezési módszerek

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

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.

KUPAC TĺPUSÚ ADATSZERKEZETEK

1. Alapfogalmak Algoritmus Számítási probléma Specifikáció Algoritmusok futási ideje

Dr. Schuster György február / 32

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

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

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

14. Mediánok és rendezett minták

Algoritmusok és adatszerkezetek I. 1. előadás

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

GRÁFOK ÉS ALGORITMUSOK ELMÉLETE VIZSGAKÉRDÉSEK Matematika BSc Elemző szakirány II. év 1. félév

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

Körkörös listák. fej. utolsó. utolsó. fej

Minimális feszítőfák Legyen G = (V,E,c), c : E R + egy súlyozott irányítatlan gráf. Terjesszük ki a súlyfüggvényt a T E élhalmazokra:

Rendezési algoritmusok belső rendezés külső rendezés

Multihalmaz, intervallumhalmaz

Átírás:

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. A fát egy tömbben reprezentáljuk, minden elem a szint szerinti bejárás szerinti sorszámának megfelelő eleme a tömbnek. A kupacot reprezentáló A tömbhöz két értéket rendelünk, hossz(a) a tömb mérete, kupacmeret(a) a kupac elemeinek a száma. A kupac gyökere A[1], a szerkezeti kapcsolatok egyszerűen számolhatóak: A[i] bal fia A[i] A[i] jobb fia A[i + 1] A[i] apja A[ i/ ] A kupac minden gyökértől különböző elemére teljesül, hogy az értéke nem lehet nagyobb, mint az apjáé. Ennek következménye, hogy a kupac minden részfájára teljesül, hogy a gyökéreleme maximális. 1 3 4 5 6 7 8 9 1. ábra. MAXIMUM-KUPACOL Eljárás 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. MAXIMUM-KUPACOL(A,i) l:=i //az A[i] elem bal fiának indexe r:=i+1 //az A[i] elem jobb fiának indexe if l<=kupacmeret(a) and A[l]>A[i] then max:=l else max:=i if r<=kupacmeret(a) and A[r]>A[max] then max:=r // A[max] a három elem közül a legnagyobb if max!=i then {Csere(A[i],A[max]) MAXIMUM-KUPACOL(A,max)} Példa 1

A=[5,14,13,8,3,4,6,] MAXIMUM-KUPACOL(A,1) A=[14,5,13,8,3,4,6,] A=[14,8,13,5,3,4,6,] 5 14 13 8 3 4 6 14 5 13 8 3 4 6 14 8 13 5 3 4 6. ábra. Kupacrendezés Elsőként a rendezendő elemek tömbjét egy kupaccá kell alakítani. Erre szolgál a // KUPACEPIT eljárás: KUPACEPIT(A) kupacmeret(a):=hossz(a) for i=[hossz(a)/] downto 1 MAXIMUM-KUPACOL(A,i) A kupacrendezés algoritmusa ekkor a következő KUPACREND(A) KUPACEPIT(A) for i=hossz(a) downto {csere(a[1],a[i]) kupacmeret(a):=kupacmeret(a)-1 MAXIMUM-KUPACOL(A,1)} A=[5,13,,5,7,17,0,8,4] KUPACEPIT(A): MAXIMUMKUPACOL(A,4): A=[5,13,,5,7,17,0,8,4] MAXIMUMKUPACOL(A,3): A=[5,13,0,5,7,17,,8,4] MAXIMUMKUPACOL(A,): A=[5,5,0,13,7,17,,8,4] Példa

A=[5,5,0,13,7,17,,8,4] A=[5,13,0,5,7,17,,8,4] A=[5,13,0,8,7,17,,5,4] A=[4,13,0,8,7,17,,5, 5] A=[0,13,4,8,7,17,,5, 5] A=[0,13,17,8,7,4,,5, 5] A=[5,13,17,8,7,4,, 0,5] A=[17,13,5,8,7,4,, 0,5] A=[,13,5,8,7,4, 17,0,5] A=[13,,5,8,7,4, 17,0,5] A=[13,8,5,,7,4, 17,0,5] A=[4,8,5,,7, 13,17,0,5] A=[8,4,5,,7, 13,17,0,5] A=[8,7,5,,4, 13,17,0,5] A=[4,7,5,, 8,13,17,0,5] A=[7,4,5,, 8,13,17,0,5] A=[,4,5, 7,8,13,17,0,5] A=[5,4,, 7,8,13,17,0,5] A=[,4, 5,7,8,13,17,0,5] A=[4,, 5,7,8,13,17,0,5] A=[, 4,5,7,8,13,17,0,5] Műveletigény elemzése A kupacrendezés során O(n) darab MAXIMUM-KUPACOL eljárást hajtunk végre. Minden MAXIMUM-KUPACOL eljárás műveletigénye legfeljebb az aktuális fa magasságával arányos, azaz O(log n) Következésképpen a kupacrendezés műveletigénye O(nlogn). Priorítási sor megvalósítása kupaccal A maximális elemet a kupac gyökere tartalmazza A maximális elem törlését követően, a kupacot tároló tömb utolsó elemét a helyére rakva, a MAXIMUM- KUPACOL eljárást végrehajtva a kupactulajdonság helyreáll. Megjegyzés: A kupacrendezés tulajdonképpen egy priorítási sorba rakja az elemeket, majd rendre kiveszi a maximális elemet. Preorder bejá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. 3

A preorder bejárási sorrend azt jelenti, hogy F minden p és q pontjára ha q fia p-nek, vagy p bal-testvére q-nak, akkor p megelőzi q-t a bejárási sorrendben. A bejárás első eleme a gyökér, utána az első fiú gyökerű részfát járjuk be rekurzívan, majd a második fiú részfáját, és így folytatva a gyökér utolsó fiának a részfáját. 1 8 3 4 9 5 6 7 3. ábra. Egy rekurzív preorder bejárás Feltesszük, hogy a fa a g gyökérpontja által van megadva elsőfiú testvér reprezentációval, és az M műveletet akarjuk minden ponton végrehajtani. Preorder1(g,M) if g=nil then return //Üres fa else {M(g) //gyökéren végrehajtott művelet p:=g.elsofiu while (p!=nil) {Preorder1(p,M) p:=p.testver}} // a gyerekeken sorbamenve rekurzív hívás Egy másik rekurzív preorder bejárás Ismét feltesszük, hogy a fa a g gyökérpontja által van megadva elsőfiú testvér reprezentációval, és az M műveletet akarjuk minden ponton végrehajtani. Preorder(g,M) if g=nil then return //Üres fa else {M(g) //gyökéren végrehajtott művelet if g.elsofiu!=nil then Preorder(g.Elsofiu,M) if g.testver!=nil then Preorder(g.Tesver,M)} Az első rekurzív hívás az g.elsofiu pontból az elsőfiu és testvér kapcsolatok szerint elérhető pontokra végez helyes preorder bejárást, majd a második rekurzív hívás pedig a g.testver pontból az elsőfiu és testvér kapcsolatok szerint elérhető pontokra végez helyes preorder bejárást, tehát a g gyökerű fa preorder bejárását kapjuk. Nemrekurzív preorder bejárás veremmel 4

Ismét feltesszük, hogy a fa a g gyökérpontja által van megadva elsőfiú testvér reprezentációval, és az M műveletet akarjuk minden ponton végrehajtani. PreorderV(g,M) // Preorder bejárás veremmel. if (g=nil) then return //Üres fa Letesit(V:Verem) VeremBe(V,g) while (NemUres(V)) {VeremBol(V,p) M(p) if p.testver!=nil then Verembe(V,p.Testver) if p.elsofiu!=nil then VeremBe(V,p.Elsofiu)} Példa: V=[1],p=1,V=[],M(1),V=[],p=,V=[],M(),V=[8],V=[8,3],p=3,V=[8],M(3),V=[8,4], p=4, V=[8], M(4),V=[8,5],p=5,V=[8],M(5),V=[8,6],p=6,V=[8], M(6),V=[8,7],p=7,V=[8],M(7),p=8,V=[], M(8),V=[9],p=9,V=[], M(9) Helyesség Tekintsük a while ciklus végrehajtásának egy adott pillanatát. Legyen B = {p1,..., p k } a fa azon pontjainak halmaza, amelyeket már bejártunk, abban a sorrendben, ahogy a veremből kikerültek. Legyen V = {q 1,...,q m } a V verem tartalma, ezek az aktív pontok. A következő négy állítás teljesül. Az B sorozatban a pontok helyes preorder sorrendben vannak. A preorder bejárásban p k -t közvetlenül q m követi. A preorder sorrendben q i megelőzi q i 1 -et (i =,...,m). B V = /0 és a fa bármely p / B pontjára, pontosan egy olyan q V pont van, hogy p leszármazottja q-nak az elsőfiú-testvér fában. Szintszerinti bejárás Egy F fa bármely két p és q pontjára p akkor és csak akkor előzi meg q-t a szintszerinti bejárásban, ha d(p) < d(q) vagy d(p) = d(q) és p balrább esik, mint q. Az algoritmus SzintBejar(g,M) if (g=nil) then return /Üres fa Letesit(S:Sor) SorBa(S,g) while (Elemszam(S)!=0) {SorBol(S,p) M(p) p=p.elsofiu; while (p!=nil) //p gyerekeit berakjuk S-be {SorBa(S,p) p=p.testver}} 5

1 3 4 5 6 7 8 9 4. ábra. Példa: S=[1], p=1,s=[],m(1),p=,s=[],p=3,s=[,3],p=nil,p=,s=[3],m(),p=4,s=[3,4], p=5, S=[3,4,5],p=Nil,p=3,S=[ p=7, S=[6,7],p=8,s=[6,7,8],p=9,S=[6,7,8,9],p=Nil,p=6,S=[7,8,9],M(6),p=Nil,p=7,S=[8,9],M(7), p=nil,p=8, S=[9],M(8),p=Nil,p=9,S=[],M(9),p=nil. Helyesség Tekintsük a külső while ciklus végrehajtásának egy adott pillanatát. Legyen B = {p 1,..., p k } a fa azon pontjainak halmaza, amelyeket már bejártunk, abban a sorrendben, ahogy a sorból kikerültek. Legyen S = {q 1,...,q m } a S sor aktuális tartalma, ezek az aktív pontok. A következő négy állítás teljesül. Az B sorozatban a pontok szintszerinti sorrendben vannak. Az S sorban a pontok szintszerinti sorrendben vannak. d(q m ) d(q 1 ) + 1 A szintszerinti bejárásban p k megelőzi q 1 -et. Bejárás Adagolóval Ha nem fontos a szintszerinti bejárási sorrend, a fenti algoritmusban az aktív pontok tárolására minden olyan absztrakt adattípus használható lenne, amely rendelkezik az alábbi műveletekkel. Értékhalmaz: E Adagol = A E Műveletek: A: Adagoló, x : E {Igaz} Letesit(A) {A = /0} {A = A} Megszuntet(A) {Igaz} {A = A} Uresit(A) {A = /0} {S = [a 1,...,a n } Betesz(A,x) {A = Pre(A) {x} {A /0} Kivesz(A,x) {x Pre(A) Pre(A) = A {x}} {A = A} Elemszam(A) {Elemszam = A } Kiskérdések 6

Kupacrendezés algoritmusa (MAXIMUM-KUPACOL is) Kupacrendezés végrehajtása rekurzív preorder bejárás algoritmus preorder bejárás veremmel algoritmus szintszerinti bejárás algoritmus 7