szoftvertervezés és fejlesztés ii. előadá[email protected] szoftvertervezés és...

26
Szoftvertervezés és -fejlesztés II. előadás http://nik.uni-obuda.hu/sztf2 Szénási Sándor [email protected] Óbudai Egyetem,Neumann János Informatikai Kar Optimalizációs stratégiák 1. Nyers erő, Oszd meg és uralkodj, Feljegyzéses, Dinamikus, Mohó

Upload: others

Post on 26-Oct-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Szoftvertervezés és fejlesztés II. előadásszenasi.sandor@nik.uni-obuda.hu Szoftvertervezés és -fejlesztés II. •Egy részprobléma esetén van –t darab tárgyunk (az eredeti

Szoftvertervezés és -fejlesztés II. előadáshttp://nik.uni-obuda.hu/sztf2

Szénási Sá[email protected]

Óbudai Egyetem,Neumann János Informatikai Kar

Optimalizációs stratégiák 1.

Nyers erő, Oszd meg és uralkodj, Feljegyzéses, Dinamikus, Mohó

Page 2: Szoftvertervezés és fejlesztés II. előadásszenasi.sandor@nik.uni-obuda.hu Szoftvertervezés és -fejlesztés II. •Egy részprobléma esetén van –t darab tárgyunk (az eredeti

Szoftvertervezés és -fejlesztés [email protected]

• 0-1 hátizsák probléma– Bemenete

• Wmax: hátizsák mérete• N: rendelkezésre álló tárgyak száma• wi: i. tárgy súlya• pi: i. tárgy értéke

– Kimenete• Pmax: egy optimális pakolás értéke

• Pakolás: tárgyanként meghatározzuk, hogy bekerül-e a zsákba vagy sem (pl. N elemű logikai tömb)

• Pakolás összsúlya/összértéke: a pakolás által a hátizsákba választott tárgyak súlyának/értékének összege

• Érvényes pakolás: olyan pakolás, amelynek összsúlya nem nagyobb mint a hátizsák mérete

• Optimális pakolás: olyan érvényes pakolás, amelyiknél nincs nagyobb összértékű érvényes pakolás

2

A megoldandó feladat

Page 3: Szoftvertervezés és fejlesztés II. előadásszenasi.sandor@nik.uni-obuda.hu Szoftvertervezés és -fejlesztés II. •Egy részprobléma esetén van –t darab tárgyunk (az eredeti

Nyers erő módszere

Oszd meg és uralkodj

Feljegyzéses módszer

Dinamikus programozás

Mohó algoritmusok

Optimalizációs stratégiák 1.

Page 4: Szoftvertervezés és fejlesztés II. előadásszenasi.sandor@nik.uni-obuda.hu Szoftvertervezés és -fejlesztés II. •Egy részprobléma esetén van –t darab tárgyunk (az eredeti

Szoftvertervezés és -fejlesztés [email protected]

• Alapelv: egyszerűen végigpróbálgatjuk az összes lehetséges megoldást

• A 0-1 hátizsák probléma megoldása

• Amennyiben érvényes pakolást találunk, akkor ellenőrizzük, hogy jobb-e, mint az eddig talált legjobb

• Ha igen, akkor ezt követően ezt tekintjük a legjobbnak

4

Nyers erő módszere (brute force)

függvény HátizsákBF

OPT [hamis,hamis, … ,hamis]

ciklus i 1-től 2N-1-ig

ciklus j 0-től N-1-ig

K[j] i / 2j mod 2 = 1

ciklus vége

ha (ÖsszSúly(K)≤Wmax)˄(ÖsszÉrték(K)>ÖsszÉrték(OPT)) akkor

OPT K

elágazás vége

ciklus vége

vissza ÖsszÉrték(OPT)

függvény vége

Page 5: Szoftvertervezés és fejlesztés II. előadásszenasi.sandor@nik.uni-obuda.hu Szoftvertervezés és -fejlesztés II. •Egy részprobléma esetén van –t darab tárgyunk (az eredeti

Szoftvertervezés és -fejlesztés [email protected]

• Előnyei– Egyszerűen megérthető

– Egyszerűen implementálható

– Gyakran csak ez használható

– Tárhelyigénye nem jelentős

– Jól párhuzamosítható

• Hátrányai– Futásideje nem kedvező (jelen esetben 2N lépés)

5

Nyers erő módszerének értékelése

Page 6: Szoftvertervezés és fejlesztés II. előadásszenasi.sandor@nik.uni-obuda.hu Szoftvertervezés és -fejlesztés II. •Egy részprobléma esetén van –t darab tárgyunk (az eredeti

Nyers erő módszere

Oszd meg és uralkodj

Feljegyzéses módszer

Dinamikus programozás

Mohó algoritmusok

Optimalizációs stratégiák 1.

Page 7: Szoftvertervezés és fejlesztés II. előadásszenasi.sandor@nik.uni-obuda.hu Szoftvertervezés és -fejlesztés II. •Egy részprobléma esetén van –t darab tárgyunk (az eredeti

Szoftvertervezés és -fejlesztés [email protected]

• Programozás I tárgyban már tanult módszer– Összefésülő rendezés

– Quicksort

– K-adik legkisebb elem kiválasztása

– Stb.

• Általában rekurzív megközelítést használ:– Amennyiben a megoldandó probléma egyszerű, akkor

• Megoldás

– Amennyiben a megoldandó probléma ehhez túl bonyolult, akkor• Felosztás több kisebb részproblémára• Az így kapott kisebb részproblémák megoldása (tipikusan rekurzív hívás(ok)

segítségével)• Az így kapott részeredmények egyesítése, azok alapján a megoldandó

probléma eredményének előállítása

• A fenti alapelv optimalizációra is használható

7

Oszd meg és uralkodj (divide and conqueror)

Page 8: Szoftvertervezés és fejlesztés II. előadásszenasi.sandor@nik.uni-obuda.hu Szoftvertervezés és -fejlesztés II. •Egy részprobléma esetén van –t darab tárgyunk (az eredeti

Szoftvertervezés és -fejlesztés [email protected]

• Egy részprobléma esetén van– t darab tárgyunk (az eredeti feladat 1..t-ig indexű tárgyai)

– h szabad helyünk (ez értelemszerűen nem nagyobb mint Wmax)

• Rekurzívan megfogalmazva egy optimális pakolás értéke:

𝐹𝑡,ℎ =

0 ℎ𝑎 ℎ = 00 ℎ𝑎 𝑡 = 0𝐹𝑡−1,ℎ ℎ𝑎 ℎ > 0 ˄ 𝑡 > 0 ˄ ℎ < 𝑤𝑡

max 𝐹𝑡−1,ℎ, 𝐹𝑡−1,ℎ−𝑤𝑡 + 𝑝𝑡 ℎ𝑎 ℎ > 0 ˄ 𝑡 > 0 ˄ ℎ ≥ 𝑤𝑡

• Tehát– ha a tárgyak száma vagy a szabad hely 0, akkor az optimális pakolás értéke 0

– ha az utolsó tárgy nem fér bele a zsákba, akkor az optimális pakolás értéke annyi, mint amennyi az előtte lévő tárgyakkal elérhető ugyanekkora helyen

– ha befér, akkor az alábbiak közül a nagyobbik érték• az előtte lévő tárgyakkal elérhető optimális érték ugyanekkora helyen (nem

rakjuk be)• az előtte lévő tárgyakkal elérhető érték az utolsó tárgy méretével

csökkentett helyen + az utolsó tárgy értéke (berakjuk)8

0-1 hátizsák probléma rekurzív megközelítésben

Page 9: Szoftvertervezés és fejlesztés II. előadásszenasi.sandor@nik.uni-obuda.hu Szoftvertervezés és -fejlesztés II. •Egy részprobléma esetén van –t darab tárgyunk (az eredeti

Szoftvertervezés és -fejlesztés [email protected] 9

0-1 hátizsák probléma megoldása „oszd meg és uralkodj” módszerrel

függvény LegjobbRészMegoldás(t, h)

ha (t = 0) ˅ (h = 0) akkor

vissza 0

különben

Pnem LegjobbRészMegoldás(t-1, h)

ha h ≥ wt akkor

Pigen pt + LegjobbRészMegoldás(t-1, h-wt)

Popt max(Pigen, Pnem)

különben

Popt Pnemelágazás vége

vissza Poptelágazás vége

függvény vége

függvény HátizsákDnC

vissza LegjobbRészMegoldás(N, Wmax)

függvény vége

Page 10: Szoftvertervezés és fejlesztés II. előadásszenasi.sandor@nik.uni-obuda.hu Szoftvertervezés és -fejlesztés II. •Egy részprobléma esetén van –t darab tárgyunk (az eredeti

Szoftvertervezés és -fejlesztés [email protected]

• Előnyei– A keresés jobban irányítható mint az előző esetben, nem vizsgál meg eleve

reménytelen útvonalakat

– Gyakran nagyon jól párhuzamosítható

– A lépésszáma alacsonyabb lehet mint a „nyers erő” módszer esetén

• Hátrányai– Csak bizonyos szerkezetű megoldásoknál hatékony ez a technika

– Amennyiben az egyes részproblémák egymást átfedik, akkor nagyon sok felesleges számítást végez. Lásd Fibonacci számok rekurzív számítása

10

Az „oszd meg és uralkodj” módszer értékelése

Page 11: Szoftvertervezés és fejlesztés II. előadásszenasi.sandor@nik.uni-obuda.hu Szoftvertervezés és -fejlesztés II. •Egy részprobléma esetén van –t darab tárgyunk (az eredeti

Nyers erő módszere

Oszd meg és uralkodj

Feljegyzéses módszer

Dinamikus programozás

Mohó algoritmusok

Optimalizációs stratégiák 1.

Page 12: Szoftvertervezés és fejlesztés II. előadásszenasi.sandor@nik.uni-obuda.hu Szoftvertervezés és -fejlesztés II. •Egy részprobléma esetén van –t darab tárgyunk (az eredeti

Szoftvertervezés és -fejlesztés [email protected]

• Oszd meg és uralkodj módszert így szeretjük elképzelni

• A valóságban azonban gyakran inkább így néz ki

• A részproblémák gyakran átfedik egymást:– A részproblémákra bontásnál nem foglalkoztunk azzal, hogy esetleg ugyanazt a

részproblémát többször is megkapjuk

– Ha már úgy alakult, hogy ugyanazt a problémát többször kell megoldani, akkor nem használjuk fel az előző megoldás eredményeit

• A futásidő tehát jelentősen javítható egy egyszerű módszerrel:– A már kiszámított részeredményeket tároljuk el valahogy

– Ha egy már megoldott részproblémához jutunk újra, akkor használjuk ezeket12

Feljegyzéses módszer (Memoization)

Page 13: Szoftvertervezés és fejlesztés II. előadásszenasi.sandor@nik.uni-obuda.hu Szoftvertervezés és -fejlesztés II. •Egy részprobléma esetén van –t darab tárgyunk (az eredeti

Szoftvertervezés és -fejlesztés [email protected] 13

0-1 hátizsák probléma megoldása „feljegyzéses módszer”-rel

függvény LegjobbRészMegoldás(t, h)

ha (t = 0) ˅ (h = 0) akkor

vissza 0

különben

ha RészMegoldásTárolóbanKeres([t, h]) ≠ akkor

vissza RészMegoldásTárolóbanKeres([t, h])

különben

Pnem LegjobbRészMegoldás(t-1, h)

ha h ≥ wt akkor

Pigen pt + LegjobbRészMegoldás(t-1, h-wt)

Popt max(Pigen, Pnem)

különben

Popt Pnemelágazás vége

RészMegoldásTárolóbaFeljegyez([t, h], Popt)

vissza Poptelágazás vége

elágazás vége

függvény vége

függvény HátizsákMemo

vissza LegjobbRészMegoldás(N, Wmax)

függvény vége

Page 14: Szoftvertervezés és fejlesztés II. előadásszenasi.sandor@nik.uni-obuda.hu Szoftvertervezés és -fejlesztés II. •Egy részprobléma esetén van –t darab tárgyunk (az eredeti

Szoftvertervezés és -fejlesztés [email protected]

• Előnyei– A megoldás alapelve pontosan ugyanaz, mint az „oszd meg és uralkodj”

módszer esetében, ezért azt nem is vizsgáltuk meg újra

– Jelentősen tudja csökkenteni a lépésszámot, ha sok egymást átfedő részproblémát kell megoldani

– Egyszerűen implementálható. A pontos feladat ismerete nélkül is adható egy általános séma a használatára (persze annak hatékonysága előre nem tudható)

• Hátrányai– Csak bizonyos szerkezetű megoldásoknál hatékony ez a technika

– Jelentős többlet tárhelyigényt jelent

– Tulajdonképpen jobb futásidőt kapunk nagyobb tárhelyért cserébe

• Kiegészítés– Amennyiben a triviális megoldások száma véges (és kevés), akkor azt is

megtehetjük, hogy ezeket már a rekurzió hívása előtt betöltjük a részmegoldás tárolóba. Ilyenkor a triviális megoldás ellenőrzés el is hagyható a rekurzív algoritmusból

14

A „feljegyzéses” módszer értékelése

Page 15: Szoftvertervezés és fejlesztés II. előadásszenasi.sandor@nik.uni-obuda.hu Szoftvertervezés és -fejlesztés II. •Egy részprobléma esetén van –t darab tárgyunk (az eredeti

Nyers erő módszere

Oszd meg és uralkodj

Feljegyzéses módszer

Dinamikus programozás

Mohó algoritmusok

Optimalizációs stratégiák 1.

Page 16: Szoftvertervezés és fejlesztés II. előadásszenasi.sandor@nik.uni-obuda.hu Szoftvertervezés és -fejlesztés II. •Egy részprobléma esetén van –t darab tárgyunk (az eredeti

Szoftvertervezés és -fejlesztés [email protected]

• Az „oszd meg és uralkodj” módszer felülről lefelé haladva próbálja megoldani a feladatot:– A komplex problémát felbontja kisebb részproblémákra

– Majd ezek megoldása alapján adja meg az összetett probléma megoldását

• A gyakorlatban a rekurzív függvény először csak hívogatja magát, amíg el nem jut valamelyik triviális megoldásig. Ezt követően ez alapján elkezdi el felépíteni a teljes megoldást

• A „feljegyzéses módszer” esetében ez jól látható, ha megvizsgáljuk, hogy a részmegoldás tárolóba milyen sorrendbe érkeznek az adatok. Először a legegyszerűbb részproblémák adatai kerülnek bele, majd ezek alapján épülnek fel a komplexebb részproblémák eredményei

• A fentiek alapján próbáljuk meg eleve ezt az alulról felfelé való építkezést megvalósítani. Egy tárhelyen tároljuk el a triviális megoldásokat, majd ezek alapján kezdjük el felépíteni az egyre összetettebbeket, amíg el nem jutunk a teljes probléma megoldásáig

16

Dinamikus programozás alapjai

Page 17: Szoftvertervezés és fejlesztés II. előadásszenasi.sandor@nik.uni-obuda.hu Szoftvertervezés és -fejlesztés II. •Egy részprobléma esetén van –t darab tárgyunk (az eredeti

Szoftvertervezés és -fejlesztés [email protected]

• Az algoritmus egy T tömböt tölt fel– ennek mérete (N+1) × (Wmax+1)

– T[t,h] értéke azt mutatja, hogy az első t darab tárgy elhelyezése h szabad helyre milyen optimális pakolási összértékkel járhat

• A feltöltés menete– Triviális esetek előre beírhatók a tömbbe:

• ha nincs szabad hely, az érték 0• ha nincs tárgy, az érték 0

– Ezt követően a már megismert képlettel feltöltjük a többi elemet

• Mivel a rekurzív képlet a T(t,h) elem kiszámításához csak a t-nél és h-nál kisebb elemeket igényli, így könnyen belátható, hogy a táblázat T[t,h] elemének kiszámításához a t-t és h-t növelő ciklusok mindig már ismert részeredményeket fognak csak felhasználni

• Így nincs szükség rekurzióra, a feltöltés egyszerűen megoldható

• A feltöltött táblázat T[N, Wmax] eleme tartalmazza a teljes feladat megoldását (tehát egy optimális pakolás értékét)

17

Hátizsákpakolási feladat megoldása

Page 18: Szoftvertervezés és fejlesztés II. előadásszenasi.sandor@nik.uni-obuda.hu Szoftvertervezés és -fejlesztés II. •Egy részprobléma esetén van –t darab tárgyunk (az eredeti

Szoftvertervezés és -fejlesztés [email protected]

Megjegyzés: a tömböket kivételesen 0-tól indexeljük

18

0-1 hátizsák probléma megoldása „dinamikus programozás”-sal

függvény HátizsákDP

ciklus t 0-tól N-ig

F[t,0] 0

ciklus vége

ciklus h 1-től Wmax-ig

F[0,h] 0

ciklus vége

ciklus t 1-től N-ig

ciklus h 1-től Wmax-ig

ha h ≥ wt akkor

F[t,h] max(F[t-1,h], F[t-1,h-wt] + pt)

különben

F[t,h] F[t-1,h]

elágazás vége

ciklus vége

ciklus vége

vissza F[N,Wmax]

függvény vége

Page 19: Szoftvertervezés és fejlesztés II. előadásszenasi.sandor@nik.uni-obuda.hu Szoftvertervezés és -fejlesztés II. •Egy részprobléma esetén van –t darab tárgyunk (az eredeti

Szoftvertervezés és -fejlesztés [email protected]

• Egy optimális pakolást állít elő az alábbi algoritmus:

• Elindulunk a (t=N, h=Wmax) elemtől, majd – Ha F[t,h] = F[t-1,h] az azt jelenti, hogy a t. elem nincs benne a zsákban (hiszen

ugyanakkora helyen nélküle ugyanakkora az optimális pakolás értéke)

– Ha a két érték nem egyezik, akkor a t. elem benne van a zsákban

• Ezt követően vizsgáljuk a megelőző tárgyakból elérhető optimális pakolást (a fentiek alapján korrigált szabad hellyel)

19

0-1 hátizsák probléma megoldásának előállítása

függvény HátizsákDPEredmény(F)

OPT [hamis,hamis, … ,hamis]

t N

h Wmaxciklus amíg (t > 0) ˄ (h > 0)

ha F[t,h] ≠ F[t-1,h] akkor

OPT[t] igaz

h h - wjelágazás vége

t t - 1

ciklus vége

vissza OPT

függvény vége

Page 20: Szoftvertervezés és fejlesztés II. előadásszenasi.sandor@nik.uni-obuda.hu Szoftvertervezés és -fejlesztés II. •Egy részprobléma esetén van –t darab tárgyunk (az eredeti

Szoftvertervezés és -fejlesztés [email protected]

• A módszer hatékony használatának előkövetelményei:– A feladat legyen optimális részstruktúrájú: a feladat optimális megoldása

önmagán belül a részfeladatok optimális megoldásait is tartalmazza

– Legyenek a részfeladatok átfedőek: a részfeladatokra bontás során többször is merüljön fel ugyanannak a részfeladatnak a megoldása

• A módszerrel minden, a fenti feltételeknek megfelelő probléma egyszerűen megoldható

• Amennyiben ezek teljesülnek, a megoldás lépései:– Az optimális megoldás szerkezetének jellemzése

– A megoldás értékének (jóságának) rekurzív módon való definiálása

– Az optimális megoldás értékének (jóságának) kiszámítása alulról felfelé történő módon

– Amennyiben szükséges, magának az optimális megoldásnak a magadása

• Az utolsó lépés csak akkor szükséges, ha nem elég egy optimális megoldás értéke, hanem magát a megoldást is tudni szeretnénk

20

A „dinamikus programozás” módszere általánosan

Page 21: Szoftvertervezés és fejlesztés II. előadásszenasi.sandor@nik.uni-obuda.hu Szoftvertervezés és -fejlesztés II. •Egy részprobléma esetén van –t darab tárgyunk (az eredeti

Szoftvertervezés és -fejlesztés [email protected]

• Előnyei– Futásideje általában kedvező

– Nincs szükség egy részprobléma többszöri megoldására

– Nem rekurzív

– Minden, az előfeltételeknek megfelelő feladat megoldható vele

– Tárigénye és lépésszáma előre tudható

• Hátrányai– Az alulról felfelé való megoldás miatt néha felesleges részproblémákat is

megold

– A többi megoldáshoz viszonyítva a tárigénye magasabb lehet

• Megjegyzés– A tárigény csökkenthető, ha a már szükségtelen részmegoldások eredményeit

töröljük (hátizsáknál pl. mindig csak az előző sorra van szükségünk)

– További klasszikus dinamikus programozáson alapuló megoldások:• Mátrixok láncszorzása• Leghosszabb közös részsorozat• Stb.

21

A „dinamikus programozás” értékelése

Page 22: Szoftvertervezés és fejlesztés II. előadásszenasi.sandor@nik.uni-obuda.hu Szoftvertervezés és -fejlesztés II. •Egy részprobléma esetén van –t darab tárgyunk (az eredeti

Nyers erő módszere

Oszd meg és uralkodj

Feljegyzéses módszer

Dinamikus programozás

Mohó algoritmusok

Optimalizációs stratégiák 1.

Page 23: Szoftvertervezés és fejlesztés II. előadásszenasi.sandor@nik.uni-obuda.hu Szoftvertervezés és -fejlesztés II. •Egy részprobléma esetén van –t darab tárgyunk (az eredeti

Szoftvertervezés és -fejlesztés [email protected]

• Mohó algoritmus: a feladat megoldása során felmerülő részproblémák megoldásakor mindig az aktuálisan legjobbnak tűnő részeredményt választja

• Legjobbnak tűnő: a rendelkezésre álló (általában hiányos) információk alapján próbálja megbecsülni, hogy mit érdemes választani. Ebből adódóan a futásideje általában nagyon jó

• A mohó stratégia általában az alábbi két előfeltételt igényli– Optimális részproblémák: az optimális megoldás felépíthető a részproblémák

optimális megoldásából

– Mohó választás: a globális optimális megoldás elérhető lokális optimumok választásán keresztül

• Mohó algoritmusok típusai– Az előzőeknek megfelelő problémák esetén mindig optimális megoldást ad

– Bizonyos feladatoknál nem mindig ad optimális megoldást, csak egy közel optimálisat (bár általában itt is bizonyítható, hogy ez mennyire van közel az optimálishoz)

23

Mohó algoritmusok

Page 24: Szoftvertervezés és fejlesztés II. előadásszenasi.sandor@nik.uni-obuda.hu Szoftvertervezés és -fejlesztés II. •Egy részprobléma esetén van –t darab tárgyunk (az eredeti

Szoftvertervezés és -fejlesztés [email protected]

• Egy közel optimális pakolást állít elő az alábbi algoritmus:

• Először rendezzük a tárgyakat valamilyen szempont szerint, pl.– Súly szerint növekvő sorrend

– Érték szerint csökkenő sorrend

– Érték/súly szerint csökkenő sorrend

• Ezt követően a fenti sorrendben kezdjük vizsgálni a tárgyakat– Ha még belefér a zsákba, akkor belerakjuk, egyébként nem

– Megállunk ha tele a zsák, vagy elfogytak a tárgyak

24

0-1 hátizsák probléma megoldása mohó algoritmussal

függvény HátizsákMohó

TárgyakRendezése(w, p)

OPT [hamis,hamis, … ,hamis]

t 1

ciklus amíg (ÖsszSúly(OPT) < Wmax) ˄ (t ≤ N)

ha ÖsszSúly(OPT) + wt ≤ Wmax akkor

OPT[t] igaz

elágazás vége

t t + 1

ciklus vége

vissza ÖsszÉrték(OPT)

függvény vége

Page 25: Szoftvertervezés és fejlesztés II. előadásszenasi.sandor@nik.uni-obuda.hu Szoftvertervezés és -fejlesztés II. •Egy részprobléma esetén van –t darab tárgyunk (az eredeti

Szoftvertervezés és -fejlesztés [email protected]

• Előnyei– Futásideje nagyon jó (gyakran lineáris)

– Ha nem ad optimális megoldást, akkor is egy közel optimálisat nyújt (ez alapja lehet egy másik, lassabb de pontosabb módszernek)

• Hátrányai– Csak a feladatok egy szűk körénél használható

• Megjegyzés– A 0-1 hátizsákproblémára nem ismert mohó algoritmus, a töredékes

hátizsákproblémára (amikor egy tárgy egy részét is berakhatjuk a zsákba) viszont könnyen belátható, hogy működik az általunk megadott módszer a harmadik rendezést használva

– A későbbiek során még számos mohó algoritmussal találkozunk, amelyek bizonyítottan mindig optimális megoldást adnak

• Dijkstra algoritmusa• Prim algoritmusa• Kruskal algoritmusa• Stb.

25

A „mohó” módszer értékelése

Page 26: Szoftvertervezés és fejlesztés II. előadásszenasi.sandor@nik.uni-obuda.hu Szoftvertervezés és -fejlesztés II. •Egy részprobléma esetén van –t darab tárgyunk (az eredeti

Szoftvertervezés és -fejlesztés [email protected]

• Javasolt/felhasznált irodalom– Rónyai, Ivanyos, Szabó: Algoritmusok, Typotex, 2005

– Cormen, Leiserson, Rivest: Algoritmusok, Műszaki Könyvkiadó, 1997

– Mehlhorn, Sanders: Algorithms and Data Structures, Springer, 2008

– Skiena: The Algorithm Design Manual, Springer, 2008

– Szénási: Algoritmusok, adatszerkezetek II., Óbudai Egyetem, 2014

26

Irodalomjegyzék