Rendezettminta-fa [2] [2]

Hasonló dokumentumok
Példa 30 14, 22 55,

Algoritmusok és Adatszerkezetek II. előadás

Algoritmusok és Adatszerkezetek II.

Algoritmusok és adatszerkezetek gyakorlat 07

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

Algoritmusok és adatszerkezetek II.

Algoritmusok és adatszerkezetek II.

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

Algoritmusok és adatszerkezetek II.

Adatszerkezet - műveletek

Hierarchikus adatszerkezetek

Önszervező bináris keresőfák

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

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

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

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

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

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.

16. Az AVL-fa. (Adelszon-Velszkij és Landisz, 1962) Definíció: t kiegyensúlyozott (AVL-tulajdonságú) t minden x csúcsára: Pl.:

Adatszerkezetek 7a. Dr. IványiPéter

Elemi adatszerkezetek

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

Kupac adatszerkezet. 1. ábra.

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

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

Keresőfák és nevezetes algoritmusaikat szemléltető program

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

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

Algoritmusok és adatszerkezetek gyakorlat 06 Adatszerkezetek

Algoritmusok és adatszerkezetek II.

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.

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

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

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

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

Algoritmuselmélet 2. előadás

Adatszerkezetek és algoritmusok

Hierarchikus adatszerkezetek

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

félstatikus adatszerkezetek: verem, várakozási sor, hasítótábla dinamikus adatszerkezetek: lineáris lista, fa, hálózat

Egyesíthető prioritási sor

Táblázatok fontosabb műveletei 1

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

Adatszerkezetek 2. Dr. Iványi Péter

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

Az első kiegyensúlyozott fa algoritmus. Kitalálói: Adelson-Velskii és Landis (1962)

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

Programozás alapjai C nyelv 8. gyakorlat. Mutatók és címek (ism.) Indirekció (ism)

Információs Technológia

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

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

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

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

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

Mutatók és címek (ism.) Programozás alapjai C nyelv 8. gyakorlat. Indirekció (ism) Néhány dolog érthetőbb (ism.) Változók a memóriában

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

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

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

Érdekes informatika feladatok

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

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

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

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

A lista eleme. mutató rész. adat rész. Listaelem létrehozása. Node Deklarálás. Létrehozás. Az elemet nekünk kell bef zni a listába

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

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

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

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

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

Feladat. Ternáris fa. Típusspecikáció. Reprezentáció. Absztrakt implementáció. Érdi Gerg EAF II. 4/3.

Adatszerkezetek Hasító táblák. Dr. Iványi Péter

Adatszerkezetek 2. Dr. Iványi Péter

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

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

Térinformatikai adatszerkezetek

Miről lesz ma szó? A PROGAMOZÁS ALAPJAI 1. Dinamikus adatszerkezetek. Dinamikus adatszerkezetek. Önhivatkozó struktúrák. Önhivatkozó struktúrák

Egyesíthető prioritási sor

Gelle Kitti Algoritmusok és adatszerkezetek gyakorlat - 07 Hasítótáblák

Algoritmusok és adatszerkezetek II.

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

Algoritmusok vektorokkal keresések 1

INFORMATIKA javítókulcs 2016

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

Adatszerkezetek 1. előadás

.Net adatstruktúrák. Készítette: Major Péter

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

2. Visszalépéses keresés

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

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

Programozási módszertan. Mohó algoritmusok

Fájlszervezés. Adatbázisok tervezése, megvalósítása és menedzselése

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

Információs Technológia

értékel függvény: rátermettségi függvény (tness function)

Tartalomjegyzék. Köszönetnyilvánítás. 1. Az alapok 1

A feladat lényege egy felhasználói típusnak a zsák típusnak a megvalósítása.

Bevezetés a programozásba. 12. Előadás: 8 királynő

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

Függvények. Programozás alapjai C nyelv 7. gyakorlat. LNKO függvény. Függvények(2) LNKO függvény (2) LNKO függvény (3)

