Sunteți pe pagina 1din 4

G

I
n
f
o

n
r
.

1
5
/
2

-

f
e
b
r
u
a
r
i
e

2
0
0
5
40
f
o
c
u
s
Problema sumei puteri-
lor asemenea
Fie k 0 un numr natural; notm:
(1)
Se poate arta c suma S
k
(n) este
un polinom de grad k + 1, n care va-
riabila n are coeficieni raionali, adi-
c:
(2)
Numerele M, a
k+1
, a
k
, ..., a
1
, a
0
sunt ntregi, iar numrul ntreg M
trebuie s fie pozitiv i ct mai mic
posibil.
Impunnd aceast condiie, n-
treaga secven (M, a
k+1
, a
k
, ..., a
1
, a
0
)
va fi unic pentru numrul natural
dat k.
Problema const n determinarea
secvenei (M, a
k+1
, a
k
, ..., a
1
, a
0
) pen-
tru un numr natural k dat.
Date de intrare
Fiierul de intrare suma.in conine
un singur numr natural k (0 k
20).
Date de ieire
Fiierul de ieire suma.out trebuie
s conin valorile M, a
k+1
, a
k
, ..., a
1
,
a
0
, n aceast ordine i separate prin
unul sau mai multe spaii.
Exemplu
suma.in
2
5
0
suma.out
6 2 3 1 0
12 2 6 5 0 -1 0 0
1 1 0
Analiza problemei. Modelarea
algebric
Prezentm n continuare cteva din-
tre formulele relativ cunoscute, care
pot fi aplicate pentru valori mici ale
lui k.

(3)

(4)

(5)

(6)

(7)
Ne propunem n continuare de-
terminarea unei formule pentru S
5
(n).
Pe baza formulei lui Newton, scriem
expresia binomial:
(8)
care este echivalent cu:
(9)
Aplicnd suma pentru i de la 1 la
n, vom obine:
( )
1 6 15
20 15 6 1
2
3 4 5 6 6
+
+ =
i i
i i i i i
( )
1
1
5
6
2 4
6
3 3
6
4 2
6
5 1
6
6 6
+ +
+ =
i C i C
i C i C i C i i
( )
( ) ( )( )
( ) n n n n
n n n n n
i n S
n
i
+ + =
+ + +
=
=

=
3 4 5
2
1
4
4
10 15 6
30
1
30
1 3 3 1 2 1
( )
( )
( )
2 3 4
2 2
1
3
3
2
4
1
4
1
n n n
n n
i n S
n
i
+ + =
+
= =

=
( )
( )( )
( ) n n n
n n n
i n S
n
i
+ + =
+ +
= =

=
2 3
1
2
2
3 2
6
1
6
1 2 1
( )
( )
( ) n n
n n
i n S
n
i
+ =
+
= =

=
2
1
1
2
1
2
1
n i (n) S
n
i
= =

=1
0
0
( ) ( )
0 1
1
1
1
a n a n a n a
M
n S
k
k
k
k k
+ + + + =
+
+
L
k k k k
k
n ... (n) S + + + + = 3 2 1
Programare dinamic
SUMA puterilor
ASEMENEA
Doina Hrinciuc-Logoftu
Ne propunem prezentarea unui algoritm de tip Programare Dinamic pentru
problema puterilor asemenea a primelor n numere naturale. Primul pas va fi
codificarea problemei de rezolvat, adic stabilirea unui suport matematic care
s permit transformarea progresiv a datelor de intrare n soluie. Vor urma
descrierea algoritmului, analiza sa, motivele pentru ncadrarea lui n clasa
problemelor de tip programare dinamic, prezentarea general a acestei
metode i dou probleme propuse.
f
o
c
u
s
G
I
n
f
o

n
r
.

1
5
/
2

-

f
e
b
r
u
a
r
i
e

