ćw2 Analiza złożoności obliczeniowej

background image

TEORETYCZNE

PODSTAWY

INFORMATYKI

Prowadzący:

ppor. mgr inż. Mariusz

CHMIELEWSKI

e-mail:

mchmiel@isi.wat.waw.pl

Temat 1:

Temat 1:

Analiza złożoności

Analiza złożoności

obliczeniowej algorytmów

obliczeniowej algorytmów

background image

ppor. mgr inż. Mariusz CHMIELEWSKI

2

Analiza złożoności obliczeniowej

Analiza złożoności czasowej algorytmu (ang. Time complexity analysis) to

określenie liczby wykonań operacji podstawowej dla każdej wartości
rozmiaru danych wejściowych.

Zakłada się że:

-

nie uwzględniamy szczegółów implementacji algorytmu;

-

operacja

elementarna

jest

zaimplementowana

w

sposób

najwydajniejszy z możliwych;

Wybór operacji podstawowej:

-

zależy od specyfiki analizowanego algorytmu;

-

potrzeb przeprowadzanej analizy (nie uwzględnia się instrukcji
sterujących);

-

możliwość wyboru więcej niż jednej operacji podstawowej;

Rodzaje złożoności czasowej:
1.

Złożoność czasowa w każdym przypadku – every-case time complexity

2.

Złożoność czasowa w najgorszym przypadku – worst-case time
complexity

3.

Złożoność czasowa w średnim przypadku – average-case time
complexity

4.

Złożoność czasowa w najlepszym przypadku – best-case time
complexity

Złożoność czasowa algorytmów

background image

ppor. mgr inż. Mariusz CHMIELEWSKI

3

Rodzaje złożoności czasowej

Złożoność czasowa w każdym przypadku – every-case time complexity -

T(n)

W przypadku, gdy operacja podstawowa jest zawsze wykonywana tę samą
liczbę razy dla każdej realizacji problemu o rozmiarze n.

Złożoność czasowa w najgorszym przypadku – worst-case time complexity

-

W(n)

W przypadku analizowanego algorytmu złożoność W(n) definiujemy jako

maksymalna liczbę wykonań

operacji podstawowej dla danych wejściowych o rozmiarze n.

Złożoność czasowa w średnim przypadku – average-case time complexity -

A(n)

W przypadku analizowanego algorytmu złożoność A(n) definiujemy jako

średnią (wartość oczekiwaną)

liczbę wykonań operacji podstawowej dla danych wejściowych o rozmiarze

n.

Złożoność czasowa w najlepszym przypadku – best-case time complexity -

B(n)

W przypadku analizowanego algorytmu złożoność B(n) definiujemy jako

minimalną liczbę wykonań

operacji podstawowej dla danych wejściowych o rozmiarze n.

background image

ppor. mgr inż. Mariusz CHMIELEWSKI

4

Wyszukiwanie sekwencyjne

– przykład analizy algorytmu

Algorytm nie posiada złożoności w każdym przypadku – zależność od
rozmiaru danych n.

Złożoność czasowa w średnim przypadku

Operacja podstawowa: porównanie elementu w tablicy z x.

Rozmiar danych wejściowych: n, liczba elementów znajdujących
się w tablicy

Przypadek gdy wyszukiwany element znajduje się w tablicy
danych wejściowych:

Przypadek gdy wyszukiwany element nie znajduje się w tablicy
danych wejściowych:

 

n

k

n

k

n

n

n

n

k

n

n

k

n

A

1

1

2

1

2

)

1

(

1

1

1

)

(

 

 

n

k

p

p

n

p

n

n

n

n

p

p

n

n

p

k

n

A

1

2

2

1

1

2

)

1

(

1

)

