Bináris fák 2. előadás. (Horváth Gyula anyagai felhasználásával)

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

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

Algoritmusok és adatszerkezetek gyakorlat 07

Bináris fa. A fa (bináris fa) rekurzív adatszerkezet: ÜresFa. BinFa:= Rekord(Elem,BinFa,BinFa) ÜresFa. Fa := Rekord(Elem,Fák) 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

Adatszerkezetek és 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

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

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.

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

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

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.

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

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

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

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

Bináris fa. A fa (bináris fa) rekurzív adatszerkezet: ÜresFa. BinFa:= Rekord(Elem,BinFa,BinFa) ÜresFa. Fa := Rekord(Elem,Fák)

Multihalmaz, intervallumhalmaz

Adatszerkezetek 2. Dr. Iványi Péter

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.

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

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

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

Fák 3. előadás. (Horváth Gyula anyagai felhasználásával)

Rendezettminta-fa [2] [2]

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

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

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

Adatszerkezetek 7a. Dr. IványiPéter

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

Összetett programozási tételek

Algoritmizálás és adatmodellezés tanítása 6. előadás

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

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

Kupac adatszerkezet. 1. ábra.

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

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

Hierarchikus adatszerkezetek

Algoritmuselmélet 2. előadás

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

Algoritmusok és adatszerkezetek gyakorlat 06 Adatszerkezetek

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

Halmaz típus Értékhalmaz:

Struktúra nélküli adatszerkezetek

V. Kétszemélyes játékok

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

Számjegyes vagy radix rendezés

15. A VERSENYRENDEZÉS

Shannon és Huffman kód konstrukció tetszőleges. véges test felett

Absztrakt adatstruktúrák A bináris fák

EGYSZERŰ, NEM IRÁNYÍTOTT (IRÁNYÍTATLAN) GRÁF

Elemi adatszerkezetek

Adatbázis és szoftverfejlesztés elmélet. Programozási tételek

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

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

Példa 30 14, 22 55,

Adatszerkezetek II. 10. előadás

Általános algoritmustervezési módszerek

Kétszemélyes játékok Gregorics Tibor Mesterséges intelligencia

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

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

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

Algoritmusok és adatszerkezetek II.

Visszalépéses kiválogatás

Gyakorló feladatok ZH-ra

Kiegészítő részelőadás 1. Az algoritmusok hatékonyságának mérése

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

Önszervező bináris keresőfák

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

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.

Algoritmusok és adatszerkezetek II.

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

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 I. 4. előadás

Adatszerkezet - műveletek

Adatszerkezetek I. 6. előadás

Térinformatikai adatszerkezetek

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

14. Mediánok és rendezett minták

Ionogram releváns területeinek meghatározása és elemzésének automatikus megvalósítása

Algoritmusok és adatszerkezetek gyakorlat 09 Rendezések

PROGRAMOZÁSI TÉTELEK

Információs Technológia

Informatikai tehetséggondozá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.

Egyesíthető prioritási sor

Rendezések. A rendezési probléma: Bemenet: Kimenet: n számot tartalmazó (a 1,a 2,,a n ) sorozat

Programozási módszertan. Mohó algoritmusok

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

Adatszerkezetek I. 9. előadás

A 2016/2017 tanévi Országos Középiskolai Tanulmányi Verseny első forduló javítási-értékelési útmutató. INFORMATIKA II. (programozás) kategória

Műveletek mátrixokkal. Kalkulus. 2018/2019 ősz

Adatszerkezetek 2. Dr. Iványi Péter

Láncolt Listák. Adat1 Adat2 Adat3 ø. Adat1 Adat2 ø Adat3

Egyszerű programozási tételek

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

Adaptív dinamikus szegmentálás idősorok indexeléséhez

Rendezések. Sergyán Szabolcs Óbudai Egyetem Neumann János Informatikai Kar október 24.

Átírás:

Bináris fák 2. előadás (Horváth Gyula anyagai felhasználásával)

Közös tulajdonságok: A gyökérelem (vagy kulcsértéke) nagyobb vagy egyenlő minden tőle balra levő elemnél. A gyökérelem (vagy kulcsértéke) kisebb vagy egyenlő minden tőle jobbra levő elemnél. Keresőfa specialitása: Nincs két azonos (kulcsú) elem. 2/38

A keresőfa új műveletei: keresés beillesztés törlés kiegyensúlyozás Megjegyzés: Ha egy halmazra az eleme?, elem hozzávétele, illetve elem törlése művelet szükséges, akkor a halmazt ábrázolhatjuk keresőfával azaz megkaptuk a halmaz típus egy újabb ábrázolását! Ezzel szemben az unió és a metszet művelet nehéz! 3/38

