Metody projektowania i zlozonosc

background image

Jadwiga Chudzicka

1

background image

Jadwiga Chudzicka

2

KLASYFIKACJA ALGORYTMÓW

algorytmy numeryczne, operujące na liczbach (np.

algorytm Euklidesa),

algorytmy nienumeryczne, operujące na obiektach

nieliczbowych (np. sortowanie dokumentów).

Inny podział to:

algorytmy sekwencyjne (kolejność czynności jest

jednoznacznie określona),

algorytmy niesekwencyjne (równoległe, w których

współbieżne następstwo miedzy pewnymi operacjami nie

jest ściśle określone).

background image

Jadwiga Chudzicka

3

Metody projektowania

algorytmów

Programowanie strukturalne jest techniką

programowania, w której problem jest

dzielony na mniejsze bloki (moduły),

odpowiedzialne za realizację

poszczególnych jego części. Dotyczy to

głównie dużych projektów, które są zbyt

skomplikowane do opisania w całości. W

programach komputerowych modułami są

najczęściej procedury i/lub funkcje. Możliwe

są przy tym dwa sposoby postępowania:

background image

Jadwiga Chudzicka

4

W pierwszej metodzie zwanej programowaniem

zstępującym (ang. top-down programming),

programista powinien uświadomić sobie, co jest do

zrobienia i starać się wyodrębnić z całości

problemu mniejsze zadania. Może je traktować

tymczasowo jako „czarne skrzynki” o określonych

właściwościach. To samo należy zrobić z „czarnymi

skrzynkami”, tzn. próbować wyodrębnić w nich

jeszcze bardziej szczegółowe zadania. Proces ten

powinien być kontynuowany tak długo, aż osiągnie

się poziom szczegółowości implikowany przez

stosowany język.

background image

Jadwiga Chudzicka

5

W drugiej metodzie zwanej programowaniem

wstępującym (ang. bottom-up programming),

najpierw należy zaprogramować elementarne

struktury, a następnie złożyć z nich program w

logiczną całość; jest to metoda odwrotna do wyżej

opisanej.

background image

Jadwiga Chudzicka

6

Do pisania programów z wykorzystaniem

techniki programowania strukturalnego

nadają się zwłaszcza strukturalne języki

programowania, takie jak:

Pascal

,

C

,

Modula-2

.

Programowanie strukturalne ułatwia

projektowanie, testowanie a także

otrzymanie kodu programu.

background image

Jadwiga Chudzicka

7

Programowanie obiektowe – rodzaj

programowania, w którym dane i wykonywane na

nich operacje są połączone. Ten formalny zabieg

umożliwia szybsze pisanie większych programów

przez „składanie ich” ze wzajemnie powiązanych

obiektów, które odpowiadają za daną funkcję

programu (np. przygotowanie danych, wykonanie

obliczeń, zaprezentowanie wyników). Programując

obiektowo, należy najpierw „wykryć” wszystkie

obiekty w rozważanym problemie. Terminem

obiekt określamy dane i algorytmy na nich

operujące. Dane w językach programowania

nazywane są polami obiektu, natomiast algorytmy

metodami.

background image

Jadwiga Chudzicka

8

Do najpopularniejszych języków

programowania obiektowego

należą

C++

,

Java

,

Effel

.

background image

Jadwiga Chudzicka

9

programowanie dynamiczne – problem

dzielony jest na kilka zagadnień, ważność każdego

z nich jest oceniana i po pewnym wnioskowaniu

wyniki analizy niektórych prostszych zagadnień

wykorzystuje się do rozwiązania głównego

problemu,

metoda zachłanna – nie analizujemy

podproblemów dokładnie, tylko wybieramy

najbardziej obiecującą w tym momencie drogę

rozwiązania,

programowanie liniowe – oceniamy

rozwiązanie problemu przez pewną funkcję jakości

i szukamy jej minimum,

background image

Jadwiga Chudzicka

10

poszukiwanie i wyliczanie – przeszukujemy

zbiór danych aż do odnalezienia rozwiązania,

probabilistyczne rozwiązanie – algorytm

