Fák, bináris fák INFOÉRA Ez így 60 perc.

Slides:



Advertisements
Hasonló előadás
GRIN: Gráf alapú RDF index
Advertisements

Koordináták, függvények
Függvények Egyenlőre csak valós-valós függvényekkel foglalkozunk.
HIKGHB Németh Gábor LUF9NV Simon Attila. A programozás alapjai előadás Híradástechnikai Tanszék.
INFOÉRA 2006 Kombinatorika
Rekurzió (Horváth Gyula és Szlávi Péter előadásai felhasználásával)
INFOÉRA Dinamikus programozás (Horváth Gyula és Szlávi Péter előadásai felhasználásával) Juhász István-Zsakó László: Informatikai képzések.
Copyright, 2009 © Szlávi Péter A kupac és a prioritási sor típuskonstrukciók Szlávi Péter ELTE IK Média- és Oktatásinformatikai Tanszék
Minimális költségű feszítőfák
Programozási alapismeretek 4. előadás. ELTE Szlávi-Zsakó: Programozási alapismeretek 4.2/  A szöveg A szöveg.
Programozási alapismeretek 3. előadás
Programozási alapismeretek 13. előadás. ELTE Érdekességek - kombinatorika  Az iskola bejáratánál N lépcsőfok van. Egyszerre maximum K fokot tudunk lépni,
Programozási alapismeretek 10. előadás
4. előadás (2005. március 8.) Pointerek Pointer aritmetika
Miskolci Egyetem Informatikai Intézet Általános Informatikai Tanszé k Pance Miklós Adatstruktúrák, algoritmusok előadásvázlat Miskolc, 2004 Technikai közreműködő:
Miskolci Egyetem Informatikai Intézet Általános Informatikai Tanszé k Pance Miklós Adatstruktúrák, algoritmusok előadásvázlat Miskolc, 2004 Technikai közreműködő:
Miskolci Egyetem Informatikai Intézet Általános Informatikai Tanszé k Pance Miklós Adatstruktúrák, algoritmusok előadásvázlat Miskolc, 2004 Technikai közreműködő:
Miskolci Egyetem Informatikai Intézet Általános Informatikai Tanszé k Pance Miklós Adatstruktúrák, algoritmusok előadásvázlat Miskolc, 2004 Technikai közreműködő:
AVL fák.
A digitális számítás elmélete
Fák, bináris fák INFOÉRA Ez így 60 perc.
Számoljuk meg rekurzív függvénnyel egy bináris fa leveleit!
C++ Alapok, első óra Elemi típusok Vezérlési szerkezetek
2. A rekurzió mint típuskonstrukció Szlávi Péter ELTE Média- és Oktatásinformatikai Tanszék
Copyright, 1999 © Szlávi Péter Verem típuskonstrukció Szlávi Péter ELTE IK Média- és Oktatásinformatikai Tanszék
Alapszint 2.  Készíts makrót, ami a kijelölt cellákat egybenyitja, a tartalmat vízszintesen és függőlegesen középre igazítja és 12 pontos betűméretűre.
Gráfelmélet: Fák.
Adatszerkezetek 1. előadás
Hierarchikus adatszerkezetek
ismétlődő (azonos vagy hasonló) tevékenységek megvalósítására szolgál
Fák.
Programozási alapismeretek 11. előadás. ELTE Szlávi-Zsakó: Programozási alapismeretek 11.2/ Tartalom  Rendezési.
Készítette: Hanics Anikó. Az algoritmus elve: Kezdetben legyen n db kék fa, azaz a gráf minden csúcsa egy-egy (egy pontból álló) kék fa, és legyen minden.
Logikai programozás 8.. Adatok: ISMÉTLÉS: ADATBÁZISKEZELÉS A külső adatok a hatására bekerülnek a memóriába Lekérdezés: Ahogy eddig – pl.: szereti(jani,
Copyright, 1999 © Szlávi Péter Sor típuskonstrukció Szlávi Péter ELTE IK Média- és Oktatásinformatikai Tanszék
Algoritmizálás, adatmodellezés tanítása 8. előadás.
BINÁRIS FA Definició: A fa olyanösszefüggő gráf, amelyben nincs kör
Algoritmizálás, adatmodellezés tanítása 2. előadás.
Példa kettő-három fa felépítésére - törlés művelet Készítette : Krizsai Petra
Táblázatkezelés KÉPLETEK.
Függvények II..
Minuet: A Scalable Distributed Multiversion B-Tree Írta: Benjamin Sowell, Wojciech Golab, Mehul A. Shah Feldolgozta: Fokin Miklós, Hodosy Gábor, Tóth Tamás.
Gráfok ábrázolása teljesen láncoltan
INFOÉRA 2006 Nagypontosságú aritmetika I.
Útkeresések.
Programozási alapismeretek 8. előadás. ELTE Szlávi-Zsakó: Programozási alapismeretek 8.2/  További programozási.
Algoritmizálás, adatmodellezés
Programozási alapismeretek 10. előadás. ELTE Szlávi-Zsakó: Programozási alapismeretek 10.2/  Kiválogatás + összegzés.
Bináris kereső fák Itterátorok.
Algoritmusok és adatszerkezetek
Összeállította: Gergely János
Fájlszervezés Adatbázisok tervezése, megvalósítása és menedzselése.
INFOÉRA Gráfok, gráfalgoritmusok II. (Horváth Gyula és Szlávi Péter előadásai felhasználásával) Juhász István-Zsakó László: Informatikai.
(Bináris) Kupac (heap) adattípus
Huffman tömörítés.
TÁMOP /1-2F Informatikai gyakorlatok 11. évfolyam Alapvető programozási tételek megvalósítása Czigléczky Gábor 2009.
Kifejezések C#-ban.
Nevezetes algoritmusok
BFák Kiegyensúlyozott keresőfák
Mediánok és rendezett minták
Piros-fekete fák Beszúrás, ill. törléskor a fa elveszítheti az egyensúlyát. A piros-fekete fák: az egyensúly megtartását biztosítják. +1 bit információ.
Algoritmusok és Adatszerkezetek I.
Lineáris keresés Keresés (N,A,sorszam) i := 1
Fák, bináris fák INFOÉRA Ez így 60 perc.
Informatikai gyakorlatok 11. évfolyam
Algoritmusok és Adatszerkezetek I.
Gráfok - 1 Definíció: Irányított gráf (digráf) G=(V,E) rendezett pár.
2-3-fák A 2-3-fa egy gyökeres fa az alábbi tulajdonságokkal:
Rekurzió 3. Szlávi Péter ELTE Informatika Szakmódszertani Csoport
Programozási tételek.
Előadás másolata:

Fák, bináris fák INFOÉRA 2006 2006.11.18 Ez így 60 perc. Juhász István-Zsakó László: Informatikai képzések a ELTE-n

Zsakó László: Fák, bináris fák INFOÉRA 2006 2006.11.18 Bináris fa A fa (bináris fa) rekurzív adatszerkezet:  ÜresFa BinFa:=   Rekord(Elem,BinFa,BinFa)  ÜresFa Fa :=   Rekord(Elem,Fák) Zsakó László: Fák, bináris fák 2017.04.10. 21:26 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 2

Zsakó László: Fák, bináris fák INFOÉRA 2006 2006.11.18 Bináris fa: példák sin(b(i)+a*x) x:=(a+2)*b + * Ind b i Sin a x * b + a 2 := x Zsakó László: Fák, bináris fák 2017.04.10. 21:26 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 3

Zsakó László: Fák, bináris fák INFOÉRA 2006 2006.11.18 Nem bináris fa: példák John Ronald Reuel Tolkien családfája Zsakó László: Fák, bináris fák 2017.04.10. 21:26 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 4

Zsakó László: Fák, bináris fák INFOÉRA 2006 2006.11.18 Bináris fa A fa (bináris fa) rekurzív adatszerkezet jellemzői: sokaság: azonos típusú elemekből áll; akár 0 db elemet tartalmazhat; Üres: rekurzív „nullelem”, kitüntetett konstans; Fraktál (=önhasonlóság) tulajdonság: a részei ugyanolyan szerkezetűek, mint az egész; nem lineárisan rendezett (azaz nem sorozatféle): bármely elemének 0, 1, 2… (közvetlen) rákövetkezője lehet; minden elemnek legfeljebb egy (köz-vetlen) előzője van. Zsakó László: Fák, bináris fák 2017.04.10. 21:26 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 5

Zsakó László: Fák, bináris fák INFOÉRA 2006 2006.11.18 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 Zsakó László: Fák, bináris fák 2017.04.10. 21:26 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 6

Bináris fa – dinamikus láncolás INFOÉRA 2006 2006.11.18 Bináris fa – dinamikus láncolás Koncepció: a bináris fa egy rekurzív adatszerkezet, ha bármely részét megváltoztatom, az egész meg fog változni; megvalósítás dinamikus láncolással; a műveletek értékmegosztást feltételeznek. Megjegyzés: az előadásban feltesszük, hogy az elő-feltételeket mindenhol betartjuk, nincs ellenőrzés. Zsakó László: Fák, bináris fák 2017.04.10. 21:26 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 7

Bináris fa – dinamikus láncolás INFOÉRA 2006 2006.11.18 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 Zsakó László: Fák, bináris fák 2017.04.10. 21:26 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 8

Bináris fa – dinamikus láncolás INFOÉRA 2006 2006.11.18 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 Zsakó László: Fák, bináris fák 2017.04.10. 21:26 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 9

Bináris fa – dinamikus láncolás INFOÉRA 2006 2006.11.18 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 Függvény vége. egyeleműfa(Elem): Lefoglal(bf,(Elem,sehova,sehova)) egyeleműfa:=bf Zsakó László: Fák, bináris fák 2017.04.10. 21:26 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 10

Bináris fa – dinamikus láncolás INFOÉRA 2006 2006.11.18 Bináris fa – dinamikus láncolás A Bináris fa rekurzív adatszerkezet műveletei: Balrailleszt(bf,rf): Tartalom(bf).bal:=rf Eljárás vége. Jobbrailleszt(bf,rf): Tartalom(bf).jobb:=rf gyökérelem(bf): gyökérelem:=Tartalom(bf).elem Függvény vége. Zsakó László: Fák, bináris fák 2017.04.10. 21:26 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 11

Bináris fa – dinamikus láncolás INFOÉRA 2006 2006.11.18 Bináris fa – dinamikus láncolás A Bináris fa rekurzív adatszerkezet műveletei: balgyerek(bf): balgyerek:=Tartalom(bf).bal Függvény vége. jobbgyerek(bf): jobbgyerek:=Tartalom(bf).jobb Gyökérmódosít(bf,Elem): Tartalom(bf).elem:=Elem Eljárás vége. Zsakó László: Fák, bináris fák 2017.04.10. 21:26 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 12

Bináris fa – statikus láncolás INFOÉRA 2006 2006.11.18 Bináris fa – statikus láncolás Koncepció: a bináris fa egy sokaság, amelyben a sorrend speciális; megvalósítás statikus láncolással; ha törlést nem engedünk meg, akkor az új elemek csak a tömb végére kerülhetnek; a műveletek a struk- túrában való mozgást feltételeznek. 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) Zsakó László: Fák, bináris fák 2017.04.10. 21:26 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 13

