Detekcja i rozdzielczość czasowa, a zdolność rozdzielcza waveletu ...
Ocena przydatności algorytmu – czas działania (złożoność czasowa)
description
Transcript of Ocena przydatności algorytmu – czas działania (złożoność czasowa)
Ocena przydatności algorytmu – czas działania (złożoność czasowa)
Oznaczenia:
Ocena przydatności algorytmu – czas działania (złożoność czasowa) – analiza przypadku pesymistycznego
Jeśli czas działania algorytmu zależy nie tylko od rozmiaru danych wejściowych i przyjmuje różne wartości dla różnych danych o tym samym rozmiarze, to interesuje nas złożoność obliczeniowa w najgorszym przypadku.
Gwarancja, że algorytm nigdy nie będzie działał dłużej
Ocena przydatności algorytmu – czas działania (złożoność czasowa) – analiza przypadku pesymistycznego
Warto pamiętać!
Może się zdarzyć, że algorytm o pesymistycznej złożoności
czasowej rzędu nlgn będzie dla większości danych
wejściowych działał wolniej niż algorytm o pesymistycznym
czasie działania rzędu n2.
Istnieją algorytmy o pesymistycznej złożoności czasowej rzędu
wykładniczego, które często działają szybciej niż algorytm o
złożoności wielomianowej, a nawet liniowej (np. tzw. metoda
simplex programowania liniowego).
Ocena przydatności algorytmu – czas działania (złożoność czasowa) – analiza przypadku pesymistycznego
Miara wrażliwości pesymistycznej algorytmu bada, na ile wielkość
Tmax(n) odzwierciedla rzeczywisty czas działania algorytmu.
Ocena przydatności algorytmu – czas działania (złożoność czasowa) – analiza przypadku średniego
Zachowanie algorytmu dla losowych danych wejściowych określa średnia (lub oczekiwana) złożoność.
Przypomnienie!
Ocena przydatności algorytmu – czas działania (złożoność czasowa)
Podsumowanie:
Miara wrażliwości pesymistycznej i miara wrażliwości oczekiwanej
informują, jak bardzo zachowanie algorytmu dla rzeczywistych
danych wejściowych może odbiegać od zachowania opisanego za
pomocą pesymistycznej i oczekiwanej złożoności czasowej.
Im większe są te wartości, tym algorytm jest bardziej wrażliwy na dane
wejściowe.
Ocena przydatności algorytmu – czas działania (złożoność czasowa) - przykład
Przykład:
Rozważmy zbiór danych ZDWn jako n-wyrazowych ciągów uporządkowanych
liczb naturalnych. Rozważmy dalej typowy algorytm w rodzaju „dziel i
zwyciężaj” sprawdzenia, czy liczba naturalna x jest elementem ciągu zdwZDWn.
Rozwiązanie:
Przyjmijmy, że ilość n elementów ciągu {a1,a2,…an} jest potęgą dwójki, czyli n=2k,
gdzie k jest pewną liczba naturalną. Sprawdzamy, czy x==an/2. Jeśli tak, to algorytm
kończy działanie, jeśli nie, to po sprawdzeniu, że x<an/2 przechodzimy do
przeszukania lewej połowy ciągu o ilości elementów równej n/2; jeśli spełniona jest
nierówność przeciwna, to przeszukujemy prawą połowę ciągu.
Maksymalną pesymistyczną liczbę porównań otrzymamy, gdy kolejne zagłębienia
rekurencyjne doprowadzą do zbioru dwuelementowego, dla którego dwa porównania
dadzą ostateczną odpowiedź dla zadania rozwiązywanego tym algorytmem.
Ocena przydatności algorytmu – czas działania (złożoność czasowa) - przykład
Otrzymujemy:
Tmax(n)=Tmax(n/2)+2,
gdzie 2 stanowią dwa dodatkowe porównania na każdym etapie.
Zatem dla
Ponieważ k=log2n, zatem
Tmax(n)=2*(log2n)
Dostajemy po rozwinięciu postać funkcji pesymistycznej złożoności
czasowej:
Tmax(n)=Tmax(n/2)+2=Tmax(2k-1)+2=Tmax(2k-2)+2+2=…=
=Tmax(2k-(k-1))+(k-1)*2=Tmax(2)+(k-1)*2=2+(k-1)*2=2*k.
Ocena przydatności algorytmu – czas działania (złożoność czasowa) - przykład
Jest to zatem kres górny zbioru liczb, które powstają jako różnice ilości
operacji dominujących. Zatem od liczby największej z możliwych
należy odjąć najmniejszą z możliwych, żeby otrzymać taki kres górny.
Ponieważ najmniejszą ilością porównań dla dowolnego n jest jedno
porównanie, a największa ilość wyrażą się obliczoną właśnie
Tmax(n)=2*(log2n), to = =2*(log2n)-1
Policzmy teraz pesymistyczną wrażliwość tego algorytmu. Przypomnijmy, że
Pesymistyczna wrażliwość złożoności czasowej jest zatem duża i
możemy się spodziewać dużej zmienności złożoności obliczeniowej.
Ocena przydatności algorytmu – czas działania (złożoność czasowa) - przykład
Policzmy teraz typową wartość złożoności obliczeniowej, czyli dla losowo
wybranych n liczb. Przypomnijmy:
Określmy kolejno elementy tej definicji:
n={zdwZDWn} – zbiór zdarzeń elementarnych,
Xn – zmienna losowa, której wartością jest l(zdw)- liczba operacji dominujących na n,
pnk –rozkład zmiennej losowej Xn, czyli prawdopodobieństwo, że dla danych
wejściowych rozmiaru n algorytm wykona k operacji dominujących, tzn. pnk=p{zdw
n: l(zdw)=k}, przy k całkowitym, k [1, 2*(log2n) ].
Ocena przydatności algorytmu – czas działania (złożoność czasowa) - przykład
Ponieważ nasze prawdopodobieństwo pnk nie zależy od k, więc
pnk=1/(2*log2n) dla każdego całkowitego k [1, 2*(log2n)]. Stąd
nk
k
nk
k
nk
knk knnkpk
222 *log2
12
*log2
12
*log2
1
*)log*2/1()))log*2/(1(*()*(
nnn
nn
n
n
221
22*log21
22*log21
2
loglog*)log*21(*
)log*2(**))log*2/(1(
2
2
Zauważmy, że Tśr(n) jest o ½ większe od połowy Tmax(n).
Ocena przydatności algorytmu – czas działania (złożoność czasowa) - przykład
Obliczmy na koniec miarę wrażliwości oczekiwanej algorytmu.
W naszym przypadku sumujemy po całkowitych k [1, 2*(log2n)]. Stąd
otrzymujemy wyniki:
0
2))(()(k
nkśr pnTkn
Ocena przydatności algorytmu – czas działania (złożoność czasowa) - przykład
Otrzymane wyniki są może mało czytelne, ale można je przybliżać,
wykorzystując oszacowania asymptotyczne.
)1)(log4(...
))log2/1(())(()(
2212
1
*log2
1*log212
2
*log2
1
22
2
2
n
nkpnTknn
kn
n
knkśr
Szczegółowe rachunki na tablicy
Takie oszacowania zostaną podane później