(

background image

ppor. mgr inż. Mariusz CHMIELEWSKI

5

Wyszukiwanie sekwencyjne

– przykład analizy algorytmu

Złożoność czasowa w najgorszym przypadku

Operacja podstawowa: porównanie elementu w tablicy z x.

Rozmiar danych wejściowych: n, liczba elementów
znajdujących się w tablicy

W(n) = n; przypadek kiedy ostatnim elementem w tablicy
jest element poszukiwany a więc algorytm wykona n
przebiegów

Złożoność czasowa w najlepszym przypadku

Operacja podstawowa: porównanie elementu w tablicy z x.

Rozmiar danych wejściowych: n, liczba elementów
znajdujących się w tablicy

B(n) = 1; przypadek kiedy nastąpi jedno wykonanie pętli
ponieważ wyszukiwany element znajduje się na początku
tablicy do przeszukiwania czyli x = S[1] gdzie S jest
tablicą zawierająca dane do przeszukiwania natomiast x
jest poszukiwanym elementem;

background image

ppor. mgr inż. Mariusz CHMIELEWSKI

6

Złożoność obliczeniowa i

asymptotyczna

Złożoność obliczeniowa:

miara służąca do porównywania efektywności

algorytmów. Mamy dwa kryteria efektywności:

czas i pamięć

.

Do oceny efektywności stosujemy jednostki logiczne
wyrażające związek miedzy rozmiarem danych
(wielkość pliku lub tablicy) N a ilością czasu T
potrzebna na ich przetworzenie.

Funkcja wyrażająca zależność miedzy N a T jest
zwykle bardzo
skomplikowana, a jej obliczenie ma znaczenie
jedynie w odniesieniu do
dużych rozmiarów danych =>

przybliżona miara

efektywności czyli
tzw. złożoność asymptotyczna.

background image

ppor. mgr inż. Mariusz CHMIELEWSKI

7

Szacowanie złożoności obliczeniowej

O z n a c z e n i a :
- a l g o r y t m r o z w i ą z u j ą c y d e c y z y j n y p r o b l e m ;

D

n

-

z b i ó r d a n y c h r o z m i a r u n d l a r o z w a ż a n e g o p r o b l e m u ;

t ( I - l i c z b a k r o k ó w D T M p o t r z e b n a d o r o z w i ą z a n i a
k o n k r e t n e g o p r o b l e m u

n

I

D

o r o z m i a r z e

 

n

z

N

p r z y

p o m o c y a l g o r y t m u   


D e fi n i c j a

Z ł o ż o n o ś c i ą o b l i c z e n i o w ą ( p e s y m i s t y c z n ą ) a l g o r y t m u
n a z y w a m y f u n k c j ę p o s t a c i

( 1 )

 

 

n

I

I

W

D

:

t

n

α

 max

background image

ppor. mgr inż. Mariusz CHMIELEWSKI

8

SZACOWANIE ZŁOŻONOŚCI

OBLICZENIOWEJ

D e fi n i c j a

M ó w i m y ,

ż e

a l g o r y t m

m a z ł o ż o n o ś ć o b l i c z e n i o w ą

w i e l o m i a n o w ą , j e ś l i i s t n i e j e s t a ł a c > 0 o r a z w i e l o m i a n p ( n ) t a k i e ,
ż e :

 

 

n

cp

n

α

n

n

0

W

c o z a p i s u j e m y

 

 

n

p

O

n

α

W

.

W i n n y c h p r z y p a d k a c h m ó w i m y , ż e a l g o r y t m m a z ł o ż o n o ś ć
w y k ł a d n i c z ą .

background image

ppor. mgr inż. Mariusz CHMIELEWSKI

9

Definicja rzędów złożoności obliczeniowej

Niech R* =R

+

{0}.


Mówimy,

że

funkcja

f(x):R*R* jest rzędu

1

O(g(x)) (g(x):R*R*), jeśli
istnieje taka stała c
>0 oraz

x

0

R*, że dla każdego xx

0

zachodzi f(x)cg(x) (f nie
rośnie szybciej niż g
).

1

x

y

x

0

f(x)

cg(x)

f(x)=O(g(x))

[1]

0.

c

pewnego

dla

)

(

)

(

lim

gdy

)),

(

(

)

(

x

c

x

g

x

f

x

g

O

x

f

background image

ppor. mgr inż. Mariusz CHMIELEWSKI

10

Definicja rzędów złożoności obliczeniowej

Mówimy,

że

funkcja

f(x):R*R* jest rzędu

2

(g(x)) (g(x):R*R*), jeśli
istnieje taka stała c
>0 oraz

x

0

R*, że dla każdego xx

0

zachodzi g(x)cf(x) (f nie

rośnie wolniej niż g).

x

y

x

0

cf(x)

g(x)

[2]

.

0

)

(

)

(

lim

lub

)

(

)

(

lim

gdy

)),

