Oznaczenia: 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.

Download Report

Transcript Oznaczenia: 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.

Slide 1

Oznaczenia:

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

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).

Miara wrażliwości pesymistycznej algorytmu bada, na ile
wielkość Tmax(n) odzwierciedla rzeczywisty czas działania
algorytmu.

Zachowanie algorytmu dla losowych danych wejściowych określa średnia (lub
oczekiwana) złożoność.

Przypomnienie!

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.

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
zdwZDWn.
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 xprzeszukania 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.

Zatem dla

Otrzymujemy:
Tmax(n)=Tmax(n/2)+2,
gdzie 2 stanowią dwa dodatkowe porównania na każdym etapie.
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.

Ponieważ k=log2n, zatem
Tmax(n)=2*(log2n)

Policzmy teraz pesymistyczną wrażliwość tego algorytmu. Przypomnijmy, że

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
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.

Policzmy teraz typową wartość złożoności obliczeniowej, czyli dla losowo
wybranych n liczb. Przypomnijmy:

Określmy kolejno elementy tej definicji:

n={zdwZDWn} – 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) ].

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

k  2 *log 2 n

 (k * p



k  2 *log 2 n
nk

)

k 1

 (1 /( 2 * log


1
2 *log 2 n

 ( k * (1 /( 2 * log

k  2 *log 2 n
2

n )))  (1 / 2 * log

2

n) *

k 1

2

n )) *

1  2 *log 2 n

* (1  2 * log

2
2

* ( 2 * log

n ) * log

2

n

k
k 1

2
1
2

n) 
 log

2

n

Zauważmy, że Tśr(n) jest o ½ większe od połowy Tmax(n).



Obliczmy na koniec miarę wrażliwości oczekiwanej algorytmu.

 (n) 

 (k  T

2

śr

( n )) p nk

k  0

W naszym przypadku sumujemy po całkowitych k [1, 2*(log2n)]. Stąd
otrzymujemy wyniki:

 (n) 

2 *log 2 n

2 *log 2 n



( k  T śr ( n )) p nk 
2

1
12

( 4 (log

2

n ))

2

k 1

k 1

 ... 



( k  (1 / 2  log

n )  1)
2

2

Szczegółowe rachunki na tablicy

Otrzymane wyniki są może mało czytelne, ale można je przybliżać,
wykorzystując oszacowania asymptotyczne.

Takie oszacowania zostaną
podane później

1
2 *log 2 n




Slide 2

Oznaczenia:

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

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).

Miara wrażliwości pesymistycznej algorytmu bada, na ile
wielkość Tmax(n) odzwierciedla rzeczywisty czas działania
algorytmu.

Zachowanie algorytmu dla losowych danych wejściowych określa średnia (lub
oczekiwana) złożoność.

Przypomnienie!

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.

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
zdwZDWn.
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 xprzeszukania 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.

Zatem dla

Otrzymujemy:
Tmax(n)=Tmax(n/2)+2,
gdzie 2 stanowią dwa dodatkowe porównania na każdym etapie.
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.

Ponieważ k=log2n, zatem
Tmax(n)=2*(log2n)

Policzmy teraz pesymistyczną wrażliwość tego algorytmu. Przypomnijmy, że

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
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.

Policzmy teraz typową wartość złożoności obliczeniowej, czyli dla losowo
wybranych n liczb. Przypomnijmy:

Określmy kolejno elementy tej definicji:

n={zdwZDWn} – 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) ].

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

k  2 *log 2 n

 (k * p



k  2 *log 2 n
nk

)

k 1

 (1 /( 2 * log


1
2 *log 2 n

 ( k * (1 /( 2 * log

k  2 *log 2 n
2

n )))  (1 / 2 * log

2

n) *

k 1

2

n )) *

1  2 *log 2 n

* (1  2 * log

2
2

* ( 2 * log

n ) * log

2

n

k
k 1

2
1
2

n) 
 log

2

n

Zauważmy, że Tśr(n) jest o ½ większe od połowy Tmax(n).



Obliczmy na koniec miarę wrażliwości oczekiwanej algorytmu.

 (n) 

 (k  T

2

śr

( n )) p nk

k  0

W naszym przypadku sumujemy po całkowitych k [1, 2*(log2n)]. Stąd
otrzymujemy wyniki:

 (n) 

2 *log 2 n

2 *log 2 n