2
0
0
5
41
(10)
Dup reducerea termenilor din
partea stng, obinem:
(11)
Rezolvnd ecuaia (11) pentru a
afla S
5
(n), prin nlocuirea expresiilor
S
4
(n), S
3
(n), ..., S
0
(n), obinem:
(12)
Prin extrapolarea acestui exem-
plu concret, putem scrie n general:
(13)
Observm c pentru calcularea
valorii S
k
(n) sunt necesare toate su-
mele asemenea de putere mai mic
dect k.
De la ecuaia (13) spre algoritm
Revenind la problema noastr, dedu-
cem c pentru aflarea secvenei (M,
a
k+1
, a
k
, ..., a
1
, a
0
) pentru un numr
natural dat k sunt necesare toate sec-
venele corespunztoare pentru toate
sumele cu grad mai mic dect k, n-
cepnd cu cea de grad 0.
Aadar, toate aceste informaii tre-
buie salvate progresiv pentru a putea
fi manipulate n procesul de determi-
nare a soluiei pentru instana k.
Vom considera un tablou unidi-
mensional M[] n care vor fi salvate
secvenial valorile M[0], M[2],,
M[k] cu proprietatea: M[i] este nu-
mrul ntreg pozitiv ce satisface solu-
ia problemei pentru S
i
(n), 0 i k.
De asemenea, vom considera un
tablou bidimensional A[][] n care
vom salva valorile (a
i+1
, a
i
, ..., a
1
, a
0
)
pentru 0 i k, cu semnificaia: linia
i a tabloului A[][] conine coeficien-
ii corespunztori sumei S
i
(n).
Folosind aceste reprezentri i
nlocuind n formula (2), vom putea
scrie:
(14)
n continuare vom construi for-
mule recurente pentru secvena (M[k],
A[k][k + 1], A[k][k], , A[k][1],
A[k][0]) pe baza secvenelor deja cu-
noscute (M[i], A[i][i + 1], A[i][i], ,
A[i][1], A[i][0]) pentru 0 i < k.
Acest lucru pare anevoios la pri-
ma vedere, dar vom vedea cum sim-
pla "punere pe hrtie" a ecuaiei (13)
cu aceast notaie ne va furniza in-
formaii preioase i alte recurene
utile.
Vom obine succesiv:
(15)
Ecuaia a fost obinut prin nlo-
cuirea sumelor puterilor din formula
(13) folosind notaia cu tablouri.
n continuare, vom rescrie ecuaia
(15) sub forma unui polinom de grad
k + 1 grupnd termenii dup puterile
lui n.
(16)
Privind cu atenie ecuaia (16), se
remarc faptul c toi coeficienii ele-
mentelor din A[][] sunt aceleai
funcii raionale, ce pot fi scrise sub
forma:
(17)
Folosind ecuaia (17), ecuaia (16)
devine:
[ ] ( )
[ ]
0 1
1
1
1
=
+
+
+
k t ,
t M
C
t W
t k
k
-t k
( ) ( )
[ ]
[ ][ ]
[ ]
[ ][ ]
[ ]
[ ][ ]
[ ]
[ ][ ]
[ ]
[ ][ ]
[ ]
[ ]
[ ]
[ ][ ]
[ ]
[ ][ ]
( )
[ ]
[ ][ ]
[ ]
[ ][ ]
[ ]
[ ][ ]
( )
[ ]
[ ][ ]
[ ]
[ ][ ]
[ ]
[ ][ ]
( )
[ ]
[ ][ ]

+
+ +
+

+
+

+
+ +
+

+
+ +

+
+ +
+

+
+ +
+

+
+

+
+

+
+

