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

Hasonló dokumentumok
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 3. előadás. (Horváth Gyula anyagai felhasználásával)

Adatszerkezetek I. 9. előadás

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)

Adatszerkezetek és algoritmusok

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

Hierarchikus adatszerkezetek

Adatszerkezetek 7a. Dr. IványiPéter

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

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

Algoritmusok és adatszerkezetek gyakorlat 07

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

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

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

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

Kupac adatszerkezet. 1. ábra.

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

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

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

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.

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

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

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

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

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

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

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

- Levelek: operandusok - Csomópontok: operátorok. Fenti kifejezés: (x+ (y 10)) * (6 / z) Bináris Keresőfa (BST) Példa bináris keresőfára.

Algoritmusok és adatszerkezetek II.

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

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

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

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

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

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

Algoritmusok és adatszerkezetek II.

Információs Technológia

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

Hierarchikus adatszerkezetek

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

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

Gyakorló feladatok ZH-ra

Web-programozó Web-programozó

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

Adatszerkezet - műveletek

Térinformatikai adatszerkezetek

Adatszerkezetek 2. Dr. Iványi Péter

Multihalmaz, intervallumhalmaz

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

Gyakori elemhalmazok kinyerése

Programozás I. C nyelv

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.

Adatszerkezetek I. 4. előadás

Algoritmuselmélet 2. előadás

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

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

Jogszabályi (jelzőtáblás) csomópontok teljesítményviszonyai

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

Algoritmizálás és adatmodellezés 2. előadás

Adatszerkezetek 1. előadás

GRÁFOK ÉS ALGORITMUSOK ELMÉLETE VIZSGAKÉRDÉSEK Matematika BSc Elemző szakirány II. év 1. félév

15. A VERSENYRENDEZÉS

Struktúra nélküli adatszerkezetek

21. Adatszerkezetek Az adattípus absztrakciós szintjei Absztrakt adattípus (ADT) Absztrakt adatszerkezet (ADS) Egyszerű adattípusok Tömbök

Táblázatok fontosabb műveletei 1

Információs Technológia

Algoritmusok és adatszerkezetek II.

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

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

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

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

9. előadás. A táblázat. A táblázatról általában, soros, önátrendező, rendezett és kulcstranszformációs táblázat

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

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

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.

Önszervező bináris keresőfák

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

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

Adatszerkezetek I. 6. előadás

Algoritmusok és adatszerkezetek gyakorlat 06 Adatszerkezetek

Adatszerkezetek II. 1. előadás

Programozási alapismeretek 3. előadás

4. Előfeltételek (ha vannak) 4.1 Tantervi Nincs 4.2 Kompetenciabeli Elemi algoritmusok ismerete

Rendezettminta-fa [2] [2]

Programozás alapjai 1. (BMEVIEEA100)

A programozás alapjai 1 Rekurzió

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

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

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

15. tétel. Adatszerkezetek és algoritmusok vizsga Frissült: január 30.

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

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

Adatszerkezetek és algoritmusok

Dinamikus programozás II.

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

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

Átírás:

Fák, bináris fák

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

Bináris fa A fa (bináris fa) rekurzív adatszerkezet ábrázolása: Típus TBinfa=Rekord (elem: TElem bal,jobb: TBinfa) Típus TFa=Rekord (elem: TElem ágak: Sorozat(TFa)) A fa elemek sokasága, ezért szükség lesz: kezdő- (gyökér) elemre aktuális elemre Fák 2015.07.14. 10:15 3/42

Bináris fa dinamikus láncolás A Bináris fa rekurzív adatszerkezet műveletei: Üres:Binfa üres?(binfa):logikai egyeleműfa(elem):binfa Balrailleszt(Binfa,Binfa):Binfa {NemDef} előfeltétel: Binfa nem üres, a bal része üres Jobbrailleszt(Binfa,Binfa):Binfa {NemDef} előfeltétel: Binfa nem üres, a jobb része üres gyökérelem(binfa):elem {NemDef} előfeltétel: Binfa nem üres Fák 2015.07.14. 10:15 4/42

Bináris fa dinamikus láncolás A Bináris fa rekurzív adatszerkezet műveletei: balgyerek(binfa):binfa {Nemdef} előfeltétel: Binfa nem üres jobbgyerek(binfa):binfa {Nemdef} előfeltétel: Binfa nem üres gyökérmódosít(binfa,elem):binfa {Nemdef} előfeltétel: Binfa nem üres Fák 2015.07.14. 10:15 5/42