Keresés(k,kf): Elágazás Üres?(kf)esetén Keresés:=kf k<gyökérelem(kf).kulcs esetén Keresés:=Keresés(k,balgyerek(kf)) k>gyökérelem(kf).kulcs esetén Keresés:=Keresés(k,jobbgyerek(kf)) k=gyökérelem(kf).kulcs esetén Keresés:=kf Elágazás vége Függvény vége. 4/38

Beillesztés(e,kf): Elágazás Üres?(kf)esetén kf:=egyeleműfa(e) e.kulcs<gyökérelem(kf).kulcs esetén Beillesztés(e,balgyerek(kf)) e.kulcs>gyökérelem(kf).kulcs esetén Beillesztés(e,jobbgyerek(kf)) Elágazás vége Függvény vége. 5/38

Törlés 20 40 30 10 35 20 40 22 28 42 30 10 35 45 20 40 22 28 42 10 35 22 28 42 6/38

Törlés(k,kf): Elágazás k<gyökérelem(kf).kulcs esetén Törlés(k,balgyerek(kf)) k>gyökérelem(kf).kulcs esetén Törlés(k,jobbgyerek(kf)) k=gyökérelem(kf).kulcs esetén Gyökértörlés(k,kf) Elágazás vége Függvény vége. 7/38

A megoldandó estek: a törlendő levélelem nincs jobboldali részfája nincs baloldali részfája egyik részfája sem üres 30 20 40 10 25 35 45 22 28 42 8/38

kf= kf= bf bf 9/38

kf= bf jf bf jf 10/38

Gyökértörlés(k,kf): c:=kf Ha üres?(balgyerek(kf)) akkor kf:=jobbgyerek(kf) különben ha üres?(jobbgyerek(kf)) akkor kf:=balgyerek(kf) különben Legbal(kf,jobbgyerek(kf),lb) Gyökérmódosít(kf,lb) Elágazás vége Felszabadít(c) Függvény vége. Lehetne a másik oldalról is: Legjobb(balgyerek(kf),lj) 11/38

Legbal(szülő,kf,lb): Ha nem üres?(balgyerek(kf)) akkor Legbal(kf,balgyerek(kf),lb) különben lb:=gyökérelem(kf); t:=kf Balrailleszt(szülő,jobbgyerek(kf)) Felszabadít(t) Függvény vége. 30 20 40 10 25 35 45 22 28 42 12/38

keresés A keresőfa műveletei módosítása: legkisebb elem a fa legbaloldalibb eleme minimum(kf): p:=kf Ciklus amíg nem üres?(balgyerek(p)) p:=balgyerek(p) Ciklus vége minimum:=p Függvény vége. 13/38

keresés A keresőfa műveletei módosítása: Adott elemet követő elem (ismerni kell minden elemre a szülőt is): Ha van jobb-gyereke, akkor a jobboldali ág legbaloldalibb eleme (pl. 30 35). Ha nincs jobb-gyereke, akkor az utolsó szülő, ahol keresésnél balra léptünk (pl. 28 30). 14/38

keresés következő(kf): Ha nem üres?(jobbgyerek(kf)) akkor következő:=minimum(jobbgyerek(kf)) különben s:=szülő(kf) Ciklus amíg s sehova és kf=jobbgyerek(s) kf:=s; s:=szülő(s) Ciklus vége következő:=s Függvény vége. 15/38

keresés A keresőfa műveletei módosítása: Adott értéket követő elem (ismerni kell minden elemre a szülőt is): Ha balra lépünk ki a fából, akkor amelyik elemből kiléptünk (pl. 21 22). Ha jobbra lépünk ki a fából, akkor az utolsó szülő, ahol keresésnél balra léptünk (pl. 29 30). 16/38

kiválogatás A és B közötti összes elem kiválogatása egy sorba, növekvően. Esetek: 10..25 15..30 40..50 30..45 20..40 17/38

kiválogatás A keresőfa műveletei módosítása: A és B közötti összes elem kiválogatása egy sorba, növekvően. Kiválogatás(a,b,kf): Ha nem üres?(kf) akkor Ha b<gyökérelem(kf).kulcs akkor Kiválogatás(a,b,balgyerek(kf)) különben ha a>gyökérelem(kf).kulcs akkor Kiválogatás(a,b,jobbgyerek(kf)) különben ha b=gyökérelem(kf).kulcs akkor Kiválogatás(a,b,balgyerek(kf)) Sorba(gyökérelem(kf))... 18/38

