Előadást letölteni
Az előadás letöltése folymat van. Kérjük, várjon
KiadtaEmília Szalainé Megváltozta több, mint 10 éve
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
Torles(var p: FaT, ep: Tadat)
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 körte egres szilva meggy barack eper málna szamoca 9 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 ,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
Felépit_halom(var h:BinfaT)
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 := bal := jobb := l:= jobb <= h.veg & not l elem >= h.fa(jobb) & elem >= h.fa(bal) S1 l:= S2
22
h.fa(jobb) <= h.fa(bal)
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
l & bal = h.veg & elem < h.fa(bal)
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
Hasonló előadás
© 2024 SlidePlayer.hu Inc.
All rights reserved.