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

Hasonló dokumentumok
Adatszerkezetek I. 9. előadás

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

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

Algoritmusok és adatszerkezetek gyakorlat 07

Hierarchikus adatszerkezetek

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

Adatszerkezetek és algoritmusok

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

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

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

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

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

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

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

Multihalmaz, intervallumhalmaz

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

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.

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

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

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.

Kupac adatszerkezet. 1. ábra.

Algoritmuselmélet 2. előadás

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

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

Halmaz típus Értékhalmaz:

Adatszerkezetek I. 4. előadás

Visszalépéses kiválogatás

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

Adatszerkezetek 7a. Dr. IványiPéter

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

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

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

Programozási alapismeretek 3. előadás

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

PROGRAMOZÁSI TÉTELEK

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

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

Adatszerkezetek I. 6. előadás

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

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

Adatszerkezetek 1. előadás

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

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

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

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

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

Informatikai tehetséggondozás:

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

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

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

Rekurzív algoritmusok

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

Struktúra nélküli adatszerkezetek

Algoritmusok és adatszerkezetek gyakorlat 06 Adatszerkezetek

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

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.

Adatszerkezetek 2. Dr. Iványi Péter

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

Programozási segédlet

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

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

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

2. Visszalépéses keresés

Programozási módszertan. Mohó algoritmusok

Bevezetés a programozásba I.

Bánsághi Anna 2014 Bánsághi Anna 1 of 68

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

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

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

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

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

Programozás alapjai 9. előadás. Wagner György Általános Informatikai Tanszék

Adatszerkezetek 2. Dr. Iványi Péter

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

ELEMI PROGRAMOZÁSI TÉTELEK

Hatékonyság 1. előadás

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

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

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

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

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

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

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

Gráfok 2. Legrövidebb utak, feszítőfák. Szoftvertervezés és -fejlesztés II. előadás. Szénási Sándor

Alkalmazott modul: Programozás. Programozási tételek, rendezések Giachetta Roberto

Bevezetés a programozásba. 5. Előadás: Tömbök

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

Adatszerkezetek 1. Dr. Iványi Péter

Algoritmizálás és adatmodellezés 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

Elemi adatszerkezetek

Felvételi tematika INFORMATIKA

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

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

15. A VERSENYRENDEZÉS

Tartalom Keresés és rendezés. Vektoralgoritmusok. 1. fejezet. Keresés adatvektorban. A programozás alapjai I.

Átírás:

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

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. 2/33

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

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ő) Ő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) Megjegyzés: egyetlen fa esetén a bf tömb lehet globális változó is. 4/33

Fák Ősszülő(bf,e): Ciklus amíg bf(e).szülő 0 e:=bf(e).szülő Ciklus 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 Ugyanez ciklussal. 5/33

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. 6/33

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

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. 8/33

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)) 9/33

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} 10/33

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 11/33

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) Gyökérelem(f): Gyökérelem:=Tartalom(f).elem Gyökérmódosít(f,e): Tartalom(f).elem:=e Eljárás vége. gyerekszám(f): gyerekszám:=tartalom(f).db 12/33

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 13/33

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 14/33

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 15/33

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 16/33

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 17/33

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) 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) 18/33

Nem bináris fák binárisan Elsőgyerek(f): Elsőgyerek:=Tartalom(f).bal Következőgyerek(gy): Következőgyerek:=Tartalom(gy).jobb Vanméggyerek(gy): Vanméggyerek:=(Tartalom(gy).jobb sehova) 19/33

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 20/33

Nem bináris fák binárisan Fa "fordított" ábrázolása, a levelektől vissza: Ha a 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 Fa=Tömb(1..Max,Faelem) Faelem=Rekord(érték: Elemtípus, szülő: 0..Max) Ez ugyanaz, mint a bináris fáknál! 21/33

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! 22/33

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) 23/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. 24/33

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 tartozó é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! 25/33

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? 26/33

Szófák A szófa: jelöljük a szóvégeket! 27/33

A szófa ábrázolása: Szófák 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) 28/33

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)) 29/33

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)) 30/33

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 logaritmikus keresés rendezett tömbben. Kérdés: Lineáris is elég rendezetlen tömbben? 31/33

Szófák A szófa tömörítése: vonjuk össze az elágazás nélküli csomópontokat! 32/33

Fák 3. előadás vége