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

Hasonló dokumentumok
Fák 3. 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)

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

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

Adatszerkezetek I. 9. előadás

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

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

Algoritmusok és adatszerkezetek gyakorlat 07

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

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

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.

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

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. Nevezetes algoritmusok (Keresések, rendezések)

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

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

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

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

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

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

Adatszerkezetek és algoritmusok

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

Hierarchikus adatszerkezetek

Multihalmaz, intervallumhalmaz

Adatszerkezetek I. 4. előadás

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

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

Rendezettminta-fa [2] [2]

Struktúra nélküli adatszerkezetek

Kupac adatszerkezet. 1. ábra.

Algoritmusok és adatszerkezetek gyakorlat 06 Adatszerkezetek

Adatszerkezetek 2. Dr. Iványi Péter

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

Adatszerkezetek 7a. Dr. IványiPéter

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

Hierarchikus adatszerkezetek

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

PROGRAMOZÁSI TÉTELEK

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

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

Láncolt listák. Egyszerű, rendezett és speciális láncolt listák. Programozás II. előadás. Szénási Sándor

Elemi adatszerkezetek

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

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

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

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

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.

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

Adatszerkezetek I. 6. előadás

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

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

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

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:

Halmaz típus Értékhalmaz:

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

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

Programozási módszertan. Mohó algoritmusok

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

Számjegyes vagy radix rendezés

Algoritmusok vektorokkal keresések 1

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

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

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.

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

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

Algoritmusok és adatszerkezetek II.

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

Adatszerkezetek 1. Dr. Iványi Péter

Algoritmizálás, adatmodellezés 1. előadás

15. A VERSENYRENDEZÉS

Láncolt listák. PPT 2007/2008 tavasz.

Adatszerkezet - műveletek

Algoritmusok és adatszerkezetek II.

Általános algoritmustervezési módszerek

Információk. Ismétlés II. Ismétlés. Ismétlés III. A PROGRAMOZÁS ALAPJAI 2. Készítette: Vénné Meskó Katalin. Algoritmus. Algoritmus ábrázolása

Információs Technológia

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

Egyszerű programozási tételek

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

Generikus osztályok, gyűjtemények és algoritmusok

Programozási technológia

Alkalmazott modul: Programozás 4. előadás. Procedurális programozás: iteratív és rekurzív alprogramok. Alprogramok. Alprogramok.

Algoritmusok és adatszerkezetek II.

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.

Láncolt listák Témakörök. Lista alapfogalmak

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

Adatszerkezetek 2. Dr. Iványi Péter

Adatszerkezetek II. 10. előadás

Algoritmuselmélet 2. előadás

Önszervező bináris keresőfák

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

Adatszerkezetek Tömb, sor, verem. Dr. Iványi Péter

Gyakorló feladatok ZH-ra

ELEMI PROGRAMOZÁSI TÉTELEK

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

Programozás I. Egyszerű programozási tételek. Sergyán Szabolcs

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

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

Átírás:

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

Kereső- és rendezőfák 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. 2013.11.13. 2

Kereső- és rendezőfák A keresőfa új műveletei: keresés beillesztés törlés kiegyensúlyozás 2013.11.13. 3

Kereső- és rendezőfák 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. 2013.11.13. 4

Kereső- és rendezőfák 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. 2013.11.13. 5

Kereső- és rendezőfák 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. 2013.11.13. 6

Kereső- és rendezőfák A megoldandó estek: a törlendő levélelem nincs jobboldali részfája nincs baloldali részfája egyik részfája sem üres 2013.11.13. 7

Kereső- és rendezőfák kf= kf= bf bf 2013.11.13. 8

Kereső- és rendezőfák kf= bf jf bf jf 2013.11.13. 9

Kereső- és rendezőfák 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) kf:=(lb,balgyerek(kf),jobbgyerek(kf)) Elágazás vége Felszabadít(c) Függvény vége. Lehetne a másik oldalról is: Legjobb(balgyerek(kf),lj) 2013.11.13. 10

Kereső- és rendezőfák 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. 2013.11.13. 11

Kereső- és rendezőfák 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 2013.11.13. 12

Kereső- és rendezőfák 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 2013.11.13. 13

Kereső- és rendezőfák 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 2013.11.13. 14

Kereső- és rendezőfák 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. 2013.11.13. 15

Kereső- és rendezőfák 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 tejes fát törölhetjük. 2013.11.13. 16

Kereső- és rendezőfák 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. 2013.11.13. 17

Kereső- és rendezőfák Feladat: Határozzuk meg egy X vektor i. és j. eleme között levő elemek minimumát! A feladat felfogható egy egyszerű minimumkivá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. 2013.11.13. 18

Szegmens fa Szegmens fa a (6;9;4;2;5;1;10;7;8;3) sorozatra: 2013.11.13. 19

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

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

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

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

