Kupac adatszerkezet. 1. ábra.

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

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

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

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

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.

Számjegyes vagy radix rendezés

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

Algoritmusok és adatszerkezetek gyakorlat 07

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

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

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

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

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

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

Adatszerkezetek 7a. Dr. IványiPéter

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

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

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

Példa 30 14, 22 55,

Adatszerkezet - műveletek

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

15. A VERSENYRENDEZÉS

Adatszerkezetek és algoritmusok

Algoritmusok és adatszerkezetek gyakorlat 09 Rendezések

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

Algoritmusok vektorokkal keresések 1

Egyesíthető prioritási sor

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.

Hierarchikus adatszerkezetek

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

Elemi adatszerkezetek

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

Hierarchikus adatszerkezetek

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

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

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

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

Algoritmuselmélet 2. előadás

Információs Technológia

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

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

Rendezettminta-fa [2] [2]

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

Algoritmusok és adatszerkezetek II.

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

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

Gyakorló feladatok ZH-ra

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

Az optimális megoldást adó algoritmusok

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

Algoritmusok és adatszerkezetek gyakorlat 06 Adatszerkezetek

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

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:

Programozási módszertan. Mohó algoritmusok

Adatszerkezetek I. 4. előadás

Gyakori elemhalmazok kinyerése

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

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.

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

KUPAC TĺPUSÚ ADATSZERKEZETEK

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

Önszervező bináris keresőfák

Egyesíthető prioritási sor

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

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

14. Mediánok és rendezett minták

2. Visszalépéses stratégia

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.

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

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

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

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

Adatszerkezetek 2. Dr. Iványi Péter

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.

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

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.

Dinamikus programozás vagy Oszd meg, és uralkodj!

Rakov(34125)= Rakov(12543)= Rakov(14532)= Rakov(54321)=-

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

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

Információs Technológia

Dr. Schuster György február / 32

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

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

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

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

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.

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:

Általános algoritmustervezési módszerek

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.

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.

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

Rakov(34125)= Rakov(12543)= Rakov(14532)= Rakov(54321)=-

Mohó algoritmusok. Példa:

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

30. ERŐSEN ÜSSZEFÜGGŐ KOMPONENSEK

Á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[], a szerkezeti kapcsolatok egyszerűen számolhatóak: A[i] bal fia A[i] A[i] jobb fia A[i + ] 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. 3 4 6 7 8 9. ábra. A=[,,3,4,,6,7,8,9] 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+ //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 A=[,4,3,8,3,4,6,] MAXIMUM-KUPACOL(A,) A=[4,,3,8,3,4,6,] A=[4,8,3,,3,4,6,] 4 3 8 3 4 6 4 3 8 3 4 6 4 8 3 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 MAXIMUM-KUPACOL(A,i) A kupacrendezés algoritmusa ekkor a következő KUPACREND(A) KUPACEPIT(A) for i=hossz(a) downto {csere(a[],a[i]) kupacmeret(a):=kupacmeret(a)- MAXIMUM-KUPACOL(A,)} A=[,3,,,7,7,0,8,4] KUPACEPIT(A): MAXIMUMKUPACOL(A,4): A=[,3,,,7,7,0,8,4] MAXIMUMKUPACOL(A,3): A=[,3,0,,7,7,,8,4] MAXIMUMKUPACOL(A,): Példa

A=[,,0,3,7,7,,8,4] MAXIMUMKUPACOL(A,): A=[,,0,3,7,7,,8,4] A=[,3,0,,7,7,,8,4] A=[,3,0,8,7,7,,,4] A=[4,3,0,8,7,7,,, ] MAXIMUMKUPACOL(A,): A=[0,3,4,8,7,7,,, ] A=[0,3,7,8,7,4,,, ] A=[,3,7,8,7,4,, 0,] MAXIMUMKUPACOL(A,): A=[7,3,,8,7,4,, 0,] A=[,3,,8,7,4, 7,0,] MAXIMUMKUPACOL(A,): A=[3,,,8,7,4, 7,0,] A=[3,8,,,7,4, 7,0,] A=[4,8,,,7, 3,7,0,] MAXIMUMKUPACOL(A,): A=[8,4,,,7, 3,7,0,] A=[8,7,,,4, 3,7,0,] A=[4,7,,, 8,3,7,0,] MAXIMUMKUPACOL(A,): A=[7,4,,, 8,3,7,0,] A=[,4,, 7,8,3,7,0,] MAXIMUMKUPACOL(A,): A=[,4,, 7,8,3,7,0,] A=[,4,,7,8,3,7,0,] MAXIMUMKUPACOL(A,): A=[4,,,7,8,3,7,0,] A=[, 4,,7,8,3,7,0,] 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. A sorba művelet esetén az aktuális elemet a tömb végére helyezzük el, majd ha nagyobb az apjánál, akkor kicseréljük az apjával és az új helyén ugyanezt rekurzívan végrehajtjuk. Megjegyzés: A kupacrendezés tulajdonképpen egy priorítási sorba rakja az elemeket, majd rendre kiveszi a maximális elemet. 3

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. 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. 8 3 4 9 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. Preorder(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) {Preorder(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)} 4

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. Kiskérdések Maximum kupacol algoritmus kupacrendezés algoritmusa (kupacepit kell, Maximum-kupacol nem) Kupacrendezés végrehajtása adott tömbön a közbenső kupacok megadásával rekurzív preorder bejárás algoritmus