Példa 30 14, 22 55,

Hasonló dokumentumok
7 7, ,22 13,22 13, ,28

Algoritmusok és Adatszerkezetek II.

Algoritmusok és adatszerkezetek II.

Rendezettminta-fa [2] [2]

Algoritmusok és Adatszerkezetek II. előadás

Algoritmusok és adatszerkezetek gyakorlat 07

Algoritmusok és adatszerkezetek II.

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

Algoritmusok és adatszerkezetek II.

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

Önszervező bináris keresőfák

Kupac adatszerkezet. 1. ábra.

Adatszerkezet - műveletek

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.

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

Elemi adatszerkezetek

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

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

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

Egyesíthető prioritási sor

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

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

Adatszerkezetek 7a. Dr. IványiPéter

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

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

Hierarchikus adatszerkezetek

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.

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

Java Programozás 9. Gy: Java alapok. Adatkezelő 5.rész

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

Táblázatok fontosabb műveletei 1

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

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.

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

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.

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

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.

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

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

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

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

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

C# feladatok gyűjteménye

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

Hierarchikus adatszerkezetek

A képernyőre írást igénylő részfeladatok eredményének megjelenítése előtt írja a képernyőre a feladat sorszámát (például: 3. feladat:)!

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

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.

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

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

Egyesíthető prioritási sor

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

Adatszerkezetek és algoritmusok

3. Határozza meg és írja ki a minta szerint, hogy a forrásállományban hány kémiai elem felfedezési adatai

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

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

Java Programozás 4. Gy: Java GUI. Tipper, MVC kalkulátor

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

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

Access adatbázis elérése OLE DB-n keresztül

Algoritmusok és adatszerkezetek gyakorlat 09 Rendezések

Torna. A torna.csv UTF-8 kódolású állományban soronként egy versenyző eredményeit tároljuk. Az adatokat pontosvessző választja el egymástól.

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

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:

OOP #14 (referencia-elv)

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

Adabáziselérés ODBC-n keresztül utasításokkal C#-ban

#include <iostream> using namespace std; // struct macska is lehetne class macska { public: int kor; int suly; }; void main() { macska cirmi;

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

Országzászlók (2015. május 27., Sz14)

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

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

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

Programozás II. ATM példa Dr. Iványi Péter

és az instanceof operátor

Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán

hiányzott szeptemberben vagy A tanuló nem hiányzott szeptemberben szöveget

Java bevezet o Kab odi L aszl o Kab odi L aszl o Java bevezet o

Elemi alkalmazások fejlesztése III.

117. AA Megoldó Alfréd AA 117.

mul : S T N 1 ha t S mul(s, t) := 0 egyébként Keresés Ezt az eljárást a publikus m veletek lenti megvalósításánál használjuk.

INFORMATIKAI ALAPISMERETEK

Bevezetés a programozásba 2

Objektumorientált programozás C# nyelven III.

C# nyelv alapjai. Krizsán Zoltán 1. Objektumorientált programozás C# alapokon tananyag. Általános Informatikai Tanszék Miskolci Egyetem

Java Programozás 6. Gy: Java alapok. Adatkezelő 2.rész

OAF Gregorics Tibor: Minta dokumentáció a 3. házi feladathoz 1.

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

Információs Technológia

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

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

INFORMATIKAI ALAPISMERETEK

ISA szimulátor objektum-orientált modell (C++)

Felhasználó által definiált adattípus

Objektum elvű alkalmazások fejlesztése Kifejezés lengyel formára hozása és kiértékelése

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

Java Programozás 11. Ea: MVC modell

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.

A gyakorlat során az alábbi ábrán látható négy entitáshoz kapcsolódó adatbevitelt fogjuk megoldani.

Átírás:

Piros-Fekete fák

0 Példa 14, 22 55, 77 0 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, kulcs, 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 kulcsot 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 12 2 1 4 8 7 9 11 1 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.. 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 12 2 1 4 8 7 9 11 1 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.

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

Piros-fekete fa tárolása első megközelítés, a gyakorlatban nem így van! public class fa {!! int elemszam ;!! struct fapont{!!! int key, value ;!!! boolean piros ;!!! fapont bal, jobb, apa ;!! }!! fapont nil, gyoker ;!! void fa() {!!! fapont q = new fapont() ;!!! nil=q ;!!! gyoker=q ;!!! elemszam=0 ;!!! q.piros=false ;!! }!! boolean beszur(int x, int v) {!...! }!...! } nil nil gyoker k v beszur(5, 8) 5 8 k v gyoker