Fák Néhány speciális fa művelet: elemszám(bf): Ha üres?(bf) akkor elemszám:=0 különben elemszám:=1+elemszám(balgyerek(bf))+ elemszám(jobbgyerek(bf)) Függvény vége. magas(bf): Ha üres?(bf) akkor magas:=0 különben magas:=1+max(magas(balgyerek(bf)), magas(jobbgyerek(bf)) Függvény vége. 2013.11.13. 24

Fák Bináris fa "fordított" ábrázolása, a levelektől vissza: Ha a bináris fa elemei címezhetőek is (pl. sorszámuk van), akkor elképzelhető egy olyan statikusan láncolt ábrázolás, amikor azt adjuk meg minden elemről, hogy ki van a fában fölötte. Típus BFa=Tömb(1..Max,BFaelem) BFaelem=Rekord(érték: Elemtípus, szülő: 0..Max) Egy ilyen fára persze másféle műveleteket definiálhatunk. 2013.11.13. 25

Fák Üres(bf): Ciklus i=1-től N-ig bf(i).szülő:=0 Ciklus vége Függvény vége. Beilleszt(bf,a,b): {a szülője b-nek} bf(b).szülő:=a Függvény vége. 2013.11.13. 26

Fák Ősszülő(bf,e): Ha bf(e).szülő=0 akkor Ősszülő:=e különben Ősszülő:=Ősszülő(bf,bf(e).szülő) Függvény vége. Őse?(bf,utód,ős): Ha utód=ős akkor Őse?:=igaz különben ha bf(utód).szülő=0 akkor Őse?:=hamis különben Őse?:=Őse?(bf,bf(utód).szülő,ős) Függvény vége. Megjegyzés: egyetlen fa esetén a bf tömb lehet globális változó is. 2013.11.13. 27

Fák Ősszülő(bf,e): Ciklus amíg bf(e).szülő 0 e:=bf(e).szülő Ciklus vége Függvény vége. Őse?(bf,utód,ős): Ciklus amíg utód ős és bf(utód).szülő 0 utód:=bf(utód).szülő Ciklus vége Őse?:=utód=ős Függvény vége. Ugyanez ciklussal. 2013.11.13. 28

Fák Bináris fa "fordított" ábrázolása, a levelektől vissza: Ha a bináris fa elemei címezhetőek is (pl. sorszámuk van), akkor elképzelhető egy olyan dinamikusan láncolt ábrázolás, amikor azt adjuk meg minden elemről, hogy ki van a fában fölötte. Típus BFa=Tömb(1..Max,BFaelemMutató) BFaelem=Rekord(érték: Elemtípus, szülő: BFaelemMutató) Egy ilyen fára persze másféle műveleteket definiálhatunk. 2013.11.13. 29

Fák Üres(bf): Ciklus i=1-től N-ig bf(i):=sehova Ciklus vége Függvény vége. Beilleszt(bf,a,b): {a szülője b-nek} Tartalom(bf(b)).BFaelemMutató:=bf(a) Függvény vége. 2013.11.13. 30

Fák Megjegyzés: A prioritási sor típusnál szerepelt a kupac, ami egy teljes bináris fa, minden szintje balról jobbra kitöltve. Ennek a műveletei azonban mások voltak, mint az általános bináris fa műveletei. 2013.11.13. 31

Kérdezőfa A kérdezőfa egy olyan bináris fa, amelyre teljesülnek az alábbi tulajdonságok: A fának n levele van, amelyek balról jobbra sorrendben az 1,,n számokat tartalmazzák. A fának n-1 belső pontja van, mindegyiknek 2 gyereke. Minden p belső pont a p bal-részfájában levő levélértékek maximumát tartalmazza. Minden kérdéshez költségek tartoznak, vagy a kérdések száma korlátozott vagy a nem válaszok száma korlátozott... A kérdezőfát úgy építjük fel, hogy a kérdések összköltsége minimális legyen! 2013.11.13. 32

A kérdezőfa használata: Kérdezőfa Induljunk ki a fa gyökeréből (az 1-es elemből)! Amíg az aktuális pont nem levél, kérdezzünk rá az aktuális ponthoz tartozó értékre (a keresett érték -e nála)! Ha a válasz igen, akkor lépjünk a fában balra, egyébként pedig jobbra! Statikus láncolással: Típus Kérdezőfa=Tömb(1..Max,Faelem) Faelem=Rekord(érték,ár: Egész, bal,jobb: 0..max) 2013.11.13. 33

Kérdezőfa Kérdés(kf,p,S): p:=1; S:=0 Ciklus amíg kf(p).bal>0 {vagy kf(p.jobb)>0} S:=S+kf(p).érték; Be: V Ha V="igen" akkor p:=kf(p).bal különben p:=kf(p).jobb Ciklus vége Eljárás vége. 2013.11.13. 34

Kérdezőfa Kérdezőfa előállítása kérdésköltségek esetén: Jelölje K(x) a kérdezőfában a gyökértől az x levélig haladó úton a belső pontok kérdéseihez értékek összegét. Ha a gondolt szám x, akkor a kitalálásának költsége K(x). Az a kérdezőfa optimális, amelyre a K(x) értékek maximuma a lehető legkisebb. A kérdezőfa előállítása: dinamikus progarmozás! 2013.11.13. 35

Adatszerkezetek I. 8. előadás vége