( k  T śr ( n )) p nk 
2

1
12

( 4 (log

2

n ))

2

k 1

k 1

 ... 



( k  (1 / 2  log

n )  1)
2

2

Szczegółowe rachunki na tablicy

Otrzymane wyniki są może mało czytelne, ale można je przybliżać,
wykorzystując oszacowania asymptotyczne.

Takie oszacowania zostaną
podane później

1
2 *log 2 n




Slide 3

Oznaczenia:

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

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).

Miara wrażliwości pesymistycznej algorytmu bada, na ile
wielkość Tmax(n) odzwierciedla rzeczywisty czas działania
algorytmu.

Zachowanie algorytmu dla losowych danych wejściowych określa średnia (lub
oczekiwana) złożoność.

Przypomnienie!

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.

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
zdwZDWn.
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 xprzeszukania 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.

Zatem dla

Otrzymujemy:
Tmax(n)=Tmax(n/2)+2,
gdzie 2 stanowią dwa dodatkowe porównania na każdym etapie.
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.

Ponieważ k=log2n, zatem
Tmax(n)=2*(log2n)

Policzmy teraz pesymistyczną wrażliwość tego algorytmu. Przypomnijmy, że

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
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.

Policzmy teraz typową wartość złożoności obliczeniowej, czyli dla losowo
wybranych n liczb. Przypomnijmy:

Określmy kolejno elementy tej definicji:

n={zdwZDWn} – 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) ].

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

k  2 *log 2 n

 (k * p



k  2 *log 2 n
nk

)

k 1

 (1 /( 2 * log


1
2 *log 2 n

 ( k * (1 /( 2 * log

k  2 *log 2 n
2

n )))  (1 / 2 * log

2

n) *

k 1

2

n )) *

1  2 *log 2 n

* (1  2 * log

2
2

* ( 2 * log

n ) * log

2

n

k
k 1

2
1
2

n) 
 log

2

n

Zauważmy, że Tśr(n) jest o ½ większe od połowy Tmax(n).



Obliczmy na koniec miarę wrażliwości oczekiwanej algorytmu.

 (n) 

 (k  T

2

śr

( n )) p nk

k  0

W naszym przypadku sumujemy po całkowitych k [1, 2*(log2n)]. Stąd
otrzymujemy wyniki:

 (n) 

2 *log 2 n

2 *log 2 n



( k  T śr ( n )) p nk 
2

1
12

( 4 (log

2

n ))

2

k 1

k 1

 ... 



( k  (1 / 2  log

n )  1)
2

2

Szczegółowe rachunki na tablicy

Otrzymane wyniki są może mało czytelne, ale można je przybliżać,
wykorzystując oszacowania asymptotyczne.

Takie oszacowania zostaną
podane później

1
2 *log 2 n




Slide 4

Oznaczenia:

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

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).

Miara wrażliwości pesymistycznej algorytmu bada, na ile
wielkość Tmax(n) odzwierciedla rzeczywisty czas działania
algorytmu.

Zachowanie algorytmu dla losowych danych wejściowych określa średnia (lub
oczekiwana) złożoność.

Przypomnienie!

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.

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
zdwZDWn.
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 xprzeszukania 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.

Zatem dla

Otrzymujemy:
Tmax(n)=Tmax(n/2)+2,
gdzie 2 stanowią dwa dodatkowe porównania na każdym etapie.
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.

Ponieważ k=log2n, zatem
Tmax(n)=2*(log2n)

Policzmy teraz pesymistyczną wrażliwość tego algorytmu. Przypomnijmy, że

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
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.

Policzmy teraz typową wartość złożoności obliczeniowej, czyli dla losowo
wybranych n liczb. Przypomnijmy:

Określmy kolejno elementy tej definicji:

n={zdwZDWn} – 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) ].

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

k  2 *log 2 n

 (k * p



k  2 *log 2 n
nk

)

k 1

 (1 /( 2 * log


1
2 *log 2 n

 ( k * (1 /( 2 * log

k  2 *log 2 n
2

n )))  (1 / 2 * log

2

n) *

k 1

2

n )) *

1  2 *log 2 n

* (1  2 * log

2
2

* ( 2 * log

n ) * log

2

n

k
k 1

2
1
2

n) 
 log

2

n

Zauważmy, że Tśr(n) jest o ½ większe od połowy Tmax(n).