Bináris fa – statikus láncolás INFOÉRA 2006 2006.11.18 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 Zsakó László: Fák, bináris fák 2017.04.10. 21:26 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 14

Bináris fa – statikus láncolás INFOÉRA 2006 2006.11.18 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 Zsakó László: Fák, bináris fák 2017.04.10. 21:26 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 15

Bináris fa – statikus láncolás INFOÉRA 2006 2006.11.18 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 Függvény vége. Egyeleműfa(bf,Elem): bf.gyökér:=1; bf.akt:=1; bf.t(1):=(Elem,0,0) Gyökérre(bf): bf.akt:=bf.gyökér Eljárás vége. Zsakó László: Fák, bináris fák 2017.04.10. 21:26 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 16

Bináris fa – statikus láncolás INFOÉRA 2006 2006.11.18 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 elem(bf): elem:=bf.t(bf.akt).elem Függvény vége. Zsakó László: Fák, bináris fák 2017.04.10. 21:26 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 17

Bináris fa – statikus láncolás INFOÉRA 2006 2006.11.18 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 Függvény vége. 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. Zsakó László: Fák, bináris fák 2017.04.10. 21:26 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 18

Bináris fa – statikus láncolás INFOÉRA 2006 2006.11.18 Bináris fa – statikus láncolás Megjegyzések: A statikus láncolással megvalósított bináris fa (aktuális elemmel és gyökérelemmel) dinamikus láncolással is menne. A dinamikus láncolással megvalósított bináris fa az értékmegosztás miatt statikus láncolással nem működne. Zsakó László: Fák, bináris fák 2017.04.10. 21:26 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 19