Bináris fa dinamikus láncolás A Bináris fa rekurzív adatszerkezet műveletei: Üres(bf): bf:=sehova Eljárás vége. üres?(bf): üres?:=bf=sehova egyeleműfa(elem): Lefoglal(bf,(Elem,sehova,sehova)) egyeleműfa:=bf Fák 2015.07.14. 10:15 6/42

Bináris fa dinamikus láncolás A Bináris fa rekurzív adatszerkezet műveletei: Balrailleszt(bf,rf): bf->bal:=rf Eljárás vége. Jobbrailleszt(bf,rf): bf->jobb:=rf Eljárás vége. gyökérelem(bf): gyökérelem:=bf->elem Fák 2015.07.14. 10:15 7/42

Bináris fa dinamikus láncolás A Bináris fa rekurzív adatszerkezet műveletei: balgyerek(bf): balgyerek:=bf->bal jobbgyerek(bf): jobbgyerek:=bf->jobb Gyökérmódosít(bf,Elem): bf->elem:=elem Eljárás vége. Fák 2015.07.14. 10:15 8/42

Bináris fa statikus láncolás Koncepció: Típus TBinfa=Rekord (gyökér,akt,szabad: 0..Max, t: tömb(1..max,tbinfaelem)) Tbinfaelem=Rekord (elem: TElem, bal,jobb: 0..Max) Fák 2015.07.14. 10:15 9/42

Bináris fa statikus láncolás A Bináris fa rekurzív adatszerkezet műveletei: Üres:Binfa üres?(binfa):logikai Egyeleműfa(Elem):Binfa Balrailleszt(Binfa,Elem):Binfa {NemDef} előfeltétel: Binfa aktuális eleme nem üres, a bal része üres Jobbrailleszt(Binfa,Elem):Binfa {NemDef} előfeltétel: Binfa aktuális eleme nem üres, a jobb része üres Gyökérre(Binfa):Binfa Fák 2015.07.14. 10:15 10/42

Bináris fa statikus láncolás A Bináris fa rekurzív adatszerkezet műveletei: elem(binfa):elem {NemDef} előfeltétel: Binfa aktuális eleme nem üres Balra(Binfa):Binfa {Nemdef} előfeltétel: Binfa aktuális eleme nem üres Jobbra(Binfa):Binfa {Nemdef} előfeltétel: Binfa aktuális eleme nem üres Módosít(Binfa,Elem):Binfa {Nemdef} előfeltétel: Binfa aktuális eleme nem üres Fák 2015.07.14. 10:15 11/42

Bináris fa statikus láncolás A Bináris fa rekurzív adatszerkezet műveletei: Üres(bf): bf.gyökér:=0; bf.akt:=0; bf.szabad:=1 Eljárás vége. üres?(bf): üres?:=bf.gyökér=0 Egyeleműfa(bf,Elem): bf.gyökér:=1; bf.akt:=1; bf.t(1):=(elem,0,0) Eljárás vége. Gyökérre(bf): bf.akt:=bf.gyökér Eljárás vége. Fák 2015.07.14. 10:15 12/42

Bináris fa statikus láncolás A Bináris fa rekurzív adatszerkezet műveletei: Balrailleszt(bf,Elem): x:=bf.szabad; bf.akt:=x; bf.t(bf.akt).bal:=x bf.t(x):=(elem,0,0); bf.szabad:=bf.szabad+1 Eljárás vége. Jobbrailleszt(bf,Elem): x:=bf.szabad; bf.akt:=x; bf.t(bf.akt).jobb:= x bf.t(x):=(elem,0,0); bf.szabad:=bf.szabad+1 Eljárás vége. elem(bf): elem:=bf.t(bf.akt).elem Fák 2015.07.14. 10:15 13/42

Bináris fa statikus láncolás A Bináris fa rekurzív adatszerkezet műveletei: Balra(bf): bf.akt:=bf.t(bf.akt).bal Jobbra(bf): bf.akt:=bf.t(bf.akt).jobb Módosít(bf,Elem): bf.t(bf.akt).elem:=elem Eljárás vége. Fák 2015.07.14. 10:15 14/42