Obliczmy na koniec miarę wrażliwości oczekiwanej algorytmu.

 (n) 

 (k  T

2

śr

( n )) p nk

k  0

W naszym przypadku sumujemy po całkowitych k [1, 2*(log2n)]. Stąd
otrzymujemy wyniki:

 (n) 

2 *log 2 n

2 *log 2 n



( k  T śr ( n )) p nk 
2

1
12

( 4 (log

2

n ))

2

k 1

k 1

 ... 



( k  (1 / 2  log

n )  1)
2

2

Szczegółowe rachunki na tablicy

Otrzymane wyniki są może mało czytelne, ale można je przybliżać,
wykorzystując oszacowania asymptotyczne.

Takie oszacowania zostaną
podane później

1
2 *log 2 n




Slide 5

Oznaczenia:

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

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).

Miara wrażliwości pesymistycznej algorytmu bada, na ile
wielkość Tmax(n) odzwierciedla rzeczywisty czas działania
algorytmu.

Zachowanie algorytmu dla losowych danych wejściowych określa średnia (lub
oczekiwana) złożoność.

Przypomnienie!

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.

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
zdwZDWn.
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 xprzeszukania 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.

Zatem dla

Otrzymujemy:
Tmax(n)=Tmax(n/2)+2,
gdzie 2 stanowią dwa dodatkowe porównania na każdym etapie.
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.

Ponieważ k=log2n, zatem
Tmax(n)=2*(log2n)

Policzmy teraz pesymistyczną wrażliwość tego algorytmu. Przypomnijmy, że

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
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.

Policzmy teraz typową wartość złożoności obliczeniowej, czyli dla losowo
wybranych n liczb. Przypomnijmy:

Określmy kolejno elementy tej definicji:

n={zdwZDWn} – 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) ].

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

k  2 *log 2 n

 (k * p



k  2 *log 2 n
nk

)

k 1

 (1 /( 2 * log


1
2 *log 2 n

 ( k * (1 /( 2 * log

k  2 *log 2 n
2

n )))  (1 / 2 * log

2

n) *

k 1

2

n )) *

1  2 *log 2 n

* (1  2 * log

2
2

* ( 2 * log

n ) * log

2

n

k
k 1

2
1
2

n) 
 log

2

n

Zauważmy, że Tśr(n) jest o ½ większe od połowy Tmax(n).



Obliczmy na koniec miarę wrażliwości oczekiwanej algorytmu.

 (n) 

 (k  T

2

śr

( n )) p nk

k  0

W naszym przypadku sumujemy po całkowitych k [1, 2*(log2n)]. Stąd
otrzymujemy wyniki:

 (n) 

2 *log 2 n

2 *log 2 n



( k  T śr ( n )) p nk 
2

1
12

( 4 (log

2

n ))

2

k 1

k 1

 ... 



( k  (1 / 2  log

n )  1)
2

2

Szczegółowe rachunki na tablicy

Otrzymane wyniki są może mało czytelne, ale można je przybliżać,
wykorzystując oszacowania asymptotyczne.

Takie oszacowania zostaną
podane później

1
2 *log 2 n




Slide 6

Oznaczenia:

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

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).

Miara wrażliwości pesymistycznej algorytmu bada, na ile
wielkość Tmax(n) odzwierciedla rzeczywisty czas działania
algorytmu.

Zachowanie algorytmu dla losowych danych wejściowych określa średnia (lub
oczekiwana) złożoność.

Przypomnienie!

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.

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
zdwZDWn.
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 xprzeszukania 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.

Zatem dla

Otrzymujemy:
Tmax(n)=Tmax(n/2)+2,
gdzie 2 stanowią dwa dodatkowe porównania na każdym etapie.
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.

Ponieważ k=log2n, zatem
Tmax(n)=2*(log2n)

Policzmy teraz pesymistyczną wrażliwość tego algorytmu. Przypomnijmy, że

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
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.

Policzmy teraz typową wartość złożoności obliczeniowej, czyli dla losowo
wybranych n liczb. Przypomnijmy:

Określmy kolejno elementy tej definicji:

n={zdwZDWn} – 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) ].

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

k  2 *log 2 n

 (k * p



k  2 *log 2 n
nk

)

k 1

 (1 /( 2 * log


1
2 *log 2 n

 ( k * (1 /( 2 * log

k  2 *log 2 n
2

n )))  (1 / 2 * log

2

n) *

k 1

2

n )) *

