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

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

Algoritmusok és adatszerkezetek gyakorlat 07

Rendezettminta-fa [2] [2]

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

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

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

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

Kupac adatszerkezet. 1. ábra.

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

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

Algoritmusok és adatszerkezetek II.

Adatszerkezet - műveletek

Jobbra és balraforgatás

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.

Hierarchikus adatszerkezetek

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

Önszervező bináris keresőfák

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

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.

Algoritmusok és adatszerkezetek II.

Algoritmusok és Adatszerkezetek II.

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

Adatszerkezetek 7a. Dr. IványiPéter

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

Elemi adatszerkezetek

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

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

Adatszerkezetek és algoritmusok

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

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

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

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

Algoritmusok és Adatszerkezetek II. előadás

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

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

Egyesíthető prioritási sor

Algoritmuselmélet 2. előadás

Algoritmusok és adatszerkezetek gyakorlat 06 Adatszerkezetek

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.

Táblázatok fontosabb műveletei 1

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

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

Algoritmusok és adatszerkezetek II.

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

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

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

Algoritmusok és adatszerkezetek II.

Algoritmusok és adatszerkezetek II.

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

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

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.

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

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

R ++ -tree: an efficient spatial access method for highly redundant point data - Martin Šumák, Peter Gurský

Egyirányban láncolt lista

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

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. Legrövidebb utak, Bellmann-Ford, Dijkstra. Katona Gyula Y.

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

Információs Technológia

2. Visszalépéses keresés

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

Egyesíthető prioritási sor

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

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)

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

6. előadás. Kiegyensúlyozottság, AVL-fa, piros-fekete fa. Adatszerkezetek és algoritmusok előadás március 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

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

Algoritmusok vektorokkal keresések 1

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

Struktúra nélküli adatszerkezetek

Adatszerkezetek 1. előadás

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

2. Visszalépéses stratégia

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

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

2015, Diszkrét matematika

Hierarchikus adatszerkezetek

10. Gráf absztrakt adattípus, gráfok ábrázolása

Térinformatikai adatszerkezetek

A kurzus teljesítésének feltételei. Az I404 kódú kurzus teljesítéséhez meg kell oldani egy otthoni feladatot, határidő április 30.

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

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

2018, Diszkrét matematika

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

Házi feladatok megoldása. Nyelvek használata adatszerkezetek, képek leírására

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

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