Bináris fa – statikus láncolás INFOÉRA 2006 2006.11.18 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) Zsakó László: Fák, bináris fák 2017.04.10. 21:26 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 20

Bináris fa – dinamikus láncolás INFOÉRA 2006 2006.11.18 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ó) Zsakó László: Fák, bináris fák 2017.04.10. 21:26 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 21

Bináris fa – új műveletek INFOÉRA 2006 2006.11.18 Bináris fa – új műveletek Fa bejárások: Bal-közép-jobb 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 3 7 4 5 6 1 2 Zsakó László: Fák, bináris fák 2017.04.10. 21:26 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 22

Bináris fa – új műveletek INFOÉRA 2006 2006.11.18 Bináris fa – új műveletek Fa bejárások: Közép-bal-jobb 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. 3 7 4 5 6 1 2 Zsakó László: Fák, bináris fák 2017.04.10. 21:26 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 23

Bináris fa – új műveletek INFOÉRA 2006 2006.11.18 Bináris fa – új műveletek Fa bejárások: Bal-jobb-közép 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, ... 3 7 4 5 6 1 2 Zsakó László: Fák, bináris fák 2017.04.10. 21:26 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 24

Bináris fa – új műveletek INFOÉRA 2006 2006.11.18 Bináris fa – új műveletek 6 5 4 2 3 7 1 6 5 4 2 3 7 7 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. Gyökértörlés(bf): Felszabadít(bf); bf:=sehova Eljárás vége. Zsakó László: Fák, bináris fák 2017.04.10. 21:26 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 25