1  2 *log 2 n

* (1  2 * log

2
2

* ( 2 * log

n ) * log

2

n

k
k 1

2
1
2

n) 
 log

2

n

Zauważmy, że Tśr(n) jest o ½ większe od połowy Tmax(n).



Obliczmy na koniec miarę wrażliwości oczekiwanej algorytmu.

 (n) 

 (k  T

2

śr

( n )) p nk

k  0

W naszym przypadku sumujemy po całkowitych k [1, 2*(log2n)]. Stąd
otrzymujemy wyniki:

 (n) 

2 *log 2 n

2 *log 2 n



( k  T śr ( n )) p nk 
2

1
12

( 4 (log

2

n ))

2

k 1

k 1

 ... 



( k  (1 / 2  log

n )  1)
2

2

Szczegółowe rachunki na tablicy

Otrzymane wyniki są może mało czytelne, ale można je przybliżać,
wykorzystując oszacowania asymptotyczne.

Takie oszacowania zostaną
podane później

1
2 *log 2 n




Slide 7

Oznaczenia:

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

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).

Miara wrażliwości pesymistycznej algorytmu bada, na ile
wielkość Tmax(n) odzwierciedla rzeczywisty czas działania
algorytmu.

Zachowanie algorytmu dla losowych danych wejściowych określa średnia (lub
oczekiwana) złożoność.

Przypomnienie!

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.

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
zdwZDWn.
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 xprzeszukania 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.

Zatem dla

Otrzymujemy:
Tmax(n)=Tmax(n/2)+2,
gdzie 2 stanowią dwa dodatkowe porównania na każdym etapie.
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.

Ponieważ k=log2n, zatem
Tmax(n)=2*(log2n)

Policzmy teraz pesymistyczną wrażliwość tego algorytmu. Przypomnijmy, że

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
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.

Policzmy teraz typową wartość złożoności obliczeniowej, czyli dla losowo
wybranych n liczb. Przypomnijmy:

Określmy kolejno elementy tej definicji:

n={zdwZDWn} – 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) ].

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

k  2 *log 2 n

 (k * p



k  2 *log 2 n
nk

)

k 1

 (1 /( 2 * log


1
2 *log 2 n

 ( k * (1 /( 2 * log

k  2 *log 2 n
2

n )))  (1 / 2 * log

2

n) *

k 1

2

n )) *

1  2 *log 2 n

* (1  2 * log

2
2

* ( 2 * log

n ) * log

2

n

k
k 1

2
1
2

n) 
 log

2

n

Zauważmy, że Tśr(n) jest o ½ większe od połowy Tmax(n).



Obliczmy na koniec miarę wrażliwości oczekiwanej algorytmu.

 (n) 

 (k  T

2

śr

( n )) p nk

k  0

W naszym przypadku sumujemy po całkowitych k [1, 2*(log2n)]. Stąd
otrzymujemy wyniki:

 (n) 

2 *log 2 n

2 *log 2 n



( k  T śr ( n )) p nk 
2

1
12

( 4 (log

2

n ))

2

k 1

k 1

 ... 



( k  (1 / 2  log

n )  1)
2

2

Szczegółowe rachunki na tablicy

Otrzymane wyniki są może mało czytelne, ale można je przybliżać,
wykorzystując oszacowania asymptotyczne.

Takie oszacowania zostaną
podane później

1
2 *log 2 n




Slide 8

Oznaczenia:

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

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).

Miara wrażliwości pesymistycznej algorytmu bada, na ile
wielkość Tmax(n) odzwierciedla rzeczywisty czas działania
algorytmu.

Zachowanie algorytmu dla losowych danych wejściowych określa średnia (lub
oczekiwana) złożoność.

Przypomnienie!

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.

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
zdwZDWn.
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 xprzeszukania 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.

Zatem dla

Otrzymujemy:
Tmax(n)=Tmax(n/2)+2,
gdzie 2 stanowią dwa dodatkowe porównania na każdym etapie.
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.

Ponieważ k=log2n, zatem
Tmax(n)=2*(log2n)

Policzmy teraz pesymistyczną wrażliwość tego algorytmu. Przypomnijmy, że

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
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.

Policzmy teraz typową wartość złożoności obliczeniowej, czyli dla losowo
wybranych n liczb. Przypomnijmy:

Określmy kolejno elementy tej definicji:

n={zdwZDWn} – 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) ].

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

k  2 *log 2 n

 (k * p



k  2 *log 2 n
nk

)

k 1

 (1 /( 2 * log


1
2 *log 2 n

 ( k * (1 /( 2 * log

k  2 *log 2 n
2

n )))  (1 / 2 * log

2

n) *

k 1

2

n )) *

1  2 *log 2 n

* (1  2 * log

2
2

* ( 2 * log

n ) * log

2

n

k
k 1

2
1
2

n) 
 log

2

n

Zauważmy, że Tśr(n) jest o ½ większe od połowy Tmax(n).



Obliczmy na koniec miarę wrażliwości oczekiwanej algorytmu.

 (n) 

 (k  T

2

śr

( n )) p nk

k  0

W naszym przypadku sumujemy po całkowitych k [1, 2*(log2n)]. Stąd
otrzymujemy wyniki:

 (n) 

2 *log 2 n

2 *log 2 n



( k  T śr ( n )) p nk 
2

1
12

( 4 (log

2

n ))

2

k 1

k 1

 ... 



( k  (1 / 2  log

n )  1)
2

2

Szczegółowe rachunki na tablicy

Otrzymane wyniki są może mało czytelne, ale można je przybliżać,
wykorzystując oszacowania asymptotyczne.

Takie oszacowania zostaną
podane później

1
2 *log 2 n




Slide 9

Oznaczenia:

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

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).

Miara wrażliwości pesymistycznej algorytmu bada, na ile
wielkość Tmax(n) odzwierciedla rzeczywisty czas działania
algorytmu.

Zachowanie algorytmu dla losowych danych wejściowych określa średnia (lub
oczekiwana) złożoność.

Przypomnienie!

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.

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
zdwZDWn.
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 xprzeszukania 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.

Zatem dla

Otrzymujemy:
Tmax(n)=Tmax(n/2)+2,
gdzie 2 stanowią dwa dodatkowe porównania na każdym etapie.
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.

Ponieważ k=log2n, zatem
Tmax(n)=2*(log2n)

Policzmy teraz pesymistyczną wrażliwość tego algorytmu. Przypomnijmy, że

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
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.

Policzmy teraz typową wartość złożoności obliczeniowej, czyli dla losowo
wybranych n liczb. Przypomnijmy:

Określmy kolejno elementy tej definicji:

n={zdwZDWn} – 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) ].

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

k  2 *log 2 n

 (k * p



k  2 *log 2 n
nk

)

k 1

 (1 /( 2 * log


1
2 *log 2 n

 ( k * (1 /( 2 * log

k  2 *log 2 n
2

n )))  (1 / 2 * log

2

n) *

k 1

2

n )) *

1  2 *log 2 n

* (1  2 * log

2
2

* ( 2 * log

n ) * log

2

n

k
k 1

2
1
2

n) 
 log

2

n

Zauważmy, że Tśr(n) jest o ½ większe od połowy Tmax(n).



Obliczmy na koniec miarę wrażliwości oczekiwanej algorytmu.

 (n) 

 (k  T

2

śr

( n )) p nk

k  0

W naszym przypadku sumujemy po całkowitych k [1, 2*(log2n)]. Stąd
otrzymujemy wyniki:

 (n) 

2 *log 2 n

2 *log 2 n



( k  T śr ( n )) p nk 
2

1
12

( 4 (log

2

n ))

2

k 1

k 1

 ... 



( k  (1 / 2  log

n )  1)
2

2

Szczegółowe rachunki na tablicy

Otrzymane wyniki są może mało czytelne, ale można je przybliżać,
wykorzystując oszacowania asymptotyczne.

Takie oszacowania zostaną
podane później

1
2 *log 2 n




Slide 10

Oznaczenia:

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

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).

Miara wrażliwości pesymistycznej algorytmu bada, na ile
wielkość Tmax(n) odzwierciedla rzeczywisty czas działania
algorytmu.

Zachowanie algorytmu dla losowych danych wejściowych określa średnia (lub
oczekiwana) złożoność.

Przypomnienie!

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.

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
zdwZDWn.
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 xprzeszukania 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.

Zatem dla

Otrzymujemy:
Tmax(n)=Tmax(n/2)+2,
gdzie 2 stanowią dwa dodatkowe porównania na każdym etapie.
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.

Ponieważ k=log2n, zatem
Tmax(n)=2*(log2n)