Bináris fa statikus láncolás Módosítás: a bináris fa egyes elemei tartalmazhatják a fölöttük levő elem azonosítóját is. Típus TBinfa=Rekord (gyökér,akt: 0..Max, t: tömb(1..max,tbinfaelem)) Tbinfaelem=Rekord (elem: TElem, bal,jobb,szülő: 0..Max) Fák 2015.07.14. 10:15 15/42

Bináris fa dinamikus láncolás Módosítás: a bináris fa egyes elemei tartalmazhatják a fölöttük levő elem azonosítóját is dinamikus láncolással. Típus TBinfa=Rekord (gyökér,akt: TBinfaelem'Mutató) TBinfaelem=Rekord (elem: TElem, bal,jobb,szülő: TBinfaelem'Mutató) Fák 2015.07.14. 10:15 16/42

Bináris fa új műveletek Fa bejárások: Bal-közép-jobb (inorder) BKJ(bf): Ha nem üres?(bf) akkor BKJ(balgyerek(bf)) Ki: gyökérelem(bf) BKJ(jobbgyerek(bf)) Elágazás vége Eljárás vége. Alkalmazás: rendezőfa 1 2 4 3 7 5 6 Fák 2015.07.14. 10:15 17/42

Bináris fa új műveletek Fa bejárások: Közép-bal-jobb (preorder) KBJ(bf): Ha nem üres?(bf) akkor Ki: gyökérelem(bf) KBJ(balgyerek(bf)) KBJ(jobbgyerek(bf)) Elágazás vége Eljárás vége. 1 2 4 3 7 5 6 Fák 2015.07.14. 10:15 18/42

Bináris fa új műveletek Fa bejárások: Bal-jobb-közép (postorder) BJK(bf): Ha nem üres?(bf) akkor BJK(balgyerek(bf)) BJK(jobbgyerek(bf)) Ki: gyökérelem(bf) Elágazás vége Eljárás vége. Alkalmazás: Fa törlése, elemszáma, magassága,... 1 2 4 3 7 5 6 Fák 2015.07.14. 10:15 19/42

Bináris fa új műveletek Fa törlése (dinamikus láncolással) Törlés(bf): Ha nem üres?(bf) akkor Törlés(balgyerek(bf)) Törlés(jobbgyerek(bf)) Gyökértörlés(bf) Elágazás vége Eljárás vége. 7 1 6 4 2 3 5 Gyökértörlés(bf): Felszabadít(bf); bf:=sehova Eljárás vége. Fák 2015.07.14. 10:15 20/42

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. Fák 2015.07.14. 10:15 21/42

Kereső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ák 2015.07.14. 10:15 22/42

Kereső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ák 2015.07.14. 10:15 23/42

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ák 2015.07.14. 10:15 24/42