(

(

)

(

x

x

c

x

g

x

f

x

g

x

f

x

g

x

f

background image

ppor. mgr inż. Mariusz CHMIELEWSKI

11

Definicja rzędów złożoności obliczeniowej

Mówimy,

że

funkcja

f(x):R*R* jest rzędu
(g(x))

(g(x):R*R*),

jeśli istnieją takie stałe c

1

,

c

2

>0 oraz x

0

R*, że dla

każdego xx

0

zachodzi

c

1

g(x)f(x)c

2

g(x)

(f rośnie tak samo jak g).

x

y

x

0

f(x)

c

1

g(x)

c

2

g(x)

Jeżeli funkcja f(x) jest O(

g(x)) oraz (g(x)), to jest (g(x)) .

background image

ppor. mgr inż. Mariusz CHMIELEWSKI

12

Graficzna ilustracja notacji

background image

ppor. mgr inż. Mariusz CHMIELEWSKI

13

Definicja rzędów złożoności obliczeniowej

P r a k t y c z n e p r z y k ł a d y d e fi n i c j i r z ę d ó w

  2 |s i n x | = O ( l o g x ) ,

2 |s i n x | = O ( 1 )

  x

3

+ 5 x

2

+ 2 = O ( x

3

) o r a z x

3

+ 5 x

2

+ 2 =  ( x

3

) , w i ę c

x

3

+ 5 x

2

+ 2 =  ( x

3

)

  f ( x ) = x

2

+ b x + c =  ( x

2

) ,

g d y ż

a

c

a

b

x

x

|

|

,

|

|

max

2

0

z a c h o d z i :

c

1

g ( x ) f ( x ) c

2

g ( x ) d l a

a

c

4

1

1

,

a

c

4

7

2

, g ( x ) = x

2

 

)1

(

1

1

2

O

x

,

1

0

x

x

o r a z n p . d l a c 1 ;

  x ! = O ( x

x

) ,

1

0

x

x

o r a z n p . d l a c 1 .

background image

ppor. mgr inż. Mariusz CHMIELEWSKI

14

Własności funkcji rzędów złożoności

obliczeniowej

Własność 1 (przechodniość):
Jeśli f(n) jest O(g(n)) i g(n) jest O(h(n)), to f(n) jest
O(h(n)).

Własność 2:
Jeśli f(n) jest O(h(n)) i g(n) jest O(h(n)), to f(n)+g(n) jest
O(h(n)).

Własność 3:
Funkcja an

k

jest O(n

k

).

Własność 4:
Funkcja n

k

jest O(n

k+j

) dla dowolnego dodatniego j.

Z tych wszystkich własności wynika, ze dowolny
wielomian jest „duże O” dla n podniesionego do
najwyższej w nim potęgi, czyli
f(n) = a

k

n

k

+ a

k-1

n

k-1

+ ..... + a

1

n

+a

0

jest O(n

k

) (jest

też oczywiście O(n

k+j

) dla dowolnego dodatniego j).

background image

ppor. mgr inż. Mariusz CHMIELEWSKI

15

Własności funkcji rzędów złożoności

obliczeniowej

Własność 5:

Własność 5:

Jeśli f(n)=c g(n), to f(n) jest O(g(n)).

Jeśli f(n)=c g(n), to f(n) jest O(g(n)).

Własność 6:

Własność 6:

Funkcja log

Funkcja log

a

a

n jest O(log

n jest O(log

b

b

n) dla dowolnych a i b większych

n) dla dowolnych a i b większych

niż 1.

niż 1.

Własność 7:
log

a

n jest O(log

2

n) dla dowolnego dodatniego a.

Jedną z najważniejszych funkcji przy ocenianiu
efektywności algorytmów
jest funkcja logarytmiczna.
Jeżeli można wykazać że złożoność algorytmu jest
rzędu logarytmicznego, algorytm można traktować
jako bardzo dobry. Istnieje wiele funkcji lepszych niż
logarytmiczna, jednak zaledwie kilka spośród nich, jak
O(log

2

log

2

n) czy O(1) ma praktyczne znaczenie.

background image

ppor. mgr inż. Mariusz CHMIELEWSKI

16

Wymagany czas obliczeń dla

algorytmów różnej złożonosci

background image

ppor. mgr inż. Mariusz CHMIELEWSKI

17

Własności funkcji rzędów złożoności

obliczeniowej - Przykład

P r z y k ł a d 2
D z i a ł a n i a n a f u n k c j a c h r z ę d ó w z ł o ż o n o ś c i , n p . :

 

)

(

)

(

2

1

3

2

2

2

2

n

n

n

n

n

P i e r w s z e z r ó w n a ń m ó w i , ż e i s t n i e j e p e w n a f u n k c j a f ( n )   ( n )

t a k a , ż e

)

(

2

1

3

2

2

2

n

f

n

n

n

d l a w s z y s t k i c h n .

D r u g i e , ż e d l a k a ż d e j f u n k c j i g ( n )   ( n ) i s t n i e j e p e w n a f u n k c j a

h ( n )   ( n

2

)

t a k a ,

ż e

)

(

)

(

2

2

n

h

n

g

n

d l a

w s z y s t k i c h

n .

Z i n t e r p r e t a c j i t e j w y n i k a , ż e

)

(

1

3

2

2

2

n

n

n

.

background image

ppor. mgr inż. Mariusz CHMIELEWSKI

18

Własności funkcji rzędów złożoności obliczeniowej

Własności funkcji rzędów złożoności obliczeniowej

potencjalne problemy

potencjalne problemy

Celem wprowadzonych wcześniej sposobów zapisu (notacji) jest
porównanie

efektywności

rozmaitych

algorytmów

zaprojektowanych do rozwiązania tego samego problemu.

Jeżeli będziemy stosować tylko notacje „wielkie O” do
reprezentowania
złożoności algorytmów, to niektóre z nich możemy
zdyskwalifikować

zbyt

pochopnie.

Załóżmy, że mamy dwa algorytmy rozwiązujące pewien
problem, wykonywana przez nie liczba operacji to odpowiednio
10

8

n i 10n

2

.

Pierwsza funkcja jest O(n), druga O(n

2

).

Opierając się na informacji dostarczonej przez notacje „wielkie
O” odrzucilibyśmy drugi algorytm, ponieważ funkcja kosztu
rośnie zbyt szybko.

Spełnione jest to jednak dla odpowiednio dużych n, ponieważ
dla n<10

7

drugi algorytm wykonuje mniej operacji niż

pierwszy !!!.

Istotna jest więc tez stała (10

8

), która w tym przypadku jest

zbyt duża, aby notacja była znacząca.

background image

ppor. mgr inż. Mariusz CHMIELEWSKI

19

Metody mierzenia czasu działania

algorytmu

Sposób pomiaru ilości pracy wykonanej przez algorytm powinien

zapewniać:

  porównanie efektywności dwóch różnych algorytmów rozwiązujących ten

sam problem;

  oszacowanie faktycznej wydajności metody, abstrahując od komputera,

języka programowania, umiejętności programisty i szczegółów

technicznych implementacji (sposobu inkrementacji zmiennych

sterujących pętli, sposobu obliczania indeksów zmiennych ze

wskaźnikami itp.);

WNIOSEK:

Dobrym przybliżeniem czasochłonności algorytmu jest

obliczenie liczby przejść przez

wszystkie pętle w algorytmie

.

background image

ppor. mgr inż. Mariusz CHMIELEWSKI

20

Oszacowanie złożoności algorytmu -

wytyczne

W praktyce zlicza się tzw. operacje podstawowe dla badanego

problemu lub klasy rozważanych algorytmów, tj. takie, które są

najczęściej wykonywane (ignorując pozostałe operacje pomocnicze,

takie jak instrukcje inicjalizacji, instrukcje organizacji pętli itp.).

Ponieważ większość programów to programy złożone z wielu

modułów lub podprogramów, a w każdym takim podprogramie inna

instrukcja może grać rolę operacji podstawowej, więc fragmenty

większej całości analizuje się zwykle oddzielnie i na podstawie

skończonej liczby takich modułów szacuje się czasochłonność

algorytmu jako całości.

background image

ppor. mgr inż. Mariusz CHMIELEWSKI

21

SZACOWANIE ZŁOŻONOŚCI

OBLICZENIOWEJ

Jak mierzyć czas działania algorytmu?, c.d.

Jak mierzyć czas działania algorytmu?, c.d.

Tabela 1 Przykłady operacji podstawowych dla

typowych problemów obliczeniowych

Lp.

Problem

Operacja

1.

2.

3.

4.

Znalezienie x na liście

nazwisk.

Mnożenie dwóch macierzy

liczb rzeczywistych.

Porządkowanie liczb.

Wyznaczanie drogi

najkrótszej w grafie zadanym

w postaci listy sąsiadów.

Porównanie x z pozycją na

liście.

Mnożenie dwóch macierzy

liczb typu real (lub mnożenie

i dodawanie).

Porównanie dwóch liczb

(lub porównanie i zamiana).

Operacja na wskaźniku listy.

background image

ppor. mgr inż. Mariusz CHMIELEWSKI

22

SZACOWANIE ZŁOŻONOŚCI

OBLICZENIOWEJ

Jak mierzyć czas działania algorytmu?, c.d.

Jak mierzyć czas działania algorytmu?, c.d.

Zalety zliczania operacji podstawowych:
  możliwość przewidywania zachowania się algorytmu dla

dużych rozmiarów danych (jeżeli łączna liczba operacji

jest proporcjonalna do liczby operacji podstawowych);

  swoboda wyboru operacji podstawowej.

W skrajnym przypadku można wybrać rozkazy maszynowe konkretnego

komputera. Z drugiej strony jedno przejście przez instrukcję pętli można

również potraktować jako operację podstawową. W ten sposób możemy

manipulować stopniem precyzji w zależności od potrzeb.

background image

ppor. mgr inż. Mariusz CHMIELEWSKI

23

Przykłady praktyczne mierzenia

złożoności obliczeniowej

Przykład 4: Prosta pętla

for (i=sum=0; i<n; i++) sum+=a[i];

Powyższa pętla powtarza się n razy, podczas każdego jej przebiegu realizuje
dwa przypisania: aktualizujące zmienną „sum” i zmianę wartości zmiennej „i”.
Mamy zatem 2n przypisań podczas całego wykonania pętli; jej

asymptotyczna złożoność wynosi O(n).

asymptotyczna złożoność wynosi O(n).

background image

ppor. mgr inż. Mariusz CHMIELEWSKI

24

Przykłady praktyczne mierzenia

złożoności obliczeniowej

Przykład 5: Pętla zagnieżdżona

for (i=0; i<n; i++) {

for (j=1, sum=a[0]; j<=i; j++)
sum+=a[j]; }

Na samym początku zmiennej „i” nadawana jest wartość początkowa.
Pętla zewnętrzna powtarza się n razy, a w każdej jej iteracji wykonuje
się wewnętrzna pętla oraz instrukcja przypisania wartości zmiennym „i”,
„ j”, „ sum”. Pętla wewnętrzna wykonuje się „i” razy dla każdego i e
{1,...,n-1}, a na każdą iteracje przypadają dwa przypisania:jedno dla
„sum”, jedno dla „j”. Mamy zatem
1 + 3n + 2(1+2+...+n-1) = 1 + 3n + n (n-1) = O(n) + O(n

2

) = O(n

2

)

przypisań wykonywanych w całym programie.
Jej

asymptotyczna złożoność wynosi O(n

asymptotyczna złożoność wynosi O(n

2

2

).

).

Pętle zagnieżdżone mają zwykle większą złożoność niż pojedyncze,

Pętle zagnieżdżone mają zwykle większą złożoność niż pojedyncze,

jednak nie musi tak być zawsze.

jednak nie musi tak być zawsze.

background image

ppor. mgr inż. Mariusz CHMIELEWSKI

25

Przykłady praktyczne mierzenia

złożoności obliczeniowej

Analiza tych dwóch przypadków była stosunkowo prosta ponieważ
liczba iteracji nie zależała od wartości elementów tablicy.
Wyznaczenie złożoności asymptotycznej jest trudniejsze jeżeli
liczba iteracji nie jest zawsze jednakowa.

Przykład 6: Znajdź najdłuższą podtablicę zawierającą
liczby uporządkowane rosnąco.

for (i=0; len=1; i<n-1; i++) {

for (i1=i2=k=i; k<n-1 && a[k]<a[k+1]; k++,i2++);
if(len < i2-i1+1) len=i2-i1+1; }

=> Jeśli liczby w tablicy są uporządkowane malejąco, to pętla zewnętrzna
wykonuje się n-1 razy, a w każdym jej przebiegu pętla wewnętrzna
wykona się tylko raz. Złożoność algorytmu jest więc

O(n).

O(n).

background image

ppor. mgr inż. Mariusz CHMIELEWSKI

26

Przykłady praktyczne mierzenia

złożoności obliczeniowej

Analiza tych dwóch przypadków była stosunkowo prosta ponieważ
liczba iteracji nie zależała od wartości elementów tablicy.
Wyznaczenie złożoności asymptotycznej jest trudniejsze jeżeli
liczba iteracji nie jest
zawsze jednakowa.

Przykład 6: Znajdź najdłuższą podtablicę zawierającą
liczby uporządkowane rosnąco.

for (i=0; len=1; i<n-1; i++) {

for (i1=i2=k=i; k<n-1 && a[k]<a[k+1]; k++,i2++);
if(len < i2-i1+1) len=i2-i1+1; }

Jeśli liczby w tablicy są uporządkowane rosnąco, to pętla zewnętrzna wykonuje się
n-1 razy, a w każdym jej przebiegu pętla wewnętrzna wykona się i razy dla i {1,...,n-1}.

Złożoność algorytmu jest więc

O(n

O(n

2

2

).

).

background image

ppor. mgr inż. Mariusz CHMIELEWSKI

27

Przykłady praktyczne mierzenia

złożoności obliczeniowej

Analiza tych dwóch przypadków była stosunkowo prosta ponieważ
liczba iteracji nie zależała od wartości elementów tablicy.
Wyznaczenie złożoności asymptotycznej jest trudniejsze jeżeli
liczba iteracji nie jest
zawsze jednakowa.

Przykład 6: Znajdź najdłuższą podtablicę zawierającą
liczby uporządkowane rosnąco.

for (i=0; len=1; i<n-1; i++) {

for (i1=i2=k=i; k<n-1 && a[k]<a[k+1]; k++,i2++);
if(len < i2-i1+1) len=i2-i1+1; }

=> Z reguły dane nie są uporządkowane i ocena złożoności algorytmu jest
rzeczą niełatwą, ale bardzo istotną. Staramy się wyznaczy złożoność
w „przypadku optymistycznym”, „przypadku pesymistycznym” oraz
„przypadku średnim”.

background image

ppor. mgr inż. Mariusz CHMIELEWSKI

28

Sortowanie stabilne

Definicja:

Metoda sortowania jest stabilna, jeśli
zachowuje względną kolejność elementów o
jednakowych kluczach.

Oznaczenia : sortujemy tablicę:
ElemType a[n];
Definiujemy funkcję
replaceElements( x, y)
,która zamienia wartości dwóch elementów

background image

ppor. mgr inż. Mariusz CHMIELEWSKI

29

Sortowanie bąbelkowe (bubblesort)

for (i = n-1; i>=1 ; i--)

for (j = 0 ; j<=i-1 ; j++)

if (a[j]>a[j+1])

replaceElements (a[j],a[j+1]);

Idea działania:
w i-tej iteracji, kolejne zamiany w zakresie a[0..i-1] powodują, że największy spośród elementów

w a[0..i-1] trafia na miejsce o indeksie "i-1"; iteracja jest powtarzana dla i=n-1,n-2,...,1.

Złożoność:

Operacjami dominującymi są porównania a[j]>a[j+1]. Jest ich:

(n-1) + (n-2) + . . . + 1 = n*(n-1) / 2

Zatem pesymistyczna złożoność czasowa wynosi
T(n) = 1/2 * n

2

– 1/2 * n

T(n) = 1/2 * n

2

+ O(1)

T(n) = O(n

2

)

Złożoność średnia: identyczna jak pesymistyczna.
Czyli: liczba porównań pesymistycznie i średnio ok. 1/2 n

2

.

Metoda jest stabilna.

background image

ppor. mgr inż. Mariusz CHMIELEWSKI

30

Sortowanie przez wybieranie

for (i = 0; i< (n-1); i++){
min = i ;

for (j = i+1; j<=n-1; j++)
if (a[j] < a[min]) min := j;
replaceElements ( a[i], a[min] );

}

Idea:
w i-tym kroku znajdź najmniejszy element spośród a[i . .n-1] i zamień go z

elementem a[i]; powtarzaj ten krok dla i=0,...,n-2

 
Złożoność: identycznie jak dla metody bąbelkowej

T(n) = O(n

2

)

Czyli: zarówno w pesymistycznym, jak i średnim przypadku, liczba

porównań wynosi ok. 1/2 n

2

.

 Zalety:
Wykonuje tylko n-1 zamian (istotne dla długich rekordów) 
Sortowanie metodą selekcji nie jest stabilne.

background image

ppor. mgr inż. Mariusz CHMIELEWSKI

31

Sortowanie przez wstawianie

for (i = 1; i< n; i++){

j = i-1;
tmp = a[i];
while ((j >= 0)&&(tmp < a[j])){
a[j+1]=a[j];

j=j-1;

}
a[j+1] = tmp;
}

Idea: W i-tym kroku wstaw element a[i] na właściwe miejsce w posortowanym fragmencie a[0 . . i-

1], wcześniej przesuwając wszystkie elementy większe od niego w tym fragmencie w prawo o

1; powstaje posortowany fragment a[0 . . i].

Złożoność pesymistyczna (ciąg posortowany malejąco na wejściu) identyczna jak dla poprzednich

przypadków.

Średnia dwukrotnie lepsza.

w przypadku pesymistycznym ok. 1/2 n

2

porównań

w przypadku średnim ok. 1/4 n

2

porównań.

Zalety:
1. Stabilność
2. Średnio dwukrotnie szybszy niż inne proste metody
3. Optymalny dla ciągów prawie posortowanych

background image

ppor. mgr inż. Mariusz CHMIELEWSKI

32

Przykłady praktyczne mierzenia złożoności

obliczeniowej

Przykład 7:

Algorytm sortowania
Insertion-Sort(A)

1. for j:=2 to length[A]
2. do key:=A[j]
/* Wstaw A[i] w

posortowany

ciąg A[1..j-1].*/
3. i:= j-1
4. while i>0 i A[i] > key
5. do A[i+1] := A[i]
6. i:= i-1
7. A[i+1] := key

Przykład działania
algorytmu

5 2 4 6 1 3

2 5 4 6 1 3
2 4 5 6 1 3
2 4 5 6 1 3
1 2 4 5 6 3
1 2 3 4 5 6

background image

ppor. mgr inż. Mariusz CHMIELEWSKI

33

Przykłady praktyczne mierzenia złożoności obliczeniowej

Przykłady praktyczne mierzenia złożoności obliczeniowej

Insertion-Sort(A)

koszt

koszt

liczba wykonań

liczba wykonań

1.

for j:=2 to length[A]

c

1

n

2.

do key:=A[i]

c

2

n-1

3.

i:= j-1

c

3

n-1

4.

while i>0 i A[i] > key

c

4

5.

do A[i+1] := A[i]

c

5

6.

i:= i-1

c

6

7.

A[i+1] := key

c

7

n-1

n

j

j

t

2

n

j

j

t

2

)

1

(

n

j

j

t

2

)

1

(

background image

ppor. mgr inż. Mariusz CHMIELEWSKI

34

Przykłady praktyczne mierzenia złożoności

obliczeniowej

)

1

(

)

1

(

)

1

(

)

1

(

)

1

(

)

(

7

2

6

2

5

2

4

3

2

1

n

c

t

c

t

c

t

c

n

c

n

c

n

c

n

T

n

j

j

n

j

j

n

j

j

1

2

)

1

(

2

n

n

j

n

j

2

)

1

(

)

1

(

2

n

n

j

n

j

)

1

(

2

)

1

(

2

)

1

(

1

2

)

1

(

)

1

(

)

1

(

)

(

7

6

5

4

3

2

1

n

c

n

n

c

n

n

c

n

n

c

n

c

n

c

n

c

n

T

)

(

2

2

2

2

2

2

7

4

3

2

7

6

5

4

3

2

1

2

6

5

4

c

c

c

c

n

c

c

c

c

c

c

c

n

c

c

c

)

(

)

(

2

2

n

c

bn

an

n

T

background image

ppor. mgr inż. Mariusz CHMIELEWSKI

35

Algorytm sortowania metodą scalania

Analizujemy pesymistyczną złożoność czasową – operacjami dominującymi są porównania wykonywane podczas

scalania.

Załóżmy najpierw, że n jest potęgą dwójki, n = 2

k

Analiza złożoności algorytmu "dziel i zwyciężaj" za pomocą równania rekurencyjnego na liczbę operacji

dominujących.

Tutaj:

T(n) = 0, jeśli n = 1

2 T(n/2) + n , jeśli n > 1 bo:

dwa podzadania wielkości n/2,

koszt podziału pomijalny (zero porównań) ,

koszt scalania to liczba porównań podczas scalania ciągów posortowanych, równa sumie ich

długości – tutaj n.

Rozwiązanie równania rekurencyjnego: na T(n) przez iterowanie tego równania i wywnioskowanie stąd jego

ogólnej postaci:
T(n) = 2 T(n/2) + n = 2 ( 2 T(n/4) + n/2) + n = 2 ( 2 ( 2 T(n/8) + n/4 ) + n/2 ) + n =

= 2 ( . . . . 2 ( 2 T(1) + 2 ) + 4 ) + . . . . . ) + n = n log n

Inna metoda: rozrysowując drzewo wywołań rekurencyjnych. Na każdym poziomie zagnieżdżenia rekurencji liczba

porównań wynosi n, a drzewo ma wysokość log n.

Dla dowolnego n (tzn. niekoniecznie będącego potęgą dwójki) wysokość drzewa wywołań nie przekracza log n + 1.
Liczba porównań w algorytmie sortowania przez scalanie wynosi zatem:

T(n) = n log n + O(n)

Wady metody:

potrzebuje pamięci roboczej rozmiaru O(n) (złożoność pamięciowa)
traci czas na przepisywanie elementów.

background image

ppor. mgr inż. Mariusz CHMIELEWSKI

36

Mierzenie złożoności obliczeniowej

– przydatne funkcje

2

)