działa poprawnie z bardzo wysokim

prawdopodobieństwem, ale wynik nie jest

pewny,

heurystyka – człowiek na podstawie swojego

doświadczenia tworzy algorytm, który działa w

najbardziej prawdopodobnych warunkach

(rozwiązanie zawsze jest przybliżone).

background image

Jadwiga Chudzicka

11

ZŁOŻONOŚĆ OBLICZENIOWA

ALGORYTMÓW

background image

Jadwiga Chudzicka

12

Jeżeli dany algorytm da się wykonać na maszynie o

dostępnej mocy obliczeniowej i określonej pojemności

pamięci oraz w akceptowalnym czasie, to mówi się że

jest

obliczalny

.

Jeżeli algorytm dla coraz większego zbioru danych

powoduje wzrost czasu obliczeń szybciej niż to

wynikałoby z funkcji wielomianowej, to mówi się że

nie jest obliczalny

.

Wiąże się z tym pojęcie

złożoności obliczeniowej

(pojęcie to wprowadzili J. Hartmanis i R. E. Stearns):

background image

Jadwiga Chudzicka

13

Złożoność obliczeniowa algorytmu –

ilość zasobów komputera jakiej potrzebuje

dany algorytm.

Najczęściej przez zasób rozumie się czas

oraz pamięć – dlatego też używa się

określeń

złożoność czasowa

i

złożoność

pamięciowa

.

ZŁOŻONOŚĆ CZASOWA I

ZŁOŻONOŚĆ PAMIĘCIOWA

background image

Jadwiga Chudzicka

14

Za jednostkę złożoności pamięciowej przyjmuje

się pojedyncze słowo maszyny (np. bajt).

W przypadku złożoności czasowej nie można

podać bezpośrednio jednostki czasu, np.

milisekundy, ponieważ nie wiadomo na jakiej

maszynie dany algorytm będzie wykonywany.

Dlatego też wyróżnia się - charakterystyczną dla

algorytmu - operację dominującą. Liczba wykonań

tej operacji jest proporcjonalna do wykonań

wszystkich operacji.

background image

Jadwiga Chudzicka

15

Rodzaje złożoności czasowej

złożoność pesymistyczna określa

złożoność w "najgorszym" przypadku.

Jeśli D oznacza zbiór wszystkich

możliwych danych wejściowych, d jeden z

elementów tego zbioru, a f funkcję, która

dla danego d zwraca liczbę operacji, to

złożoność pesymistyczna jest

zdefiniowana jako:

sup{f(d): d

D}

background image

Jadwiga Chudzicka

16

złożoność oczekiwana określa złożoność

średnią czyli

wartość oczekiwaną

zmiennej

losowej f. Jeśli wszystkie dane są

jednakowo prawdopodobne (z

prawdopodobieństwem niezerowym) wtedy

wyraża się ona wzorem:

D

d

f

D

d

)

(

Terminologia

background image

Jadwiga Chudzicka

17

Pojęcie wartości oczekiwanej

W rachunku prawdopodobieństwa wartość

oczekiwana (inaczej wartość przeciętna,

wartość średnia, nadzieja

matematyczna) zmiennej losowej

(dyskretnej) jest sumą iloczynów wartości tej

zmiennej losowej przez prawdopodobieństwa,

z jakimi te wartości są przyjmowane.

C.D.

background image

Jadwiga Chudzicka

18

Pojęcie wartości oczekiwanej c.d.

Formalnie, jeżeli dyskretna zmienna losowa X

przyjmuje wartości x1, x2, ..., z

prawdopodobieństwami odpowiednio: p1, p2, ...,

wówczas wartość oczekiwaną E[X] zmiennej

losowej X definiujemy jako:

=

=

1

]