kiválogatás különben ha a=gyökérelem(kf).kulcs akkor Sorba(gyökérelem(kf)) Kiválogatás(a,b,jobbgyerek(kf)) különben Kiválogatás(a,gyökérelem(kf).kulcs, balgyerek(kf)) Sorba(gyökérelem(kf)) Kiválogatás(gyökérelem(kf).kulcs,b, jobbgyerek(kf)) Elágazások vége Eljárás vége. 19/38

Kiegyensúlyozás definíciók: 1. Kiegyensúlyozott az a bináris fa, amelynek tetszőleges pontjában gyökerező részfáinak ághosszai legfeljebb eggyel térnek el egymástól (AVL-fa). 2. Teljesen kiegyensúlyozott az a bináris fa, amelynek tetszőleges pontjában gyökerező részfáinak pontszámai legfeljebb eggyel térnek el egymástól. 3. Teljes az a bináris fa, amelynek tetszőleges pontjában gyökerező részfáinak pontszámai pontosan megegyeznek. 2 1 3 1 2 3 20/38

Cél: a beszúrás és a törlés műveletek módosítása úgy, hogy ha előtte az AVL-tulajdonság teljesült, akkor utána is teljesüljön. A beszúrás lényege: egyszeres elforgatás x y y x f 3 f 1 új elem f 1? f 2 új elem? f 2 f 3 21/38

A beszúrás lényege: kétszeres elforgatás y x z z y x f 4 f 1 f 2 f 3 f 2 f 3 új elem? f 1 új elem? f 4 22/38

A piros-fekete fa olyan bináris keresőfa, melyre : minden nem levél csúcsnak 2 gyereke van; elemeket belső csúcsokban tárolunk; a fa minden csúcsa piros vagy fekete; a gyökér és a levelek feketék; minden piros csúcs mindkét gyereke fekete minden csúcsra levélbe vezető utakon ugyanannyi fekete csúcs van. Ha egy piros-fekete fában n elemet tárolunk, akkor a magassága 2 log(n + 1). 23/38

Kérdés: Lehet-e olyan keresőfa, amelyben több azonos értékű (kulcsú) elem is van? A megoldáshoz egy szabályt módosítani kell: az ilyen keresőfa minden elemétől balra csak nála kisebbek, jobbra nála nagyobb vagy egyenlők lehetnek. A keresés ekkor az azonos értékűekből az elsőt találja meg. Szükség van egy új műveletre: az aktuálisat (utoljára megtaláltat) követő elem megadására. Ha a tárolási szabályt nem módosítjuk, akkor még az aktuálisat megelőző elem megadására is szükségünk lehet. 24/38

A rendezőfa új műveletei: beillesztés (majdnem azonos a keresőfával de itt lehetnek egyforma értékű elemek) BKJ-bejárás Megjegyzés: Itt törlés művelet nincs, a fát egyszer építjük fel, bejárjuk, majd a teljes fát törölhetjük. 25/38

Beillesztés(e,kf): Elágazás Üres?(kf) esetén kf:=egyeleműfa(e) e.kulcs gyökérelem(kf).kulcs esetén Beillesztés(e,balgyerek(kf)) e.kulcs>gyökérelem(kf).kulcs esetén Beillesztés(e,jobbgyerek(kf)) Elágazás vége Függvény vége. 26/38

Bináris fa halmazból a K. legnagyobb eltávolítása Halmazból a K. legnagyobb eltávolítása: Néhány feladatnál (pl. permutációk előállítása inverziós táblával) felmerül, hogy egy halmazból ki kell venni a K. legnagyobb elemet. Ha a halmazt rendezett sorozatként (tömb) képzeljük el, akkor a K. legnagyobb megtalálása egyetlen képlet kiszámítása, a kihagyása azonban a halmaz elemszámával arányos időben történik el kell tolni előre a mögötte levő elemeket. Ha a halmazt listával ábrázolnánk, akkor pedig a K. legnagyobb megtalálási ideje arányos a halmaz elemszámával. Az ötlet: ábrázoljuk a halmazt bináris fával! 27/38

Bináris fa halmazból a K. 1. A fának n levélpontja van. legnagyobb eltávolítása 2. A fának n-1 belső (nem levél) pontja van az 1..n-1 számokkal jelölve. 3. Minden belső pontnak két fia van. 4. Az a..b elemeket (leveleket) tartalmazó részfa gyökere k = (a+b)/2, bal részfája az a..k, jobb részfája pedig a k+1..b elemeket tartalmazza. 5. A fa minden p belső pontja a jobb részfájában lévő halmaz-elemek számát tartalmazza (Hány(p)). Legyen H(i) igaz, ha az i elem még a halmazban van! A {2;4;5;7;9;10} halmaz ábrázolása, ha n=10. 28/38