Zsakó László: Fák, bináris fák INFOÉRA 2006 2006.11.18 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. Zsakó László: Fák, bináris fák 2017.04.10. 21:26 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 26

Zsakó László: Fák, bináris fák INFOÉRA 2006 2006.11.18 Kereső- és rendezőfák A keresőfa új műveletei: keresés beillesztés törlés kiegyensúlyozás Zsakó László: Fák, bináris fák 2017.04.10. 21:26 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 27

Zsakó László: Fák, bináris fák INFOÉRA 2006 2006.11.18 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. Zsakó László: Fák, bináris fák 2017.04.10. 21:26 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 28

Zsakó László: Fák, bináris fák INFOÉRA 2006 2006.11.18 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. Zsakó László: Fák, bináris fák 2017.04.10. 21:26 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 29

Zsakó László: Fák, bináris fák INFOÉRA 2006 2006.11.18 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. Zsakó László: Fák, bináris fák 2017.04.10. 21:26 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 30

Zsakó László: Fák, bináris fák INFOÉRA 2006 2006.11.18 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 Zsakó László: Fák, bináris fák 2017.04.10. 21:26 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 31

Zsakó László: Fák, bináris fák INFOÉRA 2006 2006.11.18 Kereső- és rendezőfák kf= bf kf= bf Zsakó László: Fák, bináris fák 2017.04.10. 21:26 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 32

Zsakó László: Fák, bináris fák INFOÉRA 2006 2006.11.18 Kereső- és rendezőfák kf= bf jf bf jf Zsakó László: Fák, bináris fák 2017.04.10. 21:26 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 33

