Évközi teljesítés A kurzus teljesítésének eltételei Két gykorlton megírt ZH, z elérhető 100 pontól 50 pontot kell elérni. Aki nem teljesíti eltételt vizsgiőszk első hetéen vizsgár engeésért írht olgoztot. Az I404 kóú kurzus teljesítéséhez meg kell olni egy otthoni eltot, htáriő április 30. Vizsg Kiskérések, melyekől 63 pontot lehet szerezni, minimumkövetelmény 35. Egy tétel 37 pont, minimumkövetelmény nins. Éremjegy 175-200 jeles 150-174 jó 125-149 közepes 100-124 elégséges 0-99 elégtelen Okttási segényg Előás nyg.in.u-szege.hu/ imreh/lgo2.htm Régei előások nyg: /pu/lg/ii T. H. Cormen, C. E. Leiserson, R.L. Rivest: Algoritmusok, Műszki Könyvkió, 2003. T. H. Cormen, C. E. Leiserson, R.L. Rivest, C. Stein: Új lgoritmusok, Solr Inormtik Könyvkió, 2003 Bináris keresőák Az F = (M,R,At) sztrkt tszerkezetet ináris keresőánk nevezzük, h F ináris, R = {l, jo, p}, l, jo, p : M M, At : M Elemtip és Elemtip-on értelmezett egy lineáris renezési reláió, ( x M)( p F l(x) )( q F jo(x) )(kuls(p) kuls(x) kuls(q)) KERES2(F,k) hile(f!=nil or k!=kuls(f)) i k<kuls(f) then F:=l(F) else F:=jo(F) return F 1
Futási iő: A mgsságávl rányos. Piros ekete ák A piros-ekete olyn ináris kereső, melynek minen pont egy extr it inormáiót trtlmz, ez pont színe, melynek értékei: PIROS vgy FEKETE. Tehát minen pontj trtlmzz szín, kuls, l, jo és p mezőket. H egy ponthoz trtozó iú vgy p nem létezik, kkor megelelő mező NIL értéket trtlmzz. Úgy tekintjük, hogy z ilyen NIL muttó értékek ináris kereső külső (levél) pontjir muttnk, míg kulsot trtlmzó pontji első pontok. Megvlósítás során ezeket külső pontokt egyetlen őrszem ponttl árázoljuk, melyet NIL[F] jelöl. A piros-ekete ák zok, melyekre teljesülnek következő tuljonságok: 1. Minen pont színe vgy PIROS vgy FEKETE. 2. A gyökérpont színe FEKETE. 3. Minen levél ( NIL pontokt tekintjük levélnek) színe FEKETE. 4. Minen piros pontnk minkét i ekete. 5. Bármely pontól ármely levélig vezető úton ugynnnyi ekete pont vn. Piros ekete ák mgsság Egy x pont ekete-mgsságánk nevezzük z x pontól inuló, levélig vezető úton tlálhtó, x-en kívüli ekete pontok számát, és m(x)-szel jelöljük ezt z értéket. Az 5. tuljonság mitt ekete-mgsság jól einiált, mivel minen ilyen út zonos számú ekete pontot trtlmz. Egy piros-ekete ekete-mgsságát gyökérpontjánk ekete-mgsságként einiáljuk. A piros ekete ákr teljesül következő állítás. Tétel Bármely n első pontot trtlmzó piros-ekete mgsság legelje 2log(n + 1). Biz Teljes inukióvl igzolhtó, hogy minen x gyökerű részáj leglá 2 m(x) 1 első pontot trtlmz. H x mgsság 0, kkor x levél (nil), tehát z x gyökerű részánk vlón 0 első pontj vn. Tegyük el, hogy x mgsság pozitív, és két i vn. Minkét iú ekete-mgsság vgy m(x), vgy m(x)-1 ttól üggően, hogy színe piros vgy ekete. Mivel x iink mgsság kise, mint x mgsság, így z inukiós eltevés lpján minkét rész leglá 2 m(x) 1 1 első pontot trtlmz. Tehát z x gyökerű rész első pontjink szám leglá (2 m(x) 1 1) + (2 m(x) 1 1) + 1 = 2 m(x) 1. Legyen x mgsság h. A 4. tuljonság szerint minen gyökértől levélig hló út, leglá elennyi ekete pontot trtlmz, mint ezen út pontjink szám, nem számítv gyökeret. Tehát gyökér eketemgsság leglá h/2, így n 2 h/2 1. Tehát zt kpjuk, hogy log(n + 1) h/2, zz h 2 log(n + 1). Következésképpen kereső műveletek iőigénye O(log n), hol n pontok szám. Azt kell megvizsgálni piros ekete tuljonságink krntrtásánk mekkor z iőigénye. Beszúrás piros ekete á A á kereső BESZUR műveletének megelelően eszúrjuk z új pontot, színét pirosr állítjuk, gyermekeit Nil-re és eketére. Amennyien z új pont pj is piros, kkor eszúrást követően sérül 4-es tuljonság és ezt helyre kell állítnunk. PF-Beszur(F,z) y:=nil[f] x:=f hile(x!=nil[f]) y:=x 2
i kuls(z)<kuls(x) then x:=l(x) else x:=jo(x) p(z):=y i y=nil[f] then F:=z //Üres volt else i kuls(z)<kuls(y) then l(y):=z else jo(y):=z l(z):=nil[f] jo(z)=nil(f) szin(z)=piros PFBeszurJvit(F,z) Forgtások A helyreállítás során szükség lehet egy ott pontján lokális orgtások végrehjtásár. Ezt következő művelet hjtj végre, eltesszük, hogy z x pontnk vn jo i, zz jo(x) Nil(F) BlrForgt(F,x) y:=jo(x) jo(x):=l(y) i l(y)!=nil(t) then p(l(y)):=x p(y):=p(x) I p(x)=nil(f) Then F:=y else i x=l(p(x)) then l(p(x)):=y else jo(p(x):=y l(y):=x p(x):=y A JorForgt teljesen hsonló, x helyére li kerül. BeszurJvit eljárás PF-BeszurJvit(F,z) hile szín(p(z))=piros i p(z)=l(p(p(z))) then y=jo(p(p(z))) i szin(y)=piros then szin(p(z)):=fekete szin(y):=fekete szin(p(p(z))):=piros z:=p(p(z)) else i z=jo(p(z)) then z:=p(z) BlrForgt(F,z) szin(p(z):=fekete szín(p(p(z))):=piros /y ngyásij z-nek /1.eset /2. eset 3
Y X X Y Blr, jor orgtás 1. ár. JorForgt(F,p(p(z))) else ugynz, mint then ág, sk l és jo elserélve szin(f):=fekete Törlés piros ekete áól A áól kereső Töröl műveletének megelelően töröljük z ott pontot. H pont piros kkor nins más teenő, egyéként sérül z 5. tuljonság és ezt helyre kell állítni. Ezt úgy oljuk meg, hogy ténylegesen törölt pont i, kp egy extr ekete értéket, és uplán ekete lesz, mj orgtásokkl és átzsínezéssel ezt megszüntetjük. PFFolTorol(F,z) I l(z)=nil(f) or jo(z)=nil(f) then y:=z else y:=fnkovetkezo(z) I l(y)!=nil(f) then x:=l(y) else x:=jo(y) p(x):=p(y) I p(y)=nil(f) then F:=x else i y=l(p(y)) then l(p(y)):=x else jo(p(y)):=x I y!=z 4
B P D P e C P B F D F e B1eset, ngyási piros 2. ár. then kuls(z):=kuls(y) I szín(y)=fekete then PFTorolJvit(F,x) PFTorolJvit(F,x) hile x!=f n szín(x)=fekete i x=l(p(x)) then :=jo(p(x)) i szín()=piros /1. eset then szín():=fekete szín(p(x)):=piros BlrForgt(F,p(x)) :=jo(p(x)) i szín(l())=fekete n szín(jo())=fekete then szín()=piros x:=p(x) else i szín(jo())=fekete /3. eset then szín(l())=fekete szín():=piros JorForgt(F,) :=jo(p(x)) szín():=szín(p(x)) /4. eset szín(p(x)):=fekete /2. eset 5
B P B P B2. eset 3. ár. szín(jo(x)):=fekete BlrForgt(F,p(x)) x:=f else ugynz, mint then ág, sk l és jo elserélve szín(x):=fekete Helyreállítások iőigénye Beszúrásnál hile iklusmg sk z 1. eseten ismétel, így z iőigény O(logn). A törlésnél is sk 2. eseten kerül elje upl ekete értéket trtlmzó sús, töi eset legelje három orgtás után helyreállítj tuljonságot, így műveletigény O(logn). Bemuttó mintprogrmok http://people.ksp.sk/~kuko/k/inex.html http://guss.ees.u.eu/reblk/relk.html http://.ee.u.eu/~rno/c321/html/reblk/r.orig.html Alpvető részek Piros ekete einíiój Beszúrás PF á 6
B P B F C P B3. eset 4. ár. PFBeszurJvit Törlés PF áól PFTorolJvit 7
x B F D P e D F B P x e T1.eset 5. ár. 8
x B? D F e B? x D P e T2. eset 6. ár. 9
x B? D F C P e B? x D P e T3. eset 7. ár. 10
x B? D F C? E P e D? B F C? e T4. eset 8. ár. 11