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

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)

Algoritmusok és adatszerkezetek gyakorlat 07

Hierarchikus adatszerkezetek

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

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

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

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

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

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

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

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

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 7a. Dr. IványiPéter

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

Kupac adatszerkezet. 1. ábra.

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

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

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

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

Algoritmusok és adatszerkezetek I. 1. 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

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

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

Multihalmaz, intervallumhalmaz

Algoritmuselmélet 2. előadás

Hierarchikus adatszerkezetek

Adatszerkezetek 2. Dr. Iványi Péter

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

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

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

Információs Technológia

Elemi adatszerkezetek

Struktúra nélküli adatszerkezetek

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.

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

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

Adatszerkezetek Bevezetés Adatszerkezet Adatszerkezet típusok Műveletek Bonyolultság

Gyakori elemhalmazok kinyerése

15. A VERSENYRENDEZÉS

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

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

Dinamikus programozás II.

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

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

Általános algoritmustervezési módszerek

Térinformatikai adatszerkezetek

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

ELEMI PROGRAMOZÁSI TÉTELEK

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

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

Programozási módszertan. Mohó algoritmusok

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

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

Programozás alapjai II. (7. ea) C++ Speciális adatszerkezetek. Tömbök. Kiegészítő anyag: speciális adatszerkezetek

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

Speciális adatszerkezetek. Programozás alapjai II. (8. ea) C++ Tömbök. Tömbök/2. N dimenziós tömb. Nagyméretű ritka tömbök

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

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

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

Adatszerkezetek 1. előadás

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

A 2008/2009 tanévi Országos Középiskolai Tanulmányi Verseny első forduló feladatainak megoldása. INFORMATIKÁBÓL II. (programozás) kategóriában

Rekurzív algoritmusok

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

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

Házi feladatok megoldása. Nyelvek használata adatszerkezetek, képek leírására

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

Alkalmazott modul: Programozás. Programozási tételek, rendezések. Programozási tételek Algoritmusok és programozási tételek

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

Halmaz típus Értékhalmaz:

Programozás alapjai II. (7. ea) C++

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

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

Programozási alapismeretek 3. előadás

Visszalépéses kiválogatás

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

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

Rekurzió. Dr. Iványi Péter

Bevezetés a programozásba I.

Adatszerkezetek 2. Dr. Iványi Péter

R ++ -tree: an efficient spatial access method for highly redundant point data - Martin Šumák, Peter Gurský

Algoritmusok és adatszerkezetek gyakorlat 06 Adatszerkezetek

Algoritmusok és adatszerkezetek II.

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

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

Programozás alapjai. 5. előadás

Informatikai tehetséggondozás:

Összetett programozási tételek

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

Adatszerkezetek I. 6. előadás

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

A C# programozási nyelv alapjai

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

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

Á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) 2017.02.03. 7:50 2/68

Bináris fa: példák sin(b(i)+a*x) Sin + Ind * b i a x x:=(a+2)*b := x * + b a 2 2017.02.03. 7:50 3/68

Nem bináris fa: példák John Ronald Reuel Tolkien családfája 2017.02.03. 7:50 4/68

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özvetlen) előzője van. 2017.02.03. 7:50 5/68

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 2017.02.03. 7:50 6/68

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: feltesszük, hogy az előfeltételeket mindenhol betartjuk, nincs ellenőrzés. 2017.02.03. 7:50 7/68

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 előfeltétel: Binfa nem üres, a bal része üres Jobbrailleszt(Binfa,Binfa):Binfa előfeltétel: Binfa nem üres, a jobb része üres gyökérelem(binfa):elem előfeltétel: Binfa nem üres 2017.02.03. 7:50 8/68

Bináris fa dinamikus láncolás A Bináris fa rekurzív adatszerkezet műveletei: balgyerek(binfa):binfa előfeltétel: Binfa nem üres jobbgyerek(binfa):binfa előfeltétel: Binfa nem üres gyökérmódosít(binfa,elem):binfa előfeltétel: Binfa nem üres 2017.02.03. 7:50 9/68

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 Függvény vége. 2017.02.03. 7:50 10/68

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 Eljárás vége. gyökérelem(bf): gyökérelem:=tartalom(bf).elem Függvény vége. 2017.02.03. 7:50 11/68

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 Függvény vége. Gyökérmódosít(bf,Elem): Tartalom(bf).elem:=Elem Eljárás vége. 2017.02.03. 7:50 12/68

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 struktú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) 2017.02.03. 7:50 13/68

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 előfeltétel: Binfa aktuális eleme nem üres, a bal része üres Jobbrailleszt(Binfa,Elem):Binfa előfeltétel: Binfa aktuális eleme nem üres, a jobb része üres Gyökérre(Binfa):Binfa 2017.02.03. 7:50 14/68