Zsakó László: Fák, bináris fák INFOÉRA 2006 2006.11.18 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. Zsakó László: Fák, bináris fák 2017.04.10. 21:26 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 34

Zsakó László: Fák, bináris fák INFOÉRA 2006 2006.11.18 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. Zsakó László: Fák, bináris fák 2017.04.10. 21:26 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 35

Zsakó László: Fák, bináris fák INFOÉRA 2006 2006.11.18 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)) Zsakó László: Fák, bináris fák 2017.04.10. 21:26 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 36

Zsakó László: Fák, bináris fák INFOÉRA 2006 2006.11.18 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. Zsakó László: Fák, bináris fák 2017.04.10. 21:26 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 37

Zsakó László: Fák, bináris fák INFOÉRA 2006 2006.11.18 Fák Bal- és jobbgyerekszám közötti különbségek maximuma: különbség(bf): Ha üres?(bf) akkor különbség:=0 különben különbség:=max(abs(elemszám(balgyerek(bf))- elemszám(jobbgyerek(fb)), különbség(balgyerek(bf)), különbség(jobbgyerek(bf)) Függvény vége. Nagyon lassú megoldás a többszörös rekurzió miatt. Zsakó László: Fák, bináris fák 2017.04.10. 21:26 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 38

Zsakó László: Fák, bináris fák INFOÉRA 2006 2006.11.18 Fák különbség(bf,db): Ha üres?(bf) akkor különbség:=0; db:=0 különben a:=különbség(balgyerek(bf),db1) b:=különbség(jobbgyerek(bf),db2) db:=db1+db2+1 különbség:=max(abs(db1-db2),a,b) Függvény vége. Zsakó László: Fák, bináris fák 2017.04.10. 21:26 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 39

Zsakó László: Fák, bináris fák INFOÉRA 2006 2006.11.18 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! Zsakó László: Fák, bináris fák 2017.04.10. 21:26 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 40

Zsakó László: Fák, bináris fák INFOÉRA 2006 2006.11.18 Kérdezőfa A kérdezőfa használata: 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) Zsakó László: Fák, bináris fák 2017.04.10. 21:26 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 41

Zsakó László: Fák, bináris fák INFOÉRA 2006 2006.11.18 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. Zsakó László: Fák, bináris fák 2017.04.10. 21:26 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 42

Zsakó László: Fák, bináris fák INFOÉRA 2006 2006.11.18 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! Zsakó László: Fák, bináris fák 2017.04.10. 21:26 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 43

Zsakó László: Fák, bináris fák INFOÉRA 2006 2006.11.18 Nem bináris fák A fa rekurzív adatszerkezet jellemzői: sokaság: azonos típusú elemekből áll; akár 0 db elemet tartalmazhat; Üres: rekurzív „nullelem”, kitüntetett konstans; Fraktál (=önhasonlóság) tulajdonság: a részei ugyanolyan szerkezetűek, mint az egész; nem lineárisan rendezett (azaz nem sorozatféle): bármely elemének 0, 1, 2… (közvetlen) rákövetkezője lehet; minden elemnek legfeljebb egy (köz-vetlen) előzője van. Zsakó László: Fák, bináris fák 2017.04.10. 21:26 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 44

Zsakó László: Fák, bináris fák INFOÉRA 2006 2006.11.18 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)) Ide lehetne egy listás megvalósítás is Zsakó László: Fák, bináris fák 2017.04.10. 21:26 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 45

Zsakó László: Fák, bináris fák INFOÉRA 2006 2006.11.18 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} Zsakó László: Fák, bináris fák 2017.04.10. 21:26 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 46

Zsakó László: Fák, bináris fák INFOÉRA 2006 2006.11.18 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) Függvény vége. Egyeleműfa(e): Lefoglal(f,(e,Üressorozat)); Egyeleműfa:=f Zsakó László: Fák, bináris fák 2017.04.10. 21:26 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 47