[

i

i

i

p

x

X

E

background image

Jadwiga Chudzicka

19

Wykorzystywanie złożoności obliczeniowej do

badania jakości algorytmu nie zawsze jest

zalecane, ponieważ operacja dominująca na

jednym komputerze może wykonywać się

bezproblemowo i szybko, na innym zaś musi

być zastąpiona szeregiem instrukcji.

Dlatego też częściej stosuje się złożoność

asymptotyczną, która mówi o tym jak

złożoność kształtuje się dla bardzo dużych,

granicznych rozmiarów danych wejściowych.

background image

Jadwiga Chudzicka

20

Złożoność asymptotyczna

Do opisu złożoności asymptotycznej stosuje się

trzy notacje:

1. Notacja

O

(„omikron” lub „Wielkie O”)

2. Notacja Ω („Wielkie Omega”)

3. Notacja Θ („Teta”)
Przedstawimy opis matematyczny tych notacji,

przyjmując, że dane są funkcje f oraz g, których

dziedziną

jest zbiór liczb naturalnych, natomiast

przeciwdziedziną

zbiór liczb rzeczywistych

dodatnich.

Wyjaśnienie terminów

background image

Jadwiga Chudzicka

21

Definicja funkcji

Funkcja matematyczna przekształcająca zbiór X

w zbiór Y to odwzorowanie (przyporządkowanie),

które każdemu elementowi zbioru X przypisuje

dokładnie jeden element zbioru Y.

Zbiór X nazywamy dziedziną funkcji, jego

elementy argumentami, zaś zbiór Y -

przeciwdziedziną funkcji.

Element

y

zbioru Y, który jest przypisany danemu

elementowi x ze zbioru X nazywamy obrazem x,

albo wartością funkcji dla argumentu x.

background image

Jadwiga Chudzicka

22

Na kolejnych slajdach umieszczone są definicje

poszczególnych trzech notacji.

Służą one do opisu czasu działania algorytmu.

Mówi się wówczas o tzw. rzędzie wielkości

funkcji.

background image

Jadwiga Chudzicka

23

Ad 1) Notacja

O

("omikron” lub

"Wielkie O")

Notacja O określa asymptotyczną granicę górną,

tzn. dla danej funkcji g(n) mówimy, że f jest co

najwyżej rzędu g, gdy istnieją takie stałe n

0

> 0

oraz c > 0, że:

)

(

)

(

0

0

n

cg

n

f

n

n

Ciąg dalszy

background image

Jadwiga Chudzicka

24

Chociaż O(g(n)) jest zbiorem funkcji to

wygodnie jest stosować zapis f(n) =

O(g(n)), gdy chcemy wyrazić, że funkcja

f(n) jest elementem zbioru O(g(n)).

Określenia

"złożoność co najwyżej O(f(n))"

i

"złożoność O(f(n))"

są matematycznie

równoważne.

background image

Jadwiga Chudzicka

25

Graficzny przykład notacji O

c

g(n)

n

n

0

f(n)

f(n) = O(g(n))

n

0

f(n)

f(n) = O(g(n))

Objaśnienia

background image

Jadwiga Chudzicka

26

Notacja

O

daje górne ograniczenie

funkcji z dokładnością do stałego

czynnika. Piszemy

f(n) = O(g(n))

, jeśli

istnieją dodatnie stałe

n

0

i

c

, takie że na

prawo od

n

0

wartość

f(n)

jest nie

większa niż

cg(n

).

Wartość

n

0

jest minimalną możliwą

wartością; każda większa wartość jest

również dobra.

background image

Jadwiga Chudzicka

27

Ad 2) Notacja Ω ("Wielkie Omega")

Notacja Ω

określa asymptotyczną granicę dolną, tzn.

dla danej funkcji g(n) mówimy, że f jest co najmniej

rzędu g, gdy istnieją takie stałe n

0

> 0 oraz c > 0, że:

)

(

)

(

0

0

n

f

n

cg

n

n

Stosujemy zapis f(n) = Ω(g(n)), gdy funkcja f(n)

jest elementem zbioru Ω(g(n)).

background image

Jadwiga Chudzicka

28

Graficzny przykład notacji Ω:

c

g(n)

n

n

0

f(n)

f(n) = Ω(g(n))

c

g(n)

n

n

0

f(n)

f(n) = Ω(g(n))

Objaśnienia

background image

Jadwiga Chudzicka

29

Notacja

Ω

daje dolne ograniczenie funkcji z

dokładnością do stałego czynnika. Piszemy

f(n)

= Ω(g(n))

, jeśli istnieją dodatnie stałe

n

0

i

c

,

takie że na prawo od

n

0

wartość

f(n)

jest nie

mniejsza niż

cg(n

).

Wartość

n

0

jest minimalną możliwą wartością;

każda większa wartość jest również dobra.

background image

Jadwiga Chudzicka

30

Ad 3) Notacja Θ ("Teta")

