Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

BINÁRIS FA Definició: A fa olyanösszefüggő gráf, amelyben nincs kör Definició: Bináris fa: olyan fa, amelynek egy szögpontjából legfeljebb két él indul.

Hasonló előadás


Az előadások a következő témára: "BINÁRIS FA Definició: A fa olyanösszefüggő gráf, amelyben nincs kör Definició: Bináris fa: olyan fa, amelynek egy szögpontjából legfeljebb két él indul."— Előadás másolata:

1 BINÁRIS FA Definició: A fa olyanösszefüggő gráf, amelyben nincs kör Definició: Bináris fa: olyan fa, amelynek egy szögpontjából legfeljebb két él indul ki. Rekurzív típus Hierarchikus adatszerkezet

2 Megvalósítás: dinamikusan láncolt ábrázolásban FaT = ^CsucsT CsucsT = (ad: Tadat, bal, jobb: FaT) Használata: rendezéshez - keresőfák egyéb, pl. aritmetikai kif. Kiértékeléséhez (levél: operandus szögpont: operátor egy ág: egy zárójelezett rész) Bejárási stratégiák: BKJ, BJK, KBJ Fa felépítése a bejárási stratégiától függ

3 Pl. 12, 8, 10, 7, 5, 6, 16, 14, 20, 15, 23,

4 Műveletek: init beilleszt bejárás keresés törlés

5 Init(var p: FaT) p:= Nil Fa felépítése: Ciklusban hívjuk a fába való beillesztést. Beillesztésnél figyelembe vesszük a bejárási stratégiát - BKJ.

6 Beilleszt(var p: FaT, ep: Tadat) p = Nil lefoglal(p)p^.ad >=ep p^.bal: = Nil Beilleszt( p^.jobb: = Nil Beilleszt(p^.bal,ep) p^.jobb,ep) p^.ad: = ep

7 Bejárás(var p: FaT) P <> Nil Bejárás(p^.bal) Ki(p^.ad) Bejárás(p^.jobb) SKIP

8 Keres(var p: FaT, ep: Tadat, var l: L, var hely: FaT) P = Nil p^.ad=ep p^.ad>ep p^.ad

9 Ef: p = p’ & ep = ep’ uf: (ep’  p’-ben  p = p’ - ep’) & (ep’  p’-ben  p = p’) Torles(var p: FaT, ep: Tadat) P <> Nil p^.ad ep Torles(p^.jobb, Gyokertorl(p) Torles(p^.bal,ep) ep) S K IP Törlés

10 4 eset: - törlendő elem levél - nincs jobb ág, bal részfát kapja - nincs bal ág, jobb oldali részfát kapja - mindkét részfa van, ekkor a gyökér (törlendő elem) helyére a jobboldali részfa legbaloldalibb elemét tesszük. Gyökér a törlendő elem

11 Gyokertorl(var p: FaT) p^.jobb = Nil s := p p^.bal = Nil p:=p^.bal s := p e:=p s := p^.jobb felszab(s) p:=p^.jobb s^.bal <> Nil felszab(s) e := s s := s^.bal ALPR

12 s^.bal := p^.bal e <> p e^.bal := s^.jobb SKIP s^.jobb := p^.jobb felszab(p) p := s

13 Bináris fa statikus v. szekvenciális megvalósítása FAT = (gyoker: N, ures: N, fa: Vektor) Vektor = vekt([1..max]: ElemT) ElemT = (bal,jobb: N, ad: Tadat)

14 Pl.: alma körte 3 6 egres 0 0 szilva 0 0 meggy barack eper málna 0 0szamoca szeder ribizli Gyökér 5 Üres 8

15 Mikor hatékony a statikus megvalósítás? Teljes a fa: levelek csak az utolsó szinten vannak Kiegyensúlyozott a fa: levélelemek között max. egy szintnyi az eltolódás Elemek tárolása vektorban szintfolytonosan: Nincs üres hely Nem kell a bal, jobb fa helyét tárolni Ha szülő indexe i, akkor a bal gyereké 2i, a jobb gyereké 2i+1

16 BINFAT = ( fa: VektorT, veg: N) VektorT = vekt([1..n]: Tadat) n eleme lehet maximálisan a fának. Tadat-on rendezés van értelmezve Halom vagy max. halom a kiegyensúlyozott bináris fa, ha minden csomópontjára igaz, hogy értéke nagyobb vagy egyenlő, mint a gyerekei értéke. fa(i) >= fa(2*i) fa(i) >= fa(2*i+1)

17 Pl.: a vektor tartalma 97,88,95,66,55,95,48,66,35,48,55,62,77,25,38,18,40, 30,26,24 Feladatok: rajzoljuk föl a halmot szúrjuk be a 70-es elemet (addig visszük fölfelé az utolsó helyről, amíg a gyerekeinél nagyobb vagy egyenlő nem lesz)

18 Beszur(var p: BinfaT, e: Tadat) ef.: p = p’ & e = e’ uf.: p = p’ + e’ p.veg:=p.veg+1 ptr := p.veg szulo := [ptr/2] szulo > 0 & e > p.fa(szulo) p.fa(ptr) := e CM p.fa(ptr):= p.fa(szulo) ptr := szulo szulo := [ptr/2]

19 Feladat: Építsünk föl egy halmot a következő elemekből: 44, 30, 50, 22, 60, 55, 77, 55 Felépit_halom(var h:BinfaT) s:=h.veg h.veg := 0 i := 1, s Beszur(h, h.fa(i)) ef : h=h’ uf : h=halom(h’)

20 Célunk: Vektor rendezése A halom felépítése A halom rendezése a gyökérelemek ismételt törlésével Gyökértörlés(var h: BinfaT, var e: TAdat) ef: h = h’ & Halom(h) uf.: h = h’ - (h’ gyökere) & halom(h) & e = (h’ gyökere)

21 Gyökértörlés(var h: BinfaT, var e: TAdat) elem := h.fa(h.veg) e := h.fa(1) dec (h.veg) szulo := 1 bal := 2 jobb := 3 l:=  jobb <= h.veg & not l elem >= h.fa(jobb) & elem >= h.fa(bal) l:=  S1 S2

22 S1 h.fa(jobb) <= h.fa(bal) h.fa(szulo):=h.fa(bal) szulo := bal h.fa(szulo):=h.fa(jobb) szulo := jobb bal := szulo*2 jobb := bal+1

23 S2  l & bal = h.veg & elem < h.fa(bal) h.fa(szulo) := h.fa(bal) szulo := bal SKIP h.fa(szulo) := elem

24 HeapSort(var a: BinfaT) Ef.: a = a’ uf.: a.fa = rend(a.fa’) a.veg > 1 Gyokertorles(a, a.fa(a.veg)) s :=a.veg Felépit_halom(a) a.veg = s


Letölteni ppt "BINÁRIS FA Definició: A fa olyanösszefüggő gráf, amelyben nincs kör Definició: Bináris fa: olyan fa, amelynek egy szögpontjából legfeljebb két él indul."

Hasonló előadás


Google Hirdetések