Policzmy teraz pesymistyczną wrażliwość tego algorytmu. Przypomnijmy, że

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
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.

Policzmy teraz typową wartość złożoności obliczeniowej, czyli dla losowo
wybranych n liczb. Przypomnijmy:

Określmy kolejno elementy tej definicji:

n={zdwZDWn} – 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) ].

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

k  2 *log 2 n

 (k * p



k  2 *log 2 n
nk

)

k 1

 (1 /( 2 * log


1
2 *log 2 n

 ( k * (1 /( 2 * log

k  2 *log 2 n
2

n )))  (1 / 2 * log

2

n) *

k 1

2

n )) *

1  2 *log 2 n

* (1  2 * log

2
2

* ( 2 * log

n ) * log

2

n

k
k 1

2
1
2

n) 
 log

2

n

Zauważmy, że Tśr(n) jest o ½ większe od połowy Tmax(n).



Obliczmy na koniec miarę wrażliwości oczekiwanej algorytmu.

 (n) 

 (k  T

2

śr

( n )) p nk

k  0

W naszym przypadku sumujemy po całkowitych k [1, 2*(log2n)]. Stąd
otrzymujemy wyniki:

 (n) 

2 *log 2 n

2 *log 2 n



( k  T śr ( n )) p nk 
2

1
12

( 4 (log

2

n ))

2

k 1

k 1

 ... 



( k  (1 / 2  log

n )  1)
2

2

Szczegółowe rachunki na tablicy

Otrzymane wyniki są może mało czytelne, ale można je przybliżać,
wykorzystując oszacowania asymptotyczne.

Takie oszacowania zostaną
podane później

1
2 *log 2 n




Slide 11

Oznaczenia:

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

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).

Miara wrażliwości pesymistycznej algorytmu bada, na ile
wielkość Tmax(n) odzwierciedla rzeczywisty czas działania
algorytmu.

Zachowanie algorytmu dla losowych danych wejściowych określa średnia (lub
oczekiwana) złożoność.

Przypomnienie!

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.

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
zdwZDWn.
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 xprzeszukania 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.

Zatem dla

Otrzymujemy:
Tmax(n)=Tmax(n/2)+2,
gdzie 2 stanowią dwa dodatkowe porównania na każdym etapie.
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.

Ponieważ k=log2n, zatem
Tmax(n)=2*(log2n)

Policzmy teraz pesymistyczną wrażliwość tego algorytmu. Przypomnijmy, że

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
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.

Policzmy teraz typową wartość złożoności obliczeniowej, czyli dla losowo
wybranych n liczb. Przypomnijmy:

Określmy kolejno elementy tej definicji:

n={zdwZDWn} – 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) ].

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

k  2 *log 2 n

 (k * p



k  2 *log 2 n
nk

)

k 1

 (1 /( 2 * log


1
2 *log 2 n

 ( k * (1 /( 2 * log

k  2 *log 2 n
2

n )))  (1 / 2 * log

2

n) *

k 1

2

n )) *

1  2 *log 2 n

* (1  2 * log

2
2

* ( 2 * log

n ) * log

2

n

k
k 1

2
1
2

n) 
 log

2

n

Zauważmy, że Tśr(n) jest o ½ większe od połowy Tmax(n).



Obliczmy na koniec miarę wrażliwości oczekiwanej algorytmu.

 (n) 

 (k  T

2

śr

( n )) p nk

k  0

W naszym przypadku sumujemy po całkowitych k [1, 2*(log2n)]. Stąd
otrzymujemy wyniki:

 (n) 

2 *log 2 n

2 *log 2 n



( k  T śr ( n )) p nk 
2

1
12

( 4 (log

2

n ))

2

k 1

k 1

 ... 



( k  (1 / 2  log

n )  1)
2

2

Szczegółowe rachunki na tablicy

Otrzymane wyniki są może mało czytelne, ale można je przybliżać,
wykorzystując oszacowania asymptotyczne.

Takie oszacowania zostaną
podane później

1
2 *log 2 n




Slide 12

Oznaczenia:

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

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).

Miara wrażliwości pesymistycznej algorytmu bada, na ile
wielkość Tmax(n) odzwierciedla rzeczywisty czas działania
algorytmu.

Zachowanie algorytmu dla losowych danych wejściowych określa średnia (lub
oczekiwana) złożoność.

