1 / 24

BINÁRIS FA

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. Megvalósítás: dinamikusan láncolt ábrázolásban

erol
Download Presentation

BINÁRIS FA

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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, 21 12 16 8 7 20 10 14 5 15 23 6 21

  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<ep l:=  hely:=p Keres(p^.bal, Keres(p^.jobb, l:=  ep , l , hely) ep , l , hely)

  9. Törlés 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 p^.ad = ep p^.ad > ep Torles(p^.jobb, Gyokertorl(p) Torles(p^.bal,ep) ep) SKIP

  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. ALPR 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 0 0 19 körte 3 6 egres 0 0 szilva 0 0 meggy 12 0 14 15 barack 10 2 16 eper 17 1 11 málna 0 0 szamoca 7 0 9 szeder 0 0 4 20 ribizli 18 13 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’ CM p.veg:=p.veg+1 ptr := p.veg szulo := [ptr/2] p.fa(ptr):= p.fa(szulo) szulo > 0 & e > p.fa(szulo) ptr := szulo szulo := [ptr/2] CM p.fa(ptr) := e

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

  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) S1 l:= 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) SKIP h.fa(szulo) := h.fa(bal) szulo := bal h.fa(szulo) := elem

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

More Related