Bináris 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)) magasság(bf): Ha üres?(bf) akkor magasság:=0 különben magas:=1+max(magasság(balgyerek(bf)), magasság(jobbgyerek(bf)) Fák 2015.07.14. 10:15 25/42

Bináris fák Néhány speciális fa művelet: levélszám(bf): Ha üres?(bf) akkor levélszám:=0 különben ha üres(balgyerek(bf)) és üres(jobbgyerek(bf)) akkor levélszám:=1 különben levélszám:=levélszám(balgyerek(bf))+ levélszám(jobbgyerek(bf)) Fák 2015.07.14. 10:15 26/42

Bináris fák Leghosszabb út hossza (magasság számolásával): legh(bf,m): Ha üres(balgyerek(bf)) és üres(jobbgyerek(bf)) akkor m:=1; legh:=0 különben x:=legh(balgyerek(bf),mx) y:=legh(jobbgyerek(bf),my) Ha mx>my akkor m:=mx különben m:=my Ha x<y akkor z:=y különben z:=x Ha mx+my+2>z akkor legh:=mx+my+2 különben legh:=z Fák 2015.07.14. 10:15 27/42

Bináris fák szélesség(bf,szint): Ha nem üres?(bf) akkor sz(szint):=sz(szint)+1 szélesség(balgyerek(bf),szint+1) szélesség(jobbgyerek(bf),szint+1) Eljárás vége. széles(bf): szélesség(bf,0); max:=0; Ciklus i=1-től magas(fb)-ig Ha sz(i)>sz(max) akkor max:=i Ciklus vége Eljárás vége. Fák 2015.07.14. 10:15 28/42

Nem bináris fák A fa rekurzív adatszerkezet ábrázolása: Típus TFa=Rekord (elem: TElem ágak: Sorozat(TFa)) Egy speciális változat (ágszám felső korláttal): Típus TFa=Rekord (elem: TElem db: Egész ág: Tömb(1..Max,TFa)) Fák 2015.07.14. 10:15 29/42

Nem bináris fák A fa rekurzív adatszerkezet műveletei: Üres:Fa üres?(fa):logikai Egyeleműfa(Elem):Fa gyerekszám(fa):egész Beilleszt(Fa,Fa):Fa {NemDef} Gyökérelem(Fa):Elem {NemDef} Gyökérmódosít(Fa,Elem):Fa {NemDef} Gyerek(Fa,Egész):Fa {NemDef} Fák 2015.07.14. 10:15 30/42

Nem bináris fák A fa műveletei megvalósítása dinamikus láncolással: Üres(f): f:=sehova Eljárás vége. üres?(f): üres?:=(f=sehova) Egyeleműfa(e): Lefoglal(f,(e,Üressorozat)); Egyeleműfa:=f Fák 2015.07.14. 10:15 31/42

Nem bináris fák A fa műveletei megvalósítása dinamikus láncolással: gyerekszám(f): gyerekszám:=elemszám(f->ágak) Gyökérelem(f): Gyökérelem:=f->elem Gyökérmódosít(f,e): f->elem:=e Eljárás vége. gyerekszám(f): gyerekszám:=f->db Fák 2015.07.14. 10:15 32/42

Sorozattal ábrázolva: Nem bináris fák Beilleszt(mire,mit): mire->ágak:=végére(mire->ágak,mit) * Eljárás vége. Gyerek(f,i): Ha i Elemszám(f->ágak) akkor Gyerek:=f->ágak(i) különben Gyerek:=Üres *: Elejére is lehet, ha a sorrend nem fontos! Fák 2015.07.14. 10:15 33/42

Nem bináris fák Tömbbel ábrázolva: Beilleszt(mire,mit): mire->db:=mire->db+1 mire->ág(mire->db):=mit Eljárás vége. Gyerek(f,i): Ha i f->db akkor Gyerek:=f->ág(i) különben Gyerek:=Üres Fák 2015.07.14. 10:15 34/42

Nem bináris fák alkalmazás A fa elemszáma elemszám(f): Ha üres?(f) akkor elemszám:=0 különben s:=1 Ciklus i=1-től f->db-ig s:=s+elemszám(f->ág(i)) Ciklus vége elemszám:=s Fák 2015.07.14. 10:15 35/42

A fa magassága Nem bináris fák alkalmazás magasság(f): Ha üres?(f) akkor magasság:=0 különben max:=0 Ciklus i=1-től f->db-ig m:=magasság(f->ág(i)) Ha m>max akkor max:=m Ciklus vége magasság:=max+1 Fák 2015.07.14. 10:15 36/42

Bináris ábrázolás: Nem bináris fák binárisan 1 11 12 13 14 131 132 133 141 1311 1312 balra az 1. gyerek jobbra a következő testvér 1 11 12 13 14 131 132 133 141 1311 1312 Fák 2015.07.14. 10:15 37/42

Nem bináris fák binárisan Gyerek(f,i): Ha i=1 akkor Gyerek:=f->bal különben Gyerek:=Testvér(f->bal,i) Testvér(f,i): Ha i=2 akkor Testvér:=f->jobb különben Testvér:=Testvér(f->jobb,i-1) Fák 2015.07.14. 10:15 38/42

Nem bináris fák binárisan Elsőgyerek(f): Elsőgyerek:=f->bal Következőgyerek(gy): Következőgyerek:=gy->jobb Vanméggyerek(gy): Vanméggyerek:=(gy->jobb sehova) Fák 2015.07.14. 10:15 39/42

Nem bináris fák binárisan Gyerek(f,i): gy:=elsőgyerek(f) Ha i=1 akkor Gyerek:=gy különben Ciklus j=2-től i-ig gy:=következőgyerek(gy) Ciklus vége Gyerek:=gy Fák 2015.07.14. 10:15 40/42

Nem bináris fák alkalmazás A fa magassága magasság(f): Ha üres?(f) akkor magasság:=0 különben gy:=elsőgyerek(f) max:=magasság(gy) Ciklus amíg vanméggyerek(gy) gy:=következőgyerek(gy) m:=magasság(gy) Ha m>max akkor max:=m Ciklus vége magasság:=max+1 Fák 2015.07.14. 10:15 41/42

Fák, bináris fák