Programozás alapjai C nyelv 7. gyakorlat. Függvények. Függvények(2)

Átírás:

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] Adott elem rangjának meghatározása Egyéb bővítési lehetőségek (pl. intervallumfák) [] 7-77 [] 79-85

Példa 6 rang=3 0 4 7 7 4 méret 30 5 4 7 47 7 0 4 5 6 9 0 8 rang=4 35 38 3 39 3

Fapont tárolása első megközelítés, a gyakorlatban nem így tároljuk! struct fapont{!!!int key, v, meret ;!!!fapont bal, jobb, apa ;! } apa key balfiu v meret jobbfiu

Adott rangú elem keresése 6 rang 4 7 7 30 5 4 méret 47 8 3 38 3 5 rmkeres(p,x) {!!r=p.bal.meret+ ;! 35 39!if (x==r) return p ;!!if (x<r) return rmkeres(p.bal,x) ;!!else return rmkeres(p.jobb,x-r) ;! } O(h)

Elem rangjának meghatározása 30 5 4 7 47 rmrang(p) {!!r=p.bal.meret+ ;!!q=p ;!!while (q!=gyoker) {!!!if (q==q.apa.jobb) r+=q.apa.bal.meret+;!!!q=q.apa ;!!}!!return r ;! } 8 35 38 3 39 O(h)

Méret információ fenntartása beszjav(p) {!!while (p!=gyoker) {!!!p=p.apa;!!!p.meret++ ;!!}! } 30 56 8 38 34 4 78 47 torljav(p) {!!while (p!=gyoker) {!!!p=p.apa;!!!p.meret-- ;!!}! 35 39 40 } O(h)

Elem rákövetkezője 9 9 4 7 4 37 3 0 7 3 43

p rákövetkezője p p p O(h)