Przypomnienie!

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.

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
zdwZDWn.
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 xprzeszukania 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.

Zatem dla

Otrzymujemy:
Tmax(n)=Tmax(n/2)+2,
gdzie 2 stanowią dwa dodatkowe porównania na każdym etapie.
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.

Ponieważ k=log2n, zatem
Tmax(n)=2*(log2n)

Policzmy teraz pesymistyczną wrażliwość tego algorytmu. Przypomnijmy, że

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
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.

Policzmy teraz typową wartość złożoności obliczeniowej, czyli dla losowo
wybranych n liczb. Przypomnijmy:

Określmy kolejno elementy tej definicji:

n={zdwZDWn} – 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) ].

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

k  2 *log 2 n

 (k * p



k  2 *log 2 n
nk

)

k 1

 (1 /( 2 * log


1
2 *log 2 n

 ( k * (1 /( 2 * log

k  2 *log 2 n
2

n )))  (1 / 2 * log

2

n) *

k 1

2

n )) *

1  2 *log 2 n

* (1  2 * log

2
2

* ( 2 * log

n ) * log

2

n

k
k 1

2
1
2

n) 
 log

2

n

Zauważmy, że Tśr(n) jest o ½ większe od połowy Tmax(n).



Obliczmy na koniec miarę wrażliwości oczekiwanej algorytmu.

 (n) 

 (k  T

2

śr

( n )) p nk

k  0

W naszym przypadku sumujemy po całkowitych k [1, 2*(log2n)]. Stąd
otrzymujemy wyniki:

 (n) 

2 *log 2 n

2 *log 2 n



( k  T śr ( n )) p nk 
2

1
12

( 4 (log

2

n ))

2

k 1

k 1

 ... 



( k  (1 / 2  log

n )  1)
2

2

Szczegółowe rachunki na tablicy

Otrzymane wyniki są może mało czytelne, ale można je przybliżać,
wykorzystując oszacowania asymptotyczne.

Takie oszacowania zostaną
podane później

1
2 *log 2 n




Slide 13

Oznaczenia:

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

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).

Miara wrażliwości pesymistycznej algorytmu bada, na ile
wielkość Tmax(n) odzwierciedla rzeczywisty czas działania
algorytmu.

Zachowanie algorytmu dla losowych danych wejściowych określa średnia (lub
oczekiwana) złożoność.

Przypomnienie!

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.

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
zdwZDWn.
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 xprzeszukania 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.

Zatem dla

Otrzymujemy:
Tmax(n)=Tmax(n/2)+2,
gdzie 2 stanowią dwa dodatkowe porównania na każdym etapie.
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.

Ponieważ k=log2n, zatem
Tmax(n)=2*(log2n)

Policzmy teraz pesymistyczną wrażliwość tego algorytmu. Przypomnijmy, że

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
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.

Policzmy teraz typową wartość złożoności obliczeniowej, czyli dla losowo
wybranych n liczb. Przypomnijmy:

Określmy kolejno elementy tej definicji:

n={zdwZDWn} – 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) ].

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

k  2 *log 2 n

 (k * p



k  2 *log 2 n
nk

)

k 1

 (1 /( 2 * log


1
2 *log 2 n

 ( k * (1 /( 2 * log

k  2 *log 2 n
2

n )))  (1 / 2 * log

2

n) *

k 1

2

n )) *

1  2 *log 2 n

* (1  2 * log

2
2

* ( 2 * log

n ) * log

2

n

k
k 1

2
1
2

n) 
 log

2

n

Zauważmy, że Tśr(n) jest o ½ większe od połowy Tmax(n).



Obliczmy na koniec miarę wrażliwości oczekiwanej algorytmu.

 (n) 

 (k  T

2

śr

( n )) p nk

k  0

W naszym przypadku sumujemy po całkowitych k [1, 2*(log2n)]. Stąd
otrzymujemy wyniki:

 (n) 

2 *log 2 n

2 *log 2 n



( k  T śr ( n )) p nk 
2

1
12

( 4 (log

2

n ))

2

k 1

k 1

 ... 



( k  (1 / 2  log

n )  1)
2

2

Szczegółowe rachunki na tablicy

Otrzymane wyniki są może mało czytelne, ale można je przybliżać,
wykorzystując oszacowania asymptotyczne.

Takie oszacowania zostaną
podane później

1
2 *log 2 n