background image

 

Krzysztof Pancerz

Algorytmika i struktury danych

Algorytmy 

i

struktury danych

WYKŁAD 2

Dr inż. Krzysztof Pancerz

background image

 

Krzysztof Pancerz

Algorytmika i struktury danych

Notacja O

f , g – funkcje o wartościach nieujemnych określone 
w dziedzinie nieujemnych liczb całkowitych. 
Piszemy:  

i mówimy, że funkcja f(n) jest co najwyżej rzędu 

g(n) jeśli istnieją stałe c>0 oraz n

0

 takie, że:

Mówimy, że g jest asymptotycznym ograniczeniem 

górnym dla f.

f

n=On

f

ncn dla każdego nn

background image

 

Krzysztof Pancerz

Algorytmika i struktury danych

Notacja O (cd.)

Przykład

dla każdego n≥1, możemy przyjąć c=13 oraz n

0

=1. Stąd: 

f

n=10 n

2

2 n1

10 n

2

2 n1 10 n

2

2 n

2

n

2

=13 n

2

10 n

2

2 n1 =n

2

background image

 

Krzysztof Pancerz

Algorytmika i struktury danych

Notacja Ω

f , g – funkcje o wartościach nieujemnych określone 
w dziedzinie nieujemnych liczb całkowitych. 
Piszemy:

i mówimy, że funkcja f(n) jest co najmniej rzędu 

g(n) jeśli istnieją stałe c>0 oraz n

0

 takie, że:

Mówimy, że g jest asymptotycznym ograniczeniem 

dolnym dla f.

f

n=n

f

ncn dla każdego nn

background image

 

Krzysztof Pancerz

Algorytmika i struktury danych

Notacja Ω (cd.)

Przykład

dla każdego n≥1, możemy przyjąć c=10 oraz n

0

=1. Stąd: 

f

n=10 n

2

2 n1

10 n

2

2 n1 10 n

2

10 n

2

2 n1 =n

2

background image

 

Krzysztof Pancerz

Algorytmika i struktury danych

Notacja θ

f , g – funkcje o wartościach nieujemnych określone 
w dziedzinie nieujemnych liczb całkowitych. 
Piszemy:  

i mówimy, że f(n) jest dokładnie rzędu g(n) jeśli 

istnieją stałe c

1

>0, c

2

>0 oraz n

0

 takie, że:

Mówimy, że g jest asymptotycznym dokładnym 

oszacowaniem dla f.

f

n=n

c

n nc

n dla każdego nn

background image

 

Krzysztof Pancerz

Algorytmika i struktury danych

Notacja θ (cd.)

Przykład

 

Ponieważ:

oraz

więc

f

n=10 n

2

2 n1

10 n

2

2 n1 =On

2

10 n

2

2 n1 =n

2

10 n

2

2 n1 =n

2

background image

 

Krzysztof Pancerz

Algorytmika i struktury danych

Ograniczenia asymptotyczne

background image

 

Krzysztof Pancerz

Algorytmika i struktury danych

Ograniczenia asymptotyczne (cd.)

Twierdzenie

Niech

będzie wielomianem stopnia k o wartościach dodatnich (tj. 

p(n)>0 dla każdego n) określonym w dziedzinie 
nieujemnych liczb całkowitych. Wówczas:

p

n=a

k

n

k

a

k

−1

n

k

−1

...a

n

a

0

p

n=n

k

background image

 

Krzysztof Pancerz

Algorytmika i struktury danych

Ograniczenia asymptotyczne (cd.)

Inne zależności:

log n

n dla każdego n1

1

2...n=n

2

log n!

=log n

i

=1

n

i

=log n

background image

 

Krzysztof Pancerz

Algorytmika i struktury danych

Złożoność obliczeniowa algorytmów (cd.)

Złożoność obliczeniowa algorytmu określana 
jest przez zasoby systemu komputerowego 
(przede wszystkim czas działania i ilość 
zajmowanej pamięci) niezbędne do realizacji 
algorytmu.

