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

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

Adatszerkezetek és algoritmusok

Adatszerkezetek I. 4. előadás

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

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

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

Hierarchikus adatszerkezetek

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

Algoritmusok és adatszerkezetek gyakorlat 07

Kupac adatszerkezet. 1. ábra.

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

Algoritmuselmélet 2. 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

Adatszerkezetek 7a. Dr. IványiPéter

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

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

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

Adatszerkezetek 2. Dr. Iványi Péter

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

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

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

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

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

Multihalmaz, intervallumhalmaz

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

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

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

Algoritmusok és adatszerkezetek gyakorlat 06 Adatszerkezetek

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

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

Struktúra nélküli adatszerkezetek

Adatszerkezetek 1. előadás

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

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

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

Önszervező bináris keresőfák

Hierarchikus adatszerkezetek

Algoritmusok és adatszerkezetek II.

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

Adatszerkezetek II. 10. előadás

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

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

Információs Technológia

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

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

Halmaz típus Értékhalmaz:

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

Elemi adatszerkezetek

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

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

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

Adatszerkezetek 2. Dr. Iványi Péter

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

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

Adatszerkezetek I. 6. előadás

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

10. Egy családfában csak a férfiakat és fiúgyerekeket ábrázoljuk, egy közös ősből kiindulva. Készíts

Web-programozó Web-programozó

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.

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 1. Dr. Iványi Péter

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

Térinformatikai adatszerkezetek

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

Visszalépéses kiválogatá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

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.

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

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

Rakov(34125)= Rakov(12543)= Rakov(14532)= Rakov(54321)=-

Adatszerkezetek Hasító táblák. Dr. Iványi Péter

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

Adatszerkezetek II. 1. előadás

Egyirányban láncolt lista

Rekurzió. Dr. Iványi Péter

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

Informatikai tehetséggondozás:

Általános algoritmustervezési módszerek

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

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

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

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

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

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

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

Adatszerkezet - műveletek

Tuesday, March 6, 12. Hasító táblázatok

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

Ionogram releváns területeinek meghatározása és elemzésének automatikus megvalósítása

2018, Diszkrét matematika

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

Rendezettminta-fa [2] [2]

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

1.előadás Tornai Kálmán

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

Programozási módszertan. Mohó algoritmusok

Átírás:

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: BinFa:= Fa := ÜresFa Rekord(Elem,BinFa,BinFa) ÜresFa Rekord(Elem,Fák) 2/37

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 3/37

Nem bináris fa: példák John Ronald Reuel Tolkien családfája 4/37

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. 5/37

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 6/37

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

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 8/37

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érelem(binfa):elem {NemDef} előfeltétel: Binfa nem üres gyökérmódosít(binfa,elem):binfa {Nemdef} előfeltétel: Binfa nem üres 9/37

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. 10/37

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. 11/37

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. 12/37

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; 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) 13/37

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

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

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; Szabadlista(bf) Eljárás vége. üres?(bf): üres?:=bf.gyökér=0 Függvény vége. 16/37

Bináris fa statikus láncolás A Bináris fa rekurzív adatszerkezet műveletei: Egyeleműfa(bf,Elem): bf.gyökér:=1; bf.akt:=1; bf.szabad:=2 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. 17/37

Bináris fa statikus láncolás A Bináris fa rekurzív adatszerkezet műveletei: Balrailleszt(bf,Elem): Szabadlistából(x); bf.t(bf.akt).bal:=x bf.t(x):=(elem,0,0); bf.akt:=x Eljárás vége. Jobbrailleszt(bf,Elem): Szabadlistából(x); bf.t(bf.akt).jobb:= x bf.t(x):=(elem,0,0); bf.akt:=x Eljárás vége. érték(bf): elem:=bf.t(bf.akt).elem Függvény vége. 18/37

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. 19/37

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. 20/37

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) 21/37

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ó) 22/37

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 23/37

Bináris fa új műveletek BKJ(bf): Üres(v); Verembe(v,sehova); rf:=bf Ciklus amíg nem üres?(v) Ciklus amíg nem üres?(rf) Verembe(v,rf); rf:=balgyerek(rf) Ciklus vége Veremből(v,rf) Ha nem üres?(v) akkor Ki: Gyökér(rf); rf:=jobbgyerek(rf) Elágazás vége 2 Ciklus vége Eljárás vége. 1 6 4 3 5 7 24/37

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 25/37