Bináris fa halmazból a K. legnagyobb eltávolítása Keres(k,bal,jobb): Ha bal=jobb akkor H(bal):=hamis; Keres:=bal különben s=(bal+jobb)/2 Ha Hány(s)>=k akkor Hány(s):=Hány(s)-1 Keres:=Keres(k,s+1,jobb) különben Keres:=Keres(k-Hány(s),bal,s) Elágazások vége Függvény vége. Ez a Keres művelet O(log 2 n) futási idejű. 29/38

Bináris fa halmazból a K. legnagyobb eltávolítása A bináris fa létrehozása n elemből: (Épít(1,n)) Épít(bal,jobb): Ha bal<jobb akkor s=(bal+jobb)/2 Hány(s):=jobb-s Épít(bal,s); Épít(s+1,jobb) Eljárás vége. A keresés és az építés műveletekből is látszik, hogy itt a bináris fát ténylegesen nem hozzuk létre, (ahogyan a kupacnál sem) csupán modellként használjuk a feladat megoldásában. 30/38

Bináris fa halmazból a K. legnagyobb eltávolítása A bináris fa létrehozása adott H-beli elemekből: Épít(bal,jobb,db): Ha bal<jobb akkor s=(bal+jobb)/2 Épít(bal,s,b); Épít(s+1,jobb,j) Hány(s):=j; db:=b+j különben Ha H(bal) akkor db:=1 különben db:=0 Eljárás vége. Épít(1,n,db) 31/38

Szegmens fa Feladat: Határozzuk meg egy X vektor i. és j. eleme között levő elemei minimumát! A feladat felfogható egy egyszerű minimum-kiválasztás tétel alkalmazásként, ahol az eredmény meghatározásához j-i összehasonlítást kell végezni, azaz a futási idő a vektor elemszámával arányos. A feladat azonban megoldható másként is, egy speciális bináris fa, a szegmens fa alkalmazásával. A bináris fa elkészítése is munkaigényes, de gazdaságos, ha sok intervallumon kell minimumot keresnünk. 32/38

Szegmens fa A szegmens fa levelei a tömb elemeit tartalmazzák. A fa többi elemének indexét a hozzá tartozó két szélső levélelem indexének átlagaként számoljuk. Minden belső elemhez rendeljük hozzá azt az eredeti tömbindexet, ahol a levelei minimuma található! Mint látható, ez a fa is egy modell, állandó szerkezetű, a megfelelő indexek egy tömbben tárolhatók. 33/38

Szegmens fa Minden belső elemhez rendeljük hozzá azt az eredeti tömbindexet, ahol a levelei minimuma található! Szegmens fa a (6;9;4;2;5;1;10;7;8;3) sorozatra. 34/38

Szegmens fa Felépít(a,b): Ha a=b akkor Felépít:=a különben k:=(a+b)/2 x:=felépít(a,k) y:=felépít(k+1,b) Ha A(x)<A(y) akkor Fa(k):=x különben Fa(k):=y Felépít:=Fa(k) Függvény vége. 35/38

Szegmens fa Ezután az [a,b] szegmensfában az [i,j] intervallum minimumának meghatározása rekurzívan megadható: i, ha i=j FA((a+b)/2), ha a=i és j=b vagy A(i) vagy A(FA((a+b)/2)) [a,(a+b)/2] szegmensfában [i,j] minimuma, ha j (a+b)/2 [(a+b)/2+1,b] szegmensfában [i,j] minimuma, ha i>(a+b)/2 [i,j]-t felosztjuk a bal- és jobboldali szegmensfára, mindkettőben minimumot keresünk, majd vesszük a két elem minimumát. 36/38

Szegmens fa Keres(a,b,i,j): k:=(a+b)/2 Ha i=j akkor Keres:=i különben ha a=i és b=j akkor Keres:=FA(k) különben ha j k akkor Keres:=Keres(a,k,i,j) különben ha i>k akkor Keres:=Keres(k+1,b,i,j) különben x:=keres(a,k,i,k) y:=keres(k+1,b,k+1,j) Ha A(x)<A(y) akkor Keres:=x különben Keres:=y Függvény vége. 37/38

Bináris fák 2. előadás vége