Zsakó László: Fák, bináris fák INFOÉRA 2006 2006.11.18 Nem bináris fák A fa műveletei megvalósítása dinamikus láncolással: gyerekszám(f): gyerekszám:=Elemszám(Tartalom(f).ágak) Függvény vége. Gyökérelem(f): Gyökérelem:=Tartalom(f).elem Függvény vége. Gyökérmódosít(f,e): Tartalom(f).elem:=e Eljárás vége. gyerekszám(f): gyerekszám:=Tartalom(f).db Függvény vége. Zsakó László: Fák, bináris fák 2017.04.10. 21:26 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 48

Zsakó László: Fák, bináris fák INFOÉRA 2006 2006.11.18 Nem bináris fák Sorozattal ábrázolva: Beilleszt(mire,mit): Tartalom(mire).ágak:= Végére(Tartalom(mire).ágak,mit) Eljárás vége. Gyerek(f,i): Ha i≤Elemszám(Tartalom(f).ágak) akkor Gyerek:=Tartalom(f).ágak(i) különben Gyerek:=Üres Függvény vége. A gyerek nem indexeléssel kellene!!!!!! Zsakó László: Fák, bináris fák 2017.04.10. 21:26 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 49

Zsakó László: Fák, bináris fák INFOÉRA 2006 2006.11.18 Nem bináris fák Tömbbel ábrázolva: Beilleszt(mire,mit): Tartalom(mire).db:=Tartalom(mire).db+1 Tartalom(mire).ág(Tartalom(mire).db):=mit Eljárás vége. Gyerek(f,i): Ha i≤Tartalom(f).db akkor Gyerek:=Tartalom(f).ág(i) különben Gyerek:=Üres Függvény vége. Listával is kellene! Zsakó László: Fák, bináris fák 2017.04.10. 21:26 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 50

Nem bináris fák – alkalmazás INFOÉRA 2006 2006.11.18 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 Tartalom(f).db-ig s:=s+elemszám(Tartalom(f).ág(i)) Ciklus vége elemszám:=s Függvény vége. Zsakó László: Fák, bináris fák 2017.04.10. 21:26 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 51

Nem bináris fák – alkalmazás INFOÉRA 2006 2006.11.18 Nem bináris fák – alkalmazás A fa magassága magasság(f): Ha üres?(f) akkor magasság:=0 különben max:=0 Ciklus i=1-től Tartalom(f).db-ig m:=magasság(Tartalom(f).ág(i)) Ha m>max akkor max:=m Ciklus vége magasság:=max+1 Függvény vége. Zsakó László: Fák, bináris fák 2017.04.10. 21:26 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 52

Nem bináris fák – binárisan INFOÉRA 2006 2006.11.18 Nem bináris fák – binárisan Bináris ábrázolás: balra az 1. gyerek jobbra a következő testvér 13 132 131 1311 1312 1 12 14 141 133 11 1 11 12 13 14 131 132 133 141 1311 1312 Kellene az átalakító algoritmus! Zsakó László: Fák, bináris fák 2017.04.10. 21:26 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 53

Nem bináris fák – binárisan INFOÉRA 2006 2006.11.18 Nem bináris fák – binárisan Gyerek(f,i): Ha i=1 akkor Gyerek:=Tartalom(f).bal különben Gyerek:=Testvér(Tartalom(f).bal,i) Függvény vége. Testvér(f,i): Ha i=2 akkor Testvér:=Tartalom(f).jobb különben Testvér:=Testvér(Tartalom(f).jobb,i-1) Függvény vége. Zsakó László: Fák, bináris fák 2017.04.10. 21:26 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 54

Nem bináris fák – binárisan INFOÉRA 2006 2006.11.18 Nem bináris fák – binárisan Elsőgyerek(f): Elsőgyerek:=Tartalom(f).bal Függvény vége. Következőgyerek(gy): Következőgyerek:=Tartalom(gy).jobb Függvény vége. Vanméggyerek(gy): Vanméggyerek:=(Tartalom(gy).jobb≠sehova) Zsakó László: Fák, bináris fák 2017.04.10. 21:26 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 55