Bináris fa új műveletek Eljárás KBJ(bf): Üres(v); Verembe(v,sehova); rf:=bf Ciklus amíg nem üres?(v)... Ciklus vége Eljárás vége. 2 1 3 4 5 6 7 26/37

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 27/37

Bináris fa új műveletek Az egyszerű kifejezésfa egy bináris fa, amelynek leveleiben az adatok, nem levélelemeiben pedig a műveletek szerepelnek. Minden műveletnek pontosan 2 paramétere van. Példa: b/2+a*x + / * b 2 a x 28/37

Bináris fa új műveletek Bal-jobb-közép bejárás alkalmazása kifejezésfa kiértékelése: BJK(bf): Ha nem üres?(balgyerek(bf)) akkor a:=bjk(balgyerek(bf)) b:=bjk(jobbgyerek(bf)) BJK:=művelet(gyökérelem(bf),a,b) különben BJK:=gyökérelem(bf) Függvény vége. 29/37

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. 30/37

Bináris fa elvi alkalmazás A kupac olyan véges elemsokaság, amely rendelkezik az alábbi tulajdonságokkal: 1. Minden elemnek legfeljebb két rákövetkezője (leszármazottja) lehet. Azaz bináris fának tekinthető. 2. Minden eleme kisebb (vagy egyenlő) a közvetlen leszármazottainál. 3. A kupac balról folytonos, azaz ha nem teljes a fa, akkor csak a legutolsó szintből hiányozhatnak elemek, de azok is csak a szint jobb széléről. Ezek következménye, hogy ábrázolható folytonosan is, tömbben, azaz a bináris fa csak egy modell. 5 1 2 6 3 4 7 8 31/37

Bináris fa elvi alkalmazás Halmazból a K. legnagyobb eltávolítása: Néhány feladatnál (pl. permutációk előállítása inverziós táblával) felmerül, hogy egy halmazból ki kell venni a K. legnagyobb elemet. Ha a halmazt rendezett sorozatként (tömb) képzeljük el, akkor a K. legnagyobb megtalálása egyetlen képlet kiszámítása, a kihagyása azonban a halmaz elemszámával arányos időben történik el kell tolni előre a mögötte levő elemeket. Ha a halmazt listával ábrázolnánk, akkor pedig a K. legnagyobb megtalálási ideje arányos a halmaz elemszámával. Az ötlet: ábrázoljuk a halmazt bináris fával! 32/37

Bináris fa halmazból a K. 1. A fának n levélpontja van. legnagyobb eltávolítása 2. A fának n-1 belső (nem levél) pontja van az 1..n-1 számokkal jelölve. 3. Minden belső pontnak két fia van. 4. Az a..b elemeket (leveleket) tartalmazó részfa gyökere k = (a+b)/2, bal részfája az a..k, jobb részfája pedig a k+1..b elemeket tartalmazza. 5. A fa minden p belső pontja a jobb részfájában lévő halmazelemek számát tartalmazza. Legyen H(i) igaz, ha az i elem még a halmazban van! A {2;4;5;7;9;10} halmaz ábrázolása, ha n=10. 33/37

Bináris fa halmazból a K. legnagyobb eltávolítása Keres(k,bal,jobb): Ha bal=jobb akkor H(bal):=hamis Keres:=bal különben s=(bal+jobb)/2 Ha Hány(s)>=k akkor Hány(s):=Hány(s)-1 Keres:=Keres(k,s+1,jobb) különben Keres:=Keres(k-Hány(s),bal,s) Elágazások vége Függvény vége. Ez a Keres művelet O(log 2 n) futási idejű. 34/37

Bináris fa halmazból a K. legnagyobb eltávolítása A bináris fa létrehozása n elemből: (Épít(1,n)) Épít(bal,jobb): Ha bal<jobb akkor s=(bal+jobb)/2 Hány(s):=jobb-s Épít(bal,s); Épít(s+1,jobb) Eljárás vége. A keresés és a létrehozás műveletekből is látszik, hogy itt a bináris fát ténylegesen nem hozzuk létre, (ahogyan a kupacnál sem) csupán modellként használjuk a feladat megoldásában. 35/37

Bináris fa halmazból a K. legnagyobb eltávolítása A bináris fa létrehozása adott elemekből: (Épít(1,n,db)) Épít(bal,jobb,db): Ha bal<jobb akkor s=(bal+jobb)/2 Épít(bal,s,b); Épít(s+1,jobb,j) Hány(s):=j; db:=b+j különben Ha H(bal) akkor db:=1 különben db:=0 Eljárás vége. 36/37

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