Programowanie Dynamiczne 2

background image

Programowanie dynamiczne

(optymalizacja dynamiczna)

A

lg

o

ry

tm

y

i

s

tr

u

k

tu

ry

d

a

n

y

c

h

background image

Programowanie Dynamiczne

Programowanie Dynamiczne

Programowanie dynamiczne

-

metoda

znajdowania rozwiązań problemów
optymalizacyjnych podobna do metody „dziel
i zwyciężaj”- w metodzie tej
zadany problem dzielimy na podproblemy,
rozwiązujemy je, a następnie łączymy
rozwiązania podproblemów.

background image

Programowanie Dynamiczne

Programowanie Dynamiczne

metoda „dziel i zwyciężaj” - wielokrotnie
rozwiązuje ten sam problem, wykonuje więc
dużo więcej pracy

programowanie dynamiczne - algorytm oparty
na tej metodzie rozwiązuje każdy podproblem
tylko jeden raz zapamiętując wynik, unika się w
ten sposób wielokrotnych obliczeń dla tego
samego podproblemu

background image

Zasada Programowania Dynamicznego

background image

Etapy programowania dynamicznego

*

Scharakteryzowanie struktury optymalnego

rozwiązania

Rekurencyjne zdefiniowanie kosztu

optymalnego rozwiązania.

Obliczenie optymalnego kosztu metodą

wstępującą.

Konstruowanie optymalnego rozwiązania na

podstawie wcześniejszych
obliczeń.

background image

Przykład Programowania
Dynamicznego

a

Przykład:

Problem znużonego wędrowca
(problem znajdowania najkrótszej ścieżki)

A

C

F

E

D

B

G

3

2

5

3

1 1

7

7

5

1 4

6

7

6

Niech będzie dany następujący skierowany

graf acykliczny (spójny):

background image

Przykład Programowania
Dynamicznego

Przykład Programowania
Dynamicznego

Znużony wędrowiec ma dotrzeć z miasta A do miasta B.

Zachłanne podejście do tego zadania dałoby w wyniku
następująca ścieżkę:

Jej całkowity koszt wynosi 15.

A

C

F

E

D

B

G

3

6

6

background image

A

C

F

E

D

B

G

5

3

5

Najkrótsza droga pomiędzy A i B wynosi 13 i

ma postać:

Zachłanność w tym przypadku nie popłaca.

background image

Wyznaczenie optymalnego rozwiązania było
możliwe dzięki zastosowaniu programowania
dynamicznego.

background image

Iteracja – przykłady

Iteracja – przykłady

START

s:=0

i:=1

s:=s+a

i:=i+1

s

STOP

N

T

a

a>

5

i>6

T

N

Po zmianie kolejności bloczków
warunkowych otrzymujemy poprawny
algorytm

i

a

s

0

1

2

2

6

6

3

8

14

4

3

5

4

6

7

21

7

[2, 6 , 8 , 3, 4, 7]

background image

Obszar zaznaczony na

żółto jest

charakterystyczny dla

wszystkich algorytmów

operujących na wektorach

(ciągach)

Iteracja – przykłady

Iteracja – przykłady

Schemat blokowy algorytmu wczytującego wyrazy n-elementowego wektora

a=[a

1

, a

2

, ... a

n

]

START

„błędny

rozmiar

wektora

STOP

N

T

n

n>

0

i=>

n

N

T

i:=1

a

i

i:=i+1

Jeżeli w algorytmie, na wektorze

są wykonywane jakieś operacje

to winny one być umieszczone

po bloczku wczytującym

element wektora (czytaj a

i

)

START

„błędny

rozmiar

wektora

STOP

N

T

n

n>

0

i>n

N

T

i:=1

a

i

i:=i+1

background image

Iteracja – przykłady

Iteracja – przykłady

Schemat blokowy algorytmu

wczytującego wyrazy tablicy o
rozmiarze m

x

n

mn

2

m

1

m

n

2

22

21

n

1

12

11

a

a

a

a

a

a

a

a

a

a

STOP

START

„błędne

rozmiar

y

tablicy”

N

T

n,m

j>n

N

T

i:=1

a

ij

j:=j+1

j:=1

N

T

i>

m

i:=i+1

n>0 ^ m >0

background image

Iteracja – przykłady

Iteracja – przykłady

Schemat blokowy algorytmu obliczającego wartość wyrażenia

1

i

2

i

a

s



..

3

,

2

,

1

i

dla

i

2

1

0

i

dla

1

a

i

001

.

0

a

a

1

i

i

gdzie

i := 1

pop := 1

s := 0

akt := 1 /

(2*i)

s := s +

akt*akt

(pop-akt) < 0.001

N

T

START

i := i + 1

pop := akt

s

STOP

Ciąg a

i

jest

ciągiem

malejącym,

zbieżnym do

wartości 0, co

powoduje, że

suma s jest

ograniczona.

Niech a

i-1

=pop oraz

a

i

=akt

background image

Iteracja – przykłady

Iteracja – przykłady

STAR

T

p

N

T

a,

eps

a>=0 ^ eps

> 0

T

N

p:=1

p

2

<

a

p:=p+1

p

2

=

a

p:=p-1

x:=(p+a/p)

/2

|p-x|

>=eps

x

STOP

N

T

p:=x

T

N

Algorytm Newtona-

Raphsona obliczania

pierwiastka kwadratowego

z liczby a z dokładnością

eps

9

4

1

q

5

a

0.001

eps

2,23611

2,25

2

3

2

1

p

2,23606

2,23611

2,25

x


Document Outline


Wyszukiwarka

Podobne podstrony:
Metody układania algorytmów rekurencja, metoda dziel i zwyciężaj, programowanie dynamiczne, metoda
Programowanie dynamiczne
Programowanie dynamiczne (2)
programowanie dynamiczne
Badania Operacyjne UW, wykład 3 produkcja-zapasy, Programowanie dynamiczne
Metoda programowania dynamicznego
Programowanie Dynamiczne
8 Programowanie dynamiczne
programowanie dynamiczne id 396 Nieznany
Algorytmy wyklady, Programowanie dynamiczne, MATRIX-CHAIN-ORDER ( p );
Wykład nr 5 Optymalizacja (programowania dynamicznego)
Metody układania algorytmów rekurencja, metoda dziel i zwyciężaj, programowanie dynamiczne, metoda
Programowanie dynamiczne

więcej podobnych podstron