Nem bináris fák – binárisan INFOÉRA 2006 2006.11.18 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üggvény vége. Zsakó László: Fák, bináris fák 2017.04.10. 21:26 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 56

Zsakó László: Fák, bináris fák INFOÉRA 2006 2006.11.18 Szófák A szófa: nem bináris fa a gyökere üres a szavak felülről lefelé olvashatók hol a szó vége? hány gyerek lehet? Zsakó László: Fák, bináris fák 2017.04.10. 21:26 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 57

Zsakó László: Fák, bináris fák INFOÉRA 2006 2006.11.18 Szófák A szófa: jelöljük a szóvégeket! Zsakó László: Fák, bináris fák 2017.04.10. 21:26 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 58

Zsakó László: Fák, bináris fák INFOÉRA 2006 2006.11.18 Szófák A szófa ábrázolása: indexeljük a következő betűvel a szófa további részét; jelezzük, hogy szó végén vagyunk-e! Típus SzóFa=Rekord (betű:Tömb('a'..'z':Szófa, vége:Logikai) Zsakó László: Fák, bináris fák 2017.04.10. 21:26 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 59

Zsakó László: Fák, bináris fák INFOÉRA 2006 2006.11.18 Szófák Szó keresése: Bennevan?(szf,s): Ha Tartalom(szf).vége és üres?(s) akkor Bennevan?:=igaz különben ha üres?(s) akkor Bennevan?:=hamis különben ha üres?(Tartalom(szf).betű(első(s))) akkor Bennevan?:=hamis különben Bennevan?:=Bennevan?(Tartalom(szf). betű(első(s)),elsőnélküli(s)) Függvény vége. Zsakó László: Fák, bináris fák 2017.04.10. 21:26 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 60

Zsakó László: Fák, bináris fák INFOÉRA 2006 2006.11.18 Szófák Szó beillesztése: Beilleszt(szf,s): Ha üres?(s) akkor Tartalom(szf).vége:=igaz különben Ha üres?(Tartalom(szf).betű(első(s))) akkor Lefoglal(Tartalom(szf).betű(első(s)) Beilleszt(Tartalom(szf).betű(első(s)), elsőnélküli(s)) Függvény vége. Zsakó László: Fák, bináris fák 2017.04.10. 21:26 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 61

Zsakó László: Fák, bináris fák INFOÉRA 2006 2006.11.18 Szófák Problémák: minden elemhez annyi mutató kell, ahány betű van az ábécében; kérdéses a magyar ábécével való indexelés; sok faelemnél nincs is elágazás, azaz egyetlen ág meg tovább. Ötlet: Indexelés helyett logaritmi-kus keresés rendezett tömbben. Kérdés: Lineáris is elég rendezet-len tömbben? Zsakó László: Fák, bináris fák 2017.04.10. 21:26 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 62

Zsakó László: Fák, bináris fák INFOÉRA 2006 2006.11.18 Szófák A szófa tömörítése: vonjuk össze az elágazás nélküli csomópontokat! Zsakó László: Fák, bináris fák 2017.04.10. 21:26 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 63

Zsakó László: Fák, bináris fák INFOÉRA 2006 2006.11.18 Szófák Egy fát zárójelekkel és F betűkkel írunk le : (baloldali ág) F (jobboldali ág) formában. A fának törzse biztosan van. Példa: ágnélküli fa: F kétágú fa: ( F ) F ( F ) bonyolultabb fa: ( ( F ) F ( F ) ) F ( F ) Zsakó László: Fák, bináris fák 2017.04.10. 21:26 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 64

Zsakó László: Fák, bináris fák INFOÉRA 2006 2006.11.18 Szófák Írj programot, amely meghatározza A. a fa magasságát (a leghosszabb út hosszát a gyökértől valamelyik ág végéig); B. a fa tömegét (feltételezve, hogy a törzs, illetve a vele azonos tömegű ágdarabok egységnyi tömegűek); C. a fa elágazásainak számát! Zsakó László: Fák, bináris fák 2017.04.10. 21:26 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 65

Programozási alapismeretek 2006.11.18 Fák, bináris fák 2008/2009.