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

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

Kupac adatszerkezet. 1. ábra.

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

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

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

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

Algoritmusok és adatszerkezetek gyakorlat 07

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

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

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

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

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

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

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 I. 7. előadás. (Horváth Gyula anyagai felhasználásával)

Példa 30 14, 22 55,

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

Adatszerkezetek és algoritmusok

Egyesíthető prioritási sor

Adatszerkezet - műveletek

15. A VERSENYRENDEZÉS

Adatszerkezetek 7a. Dr. IványiPéter

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

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

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

Algoritmusok és adatszerkezetek gyakorlat 09 Rendezések

Algoritmusok és adatszerkezetek II.

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

A Verem absztrakt adattípus

Algoritmusok vektorokkal keresések 1

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

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

Hierarchikus adatszerkezetek

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

Elemi adatszerkezetek

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

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.

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

Egyesíthető prioritási sor

Hierarchikus adatszerkezetek

Algoritmusok és adatszerkezetek II.

Az optimális megoldást adó algoritmusok

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

Gyakori elemhalmazok kinyerése

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

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

Rendezettminta-fa [2] [2]

Információs Technológia

Gyakorló feladatok ZH-ra

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

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

Önszervező bináris keresőfák

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

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

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

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:

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

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

Adatszerkezetek I. 4. előadás

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.

Algoritmuselmélet 2. 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.

Programozási módszertan. Mohó algoritmusok

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.

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.

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

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

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

30. ERŐSEN ÜSSZEFÜGGŐ KOMPONENSEK

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.

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

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

Web-programozó Web-programozó

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

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

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

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.

KUPAC TĺPUSÚ ADATSZERKEZETEK

14. Mediánok és rendezett minták

Előfeltétel: legalább elégséges jegy Diszkrét matematika II. (GEMAK122B) tárgyból

Adatszerkezetek 2. Dr. Iványi Péter

Programozási módszertan. Dinamikus programozás: Nyomtatási feladat A leghosszabb közös részsorozat

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

Dr. Schuster György február / 32

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:

Multihalmaz, intervallumhalmaz

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

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

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

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

Általános algoritmustervezési módszerek

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

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

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

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

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

Algoritmusok és adatszerkezetek gyakorlat 06 Adatszerkezetek

Átí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. 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 5 6 7. á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 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 return //Üres fa Else M(g) //gyökéren végrehajtott művelet If g.elsofiu!=nil Preorder(g.Elsofiu,M) If g.testver!=nil 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 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) return //Üres fa Letesit(V:Verem) VeremBe(V,g) While NemUres(V) VeremBol(V,p) M(p) if p.testver!=nil Verembe(V,p.Testver) if p.elsofiu!=nil VeremBe(V,p.Elsofiu) Példa: V=[],p=,V=[],M(),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 = {p,..., p k } a fa azon pontjainak halmaza, amelyeket már bejártunk, abban a sorrendben, ahogy a veremből kikerültek. Legyen V = {q,...,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 -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) return /Üres fa Letesit(S:Sor) SorBa(S,g) while (Elemszam(S)!=0)

3 4 5 6 7 8 9. ábra. SorBol(S,p) M(p) p=p.elsofiu; while (p!=nil) SorBa(S,p) p=p.testver; //p gyerekeit berakjuk S-be Példa: S=[], p=,s=[],m(),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,..., p k } a fa azon pontjainak halmaza, amelyeket már bejártunk, abban a sorrendben, ahogy a sorból kikerültek. Legyen S = {q,...,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 ) + A szintszerinti bejárásban p k megelőzi q -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} 3

{S = [a,...,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 } 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 5 6 7 8 9 3. ábra. A=[,,3,4,5,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] 4

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) A=[5,4,3,8,3,4,6,] MAXIMUM-KUPACOL(A,) A=[4,5,3,8,3,4,6,] A=[4,8,3,5,3,4,6,] Példa 5 4 3 8 3 4 6 4 5 3 8 3 4 6 4 8 3 5 3 4 6 4. á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,) Példa 5

A=[5,3,,5,7,7,0,8,4] KUPACEPIT(A): MAXIMUMKUPACOL(A,4): A=[5,3,,5,7,7,0,8,4] MAXIMUMKUPACOL(A,3): A=[5,3,0,5,7,7,,8,4] MAXIMUMKUPACOL(A,): A=[5,5,0,3,7,7,,8,4] MAXIMUMKUPACOL(A,): A=[5,5,0,3,7,7,,8,4] A=[5,3,0,5,7,7,,8,4] A=[5,3,0,8,7,7,,5,4] A=[4,3,0,8,7,7,,5, 5] MAXIMUMKUPACOL(A,): A=[0,3,4,8,7,7,,5, 5] A=[0,3,7,8,7,4,,5, 5] A=[5,3,7,8,7,4,, 0,5] MAXIMUMKUPACOL(A,): A=[7,3,5,8,7,4,, 0,5] A=[,3,5,8,7,4, 7,0,5] MAXIMUMKUPACOL(A,): A=[3,,5,8,7,4, 7,0,5] A=[3,8,5,,7,4, 7,0,5] A=[4,8,5,,7, 3,7,0,5] MAXIMUMKUPACOL(A,): A=[8,4,5,,7, 3,7,0,5] A=[8,7,5,,4, 3,7,0,5] A=[4,7,5,, 8,3,7,0,5] MAXIMUMKUPACOL(A,): A=[7,4,5,, 8,3,7,0,5] A=[,4,5, 7,8,3,7,0,5] MAXIMUMKUPACOL(A,): A=[5,4,, 7,8,3,7,0,5] A=[,4, 5,7,8,3,7,0,5] MAXIMUMKUPACOL(A,): A=[4,, 5,7,8,3,7,0,5] A=[, 4,5,7,8,3,7,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). Kiskérdések rekurzív preorder bejárás algoritmus 6

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