11. elo ada s Oszd meg e s uralkodj! elvu algoritmusok Sergya n Szabolcs sergyan.szabolcs@nik.uni-obuda.hu O budai Egyetem Neumann Ja nos Informatikai Kar Alkalmazott Informatikai Inte zet 1 / 24
Tartalom 1 Maximumkiva laszta s 2 O sszefe su lo rendeze s 3 Gyorsrendeze s 4 A k-adik legkisebb elem kiva laszta sa 2 / 24
Oszd meg e s uralkodj! elv Mit hı vunk Oszd meg e s uralkodj! elvnek? Oszd meg e s uralkodj! elv: A megoldando proble ma t felosztjuk kisebb re szfeladatokra Az egyes re szfeladatokat rekurzı v mo don megoldjuk A re szfeladatok megolda sait egyesı tju k Ezzel a megko zelı te ssel olyan proble ma k is megoldhato k, amiket ma s mo dszerrel is meg lehet oldani 3 / 24
Tartalom 1 Maximumkiva laszta s 2 O sszefe su lo rendeze s 3 Gyorsrendeze s 4 A k-adik legkisebb elem kiva laszta sa 4 / 24
Maximumkiva laszta s Pszeudoko d Bemenet: x T to mb, bal ege sz, jobb ege sz; ahol T o sszehasonlı thato Kimenet: Az x to mb bal e s jobb indexei ko zo tti re szto mbje maxima lis eleme nek indexe. fu ggve ny Felezo Maximumkiva laszta s(x, bal, jobb) ha bal = jobb akkor vissza bal ku lo nben center bal+jobb 2 balmax Felezo Maximumkiva laszta s(x, bal, center ) jobbmax Felezo Maximumkiva laszta s(x, center + 1, jobb) ha x[balmax] x[jobbmax] akkor vissza balmax ku lo nben vissza jobbmax ela gaza s ve ge ela gaza s ve ge fu ggve ny ve ge Fu ggve ny hı va sa: Felezo Maximumkiva laszta s(x, 1, n) 5 / 24
Tartalom 1 Maximumkiva laszta s 2 O sszefe su lo rendeze s 3 Gyorsrendeze s 4 A k-adik legkisebb elem kiva laszta sa 7 / 24
O sszefe su lo rendeze s Alapo tlet Az n elemu to mbo t felosztjuk ke t (n/2 elemu ) re szto mbre. A re szto mbo ket rekurzı v mo don rendezzu k, azaz tova bbosztjuk fele olyan hosszu re szto mbo kre, az 1 elemu re szto mb ma r o nmaga ban rendezett. A rendezett re szto mbo ket o sszefuttatjuk megtartva a rendezettse get. 8 / 24
O sszefe su lo rendeze s Pszeudoko d Bemenet: x T to mb, bal ege sz, jobb ege sz; ahol T o sszehasonlı thato Kimenet: x T rendezett to mb elja ra s O sszefe su lo Rendeze s(cı mszerint x, bal, jobb) ha bal < jobbh akkor i center bal+jobb 2 O sszefe su lo Rendeze s(x, bal, center ) O sszefe su lo Rendeze s(x, center + 1, jobb) O sszefe su l(x, bal, center, jobb) ela gaza s ve ge elja ra s ve ge Elja ra s hı va sa: O sszefe su lo Rendeze s(x, 1, n) 9 / 24
O sszefe su lo rendeze s O sszefe su le s Bemenet: x T to mb, bal ege sz, center ege sz, jobb ege sz; ahol T o sszehasonlı thato Kimenet: x T to mb elja ra s O sszefe su l(cı mszerint x, bal, center, jobb) n1 center bal + 1 n2 jobb center y1 Le trehoz(t)[n1 + 1] ciklus i 1-to l n1 -ig y1 [i] x[bal + i 1] ciklus ve ge y2 Le trehoz(t)[n2 + 1] ciklus j 1-to l n2 -ig y2 [j] x[center + j] ciklus ve ge y1 [n1 + 1] + y2 [n2 + 1] + i 1 j 1 ciklus k bal-to l jobb-ig ha y1 [i] y2 [j] akkor x[k] y1 [i] i i +1 ku lo nben x[k] y2 [j] j j +1 ela gaza s ve ge ciklus ve ge elja ra s ve ge 10 / 24
O sszefe su lo rendeze s Megjegyze sek Az algoritmus futa si ideje O(N log N)-es. A megvalo sı ta shoz szu kse gu nk van sege dto mbo kre, ı gy nagyme retu to mbo k esete n helyfoglala s szempontja bo l nem hate kony. 12 / 24
Tartalom 1 Maximumkiva laszta s 2 O sszefe su lo rendeze s 3 Gyorsrendeze s 4 A k-adik legkisebb elem kiva laszta sa 13 / 24
Gyorsrendeze s Alapo tlet Va logassuk sze t u gy a rendezendo x to mb elemeit, hogy az elso elemne l (ta mpont elem) kisebb e rte ku elemek az elso elem ele, a nagyobbak pedig mo ge keru ljenek. A ta mpont elem biztos, hogy a ve gleges helye re keru l a sze tva logata s ve ge re. Ve gezzu k el ezt a sze tva logata st a ta mpont elemne l kisebbekre, illetve nagyobbakra ku lo n-ku lo n. Ez az elja ra s is az Oszd meg e s uralkodj! elvet haszna lja. 14 / 24
Gyorsrendeze s Sze tva logata s Bemenet: x T to mb, bal ege sz, jobb ege sz; ahol T o sszehasonlı thato Kimenet: x T to mb, idx ege sz fu ggve ny Sze tva logat(cı mszerint x, bal, jobb) sege d x[bal] ciklus amı g bal < jobb ciklus amı g (bal < jobb) (x[jobb] > sege d) jobb jobb 1 ciklus ve ge ha bal < jobb akkor x[bal] x[jobb] bal bal + 1 ciklus amı g (bal < jobb) (x[bal] sege d) bal bal + 1 ciklus ve ge ha bal < jobb akkor x[jobb] x[bal] jobb jobb 1 ela gaza s ve ge ela gaza s ve ge ciklus ve ge idx bal x[idx] sege d vissza idx fu ggve ny ve ge 15 / 24
Gyorsrendeze s Pszeudoko d Bemenet: x T to mb, bal ege sz, jobb ege sz; ahol T o sszehasonlı thato Kimenet: x T rendezett to mb elja ra s GyorsRendeze s(cı mszerint x, bal, jobb) idx Sze tva logat(x, bal, jobb) ha idx > bal + 1 akkor GyorsRendeze s(x, bal, idx 1) ela gaza s ve ge ha idx < jobb 1 akkor GyorsRendeze s(x, idx + 1, jobb) ela gaza s ve ge elja ra s ve ge Elja ra s hı va sa: GyorsRendeze s(x, 1, n) 16 / 24
Gyorsrendeze s Megjegyze s A Gyorsrendeze sne l alkalmazott Sze tva logat meto dus mindig a vizsga lt re szto mb elso eleme hez viszonyı tva va logatja ke t re szre a re szto mbo t. Emiatt pl. elve rendezett to mb esete n az algoritmus futa si ideje O n2 -es, mı g a tlagos esetben csak O (n log n)-es. Javı thatunk az algoritmuson, ha ve letlenszeru en jelo lju k ki, hogy a vizsga lt re szto mb melyik eleme legyen, amelyhez viszonyı tva sze tva logatjuk a re szto mb elemeit. 18 / 24
Tartalom 1 Maximumkiva laszta s 2 O sszefe su lo rendeze s 3 Gyorsrendeze s 4 A k-adik legkisebb elem kiva laszta sa 19 / 24
A k-adik legkisebb elem kiva laszta sa Feladat: egy to mb k-adik legkisebb eleme t szeretne nk meghata rozni Megolda sai javaslat: rendezzu k a to mbo t, majd vegyu k a (rendezett) elemek ko zu l a k-adikat Eddigi ismereteink alapja n ez a tlagosan O(N log N) ido t ige nyel Nem lehetne ezen valamelyest gyorsı tani? 20 / 24
A k-adik legkisebb elem kiva laszta sa Pszeudoko d Bemenet: x T to mb, bal ege sz, jobb ege sz, k ege sz; ahol T o sszehasonlı thato Kimenet: k-adik legkisebb to mbelem e rte ke fu ggve ny k-adiklegkisebbelem(x, bal, jobb, k) ha bal = jobb akkor vissza x[bal] ku lo nben idx Sze tva logat(x, bal, jobb) ha k = idx bal + 1 akkor vissza x[idx] ku lo nben ha k < idx bal + 1 akkor vissza k-adiklegkisebbelem(x, bal, idx 1, k) ku lo nben vissza k-adiklegkisebbelem(x, idx + 1, jobb, k (idx bal + 1)) ela gaza s ve ge ela gaza s ve ge fu ggve ny ve ge Fu ggve ny hı va sa: k-adiklegkisebbelem(x, 1, n, k) 21 / 24
A k-adik legkisebb elem kiva laszta sa Megjegyze sek Az ismertetett algoritmus a tlagos esetben O (n)-es, de legrosszabb esetben O (n log n)-es. Nem lehetne valamilyen mo don u gy javı tani, hogy legrosszabb esetben is csak O (n)-es legyen? Proble ma ott van, mint a Gyorsrendeze s algoritmusna l, hogy a sze tva logata sna l haszna lt ta mpont elemet mike nt va lasztjuk ki. 23 / 24
A ta mpont elem kiva laszta sa O tlet 1 2 A bemeneti to mb n darab eleme t rendezzu k bn/5c darab 5 elembo l a llo csoportba, a marade k n mod 5 darab elembo l alkossunk egy u jabb csoportot (ha n mod 5 6= 0). Az dn/5e darab csoportnak keressu k meg a media nja ta (3. legkisebb) eleme t. Ehhez pl. rendezzu k az 5 darab elemet javı tott beilleszte ses rendeze ssel, majd va lasszuk ki minden csoportbo l a media nt. 3 A k-adiklegkisebbelem fu ggve ny rekurzı v haszna lata val hata rozzuk meg az elo zo le pe sben kapott dn/5e darab media n m-szel jelo lt media nja t. 4 A sze tva logata st valo sı tsuk meg u gy, hogy m-et haszna ljuk ta mpont elemke nt. a Media n: sorba rendezve a to mb elemeit az dn/2e-edik elem, ahol n a to mb elemsza ma. 24 / 24