Rodzaje złożoności obliczeniowej:

złożoność czasowa,

złożoność pamięciowa.

Złożoność obliczeniowa (czasowa i 
pamięciowa) algorytmu podawana jest jako 
funkcja rozmiaru danych wejściowych n.

background image

 

Krzysztof Pancerz

Algorytmika i struktury danych

Złożoność obliczeniowa algorytmów

Przy określaniu złożoności czasowej 
uwzględnia się tzw. operacje dominujące 
(podstawowe) w algorytmie. 

Rodzaje złożoności czasowej:

pesymistyczna (złożoność w najgorszym 

przypadku),

średnia (oczekiwana). 

background image

 

Krzysztof Pancerz

Algorytmika i struktury danych

Podstawowe złożoności obliczeniowe

Złożoność logarytmiczna O(log n)

Złożoność liniowa O(n)

Złożoność liniowo-logarytmiczna O(log n)

Złożoność kwadratowa O(n

2

)

Złożoności wielomianowe O(n

3

), O(n

4

), ...

Złożoność wykładnicza O(2

n

)

Złożoność silnia O(n!)

background image

 

Krzysztof Pancerz

Algorytmika i struktury danych

Podstawowe złożoności obliczeniowe (cd.)

n

10

100

1000

O(n)

10 μs

100 μs

1 ms

O(n

2

)

100 μs

10 ms

1 s

O(2

n

)

10 ms

3,17•10

lat

background image

 

Krzysztof Pancerz

Algorytmika i struktury danych

Oszacowanie złożoności

Przykład

 n – rozmiar danych wejściowych.

n

10

1 021

1 000

100

100 201

100 000

1 000

10 002 001

10 000 000

10 000 

1 000 020 001

1 000 000 000

t

n=10 n

2

2 n1

10 n

2

2 n1

10 n

2

background image

 

Krzysztof Pancerz

Algorytmika i struktury danych

Przykład 1

Określić złożoność obliczeniową następującego 
fragmentu algorytmu:

for(i=1; i<=n; i++)
{
   for(j=1; j<=i; j++)
   { k=2*k; }
}

Operacja dominująca: mnożenie

background image

 

Krzysztof Pancerz

Algorytmika i struktury danych

Przykład 2

Określić złożoność obliczeniową następującego 
fragmentu algorytmu:

for(int i=1; i<n; i++)
{ for(int j=n-1; j>=i; j--)

{ if(tab[j-1]>tab[j])

 {
 t=tab[j-1]; tab[j-1]=tab[j]; tab[j]=t;

 }

}

}

Operacja dominująca: porównanie

background image

 

Krzysztof Pancerz

Algorytmika i struktury danych

Trudność problemów

Problemy, dla których zaproponowano 
algorytmy o złożoności wielomianowej (klasa 
P).

Problemy, których trudność została 
udowodniona w czasie wielomianowym (klasa 
NP).

Problemy, dla których trudność nie została 
udowodniona, jednak nie zaproponowano 
algorytmów o złożoności wielomianowej 
rozwiązujących te problemy (klasa problemów 
NP-zupełnych).

background image

 

Krzysztof Pancerz

Algorytmika i struktury danych

Niezmiennik instrukcji iteracyjnej (pętli)

Niezmiennik instrukcji iteracyjnej (pętli) – 
warunek opisujący wartości zmiennych w 
trakcie wykonywania algorytmu taki, że:

jest on spełniony na początku instrukcji iteracyjnej,

każde powtórzenie instrukcji iteracyjnej zachowuje 

go,

jest on spełniony po zakończeniu instrukcji 

iteracyjnej.

background image

 

Krzysztof Pancerz

Algorytmika i struktury danych

Niezmiennik instrukcji iteracyjnej (pętli)

 x=0∧ y=m∧m0∧n0∧ y0

x=m− yn]∧[ y0 ]

x=m− yn]∧[ y=0 ]⇒[ x=mn]

Przykład