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]

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?

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)

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

ú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

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

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)

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