Sei sulla pagina 1di 15

METODE DE

PROGRAMARE

( Noțiuni generale )

1
[ ]
[ ] [ ] [ ] [ ] [CP]

Metoda

divide et impera

Divide

Impera

1 a1, a2,... an ap,


ap + 1,... aq 1 < p < q < n
divide
et impera
divide et impera
(p, q)
(p, m) (m + 1, q), p m < q (p, m – 1) (m, q),
p < m q
combinate
a

divide
et impera

}
}

divide et
impera

Divide Combina

DivideEtImpera.

Exemplu

3
Metoda
Backtracking
posibile

backtracking

n T = {T1, T2, T3,… Tn}


C = {C1, C2, C3, C4}

S = C x C x C x... x C S
n {C1, C3, C4,… C2}
k Tk Ci Tk
Ci
T1
{T2, T3,... Tn} T2
{T3, T4,... Tn} Tk
{T(k + 1),... Tn}

{C1, C2, C3, C4}


T1 C1 T1
x = {C1,...}

T2 T2 T4 T1
T2 T4 {C2, C3, C4}
T2
C2
T1
2
T2 T1

k – 1

Tk
{T(k + 1), T(k + 2),... Tn} (k + 1)

n 2 A1, A2,... An m1 m2,... mn


f: A1 × A2 ×... An R
n-uplu x = (x1, x2,... xn) A1 × A2
×... An f

A = A1 × A2 ×... An

x
f f condi-
-
blemei x

5
x

Ai (1 i n x
elementul curent
backtracking

Pasul1. A1, .
Pasul2. Trecem

Pasul2
ii. Pasul3.

B1

B2
B3 -

B4 -

B5
nimic
B6 index

nimic -

B7

B7.1

B7.2. Câttimp

Câttimp

atunci

atunci

altfel

nimic

} câttimp

7
x[i]

Ai, i = 1, 2,... n
{1, 2, 3,... n}
x = {0,0,... 0} x[i]
x[i]++ x[i]––
x[i] 1 x[i] n

backtracking

n
aik k Ai
k i k
i k ki
Procedura

altfel
x
Daca (x 2 atunci

Sfdaca
Sfdaca
Panacand
Daca atunci

Sfdaca
Panacand

n
A = {1, 2,... n }, n > 0
n uplele A

n A
backtracking elementele

[ ]

Metoda
backtracking greedy unei
criteriu de optim

9
A n (n
0) f: P(A) R.
B P(A) k B = {b1, b2,... bk}, (1 k
n) k-uplul (b1, b2,... bk) f

A P(A)

A
f

B
a A
B U {a}
a B
A B
f.

greedy =

greedy

foarte proaste
A
A
B

procedura

repeta
a A
daca (B U {a} atunci

U {a}
sfdaca
pana cand
sfarsit

Exemplu.
A R n f f(x1, x2,... xk)
= c1x1 + c2x2 +... ckxk (ci R, 0 k n).
B A k f

greedy f
A
B
A
B:= A
ci f
A, xi
A
A
f
A xi
A A

11
Exemplu
A = {–8, –7, –5, –1, 2, 3, 3, 5, 7, 8}
f f(x1, x2, x3, x4, x5, x6, x7) = 3x1 + 6x2 –
x3 – 9x4 – 9x5 + 3x6 + 8x7 x = (b1, b2,
b3, b4, b5, b6, b7) A
x greedy
f
A b4 = –8
f
x
A b5 = –7
x
f x x =
(b1, b2, –5, –8, –7, b6, b7)
f
A b7 = 8
f
x
b2 = 7
x f
x

x = (5, 7, –5, –8, –7, 3, 8).


f(5, 7, –5, –8, –7, 3, 8) = 270
S0

d1
prelucrare S0
S1

greedy
d1, d2,... dn - 1, dn
S0 Sn
S1, S2,... Sn - 1

d1, d2,... di - 1
S0 di d1,
d2,... di - 1 înapoi

Sn
dn Sn - 1
Sn dn

di + 1
, di + 2,... dn Si
Sn di Si - 1
Si
di + 1, di + 2,... dn
înainte
Si
di di + 1

di + 2, di + 3,... dn Si + 1 Sn
Si + 1
, Si + 2
,... Sn - 1
d1, d2,... di - 1
S0 Si - 1
S1, S2,... Sn - 2

13
d1,
d2,... dn
S0 Sn
di + 1, di + 2,... dn
Si Sn i, 0 i n – 1
d1, d2,... di
S0 Si i, 1 i n
di + 1
, di + 2,... dn
d1, d2,... di
Si Sn
S0 Si i, 1 i n

divide et impera

termenul de rang k
k
Intrare k
termenul de rang k v

a0 = 1 a1 = 1
ak = ak – 1 + ak – 2, k > 2

înapoi u = 1 v = 1
k = 1

s = u + v

u = v v = s
u = 1 v = 2

k k – 1 k – 2

15

Potrebbero piacerti anche