Pobierz prezentację
Pobieranie prezentacji. Proszę czekać
1
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.
2
Operacje na stosie PUSH(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.
3
Analiza operacji na stosie
Zwykł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)
4
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) 1 i := 2 while i < length[A] i A[i] = 3 do A[i] := i := i 5 if i < length[A] 6 then A[i] := Przeanalizujemy ciąg n operacji INCREMENT na liczniku.
5
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: Czas wykonania n operacji - O(n) Zamortyzowany koszt każdej - O(1)
6
Powiększanie tablicy TABLE-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
7
Analiza powiększania tablicy
Niech n operacji TABLE-INSERT wykonuje się na początkowo pustej tablicy. Koszt i-j operacji wynosi: 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
Podobne prezentacje
© 2024 SlidePlayer.pl Inc.
All rights reserved.