Bináris fa statikus láncolás A Bináris fa rekurzív adatszerkezet műveletei: elem(binfa):elem előfeltétel: Binfa aktuális eleme nem üres Balra(Binfa):Binfa előfeltétel: Binfa aktuális eleme nem üres Jobbra(Binfa):Binfa előfeltétel: Binfa aktuális eleme nem üres Módosít(Binfa,Elem):Binfa előfeltétel: Binfa aktuális eleme nem üres 2017.02.03. 7:50 15/68

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) Eljárás vége. Gyökérre(bf): bf.akt:=bf.gyökér Eljárás vége. 2017.02.03. 7:50 16/68

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üggvény vége. 2017.02.03. 7:50 17/68

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 Függvény vége. Módosít(bf,Elem): bf.t(bf.akt).elem:=elem Eljárás vége. 2017.02.03. 7:50 18/68

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. 2017.02.03. 7:50 19/68

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) 2017.02.03. 7:50 20/68

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ó) 2017.02.03. 7:50 21/68

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 1 2 4 3 7 5 6 2017.02.03. 7:50 22/68

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. 1 2 4 3 7 5 6 2017.02.03. 7:50 23/68

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,... 1 2 4 3 7 5 6 2017.02.03. 7:50 24/68

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. 2017.02.03. 7:50 25/68

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. 2017.02.03. 7:50 26/68

Kereső- és rendezőfák A keresőfa új műveletei: keresés beillesztés törlés kiegyensúlyozás 2017.02.03. 7:50 27/68

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. 2017.02.03. 7:50 28/68

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. 2017.02.03. 7:50 29/68

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. 2017.02.03. 7:50 30/68

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 2017.02.03. 7:50 31/68

Kereső- és rendezőfák kf= kf= bf bf 2017.02.03. 7:50 32/68

Kereső- és rendezőfák kf= bf jf bf jf 2017.02.03. 7:50 33/68

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. 2017.02.03. 7:50 34/68

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. 2017.02.03. 7:50 35/68

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. 2017.02.03. 7:50 36/68

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. 2017.02.03. 7:50 37/68

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. 2017.02.03. 7:50 38/68

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. 2017.02.03. 7:50 39/68

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! 2017.02.03. 7:50 40/68

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) 2017.02.03. 7:50 41/68

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. 2017.02.03. 7:50 42/68

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! 2017.02.03. 7:50 43/68

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özvetlen) előzője van. 2017.02.03. 7:50 44/68

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)) 2017.02.03. 7:50 45/68

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 Gyökérelem(Fa):Elem Gyökérmódosít(Fa,Elem):Fa Gyerek(Fa,Egész):Fa 2017.02.03. 7:50 46/68

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 Függvény vége. 2017.02.03. 7:50 47/68

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. 2017.02.03. 7:50 48/68

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. 2017.02.03. 7:50 49/68

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. 2017.02.03. 7:50 50/68

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. 2017.02.03. 7:50 51/68

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 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. 2017.02.03. 7:50 52/68

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 2017.02.03. 7:50 53/68

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. 2017.02.03. 7:50 54/68

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) Függvény vége. 2017.02.03. 7:50 55/68

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. 2017.02.03. 7:50 56/68

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? 2017.02.03. 7:50 57/68

Szófák A szófa: jelöljük a szóvégeket! 2017.02.03. 7:50 58/68

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) 2017.02.03. 7:50 59/68

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. 2017.02.03. 7:50 60/68

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. 2017.02.03. 7:50 61/68

Problémák: Szófá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 logaritmikus keresés rendezett tömbben. Kérdés: Lineáris is elég rendezetlen tömbben? 2017.02.03. 7:50 62/68

Szófák A szófa tömörítése: vonjuk össze az elágazás nélküli csomópontokat! 2017.02.03. 7:50 63/68

Fa megadása sorozattal 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: kétágú fa: ( F ) F ( F ) F bonyolultabb fa: ( ( F ) F ( F ) ) F ( F ) 2017.02.03. 7:50 64/68

Fa megadása sorozattal Í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! 2017.02.03. 7:50 65/68

Bináris fa felépítése Bináris fák szövegesen is megadhatók az alábbi szabályok szerint is: 1) Minden karakter, ami az angol ábécé eleme, faleírás. 2) Ha x karakter valamint f1 és f2 faleírás, akkor az x(f1,f2) szöveg is faleírás. Pl.: z(x(a,b(c,d)),y(x,x)) 2017.02.03. 7:50 66/68

Bináris fa felépítése Felépít(bf,s,i): Lefoglal(bf,(s[i],sehova,sehova)); i:=i+1 Ha i hossz(s) akkor Ha s[i]= ( akkor i:=i+1; Felépít(Tartalom(bf).bal,s,i) különben ha s[i]=, akkor i:=i+1; Felépít(Tartalom(bf).jobb,s,i) különben { ) } i:=i+1 Eljárás vége. 2017.02.03. 7:50 67/68

Fák, bináris fák