Amortizációs költségelemzés



Hasonló dokumentumok
Rakov(34125)= Rakov(12543)= Rakov(14532)= Rakov(54321)=-

Rakov(34125)= Rakov(12543)= Rakov(14532)= Rakov(54321)=-

Korlátozás és szétválasztás elve. ADAGOLO adattípus

Önszervező bináris keresőfák

Kupac adatszerkezet. A[i] bal fia A[2i] A[i] jobb fia A[2i + 1]

Módosítható Prioritási sor Binomiális kupaccal. Wednesday, March 21, 12

1. ábra. Egy rekurzív preorder bejárás. Egy másik rekurzív preorder bejárás

Kupac adatszerkezet. 1. ábra.

Struktúra nélküli adatszerkezetek

Algoritmusok és adatszerkezetek gyakorlat 07

Hátizsák feladat. Példa: A tárgyak (súly, fontosság) párokban (4,6) (3,5) (2,3) (2,3) a hátizsák kapacitása 8.

Algoritmizálás. Horváth Gyula Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Ugrólisták. RSL Insert Example. insert(22) with 3 flips. Runtime?

7 7, ,22 13,22 13, ,28

Megoldás meghatározása Ez a szakasz kitölti a c és S táblázatokat, a kiíratás S alapján egy rekurzív algoritmussal megtehető.

BACKTRACKING Visszalépéses keresés

Az absztrakt adattípus egy (E,M) párral adható meg, ahol E az értékhalmaz, M a műveletek halmaza. Fő tulajdonságok. Verem

Felvételi vizsga mintatételsor Informatika írásbeli vizsga

Adatszerkezetek I. 7. előadás. (Horváth Gyula anyagai felhasználásával)

Tuesday, March 6, 12. Hasító táblázatok

Adatszerkezetek 7a. Dr. IványiPéter

Számláló rendezés. Példa

A számítástudomány alapjai. Katona Gyula Y. Számítástudományi és Információelméleti Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem

Hátizsák feladat. Példa: A tárgyak (súly, fontosság) párokban (4,6) (3,5) (2,3) (2,3) a hátizsák kapacitása 8.

Algoritmusok és adatszerkezetek II.

end function Az A vektorban elõforduló legnagyobb és legkisebb értékek indexeinek különbségét.. (1.5 pont) Ha üres a vektor, akkor 0-t..

Adatszerkezetek Adatszerkezet fogalma. Az értékhalmaz struktúrája

Egyesíthető prioritási sor

Edényrendezés. Futási idő: Tegyük fel, hogy m = n, ekkor: legjobb eset Θ(n), legrosszabb eset Θ(n 2 ), átlagos eset Θ(n).

Mesterséges intelligencia 1 előadások