p rákövetkezője fapont kovetkezo(fapont p) {!!! if (p.jobb!=nil) {!!!!! //ha van jobb fiú!!! p=p.jobb ;!!!!!!!! //akkor a jobb részfa!!! while (p.bal!=nil) p=p.bal;!//bal szélső eleme!!! return p;!!! } else {!!!!!!!!!! // ha nincs jobb fiú!!! while (p.apa!=nil) {!!!! // amíg van apa!!!!! if (p.apa.bal==p)!!!! // ha p bal gyerek!!!!!! return p.apa;!!!! // p apja a rákövetkező!!!!! p=p.apa ;!!!!!!! // megyünk felfelé p-vel!!! };!!!! return nil ;!!!!!!! // nincs rákövetkező!!! }! } O(h)

Törlés bináris keresőfából p q O(h)

void torol(fapont p) {!!! if (p.jobb!=nil) {!!!!!!!!! fapont q=kovetkezo(p) ;!!!!!!!!!!!! p.key=q.key ; p.value=q.value ;!!!!! q.apa.bal=q.jobb ;!!!! q.jobb.apa=q.apa ;!!!! delete q ;! q!! } else {!!!!!!!!!!!!!...!!!!! }! } p 4 9 37 7 3 43 O(h)

void torol(fapont p) {!!! if (p.jobb!=nil) {!!!!!!!!! fapont q=kovetkezo(p) ;!!!!!!!! p.key=q.key ; p.value=q.value ;!!!! q.apa.bal=q.jobb ;!!!! q.jobb.apa=q.apa ;!!!! delete q ;!!! } else {!!!!!!!!!!!!! if (p.apa.jobb==p) p.apa.jobb=p.bal ;!!!! else p.apa.bal=p.bal ;!!!! p.bal.apa=p.apa ;!!!! delete p ;!!!! }! } p O(h)

Elem törlése példa 9 9 4 7 4 37 3 0 7 3 43

Futási idők elemzése Keresés Beszúrás Mennyi a futási idő? O(h) Törlés

Rendezettmintafa Műveletek: bool beszúr(<k> key, <V> value) O(h) fapont keres(<k> x) bool töröl(fapont p) fapont rákövetkező(fapont p) mindetkiir(fapont p) mindenttöröl(fapont p) int elemszám(fapont p) int rang(fapont p) fapont rangkeres(int x) O(h) O(h) O(h) O(n) O(h) O() O(h) O(h)

9 9 4 7 4 37 3 0 7 3 43

Teljes bináris keresőfa h n(h) 3 4 3 7 8 4 5 6 5 3 3 k

n pontot tartalmazó teljes bináris keresőfa magassága h n(h) 3 4 3 7 8 4 5 6 5 3 3 h h=o(logn)

Lehet-e egy bináris keresőfa teljesen kiegyensúlyozott??? n= n=3 n=7 n=? n=4 n=5 n=6? n=8...?

Majdnem teljes bináris keresőfa h n(h) 3 4 4 4 8 8 5 6 6 k

n pontot tartalmazó majdnem teljes bináris keresőfa magassága h n(h) 3 4 4 4 8 8 5 6 6 k h=o(logn)

Véletlen építésű bináris keresőfa Adott n egymástól különböző kulcs, melyekből bináris keresőfát építünk úgy, hogy a kulcsokat valamilyen sorrendben egymás után beszúrjuk a kezdetben üres fába. Ha itt minden sorrend, vagyis az n kulcsnak mind az n! permutációja egyformán valószínű, akkor a kapott fát véletlen építésű bináris keresőfának nevezzük. Tétel: Egy n különböző kulcsot tartalmazó véletlen építésű bináris keresőfa várható magassága: O(log n). [] 4-44

Szúrjuk be rendre az 3 4 5... n elemeket 3 4 5 n Legrosszabb eset h=n

Kiegyensúlyozott bináris keresőfák

Hogy lehetne javítani? 3 4 5 6 7 8 9 0 3 4 5 más sorrendben kell beszúrni: f(i,j) {!! if (i<=j) {!!! f=int((i+j)/) ;!!! beszur(t[f]) ;!!! f(i,f-) ;!!! f(f+,j) ;!! }! } 4 6 8 0 4 3 5 7 9 3 5

Optimális bináris keresőfa Adott kulcsoknak egy K=(k,...,kn) sorozata Minden ki kulcshoz ismert annak pi előfordulási valószínűsége és Minden di=(ki,ki+) intervallumhoz ismert annak qi előfordulási valószínűsége, hogy arra az intervallumra keresünk, d0= (-,ki), dn= (kn, ) Optimális bináris keresőfa építhető (pl. dinamikus programozás módszerével) Építés: O(n ) [] 34-3

De az elemek egyesével is jöhetnek!

Hogy lehetne javítani? Mivel az elemek egyesével jönnek Minden beszúrás (és törlés) után rögtön javítani kellene 5 6 3 3

AVL fák

Az AVL-fa alatt egy ön-kiegyensúlyozó bináris keresőfát értünk." " Egy AVL-fában bármely csúcspont két részfájának magassága közti különbség legfeljebb egy. Az AVL-fa nevét két feltalálójáról G. M. Adelson-Velsky-ről és E. M. Landis -ról kapta, akik 963 -ban publikálták [4] An algorithm for the organization of information (Egy algoritmus az információ szervezettségéhez) című cikkükben. [3]

p pont egyensúlyfaktora egy(p)=h(p.jobb)-h(p.bal) x+-x= P x--(x-)=0 x+-x= x- x- x x+ [] 78

Példa h(p)=+max{h(p.jobb),h(p.bal)} egy(p)=h(p.jobb)-h(p.bal) 3 0

Példa 0 4 0 0 3 0 0 egy(p)=h(p.jobb)-h(p.bal) h(p)=+max{h(p.jobb),h(p.bal)} 0

AVL fa

Legkevesebb pontot tartalmazó h mf()= magasságú AVL fa mf(3)=+mf()+mf()=4 mf()= x+-x= P mf(p)=+mf(p.bal)+mf(p.jobb) mf(h)=+mf(n-)+mf(n-) =fib(h)+ x x+ fib(n)=fib(n-)+fib(n-) [] 76

[]

Műveletek []

Forgatás 3 3 [] 79-80

x Forgatás y x 3 3 void balraforgat(fapont x) {!!! fapont y ;!!! y=x.jobb ;!!! x.jobb=y.bal ;!!! if (x.jobb!=nil) x.jobb.apa=x;!!! y.apa=x.apa;!!! if (y.apa==nil) gyoker=y ;!!! else {!!!! if (x==y.apa.bal) y.apa.bal=y ;!!!! else y.apa.jobb=y ;!!! }!!!!! y.bal=x ;!!! x.apa=y ;! } O() [] 79-8

Példa 0 9 9 4 7 4 37 0 7 3 43 0 46

Egy érdekes eset 5 6 3 3 5 4 4 6

5 6 3 4

5 3 6 4

3 5 4 6

. eset innen törlök α β A 0 B - C γ δ innen törlök α A β B γ C 0 δ α 0 A β 0 B γ C 0 δ α=β=γ=δ

. eset α β A - B - C γ δ α A β B γ C δ α 0 A β 0 B γ C δ α=β=(γ+)=δ

3. eset α β A B - C γ δ α A β B γ C δ α - A β 0 B γ C 0 δ α=(β+)=γ=δ

4. eset A α B 0 B β γ - C δ α 0 A β γ C - δ α=β=γ=(δ+)

Összes eset α A -,0, B β - C γ δ α A β B γ -,0, C δ α -,0 A β 0, B γ -,0, C δ α=β=γ=δ α=β=(γ+)=δ α=(β+)=γ=δ α=β=γ=δ α=β=(γ+)=δ α=β=γ=(δ+) α=(β-)=γ=δ fj(p,q) És ezek tükörképei

Egyensúlyfaktorok javítása beszúrás α=β α<β α>β α P β α β x 0 - bal: eb(x) - 0 - jobb: ej(x) 0 beszúrás előtt beszúrás után beszúrás után

Fapont tárolása második megközelítés, a gyakorlatban nem így tároljuk! struct fapont{!!!int key, v, egy ;!!!fapont bal, jobb, apa ;! } apa key bal value egy jobb

Egyensúlyfaktorok javítása kezdetben p a beszúrt vagy törölt elem while (p!=gyoker && cv) {! x 0 -! q=p.apa ;! eb(x) - 0 -! if (p==q.jobb) {! ej(x) 0!! egyq=++q.egy ;!!! if (egyq==) {!!!! if (p.egy==-) {! törlésnél (testver(p)==-)!!!! jobbraforgat(p) ;!!!! }!!!! balraforgat(q) ;!!!! fj(p,q) ;!!! //egyensúlyfaktorokat rendbetesz!!!! cv=false ;! //kilép!!!!! }!! } else...!!!! // bal eset!! p=p.apa ;! } α β A B q - C γ p δ O(logn)

Példa while (p!=gyoker && cv) {!! q=p.apa ;!! if (p==q.jobb) {!!! egyq=++q.egy ;!!! if (egyq==) {!!!! if (p.egy==-) jobbraforgat(p);!!!! balraforgat(q);!!!! cv=false; fj(p,q) ;!!! }!! } else {!!! egyq=--q.egy;!!! if (egyq==-) {!!!! if (p.egy==)!balraforgat(p);!!!! jobbraforgat(q);!!!! cv=false;!!!! fj(p,q) ;!!! }!! }!! p=p.apa;! } 0 0 0 3 q eset - - 5 4 p - 0-0 0 6

fj(p,q) α A -,0, B β q - C γ p δ α A β q 0, B γ p -,0, C δ α -,0 A β B γ -,0, C δ α=β=γ=δ α=β=(γ+)=δ α=(β+)=γ=δ α=β=γ=δ α=β=(γ+)=δ α=β=γ=(δ+) α=(β-)=γ=δ És ezek tükörképei