Notacja Θ ogranicza funkcję asymptotycznie od góry

i od dołu tzn. dla danej funkcji g(n) mówimy, że f

jest dokładnie rzędu g, gdy istnieją takie stałe n

0

> 0 oraz c

1

> 0 i c

2

> 0, że:

)

(

)

(

)

(

0

2

1

0

n

g

c

n

f

n

g

c

n

n

dalej

background image

Jadwiga Chudzicka

31

Stosujemy zapis f(n) = Θ(g(n)), gdy funkcja

f(n) jest elementem zbioru Θ(g(n)).

Można stwierdzić, że f(n) = Θ(g(n)), gdy f(n)

jest jednocześnie rzędu O(g(n)) i Ω(g(n)).

Wartości wymienionych w tych notacjach stałych:

c, c1 i c2 wpływają znacznie na efektywność

algorytmu.

background image

Jadwiga Chudzicka

32

c

1

g(n)

n

n

0

f(n)

f(n) = Θ(g(n))

c

2

g(n)

c

1

g(n)

n

n

0

f(n)

f(n) = Θ(g(n))

c

2

g(n)

Graficzny przykład notacji Θ

Objaśnienia

background image

Jadwiga Chudzicka

33

Za pomocą notacji

Θ

szacuje się funkcję

z dokładnością do stałego czynnika.

Piszemy

f(n) = Θ(g(n))

, jeśli istnieją

dodatnie stałe

n

0

,

c

1

i c

2

, takie że na

prawo od

n

0

wartość

f(n)

leży zawsze

między

c

1

g(n

) a

c

2

g(n

) .

Wartość

n

0

jest minimalną możliwą

wartością; każda większa wartość jest

również dobra.

background image

Jadwiga Chudzicka

34

Posługując się tymi notacjami można określać

czas działania algorytmów.

Jeśli np. mówimy, że czas działania algorytmu

wynosi Ω(g(n)), należy przez to rozumieć, że

niezależnie od konkretnych danych

wejściowych o rozmiarze n (dla dostatecznie

dużych n) czas działania algorytmu dla tych

danych wynosi co najmniej g(n), pomnożone

przez pewną stałą.

background image

Jadwiga Chudzicka

35

Algorytmy mają zwykle złożoność czasową

proporcjonalną do funkcji.

Najczęściej spotykane rzędy złożoności algorytmu to:

1 (stała);

log

2

n

(logarytmiczna);

n (liniowa);

nlog

2

n (liniowo-

logarytmiczna);

n

2

(kwadratowa);

n

3

(sześcienna);

n

c

(wielomianowa);

c

n

(wykładnicza);

n! (wykładnicza,

ponieważ n!>2

n

już

od n=4


Document Outline


Wyszukiwarka

Podobne podstrony:
Metody Projektowania 2
3 METODY PROJEKTOWANIA
Metody projekcyjne
Magia interfejsu Praktyczne metody projektowania aplikacji internetowych
Metody projektowania1
Metody projektowania 1 podstawowa wersja
Metody projekcyjne, SWPS, ROK 3, Diagnoza psychologiczna
metody projekcyjne teoria do prezentacji
Świat teatru kukiełkowego w trzech etapach metody projektu
metodyka projektowanie systemow Nieznany
metody projekyt
metody projekcyjne, Psychologia materiały do obrony UJ
METODY PROJEKCYJNE, Psychologia UŚ, Semestr VI, Diagnoza psychologiczna
Wniosek o dzierzawe lokalu w CSB, szkola, metodyka projektowania systemow
Wykorzystanie metody projekt w w nauczaniu przedmiot w za, metody nauczania
Metodyka projekt inż

więcej podobnych podstron