+
+ = +
+
+ +
+
+
+
+ +
+
+
+
+ +
+
+
+
+
+
+
+
+
+
0 0
0
1
0 2
2
0 1
1
1 0
0
1
1 2
2
1 1
1
1
1
1
2
2
1
1
2 3
3
2 2
2
2 1
1
1 2
2
1 1
1
1
1
1
1
1 1
3
1
2
1
1
1 1
3
1
2
1
2
1 2
3
1
2
1
4
1
3
1
2
1 2
3
1
2
1 1
2
1
1
A
M
C
k A
k M
C
k A
k M
C
A
M
C
k A
k M
C
k A
k M
C
n
r r A
r M
C
r k A
k M
C
r k A
k M
C
n
k ] A[k
k M
C
k k A
k M
C
k k A
k M
C
n
k k A
k M
C
k k A
k M
C
n
k k A
k M
C
n
n n S k
k
k k
k
k
k
k k
k
k
-r k
k -r k
k
k r
k
k
k k
k
k k
k k
k
k
L
L
L
L
L
( ) ( )
[ ]
[ ][ ] (
[ ][ ]
[ ][ ] [ ][ ])
[ ]
[ ][ ] (
[ ][ ]
[ ][ ] [ ][ ])
( )
[ ]
(
[ ][ ]
[ ][ ]
[ ][ ]
[ ][ ])
( )
[ ]
[ ][ ] (
[ ][ ] [ ][ ])
( )
[ ]
[ ][ ] (
[ ][ ]) 0 0
1 0
0
1
1
0 1 1 1
2 1
1
1
1
0 1
1 1
1 1
2 1
1
1
1
0 2 1 2
2 2
1 2
1
1
0 1 1 1
1 1
1
1
1
1
1
1
1
2
1
1
1
1
1
3
1
1
2
1
1
A
n A
M
C
A n A
n A
M
C
r k A
n r k A
...
n r k r k A
n r k r k A
k M
C
k A n k A
... n k k A
n k k A
k M
C
k A n k A
... n k k A
n k k A
k M
C
n n S k
k
k
k
k
k
k
k
k
r
k
r
k
k
k
k
k
k
k
k
+
+ +
+ + +
+ +
+ +
+ + +
+ + +
+ +
+ + +
+ +

+
+ +
+ + +
+ + +
+

+ +
+ + +
+

+
= +
+
+
+
+

+
+
L
L
( )
[ ]
[ ][ ] (
[ ][ ]
[ ][ ] [ ][ ]) 0 1
1
1
1
k A n k A
n k k A
n k k A
k M
n S
k
k
k
+ +
+ + +
+ + =
+
L
( ) ( ) ( )
( )
( ) ( )
( ) ( )
( ) ( ) n S
n S C
n S C
n S C
n S C n n S k
k
k
k
k
p k
p
k
p
k k
k k
k
k
0
1
1 1
1 1
2
3
1
1
2
1
1
1
1
1
1
+
+
+ +
+
+
+
+
+
+ +
+
+ = +
L
( )
( ) ( )
( )
2 4 5 6
2 2 2
5
5 6 2
12
1
12
1 2 2 1
n n n n
n n n n
n S
+ + =
+ +
=
) ( ) ( 6 ) ( 15
) ( 20 ) ( 15 ) ( 6
0 1 2
3 4 5
6
n S n S n S
n S n S n S n
+
+ =
( ) ( )

= = =
= = =
=
+
+ =
=
n
i
n
i
n
k
n
i
n
i
n
i
n
i
i i
i i i
i i
1 1 1
2
1
3
1
4
1
5
1
6 6
1 6 15
20 15 6
1
G
I
n
f
o

n
r
.

1
5
/
2

-

f
e
b
r
u
a
r
i
e

2
0
0
5
42
f
o
c
u
s
(18)
Cu aceasta situaia s-a simplificat
mult. Coeficienii puterilor lui n din
aceast ecuaie se pot stoca ntr-un
tablou unidimensional de fracii ra-
ionale F[] i au forma:
(19)
nlocuind n ecuaia (18) valorile
din ecuaia (19) obinem:
(20)
Am ajuns, succesiv la o formul
asemntoare cu cerina problemei.
Mai rmne acum aducerea n forma
cerut cu Mminimal.
Aceasta se realizeaz prin aflarea
celui mai mic multiplu comun a nu-
mitorilor fraciilor F[0], F[1], , F[k],
F[k + 1]. Notnd acest multiplu prin
Q, putem rescrie ecuaia (20) astfel:
(21)
Deoarece Q este cel mai mic mul-
tiplu comun al numitorilor fraciilor
F[], F'[] va conine numere natura-
le i (k + 1) Q este cel mai mic M
pentru formula S
k
(n) n forma cerut.
Algoritmul
Deoarece , deducem
c M[0] = 1, A[0][1] = 1, A[0][0] = 0.
innd cont de manipulrile alge-
brice anterioare, algoritmul de rezol-
vare al problemei va fi urmtorul:
algoritm SumaPuteriAsemenea(k)
1. citete k
2. GenerazCombinri(
C[k+1][k+1])
3. M[0] 1
A[0][1] 1
A[0][0] 0
4. pentru p 1, k execut
4.1. semn 1
4.2. pentru t p - 1, 0 pas -1
execut
W[t]
FracieSimplificat(
semn C[p+1][p+1-t]
/ M[t] )
semn -1 semn * (-1)
sfrit pentru
4.3. pentru t p, 1 pas -1
execut
fAux Fracie(0/1)
pentru r p - 1, t - 1
pas -1, r 0 execut
fAux2
FracieSimplificat
(W[r] A[r][t])
fAux SumaFracii
(fAux, fAux2)
sfrit pentru
F[t] fAux
sfrit pentru
4.4. fAux
FracieSimplificat
(W[0] A[0][0])
F[0] SumaFracii
(F[0], fAux)
4.5. F[p+1] Fracie(1/1)
4.6. Q CMMMCNumitori
(F[], p + 1)
4.7. M[p] (p + 1) Q
4.8. pentru t p + 1, 0 pas -1
execut
fAux2
FracieSimplificat
(F[t] Q)
A[p][t] Numrtor
(fAux)
sfrit pentru
sfrit pentru
5. scrie M[k]
pentru i k + 1, 0 pas -1
execut
scrie A[k][i]
sfrit pentru
sfrit algoritm
Descrierea algoritmului
La pasul 2. se genereaz toi coefi-
cienii binomiali pn la ordinul k +
1 (conform ecuaiei (13), pentru cal-
cularea valorii S
k
(n) sunt necesari co-
eficienii binomiali de ordin k + 1).
Acesta se poate realiza, tot utili-
znd un algoritm bazat pe metoda
programrii dinamice, prin calcularea
succesiv a valorilor C[i][j] folosind
formulele:
C[i][0] = C[i][i] = 1, 0 i k + 1
C[i][j] = C[i - 1][j - 1] + C[i - 1][j],
1 i k + 1, 1 j < i
La pasul 3. se iniializeaz valo-
rile corespunztoare valorilor S
0
(n)
(conform ecuaiilor (2) i (14)).
La pasul 4. se execut o instruc-
iune repetitiv, care determin pro-
gresiv valorile A[p][0], A[p][1], ...,
A[p][p + 1], M[p], 1 p k. Acestea
reprezint soluiile pentru probleme-
le de ordinul 1, 2, ..., k.
La paii 4.1. i 4.2. se calculea-
z fraciile W[] conform ecuaiei (17).
Remarcm folosirea unei metode
FuncieSimplificat() care tre-
buie s returneze valoarea ireductibi-
l a unei fracii. Aceasta se realizeaz
prin determinarea celui mai mare di-
vizor comun d a numitorului i nu-
mrtorului, urmat de simplificarea
lor cu d.
La pasul 4.3. se vor calcula frac-
iile ireductibile F[] utiliznd ecua-
iile (19). Remarcm folosirea meto-
dei SumaFracii(F1, F2) care re-
turneaz fracia ireductibil reprezen-
tnd suma a dou fracii raionale.
La pasul 4.4. se adaug la F[0]
valoarea W[0] A[0][0], n conformi-
tate cu prima parte a ecuaiilor (19).
( ) n i n S
n
i
= =

=1
0
0
( )
( )
[ ] (
[ ] [ ]
[ ] [ ])
[ ] [ ] 1 0 ,
0 1
1
1
1
1
1
+ =
+ +
+ + + +
+ +
+
=
+
k r Q r F r F
F n F
n k F n k F
n k F
Q k
n S
k- k
k
k
L
[ ] [ ]
[ ] [ ] [ ] 0 1 1
1
1
1
1
1
F n F n k F
n k F n k (F
k
(n) S
k-
k k
k
+ + + +
+ + +
+
=
+
L
[ ] [ ] [ ][ ] [ ] [ ][ ]
[ ] [ ] [ ][ ]
[ ] 1 1
1
0 0 0 0 0
1
1
1
1
= +
=
+ =

=
=
k F
k r , r t A t W r F
A W t A t W F
p
k t
k t
( ) ( )
[ ] [ ][ ] ( )
[ ] [ ][ ] (
[ ] [ ][ ])
[ ] [ ][ ] (
[ ] [ ][ ]
[ ] [ ][ ])
[ ] [ ][ ] (
[ ] [ ][ ]
[ ] [ ][ ])
[ ] [ ][ ] (
[ ] [ ][ ]
[ ] [ ][ ])
[ ] [ ][ ] (
[ ] [ ][ ]
[ ] [ ][ ]) 0 0 0
0 2 2
0 1 1
1 0 0
1 2 2
1 1 1
1 1
2 2
1 1
2 3 3
2 2 2
2 1 1
1 2 2
1 1 1
1 1
1
2
1
1
A W
k A k W
k A k W
A W
k A k W
k A k W n
r r A r W
r k A k W
r k A k W n
k k A k W
k k A k W
k k A k W n
k k A k W
k k A k W n
k k A k W n
n n S k
r
k
k
k
k
k
+
+ +
+ +
+ +
+ +
+ +
+ +
+
+ +
+
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+
+
+ = +

+
L
L
L
L
L
f
o
c
u
s
G
I
n
f
o

n
r
.

1
5
/
2

-

f
e
b
r
u
a
r
i
e

2
0
0
5
43
Tot conform ecuaiilor (19), la pa-
sul 4.5. se atribuie valorii F[p + 1]
fracia 1/1. La pasul 4.6. se atribuie
valorii Qcel mai mic multiplu comun
al numitorilor fraciilor F[0], F[1], ...,
F[p], F[p + 1] folosind o metod
CMMMCNumitori().
La pasul 4.7. se seteaz valoarea
M[p] conform ecuaiei (21). Tot con-
form ecuaiei (21) se calculeaz la pa-
sul 4.8. valorile A[p][p + 1], A[p][p],
, A[p][0].
Analiza algoritmului
Ordinul de complexitate al algoritmu-
lui este O(n
3
) (pasul 4. conine trei
instruciuni repetitive imbricate), aa-
dar algoritmul este polinomial.
Corectitudinea
Algoritmul este corect, deoarece se
bazeaz pe succesiuni corecte de ma-
nipulri matematice.
Vom nota cu P(k) problema deter-
minrii sumei pentru puterile k. Con-
statm c, n cadrul algoritmului nos-
tru, rezolvm pe rnd problemele
P(0), P(1), ..., P(k - 1).
Pe baza tuturor soluiilor acestor
subprobleme se decid valorile pentru
problema P(k):
Soluia unei probleme P(i) parti-
cip la rezolvarea tuturor probleme-
lor P(i + 1), P(i + 2), , motiv
pentru care soluia unei probleme
P(i) este construit o singur dat i
salvat pentru a fi utililizat ulterior
repetat de problemele de dimensiuni
mai mari.
Acesta este un algoritm clasic n
care este utilizat metoda program-
rii dinamice.
Dependena
Fiecare element a
i
pentru o valoare k
dat depinde de valorile a
i
(dac aces-
tea exist) corespunztoare valorilor
k - 1, k - 2, ...; valoarea Mdepinde
de toate aceste elemente, fiind un fac-
tor de normalizare al formulei.
Consideraii generale
asupra programrii
dinamice
Metoda const n determinarea solu-
iei problemei pe baza unui ir de de-
cizii d
1
, d
2
, ..., d
n
unde d
i
transform
problema din starea s
i-1
n starea s
i
.
Spre deosebire de metoda divide
et impera, unde subproblemele tre-
buie s fie independente, n cadrul
metodei programrii dinamice, sub-
problemele vor fi subprobleme co-
mune mai multor subprobleme de
dimensiuni mai mari.
Pentru a fi eficient, metoda pro-
gramrii dinamice trebuie s rezolve
fiecare subproblem o singur dat i
s memoreze soluia pentru a o uti-
liza n mai multe subprobleme ulte-
rioare.
Spre deosebire de metoda divide
et impera, metoda programrii dina-
mice opereaz de jos n sus, nerecur-
siv i presupune cunoaterea de la n-
ceput a subproblemelor care apar n
descompunerea unei probleme.
Metoda programrii dinamice nu
este o tehnic standardizat cum es-
te, de exemplu, metoda backtracking,
iar elaborarea algoritmului se bazea-
z pe cteva principii generale.
Din acest motiv, abordarea aces-
tei metode nu este evident i presu-
pune aptitudini de programare, dese-
ori dublate de aptitudini matematice.
Deoarece metoda programrii di-
namice determin o soluie fr a ex-
ploata toate cazurile posibile, putem
gsi o asemnare i cu metoda greedy,
diferena constnd n faptul c n ca-
drul metodei greedy se alege optimul
local la un moment dat, iar n cazul
programrii dinamice se exploateaz
proprietatea de substructur optim
a problemei (combinarea soluiilor
optime ale subproblemelor).
Probleme propuse
Problema #1
Considerm sumele puterilor aseme-
nea, scrise sub forma
,
unde F
k+1
, F
k
, ..., F
0
sunt fracii raio-
nale ireductibile.
S se determine secvena (F
k+1
, F
k
,
..., F
1
, F
0
) pentru un numr natural
dat.
Modelai soluia problemei itera-
tiv, ca mai sus, utiliznd aceasta for-
m simplificat.
Problema #2
Se consider n numere naturale a
1
,
a
2
, ..., a
n
(n < 30) mai mici dect 100.
S se determine o list de numere b
1
,
b
2
, ..., b
n
, care satisfac relaia:
De exemplu, pentru n = 3 se va
obine:
b
1
= a
1
+ a
2
+ a
3
b
2
= a
1
a
2
+ a
1
a
3
+ a
2
a
3
b
3
= a
1
a
2
a
3
Indicaie
Se vor utiliza relaiile lui Viete pentru
rdcinile ecuaiei x
n
+ a
n-1
x
n-1
+ a
n-2
x
n-2
+ + a
0
= 0, care poate fi scri-
s i sub forma : (x - x
1
) (x - x
2
) ...
(x - x
n
) = 0 pentru construcia iterati-
v a polinomului.
De exemplu, pentru a
k
avem (X -
a[k]) (P[0] + P[1] X + ... + P[k - 1]
X
k-1
+ P[k] X
k
). Iniial vom avea
P[0] = -a[0] i P[1] = 1, iar pentru k
de la 1 la n - 1, sunt adevrate relaiile:
P[0] -P[0] a[k];
P[j] P[j - 1] - P[j] a[k],
pentru j cuprins ntre 1 i k;
P[k + 1] P[k].
Bibliografie:
1. ACM North-Eastern European
Regional Programming, Problem
B, 1997-1998
2. ACM South-Eastern European
Regional Programming, Problem
C, 1999
3. Graham R. L., Knuth D. E.,
Patashnik O., Concrete Mathema-
tics, Addison-Wesley, 1994
4. Hrinciuc Logoftu D., C++. Pro-
bleme rezolvate i algoritmi, editu-
ra Polirom, Iai, 2001
5. Nstsescu C., Ni C., Popa S., Al-
gebr, manual pentru clasa a X-a,
Editura Didactic i Pedagogic,
Bucureti, 1997
n k k k
a a a b
i
k k k
k k k i
i
i
< < <
=

... 1
,
2 1
) ,..., , (
2 1
2 1
L
,
0 1
1
1
F n F ... n F n F (n) S
k
k
k
k k
+ + + + =
+
+
( ) (
( )
( )
( )). 1
1
0

=
k SOL_P
...,
, SOL_P
, SOL_P
FUNCIE k SOL_P