fapont keres(int x) {!!! fapont p=gyoker ;!!! nil.key=x ;!!! while (p.key!=x) p=x<p.key?p.bal:p.jobb ;!!! return p;! } 21 gyökér [] 254 q=keres(1) ; 9 29 4 17 24 7 1 1 20 22 27 1 4 nil 1

5 8 5 8 nil nil

boolean beszur(int x, int v) {!!! fapont p,papa ;!!! p=gyoker ;!!! papa=nil ;!!! while (p!=nil && p.key!=x) {!!!! papa=p ;!!!! if (x<p.key) p=p.bal;!!!! else p=p.jobb;!!! }!!! if (p==nil) {!!!! fapont ujpont = new fapont();!!!! if (gyoker==p) gyoker=ujpont ;!!!! ujpont.key=x ;!!!! ujpont.value=v ;!!!! ujpont.bal=nil;!!!! ujpont.jobb=nil;!!!! ujpont.apa=papa;!!!! ujpont.piros=true ;!!!! if (papa!=nil) {!!!!! if (x>papa.key) papa.jobb=ujpont;!!!!! else papa.bal=ujpont;!!!! }!!!!! elemszam++ ;!!!! beszurjavit(p);!!!!!!! return true ;!!!!!! } else {!!!! p.value=v ;!!!! return false ;!!! }!!! } nil beszur(,9) ; nil 9 5 8????? 5 8????? gyoker

Beszúrás utáni javítás I.

Beszúrás utáni javítás II.

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(1)

Beszúrás utáni javítás void pf-beszurjavit(fapont z) {!! while (z.apa.piros) {!!! if (z.apa==z.apa.apa.bal) {!!!! y=z.apa.apa.jobb ;!!!! if (y.piros) {!!!!! z.apa.piros=false ;!!!!! z.apa.apa.piros=true ;!!!!! y.piros=flase ;!!!!! z=z.apa.apa ;!!!! } else {!!!!! if (z==z.apa.jobb) {!!!!!! z=z.apa ;!!!!!! balraforgat(z) ;!!!!! }!!!!! z.apa.piros=false ;! sz fb fa!!!! z.apa.apa.piros=true ;!!!!! jobbraforgat(z.apa.apa) ;!!!! }!!! } else {!!!! //szimmetrikus eset!!! }!! }!! gyoker.piros=false ;! } O(logn)

példa: 7, 8, 5, 7 7 7 7 8 5 8 7 7 5 8 sz 5 8

példa: 7, 8, 5,,, 2 7 5 8 7 5 8 7 5 8 sz 2

példa: 7, 8, 5,,, 2 7 5 8 7 5 8 sz 2 2

példa: 7, 8, 5,,, 2, 4, 1 7 5 8 2 4 1

példa: 7, 8, 5,,, 2, 4, 1 7 5 8 2 4 1

7 5 8 2 4 sz 7 1 5 8 2 4 1

7 5 8 1 2 4 fb 5 7 2 4 8 1

Törlés piros-fekete fából p q

Törlés Piros-Fekete fából A fából a keresofa Töröl műveletének megfelelően töröljük az adott pontot. Ha a pont vagy a fia piros akkor nincs másteendő, egyébként sérül az 5. tulajdonság és ezt helyre kell állítani. Ezt úgy oldjuk meg, hogy a ténylegesen törölt pont fia kap egy extra fekete értéket, és duplán fekete lesz, majd forgatásokkal és átszínezéssel ezt megszüntetjük.

Törlés utáni javítás I.

Törlés utáni javítás II.

Törlés utáni javítás O(logn)

10 12 2 8 11 1 1 4 7 9 5

10 12 2 1 4 8 7 9 11 5

2 10 1 4 8 12 5 7 9 11

2 10 1 4 8 12 5 7 9 11

10 1 2 8 11 14 1 4 7 9 12 5

10 1 2 1 4 8 7 9 11 12 5

10 12 2 8 11 1 1 4 7 9 5

10 2 8 1 11 14 1 4 7 9 12 5

11 2 8 1 12 14 1 4 7 9 5

12 1 2 8 14 1 4 7 9 5

12 1 2 8 14 1 4 7 9 5

12 1 2 8 14 1 4 7 9 5

12 F 1 B 2 1 4 8 7 9 14 5

F B 2 12 1 4 8 1 5 7 9 14

2 12 1 4 8 1 5 7 9 14

2 12 1 4 8 1 5 7 9 14