Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
PROGRAMARE
( Noțiuni generale )
1
[ ]
[ ] [ ] [ ] [ ] [CP]
Metoda
divide et impera
Divide
Impera
divide
et impera
}
}
divide et
impera
Divide Combina
DivideEtImpera.
Exemplu
3
Metoda
Backtracking
posibile
backtracking
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}
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)
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
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