1 / 7

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 .

natara
Download Presentation

Analiza kosztu zamortyzowanego

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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) 0 0 0 0 0 1 i := 0 1 0 0 1 1 2 whilei <length[A] i A[i] = 1 2 0 1 0 3 3 do A[i] := 0 3 0 1 1 4 4 i := i + 1 4 1 0 0 7 5 ifi < length[A] 5 1 0 1 8 6 thenA[i] := 1 6 1 1 0 10 7 1 1 1 11 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 ifsize[T] = 0 2 then przydziel 1 komórkę dla table[T] 3 size[T] := 1 4 ifnum[T] = size[T] 5 then przydziel 2size[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] := 2size[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

More Related