RSA algoritmus. P(M) = M e mod n. S(C) = C d mod n. A helyesség igazoláshoz szükséges számelméleti háttér. a φ(n) = 1 mod n, a (a 1,a 2,...

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

Gyakorló feladatok ZH-ra

A Verem absztrakt adattípus

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

Diszkrét matematika 2.C szakirány

Diszkrét matematika 2.C szakirány

Adatszerkezetek 2. Dr. Iványi Péter

Például számokból álló, egyszeresen láncolt lista felépítéséhez az alábbi struktúra definíciót használhatjuk:

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

Átírás:

Á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 ok egy rendezett sorozata van. Tehát minden p F esetén Adat(p) = [a1,...,ak]. Ekkor azt mondjuk, hogy p rangja k, Rang(p) = k. Def. Az F fa (általános) keresőfa, ha p F esetén: p-nek Rang(p)+1 = Fok(p) számú fia van. Adat(p) = [a1,...,ak] egy rendezett sorozat. max(f (p,i)) ai min(f (p,i+1)), minden i = 1,...,Rang(p), ahol F (p,i) az F fa (p,i) gyökerű részfája. 13,22 7 20 25,28

Példa 14, 30, 55, 90 4, 10 20, 22, 25, 29 33, 45 59 94, 97, 99 15, 17, 19 27 61, 67, 88 63, 65, 66

Fapont tárolása nil gyoker fapont class<t> {!! int rang ;!! fapont apa ;!! <T>[] ;!! fapont[] ;! } apa rang fapont class<t> {!! int rang ;!! fapont apa ;!! pontelem class<t>{!!! <T> ;!!! fapont ;!!! pontelem ;!! } ;! } pkezd apa... nil gyoker pnil rang

Keresés általános keresőfában p nil gyoker rang 4 7 11 17 21 28 33 54 keres<t>(<t> x,fapont p) {!! if (p==nil) return nil ;!! int i=1 ;!! while (i<=p.rang && x>=p.[i]) i++ ;!! if (x==p.[i]) return (p,i) ;!! return(keres(x, p.[i])) ;! }

Keresés általános keresőfában class par {!! fapont p;!! pontelem e;! }! par(q,i) {!! p=q ;!! e=i ;! } pkezd rang... nil gyoker pnil par keres<t>(<t> x) {!! fapont q,p=gyoker;!! pontelem i;!! do {!!! i=p.pkezd;!!! while (i!=pnil && x>i.) i=i.;!!! if (i!=pnil && x==i.) return par(p,i);!!! q=p; p=i. ;!! } while (p!=nil);!! return nil ;! }

Beszúrás általános keresőfába pkezd int beszur<t>(<t> x) {!! int poz;!! fapont q,p=gyoker;!! pontelem i;!! do {!!! i=p.pkezd; poz=0;! 61, 67, 88 61 67 88 -!! while (i!=pnil && x>i.) { i=i.; poz++; }!!! if (i!=pnil && x==i.) return -1;!!! q=p; p=i. ;!! } while (i.!=nil);!! listabaszur(q,i,poz) ;????!! return 0 ;! } nil - - pnil

B-fa adatszerkezet még mindig fázunk...

B-fa Def. Az F fa t-rendű (t 2) B-fa, ha teljesül rá az alábbi 4 feltétel: Általános keresőfa. A gyökér kivételével minden p F pontra t Rang(p) 2t, a gyökér rangja legfeljebb 2t. Minden p F nem levél pontra Fiu(p,i) Nil, i = 1,...,Rang(p) +1. Minden p F levélpontra d(p) = h(f), azaz minden levél pont mélysége azonos.

B fa példa A gyökér kivételével minden p F pontra t Rang(p) 2t, a gyökér rangja legfeljebb 2t. t Rang(p) 2t pl. t=2 2 Rang(p) 4 14, 30, 55 4, 10 20, 22, 25 20, 22, 25 59, 77, 81, 99

B-fák Egy p pontot telítettnek nevezünk, ha Rang(p) = 2t, illetve minimálisnak, ha Rang(p) = t. Továbbá feltesszük, hogy minden ponthoz tartozik egy Levél logikai változó, ami akkor igaz, ha a pont levél. B-fák felhasználása: B fákat olyan adatszerkezetek esetén használják, amelyek nem férnek el a memóriában. Az aktuális pont van a memóriában, és amikor másik lapra érünk azt a háttértárból olvassuk be. Következésképpen a műveletek hatékonysága elsősorban a pontokhoz történő hozzáférések számától függ.

B-fák magassága Tétel: Minden n adatot tartalmazó t-rendű F B-fára: Biz. Vizsgáljuk meg, hogy egy h magasságú t rendű B-fában mennyi az adatok minimálisan lehetséges száma. A gyökér legalább egy adatot tartalmaz, és van legalább két fia. A első szinten mindkét fiú legalább t adatot tartalmaz, és mindkettőnek van legalább t+1 fia. Azaz a második szinten legalább 2 (t + 1) pont van. A második szinten a 2 (t + 1) pont mindegyike tartalmaz legalább t adatot, így a szinten az adatok száma minimum 2 t (t + 1) továbbá minden pontnak van legalább t + 1 fia, így a következő (3.) szinten a pontok száma 2 (t+1) (t+1). Teljes indukcióval igazolható, hogy az i-edik szinten a pontok száma legalább 2(t+1) i 1, így az adatok száma legalább 2t(t+1) i 1. Következésképpen egy h magas fában az adatok száma: pontok száma adatok száma gy 1 1 1 2 2t 2 2(t+1) 2t(t+1) 3 2(t+1)(t+1) 2t(t+1)(t+1) i 2(t+1) 2t(t+1)

Pont szétvágása A beszúrás során a pontot abba a levélbe szúrjuk be, ahol a sikertelen keresése véget érne. Ekkor ha ez a levél telített, akkor a beszúrás sértené a pontok rangjára vonatkozó korlátot. Ennek megelőzésére a beszúrás során megszüntetjük a telített pontokat. Erre használhatjuk a telített pontok szétvágását megvalósító alábbi eljárást: Az algoritmus az y pontot, amelyre rang(y) = 2(t 1) és amely az p pont i-edik fia vágja ketté a közepén. A középső adat felmegy az p-be.

bfa class<t> {!! fapont class<t> {!!! fapont apa ;!!! int rang ;!!! pontelem class<t>{!!!! <T> ;!!!! fapont ;!!!! pontelem ;!!! } ;!!! pontelem pkezd,kozepso;!! bfa() {!!! fapont q=new fapont() ;!!! nil=q ;!!! gyoker=q ;!!! pontelem e=new pontelem ;!!! e.=nil ;!!! e.=pnil ;!!! pkezd=e ;!!! kozepso=e ;!! }!!...! } B-fa pont tárolása pkezd apa... nil rang kozepso gyoker pnil

pkezd kozepso B-fa beszúr 61, 67, 88 61 67 88 - pnil - - nil gyoker nil pkezd rang pnil int beszur<t>(<t> x) {!! int poz;!! fapont q,p=gyoker;! kozepso! pontelem i;!! do {!!! i=p.pkezd; poz=0;!!! while (i!=pnil && x>i.) { i=i.; poz++; }!!! if (i!=pnil && x==i.) return -1;!!! p=i. ;!! } while (i.!=nil);!! listabaszur(p.apa,i,poz,x) ;!! return 0 ;! }...

pkezd kozepso 61, 67, 88 61 67 88 - - - pnil nil listabaszur<t>(fapont p, pontelem i, int poz, <T>x) {!! pontelem e=new pontelem();!! e.=x ;!! e.=i. ;!! i.=e ;!! p.rang++ ;!! if (p.rang % 2) {!!! if (poz>maxrang/2) kozepso=kozepso. ;!!! else //előrréb állítani?!! }!! if (p.rang>maxrang) szetszed(p) ;! }

Szétszed gyoker nil pkezd apa pnil pnil - - - - kozepso kozepso

B-fa pont törlése 30 14, 22 55, 77 4, 10 15, 20 25, 28 33, 42, 45 59, 71 81, 99 töröl(45) 30 14, 22 55, 77 4, 10 15, 20 25, 28 33, 42 59, 71 81, 99

B-fa pont törlése 30 14, 22 55, 77 4, 10 15, 20 25, 28 33, 42, 45 59, 71 81, 99 töröl(71) 30 14, 22 45, 77 4, 10 15, 20 25, 28 33, 42 55, 59 81, 99

B-fa pont törlése 30 14, 22 55, 77 4, 10 15, 20 25, 28 33, 42, 45 59, 71 81, 99 töröl(20) 14, 30, 55, 77 4, 10 15, 22, 25, 28 33, 42, 45 59, 71 81, 99

B-fa pont törlése 30 14, 22 55, 77 4, 10 15, 20 25, 28 33, 42 59, 71 81, 99 töröl(30) 14, 22, 55, 77 4, 10 15, 20 25, 28, 33, 42 59, 71 81, 99

B-fa pont törlése 30 14, 22 55, 77 4, 10 15, 20 25, 28 33, 42, 45 59, 71 81, 99 töröl(30) 33 14, 22 55, 77 4, 10 15, 20 25, 28 42, 45 59, 71 81, 99

B+ fa k1, k2,..., kt k1, k2,..., kb k1, k2,..., kc k1, k2,..., kd k1, k2,..., ke k1, k2,..., kg

B+ fa k1, k2,..., kt k1, k2,..., kb k1, k2,..., kc k1, k2,..., kd k1, k2,..., ke k1, k2,..., kg

B+ fa nil gyoker nil gyoker pkezd apa pnil pkezd apa pnil... kozepso - kp... kozepso kp

2-3-fák 2-3 fa a (t = 1) rangú B-fa, ha teljesül rá az alábbi 4 feltétel: Általános keresőfa. A gyökér kivételével minden p F pontra 1 Rang(p) 2, a gyökér rangja legfeljebb 2. Minden p F nem levél pontra Fiu(p,i) Nil, i = 1,...,Rang(p) +1. Minden p F levélpontra d(p) = h(f), azaz minden levél pont mélysége azonos.

Példa 30 14, 22 55, 77 4, 10 15, 20 25, 28 33, 42 59, 71 81, 99

Piros-Fekete fák

30 Példa 14, 22 55, 77 30 14 55 22 77

Piros-Fekete fák A piros-fekete fa olyan bináris keresőfa, amelynek minden pontja egy extra bit információt tartalmaz, ez a pont színe, amelynek értékei: PIROS vagy FEKETE. Tehát a fa minden pontja tartalmazza a szín,, bal, jobb és apa mezőket. Ha egy ponthoz tartozó fiú vagy apa nem létezik, akkor a megfelelo mező a NIL értéket tartalmazza. Úgy tekintjük, hogy az ilyen NIL mutató értékek a bináris keresőfa külső (levél) pontjaira mutatnak, míg a fa ot tartalmazó pontjai a belső pontok. Megvalósítás során ezeket a külső pontokat egyetlen őrszem ponttal ábrázoljuk, amelyet NIL jelöl.

10 6 12 2 1 4 8 7 9 11 13 3 5

Piros-Fekete fák A piros-fekete fák azok, amelyekre teljesülnek a következő tulajdonságok: 1. Minden pont színe vagy PIROS vagy FEKETE. 2. A gyökérpont színe FEKETE. 3. Minden levél (a NIL pontokat tekintjük levélnek) színe FEKETE. 4. Minden PIROS pontnak mindkét fia FEKETE. 5. Bármely pontból bármely levélig vezető úton ugyanannyi FEKETE pont van.

10 6 12 2 1 4 8 7 9 11 13 3 5

Egy x pont fekete-magasságának nevezzük az x pontból induló, levélig vezető úton található, x-en kívüli fekete pontok számát, és fm(x)-szel jelöljük. Az 5. tulajdonság miatt a fekete-magasság jól definiált, mivel minden ilyen út azonos számú fekete pontot tartalmaz. Egy piros-fekete fa fekete-magasságát a fa gyökérpontjának fekete-magasságaként definiáljuk. A piros-fekete fákra teljesül a következő állítás:! Tétel: Bármely n belső pontot tartalmazó piros-fekete fa magassága legfeljebb 2log(n+1)

Biz(1). Teljes indukcióval igazolható, hogy a fa minden x gyökerű részfája legalább 2 fm(x) 1 belső pontot tartalmaz. Ha x magassága 0, akkor x levél (nil), tehát az x gyökerű részfának valóban 0 belső pontja van. Tegyük fel, hogy x magassága pozitív, és két fia van. Mindkét fiú fekete-magassága vagy fm(x), vagy fm(x)-1 attól függően, hogy a színe piros vagy fekete. Mivel x fiainak magassága kisebb, mint x magassága, így az indukciós feltevés alapján mindkét részfa legalább 2 fm(x) 1 1 belső pontot tartalmaz. Tehát az x gyökerű részfa belső pontjainak száma legalább (2 fm(x) 1 1) + (2 fm(x) 1 1) + 1 = 2 fm(x) 1.

Legyen x magassága h. A 4. tulajdonság szerint minden a gyökértől levélig haladó út, legalább feleannyi fekete pontot tartalmaz, mint ezen út pontjainak száma, nem számítva a gyökeret. Tehát a gyökér fekete-magassága legalább h/2, így n 2 h/2 1. Tehát azt kapjuk, hogy log(n+1) h/2, azaz h 2log(n+1). Következésképpen a keresőfa műveletek időigénye O(logn), ahol n a pontok száma. Azt kell megvizsgálni a piros-fekete fa tulajdonságok karbantartásának mekkora az időigénye.