Példa Hajtsuk végre az 1 pontból a Dijkstra algoritmust az alábbi gráfra. (A mátrixban a c i j érték az (i, j) él hossza, ha nincs él.

7. BINÁRIS FÁK 7.1. A bináris fa absztrakt adattípus 7.2. A bináris fa absztrakt adatszerkezet

Bináris keresőfák. Adat : M Elemtip és Elemtip-on értelmezett egy lineáris rendezési reláció,

... fi. ... fk. 6. Fabejáró algoritmusok Rekurzív preorder bejárás (elsőfiú-testvér ábrázolásra)

ÖNSZERVEZŐ BINÁRIS KERESŐFÁK HATÉKONYSÁGA

Algoritmusok és adatszerkezetek gyakorlat 06 Adatszerkezetek

Adatszerkezetek II. 10. előadás

Információs Technológia

Példa 30 14, 22 55,

út hosszát. Ha a két várost nem köti össze út, akkor legyen c ij = W, ahol W már az előzőekben is alkalmazott megfelelően nagy szám.

B-fa. Felépítés, alapvető műveletek. Programozás II. előadás. Szénási Sándor.

A Verem absztrakt adattípus

Programozás alapjai II. (7. ea) C++ Speciális adatszerkezetek. Tömbök. Kiegészítő anyag: speciális adatszerkezetek

Adatszerkezetek 2. Dr. Iványi Péter

10. tétel. Adatszerkezetek és algoritmusok vizsga Frissült: január 28.

A programozás alapjai előadás. [<struktúra változó azonosítók>] ; Dinamikus adatszerkezetek:

angolul: greedy algorithms, románul: algoritmi greedy

1. ábra. Számláló rendezés

Egyesíthető prioritási sor

10. előadás Speciális többágú fák

A MAXIMUM-KUPACOL eljárás helyreállítja az A[i] elemre a kupactulajdonságot. Az elemet süllyeszti cserékkel mindaddig, amíg a tulajdonság sérül.

Számjegyes vagy radix rendezés

Speciális adatszerkezetek. Programozás alapjai II. (8. ea) C++ Tömbök. Tömbök/2. N dimenziós tömb. Nagyméretű ritka tömbök

Programozás alapjai II. (7. ea) C++

2. Visszalépéses keresés

Egyirányban láncolt lista

Algoritmusok és adatszerkezetek II.

2. Visszalépéses stratégia

Permutáció n = 3 esetében: Eredmény: permutációk száma: P n = n! romámul: permutări, angolul: permutation

Gráfelméleti feladatok. c f

Rendezettminta-fa [2] [2]

2018, Diszkrét matematika

Bonyolultságelmélet. Thursday 1 st December, 2016, 22:21

Gyakori elemhalmazok

Adaptív dinamikus szegmentálás idősorok indexeléséhez

Algoritmizálás és adatmodellezés tanítása 6. előadás

III. Gráfok. 1. Irányítatlan gráfok:

2. Milyen értéket határoz meg az alábbi algoritmus, ha A egy vektor?. (2 pont)

OOP I. Egyszerő algoritmusok és leírásuk. Készítette: Dr. Kotsis Domokos

A félév során előkerülő témakörök

Partíció probléma rekurzíómemorizálással

5. SOR. Üres: S Sorba: S E S Sorból: S S E Első: S E

Programozási módszertan. Mohó algoritmusok

Az B sorozatban a pontok helyes preorder sorrendben vannak. A preorder bejárásban p k -t közvetlenül q m követi.

Adatszerkezetek 1. Dr. Iványi Péter

Általános algoritmustervezési módszerek

Példa Hajtsuk végre az 1 pontból a Dijkstra algoritmust az alábbi gráfra. (A mátrixban a c i j érték az (i, j) él hossza, ha nincs él.

Hierarchikus adatszerkezetek

Számítógépes döntéstámogatás. Genetikus algoritmusok

Algoritmusok és adatszerkezetek gyakorlat 03 Oszd meg és uralkodj. Nagy

Adatszerkezet - műveletek

Mohó algoritmusok. Példa:

Algoritmusok bonyolultsága

értékel függvény: rátermettségi függvény (tness function)

14. Mediánok és rendezett minták

Algoritmusok helyességének bizonyítása. A Floyd-módszer

Adatszerkezetek I. 8. előadás. (Horváth Gyula anyagai felhasználásával)

Dinamikus programozás vagy Oszd meg, és uralkodj!

1. Alapfogalmak Algoritmus Számítási probléma Specifikáció Algoritmusok futási ideje

BABEŞ-BOLYAI TUDOMÁNYEGYETEM MATEMATIKA-INFORMATIKA KAR Felvételi verseny - minta Informatika írásbeli

19. AZ ÖSSZEHASONLÍTÁSOS RENDEZÉSEK MŰVELETIGÉNYÉNEK ALSÓ KORLÁTJAI

Adatszerkezetek 2. Dr. Iványi Péter

Más szavakkal formálisan:, ahol olyan egész szám, hogy. Más szavakkal formálisan:, ahol olyan egész szám, hogy.

1. A k-szerver probléma

Pásztor Attila. Algoritmizálás és programozás tankönyv az emeltszintű érettségihez

Web-programozó Web-programozó

Kifejezések. Kozsik Tamás. December 11, 2016

9. előadás. Programozás-elmélet. Programozási tételek Elemi prog. Sorozatszámítás Eldöntés Kiválasztás Lin. keresés Megszámolás Maximum.

Programozás alapjai C nyelv 8. gyakorlat. Mutatók és címek (ism.) Indirekció (ism)

Gráfok, definíciók. Gráfok ábrázolása. Az adott probléma megoldásához ténylegesen mely műveletek szükségesek. Ábrázolások. Példa:

Átírás:

Amortizációs költségelemzés Amennyiben műveleteknek egy M 1,...,M m sorozatának a futási idejét akarjuk meghatározni, akkor egy lehetőség, hogy külön-külön minden egyes művelet futási idejét kifejezzük és összegezzük. Ennél gyakran pontosabb és kedvezőbb eredményt kapunk, ha helyette a teljes műveletsor összesített költségét számítjuk, de az egyes műveletekét nem. Ekkor a műveletekre átlagolt T (n)/m költséget számítjuk, ezt az műveletek átlagolt költségének nevezzük. (Ez továbbra is lehet legrosszabb eset elemzés, itt az átlag nem az input eloszlásra, hanem a műveletekre vonatkozik.) Az átlagolt költség meghatározására a következő módszereket szokás használni. Összesítéses módszer. Könyvelési módszer. Potenciál módszer. Többszörös VeremBol művelet. Vegyünk egy módosított verem adattípust, amelyben a verem adattípus műveletei mellett definiálunk egy TOROL(V,k) műveletet, amely törli a legfelső k elemet, ha van k darab elem, egyébként pedig törli a verem összes elemét. Tudjuk, hogy az üres V veremből kiindulva végrehajtottunk m darab műveletet, amelyek mindegyike a Verembe(V,x), Torol(V),Verembol(V,x), Torol(V,k) valamelyike. Feladat az átlagolt költség meghatározása. Ha egyenként vesszük a műveleteket a Torol(V,k) művelet futási ideje O(k) a többié konstans, így csak O(k) értéket kapnánk az átlagolt költségre. Látjuk majd, hogy O(1) is teljesül. 2. Példa Bináris számláló növelése. Tekintsük az A[0..k-1] bitvektort, ami egy szám 2-es számrendszerbeli leirása, a tömb i-dik eleme az 2 i -es helyiértéken álló szám. A feladat a számláló növelése, kezdetben x = 0, azaz A[i] = 0 minden i-re. Az x := x+1 való növelésre a következő eljárást használjuk. Novel(A) i:=0 while(i<=k-1) and A[i]=1 A[i]:=0 i:=i+1 if i<=k-1 then A[i]:=1 A feladat a 2 k darab Novel eljárás átlagolt költségének (bitek változtatásának száma) meghatározása. Egy művelet költsége legrosszabb esetben O(k). Összesítéses módszer Az összesítéses módszernél a teljes műveletsor futási idejére közvetlenül bizonyítunk felső korlátot. Az összesített költség O(n), mivel legfeljebb n elemet tudunk a verembe berakni, és csak berakott elemen keletkezhet költség a törlésnél vagy kivételnél. 2. Példa Vizsgáljuk meg a 2 k darab művelet teljes költségét. Vizsgáljuk meg az egyes tömbelemek hányszor változnak. Észrevehetjük, hogy A[0] minden műveletnél változik, azaz 2 k esetben, A[1] minden második műveletnél változik, 1

azaz 2 k 1 esetben, és így tovább A[i] 2 k 1 esetben változik. Következésképpen a teljes költség k 1 i=0 2k i = 2 k+1 1, azaz az átlagos költség konstans. Könyvelési módszer A könyvelési módszer lényege az, hogy más amortizált ĉ i költséget könyvelünk el az i műveletre, mint a tényleges költsége. Ez a költség lehet kisebb is, mint a tényleges csak arra kell ügyelni, hogy minden j m esetén fennálljon a j ĉ i j c i egyenlőtlenség. Ha az egyenlőtlenség teljesül használhatjuk az amortizált költséget átlagolt költségnek. A könyvelt költség legyen 2 a Verembe(V,x) művelet esetén, 0 a TOROL(V), TOROL(V,k), VEREMBOL(V,x) műveletek esetén. Ekkor a kivétel költségét már az elem verembe behelyezésekor elkönyveltük, így az amortizált költségekre követelt feltétel teljesül. 2. Példa A tényleges költség annyi, ahány bitet megváltoztat a művelet a végrehajtása során. Számítsunk 2 amortizációs költséget, ha egy bitet 1-re állítunk be. Mivel ezt az értékadást minden lépésben egyszer hajtjuk végre, ezért minden lépésben 2 az amortizált költség. Viszont egy bitet csak azt követően állíthatunk 0-ra, ha előtte 1-re állítottuk, így szintén teljesül a megkövetelt egyenlőtlenség, tehát az átlagolt költség O(1). Potenciál módszer Ennél a módszernél az előre kifizetett költséget nem egy művelethez rendeljük hozzá, hanem a vizsgált adatszerkezet állapotához rendelt potenciális energiaként tartjuk számon. A kezdeti állapota az adatszerkezetnek, amelyen m műveletet hajtunk végre legyen D 0, az i-edik művelet végrehajtása utáni állapot legyen D i. Ekkor az amortizált költség Az m művelet amortizált költségét számolva m ĉ i = c i + Φ(D i ) Φ(D i 1 ). ĉ i = m c i + Φ(D m ) Φ(D 0 ). Következésképpen, ha Φ(D n ) Φ(D 0 ) (például Φ(D 0 ) = 0 és Φ nemnegatív), akkor teljesül az amortizált költségre megkövetelt egyenlőtlenség. Legyen Φ a veremben levő elemek száma, ez egy nemnegatív függvény, aminek kezdeti értéke 0. Vizsgáljuk az amortizált költségeket. Verembe(V,x): Φ értéke 1-el nő, tényleges költség 1, így az amortizált 2. Torol(V), Verembol(V,x): Φ értéke 1-el csökken, tényleges költség 1, így az amortizált 0. Torol(V,k): Legyen r a minimuma k-nak és a veremben levő elemek számának. Ekkor Φ értéke r-el csökken, tényleges költség r, így az amortizált 0. 2

2. Példa Legyen Φ a számlálót leíró tömbben levő egyesek száma, ez egy nemnegatív függvény, aminek kezdeti értéke 0. Vizsgáljuk az amortizált költséget. Tegyük fel, hogy t bit változott, azaz a tényleges költség t. Ekkor a t változtatás közül egy esetben 0 változott 1-re, a többi t 1 esetben 1 változott 0-ra, így a potenciálfüggvény értéke t-2-vel csökkent, azaz az amortizált költség 2. 8 királynő probléma Helyezzünk el az n n-es sakktáblán n királynőt, hogy egyik se üsse a másikat! Megoldástér: n darab mező, amiket a koordinátákkal adhatunk meg: {(x 1,y 1 ),...,(x n,y n )}, 1 x i,y i n. A királynők akkor és csak akkor nem ütik egymást, ha x i x j, ha i j y i y j, ha i j x i + y i x j + y j, ha i j x i y i x j y j, ha i j Az első feltétel alapján feltehetjük, hogy y i = i, így a királynők elhelyezését egy (x 1,...,x n ) 1 x i n vektorral írjuk le, ami annak az elhelyezkedésnek felel meg, hogy az i-edik sorban a királynő az x j oszlopban van. x i x j, ha i j x i + i x j + j, ha i j x i i x j j, ha i j Megoldástér ábrázolás Ekkor a bejárandó megoldáskezdemények (x 1,...,x k ) vektorok 1 x i n, k n. A megoldáskezdemények egy fában ábrázolhatóak, a fát leíró, a bejárásához használható függvények: EFiu(x 1,...,x k ) = (x 1,...,x k,1), ha k<n és Nil ha k=n. Testver(x 1,...,x k ) = (x 1,...,x k 1,x k + 1), ha x k < n és Nil egyébként. APA(x 1,...,x k ) = (x 1,...,x k 1 ), ha k 1 és Nil egyébként. Kimerítő keresés A kimerítő keresés vagy nyers erő algoritmusa során az egész megoldástért bejárjuk, megvalósítható egy fabejárással. Megoldás keresése visszalépéses algoritmussal (backtracking) Az alapötlet az, hogy ha a fabejárás során, az olyan részfákat, amelyekben nincs lehetséges megoldás nem járjuk be, ha ilyen fához jutunk visszalépünk. Ennek megvalósításához szükség van egy függvényre, amely megadja, ha nem tartalmaz lehetséges megoldást a részfa. A LehetMego függvénytől ezt várjuk el, ha a függvény hamis értéket ad, a részfa nem tartalmaz lehetséges megoldást, igaz válasz esetén nem feltétlenül kell, hogy tartalmazzon megoldást a részfa. A LehetMego függvény megadja, ha nem kiterjeszthető a megoldáskezdemény, mert két királynő már üti egymást. 3

Tehát LehetMego(x 1,...,x k ) = True, akkor és csak akkor ha minden i j esetén teljesül, hogy x i x j, x i + i x j + j, x i i x j j Használunk még egy Megoldas függvényt, amely akkor és csak akkor ad igaz értéket, ha az adott pont lehetséges megoldás. Esetünkben Megoldas(x 1,...,x k ) = True, akkor és csak akkor teljesül, ha LehetMego(x 1,...,x k ) és k = n. A keretalgoritmus A fenti függvények alapján az alábbi általános keretalgoritmust építjük fel. Egy adott probléma esetén meg kell adni a megoldástér fáját és a problémához tartozó függvényeket. Visszalep(F) If F=Nil Then return //Üres fa If Megoldas(F) Then Print "F" // Megoldas kiiratasa return Else p:=f.elsofiu While (p!=nil) // a gyerekeken sorbamenve If LehetMego(p) Then Visszalep(p) p:=p.testver A fenti változat egyetlen megoldást keres meg, de a harmadik negyedik sor változtatásával könnyen átírható az összes megoldás megkeresésére. A kiiratás helyett a megoldást bele kell tenni egy halmazba, a negyedik "return" sort törölni. Az összes megoldás megkeresése felhasználható optimalizálási feladatok megoldására is. Pénzváltási probléma Az pénzváltási problémában adottak p 1,..., p n pénzérmék és egy E összeg, a feladat kiválasztani az érmék egy S halmazát, amelyre teljesül, hogy i S p i = E. A megoldástér a pénzérmék összes lehetséges részhalmaza. Egy lehetséges reprezentáció egy n szintből álló teljes bináris fa, amely a halmaz bitvektorát tárolja. A részhalmazoknak a levelek felelnek meg. A levélhez tartozó halmazt a levélig a gyökérből vezető út alapján kapjuk meg. Ha az i-dik szinten balra lépünk az i-dik elemet nem választjuk be, ha jobbra, akkor az i-dik elemet beválasztjuk a halmazba. Egy másik reprezentációval a megoldástér pontjait (a pénzek részhalmazát) a pénzek indexeinek az S {1,...,n} halmazának X = (i 1,...,i k ) növekvő felsorolásáként reprezentáljuk. Ekkor a bejáráshoz használt függvények EFiu(i 1,...,i k ) = (i 1,...,i k,i k + 1), ha i k < n és Nil ha i k = n. Testver(i 1,...,i k 1,i k ) = (i 1,...,i k 1,i k + 1), ha i k < n és Nil ha i k = n. Apa(i 1,...,i k 1,i k ) = (i 1,...,i k 1 ), ha k 1 és Nil egyébként. A LehetMego és Megoldás függvényeket a következőképpen kaphatjuk meg. A LehetMego függvény megadja, ha az eddig meghozott döntéseket nem lehet kiegészíteni egy felbontássá, vagy azért mert már nagyobb összeget választottunk, vagy azért mert minden további elemet kiválasztva sem érhetjük el E-t. Tehát LehetMego(i 1,...,i k ) = True akkor és csak akkor, ha k p i j E j=1 k p i j + j=1 n p j E. j=i k +1 Továbbá Megoldas(i 1,...,i k ) = True akkor és csak akkor, ha k j=1 p i j = E Kiskérdések 4

könyvelési módszer (1 példa) potenciál módszer (1 példa) Visszalépéses keresés keretalgoritmusa n királynő feladat a felhasznált függvények specifikációja a pénzváltási problémánál felhasznált függvények specifikációja 5