Évközi teljesítés A kurzus teljesítéséek feltételei Két gyakorlato egírt ZH, az elérhető 00 potból 50 potot kell eléri. Aki e teljesíti a feltételt a vizsgaidőszak első hetébe a vizsgára egedésért írhat dolgozatot. Az I404 kódú kurzus teljesítéséhez eg kell oldai egy otthoi feladatot, határidő április 30. Vizsga Kiskérdések, aelyekből 63 potot lehet szerezi, a iiuköveteléy 35. Egy tétel 37 pot, iiuköveteléy ics. Érdejegy 75-200 jeles 50-74 jó 25-49 közepes 00-24 elégséges 0-99 elégtele Oktatási segédayag Előadás ayag www.if.u-szeged.hu/ cireh/algo2.ht Régebbi előadások ayaga: /pub/alg/ii T. H. Core, C. E. Leiserso, R.L. Rivest: Algoritusok, Műszaki Köyvkiadó, 2003. T. H. Core, C. E. Leiserso, R.L. Rivest, C. Stei: Új algoritusok, Scolar Iforatika Köyvkiadó, 2003 A félév sorá előkerülő téakörök hasítótáblák piros fekete fák AVL fák B-fák geoetriai algoritusok aortizációs elezés bioiális kupac
Fiboacci kupac itaillesztési algoritusok száeléleti algoritusok, RSA visszalépéses algoritus korlátozás és szétválasztás elve közelítő algoritusok Halaz Értékhalaz: E, Halaz= H E Műveletek: H : Halaz, x : E, I : Iterator {Igaz} Letesit(H) {H = /0} {H = H} Megszutet(H) {Igaz} {H = H} Uresit(H) {H = /0} {H = {a,...,a }} Elesza(H) {Elesza = } {H = H} Elee(H,x) {Elee = (x Pre(H))} {H = H} Bovit(H,x) {H = Pre(H) {x}} {H = H} Torol(H,x) {H = Pre(H) \ {x}} {H = H} IterKezd(H, I) {} {I = I} IterAd(I,x) {} {I = I} IterVege(I) {} Megvalósítás: bitvektor, töb, lác, hasítótábla. Hasítótáblák Adott egy agyéretű U uiverzu aelyhez a kulcsuk által azoosított eleeket tartozak. Ezek közül szereték eleeket tároli egy éretű T többe úgy, hogy az eleek a kulcs alapjá hatékoya egtalálhatóak legyeek. A továbbiakba feltesszük, hogy az eleek aguk a kulcsok, de a valódi alkalazásokba a kulcsok csak azoosításra szolgálak, és az eleek további adatokat tartalazak. Választuk egy h : U {0,..., } hasítófüggvéyt, aely ide a halazelere egadja azt a töbidexet, ahol az eleet tároli szereték T [h(a)] := a. Abba az esetbe va probléa, ha két külöböző eleet ugyaott szereték tároli azaz, ha a b és h(a) = h(b). Az ilye esetekbe ütközésről beszélük. Az ütközések feloldására két elterjedt ódszer a lácolás és a yílt cízés. Ütközésfeloldás lácolással Ebbe az esetbe az ütközést úgy oldjuk fel, hogy ugyaarra a helyre rakjuk az eleeket. Tehát a T töb eleei lácok, ide lácele egy adatból és egy csat utatóból áll, aely a következő lácelere utat. 2
Keres(x) i:=h(x) p:=t[i] while (p!=nil ad x!=p.adat) p:=p.csat if (p!=nil) the retur p.adat else retur Nil Bovit(x) i:=h(x) Letesit(E:Lacele) E.adat:=x E.csat:=T[i] T[i]:=E Esza:=Esza+ Időigéy O(). Torol(x) i:=h(x) p:=t[i] pp:=p while (p!=nil ad x!=p.adat) pp:=p p:=p.csat if (p!=nil) The if (pp=p) The T[i]=p.csat else pp.csat=p.csat Esza:=Esza- retur true else retur false A Keres (Töröl) űvelet időigéye Legjobb eset O(). Legrosszabb eset O(), ahol a táblába szereplő eleek száa. Átlagos eset Az elezés sorá feltesszük, hogy h gyorsa, kostas időbe száolható. A tábla telítettsége α = / A hasítófüggvéyre feltesszük az egyeletességi feltételt. Ez azt jeleti, hogy ha k U eseté p k aak a valószíűsége, hogy k-t választjuk, akkor ide j = 0,..., eseté: p k =. k:h(k)= j A keresés, így a törlés időigéye is lieárisa függ az adott lácba egvizsgált eleek száától, így eze eleek szááak várható értékét kell eleezi. 3
Sikertele keresés Tétel Az egyeletességi feltétel ellett a lácolásos ütközésfeloldás eseté a sikertele keresés átlagos ideje Θ( + α). Biz: - Az egyeletességi feltétel iatt bárely k elere, egyfora valószíűséggel adódik bárely j = h(k) töbidex. - Így egy k ele sikertele kereséséek átlagos ideje egegyezik aak átlagos idejével, hogy a T[h(k)] lácot végigkeressük. - Másrészt eek a lácak az átlagos hossza α, így h(k) kiszáításával együtt az átlagos futási idő Θ( + α). Sikeres keresés Tétel Az egyeletességi feltétel ellett a lácolásos ütközésfeloldás eseté a sikeres keresés átlagos ideje Θ( + α). Biz: - Az x ele sikeres keresése eseté egvizsgált eleek várható száa eggyel agyobb, it azokak az eleekek a várható száa, aelyek egelőzik x-et az x-et tartalazó lácba. - Az x-et egelőző eleeket x beszúrása utá szúrtuk be, ivel az új eleet idig a lác elejére szúrjuk be. - Legye k i a táblázatba i-edikkét beszúrt ele, az egyeletességi feltétel iatt Pr(h(k i ) = h(x)) = /. - Tehát ha az x eleet i-edikek szúrtuk be, akkor a egvizsgáladó eleek várható száa + j=i+ /. Következésképpe a egvizsgáladó eleek várható száa Osztásos ódszer i= ( + /) = + = Θ( + α). j=i+ 2 Hasítófüggvéyek Tegyük fel, hogy a k kulcs egész száérték. Az osztás ódszere: h(k) = k od Szorzásos ódszer h(k) = (k A od ) ahol k A od k A törtrésze, A pedig egy 0 < A < többyire irracioális szá. Ütközésfeloldás yílt cízéssel Nyílt cízés eseté, egy helyre csak egy eleet teszük, és az ütközést úgy oldjuk fel, hogy e csak egy hasítófüggvéyük va, hae ide elehez tartozik egy próbasorozat. Az eleet a próbasorozatból az első üres helyre tesszük. Tehát ebbe az esetbe h az U {0,..., } halazból képez a {0,..., } halazba, úgy, hogy (h(k,0),...,h(k, )) sorozat ide k eseté a {0,..., } eleek egy perutációja. A k ele helye a táblázatba az a j = h(k,i), aelyre i a iiális olya érték, ahol T [h(k,i)] hely e foglalt. Példa =7, h(k,i) = (k + i) od 7 beszúr 7,2,6,4,23,30 T = [7,,2,6,4,23,30] Ha törlük egy eleet e állíthatjuk üresre a helyét, a feti példába törölve 4-et, utáa keresve 23-at, egállák a 6 utái üres helye. Tehát törlés utá a felszabaduló helyet a törölt cíkével látjuk el. Műveletek Keres(x) i:=0 repeat j:=h(x,i) If T[j]=x 4
retur j i:=i+ util(i= or T[j]=Nil) retur - Bovit(x) i:=0 repeat j:=h(x,i) If (T[j]=Nil or T[j]=Torolt) The T[j]:=x Esza:=Esza+ retur i:=i+ util(i=) prit "egtelt a tabla" retur - Torol(x) j:=keres(x) If j>=0 The T[j]:=Torolt Esza:=Esza- retur True Else retur False Legjobb eset O() Legrosszabb eset: Θ() Futási idő elezése Átlagos eset tétel Nyílt cízés eseté a sikertele keresés sorá a próbák szááak várható értéke legfeljebb α. Biz: Legye p i aak a valószíűsége, hogy a keresés sorá potosa i e üres töbeleet vizsgáluk eg. Ekkor a próbák szááak várható értéke: + i=0 i p i. Legye q i aak valószíűsége, hogy legalább i sikertele próbát kell végezi. Ekkor i=0 i p i = i= q i. Másrészt q i = i+ i+ (/)i = α i. Tehát a próbák száára a következő felső korlátot kaptuk + i= α i + i= α i = α. következéy Egy α telítettségű hasítótábla eseté a beszúrás várható költsége + /( α). Biz: Elsőkét egy sikertele keresést hajtuk végre, ajd a egtalált üres helyre berakjuk az eleet. Sikeres keresés tétel Nyílt cízés eseté a sikeres keresés sorá a próbák szááak várható értéke legfeljebb α l α. Biz Sikeres keresés ugyaazo próbasorozatot hajtja végre, it aikor az eleet beraktuk a táblázatba. Ha a k kulcsú ele i+-edikkét került a táblázatba, akkor a próbák száa az előző következéy alapjá i/ = i Ȧ hasítótáblába levő elere kiszáolva a keresés várható próbaszáát a következő korlátot kapjuk: 5
i=0 i = i=0 ahol H i = i j= / j a j-edik haroikus szá. Továbbá H H = i = α (H H ), Z /k (/x)dx = l k= + = l α. Megjegyzés: Félig telített tábláál a feti érték,387 és 90 százalékos telítettségél is csak 2,559. Példák próbasorozatokra Lieáris pótvizsgálat h(k,i) = (h 0 (k) + i) od, ahol h 0 U {0,..., } egy hasítófüggvéy. Négyzetes pótvizsgálat ahol h 0 U {0,..., } egy hasítófüggvéy. Dupla tördelés h(k,i) = (h 0 (k) + c i + c 2 i 2 ) od, h(k,i) = (h (k) + i h 2 (k)) od, ahol h,h 2 U {0,..., } hasítófüggvéyek. A h 2 (k) értékekek relatív príek kell lei a táblázat éretéhez. 6