Analiza kosztu zamortyzowanego

7
Analiza kosztu zamortyzowanego Koszt zamortyzowany operacji - średni koszt pojedynczej operacji w najgorszym przypadku: jeśli dla każdego n pesymistyczny czas wykonania ciągu n operacji można ograniczyć przez T(n), koszt zamortyzowany pojedynczej operacji wynosi T(n)/n. Koszt zamortyzowany może okazać się znacznie mniejszy niż pesymistyczny czas działania jednej operacji. Analiza zamortyzowanego kosztu algorytmów służy do szacowania kosztu algorytmów, w których następują ciągi podobnych operacji.

description

Analiza kosztu zamortyzowanego. Koszt zamortyzowany operacji - średni koszt pojedynczej operacji w najgorszym przypadku: jeśli dla każdego n pesymistyczny czas wykonania ciągu n operacji można ograniczyć przez T(n) , koszt zamortyzowany pojedynczej operacji wynosi T(n)/n . - PowerPoint PPT Presentation

Transcript of Analiza kosztu zamortyzowanego

Page 1: Analiza kosztu zamortyzowanego

Analiza kosztu zamortyzowanego

Koszt zamortyzowany operacji - średni koszt pojedynczej operacji w najgorszym przypadku:

jeśli dla każdego n pesymistyczny czas wykonania ciągu n operacji można ograniczyć przez T(n), koszt zamortyzowany pojedynczej operacji wynosi T(n)/n.

Koszt zamortyzowany może okazać się znacznie mniejszy niż pesymistyczny czas działania jednej operacji.

Analiza zamortyzowanego kosztu algorytmów służy do szacowania kosztu algorytmów, w których następują ciągi podobnych operacji.

Page 2: Analiza kosztu zamortyzowanego

Operacje na stosiePUSH(S, x) - włożenie elementu x na stos S, O(1)

POP(S) - zdjęcie elementu ze stosu S, O(1)

STACK-EMPTY(S) - daje w wyniku TRUE, jeśli stos jest pusty

MULTIPOP(S, k) - usuwa k elementów ze stosu S lub opróżnia go, jeśli na stosie było mniej niż k elementów; min(s,k)

MULTIPOP (S, k)

1 while not STACK-EMPTY(S) i k 0

2 do POP(S)

3 k := k - 1

Przeanalizujemy ciąg n operacji PUSH, POP i MULTIPOP na początkowo pustym stosie.

Page 3: Analiza kosztu zamortyzowanego

Analiza operacji na stosieZwykłe podejście:

Rozmiar stosu nie może przekroczyć n, więc pesymistuczny czas działania operacji MULTIPOP można ograniczyć przez O(n). Wtedy pesymistyczny koszt n operacji jest O(n2).

To oszacowanie górne jest poprawne, ale można uzyskać dokładniejsze.

Analiza kosztu zamortyzowanego:

Każdy obiekt, po włożeniu na stos, może być zdjęty co najwyżej jeden raz. Stąd liczba wywołań POP, włączając w to wywołania wewnątrz operacji MULTIPOP, nie może być większa niż liczba operacji PUSH, która nie jest większa niż n. Dlatego dla dowolnego n łączny czas wykonania każdego ciągu n operacji PUSH, POP i MULTIPOP na początkowo pustym stosie wynosi co najwyżej O(n). Koszt zamortyzowany operacji jest równy O(n)/n = O(1)

Page 4: Analiza kosztu zamortyzowanego

Licznik binarny K-bitowy licznik binarny, który może przyjmować nieujemne wartości

całkowite, jest reprezentowany przez tablicę bitów A[0 .. k-1], gdzie length[A] = k.

Wartość Koszt

INCREMENT (A) 0 0 0 0 0

1 i := 0 1 0 0 11 1

2 while i < length[A] i A[i] = 1 2 0 1 01 0 3

3 do A[i] := 0 3 0 1 11 4

4 i := i + 1 4 1 0 01 0 0 7

5 if i < length[A] 5 1 0 11 8

6 then A[i] := 1 6 1 1 01 0 10

7 1 1 11 11

Przeanalizujemy ciąg n operacji INCREMENT na liczniku.

Page 5: Analiza kosztu zamortyzowanego

Analiza operacji INCREMENT Zwykłe podejście:

Pojedyncze wykonanie procedury INCREMENT może trwać (k) w pesymistycznym przypadku (kiedy w A są samie jedynki), więc czas działania n takich operacji można ograniczyć przez O(nk).

Analiza kosztu zamortyzowanego:

Nie wszystkie bity są modyfikowane przy każdym wywołaniu procedury. Bit A[0] jest modyfikowany przy każdym wywołaniu procedury INCREMENT; bit A[1] - w co drugim wywołaniu, A[2] - w co czwartym i t.d. Dla i = lgn bit A[i] ulega modyfikacji n/2i razy w ciągu n operacji. Dla i > lgn bit A[i] nigdy nie jest modyfikowany. Liczba modyfikacji bitów wynosi:

n22

1n

2

n

0ii

nlg

0ii

Czas wykonania n operacji - O(n)

Zamortyzowany koszt każdej - O(1)

Page 6: Analiza kosztu zamortyzowanego

Powiększanie tablicyTABLE-INSERT(T, x)

1 if size[T] = 0

2 then przydziel 1 komórkę dla table[T]

3 size[T] := 1

4 if num[T] = size[T]

5 then przydziel 2size[T] komórek dla new_table

6 wstaw wszystkie elementy z table[T] do new_table

7 zwolnij table[T]

8 table[T] := new_table

9 size[T] := 2size[T]

10 wstaw x do table[T]

11 num[T] := num[T] + 1

Page 7: Analiza kosztu zamortyzowanego

Analiza powiększania tablicy

Niech n operacji TABLE-INSERT wykonuje się na początkowo pustej tablicy.

Koszt i-j operacji wynosi:

n3n2n2ncnlg

0i

jn

1ii

,1

,ici

jeśli i-1 jest całkowitą potęgą 2

w przeciwnym razie

Całkowity koszt n-j operacji wynosi:

Koszt zamortyzowany każdej operacji jest ograniczony przez 3