1

(

0

n

n

i

n

i

1

2

2

1

0

n

n

i

i

n

n

i

i

n

2

0





1

1

1

0

x

x

x

n

n

i

i

3

)

1

)(

5

.

0

(

0

2

n

n

n

i

n

i

)

1

(

ln

1

1

O

n

i

n

i


background image

ppor. mgr inż. Mariusz CHMIELEWSKI

37

Mierzenie złożoności obliczeniowej

– przydatne funkcje

 

O S Z A C O W A N I A :

J e ś li f () j e s t f u n k c j ą r o s n ą c ą , to :

1

1

)

(

)

(

)

(

b

a

b

a

i

b

a

dx

x

f

i

f

dx

x

f

J e ś li f () j e s t f u n k c j ą m a le j ą c ą , to :

b

a

b

a

i

b

a

dx

x

f

i

f

dx

x

f

1

1

)

(

)

(

)

(

background image

ppor. mgr inż. Mariusz CHMIELEWSKI

38

KLASY I TYPY FUNKCJI ZŁOŻONOŚCI

OBLICZENIOWEJ

Klasa funkcji

Typ funkcji

Przykłady

stała

n

e

n

2

sin

,

 

n

/

1

subliniowa

polilogarytmiczna

n

log

log

,

n

2

log

liniowa

 

n

,

n

n

n

/

1

1

quasi-liniowa

n

nlog

,

n

n

log

log

wielomianowa

kwadratowa

 

2

n

,









2

n

superwielomianowa

 

n

n

lg

,

 

n

e

wykładnicza

 

n

2

,

n

n 3

2

niewielomianowa

superwykładnicza

 

n

n

2

,

 

n

n

background image

ppor. mgr inż. Mariusz CHMIELEWSKI

39

Wpływ wzrostu prędkości komputera na

maksymalny rozmiar zagadnienia, które można

rozwiązać w jednostce czasu

Algorytm

Maksymalny rozmiar zagadnienia

Symbol

Złożoność

przed wzrostem

prędkości

po 100-krotnym

wzroście prędkości

5

A

 

n

N

5

5

100N

4

A

 

2

n

N

4

10 N

4

3

A

 

3

n

N

3

4.64 N

3

2

A

 

5

n

N

2

3.5 N

2

1

A

 

n

2

N

1

6.64+N

1

0

A

n

nlog

N

0

0

100N dla

1

0



N

h

N 1

2

4

 ,

100

1

2

4

4

h

N

c

10

100

4

c

h

N

1

2

1

,

100

1

2

1

1

h

c

N

100

2

1

c

c

1

=

lo

g

2

1

0

0

=

6

.6

4

background image

ppor. mgr inż. Mariusz CHMIELEWSKI

40

Przykład postępu, jaki dokonał się w

dziedzinie projektowania algorytmów

badających planarność grafu

A lgo rytm

R o zm ia r

a na lizo w a neg o

gra fu

w przyp a dku

udo stęp nia nia

ko m putera na

o kres

Sym bo l

A uto r [ ro k] Z ło żo no ść

C za s o bliczeń

dla

ms

c

10

100

n

m inuty go dziny

1

A

K urato w sk i

[19 30]

6

cn

325 lat

4

8

2

A

G o ldstein

[19 63]

3

cn

2.8 go dz in

18

71

3

A

L em pel et al.

[19 67]

2

cn

100 sek und

77

6 0 00

4

A

H o pcro ft-

T arjan [197 1]

n

cn

2

log

7 sek und

643

24 6 73

5

A

H o pcro ft-

T arjan [197 4]

cn

1 sek unda

6 000

4

10

36 

background image

ppor. mgr inż. Mariusz CHMIELEWSKI

41

Związek pomiędzy rzędem złożoności, stałą

proporcjonalności, rozmiarem danych i rzeczywistym

czasem obliczeń na minikomputerze i superkomputerze

n

C

r

a

y

-1

3

3

n [n

s

]

P

E

N

T

IU

M

IV

1

.6

G

H

z

1

9

5

0

0

0

n

[n

s

]

1

0

3

μ

s

3

0

0

μ

s

1

0

0

3

m

s

3

m

s

1

0

0

0

3

s

3

0

m

s

1

0

0

0

0

4

9

m

in

.

3

0

0

m

s

1

0

0

0

0

0

0

9

5

la

t

3

s

M

im

o

ż

e

a

lg

o

r

y

t

m

s

z

e

ś

c

ie

n

n

y

w

y

s

t

a

r

t

o

w

a

ł”

z

w

k

s

z

y

m

im

p

e

t

e

m

,

d

r

u

g

i a

lg

o

r

y

t

m

(

lin

io

w

y

)

, m

a

c

y

z

ło

ż

o

n

o

ś

ć

o

2

r

z

ę

d

y

n

s

z

ą

(

O

(

n

)

w

s

t

o

s

u

n

k

u

d

o

O

(

n

3

)

)

,

d

o

g

o

n

ił g

o

i o

k

a

z

a

ł s

s

z

y

b

s

z

y

d

la

100

n

.


Document Outline


Wyszukiwarka

Podobne podstrony:
ćw3 Analiza złożoności obliczeniowej
analiza złożonych aktów ruchowych w sytuacjach patologicznych
kozik,projektowanie algorytmów,TEORIA ZŁOŻONOŚCI OBLICZENIOWEJ
SDiZO5b, Struktury danych i złożoność obliczeniowa
lichtenstein, struktury?nych i złożoność obliczeniowa,Badanie?ektywności algorytmów pseudowielomiano
Algorytmy wyklady, Złożoność obliczeniowa algorytmów
MIARY ZLOZONOSCI OBLICZENIOWEJ
Analiza Laborki, obliczenia elektrody, 0,03 mg - 1 ml
SDiZO5a, Struktury danych i złożoność obliczeniowa
SDiZO3, Struktury danych i złożoność obliczeniowa
Złożoność obliczeniowa Zadania 2
Algorytmy i struktury danych 02 Rekurencja i złożoność obliczeniowa
złożoność obliczeniowa algorytmu Maszyny Turinga
Złożoność obliczeniowa ppt
Złożoność obliczeniowa Zadania 1
32 Zlozonosc obliczeniowa algor Nieznany (2)
SDiZO2, Struktury danych i złożoność obliczeniowa
analiza zlozonych aktow ruchowych czynnosci zyciowych chod
analiza złożonych aktów ruchowych w sytuacjach patologicznych

więcej podobnych podstron