Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
CORRECTION DS 2 4<br />
Exercice 4 - Somme maximale d’un sous-vecteur<br />
1) D’évidence, si tous les termes de v sont positifs ou nuls, alors σ ⋆ (v) est donné par σ (v) .<br />
2)<br />
2.a) Pour tout couple ( i, j ) tel que 0 i j n − 1, on doit calculer la somme<br />
j − i additions. Au total :<br />
⎛ ⎞ ⎛ ⎞<br />
∑n−1<br />
∑n−1<br />
∑n−1<br />
n−1−i ∑<br />
T (n) = j − i ⎜⎝ ⎟⎠ = ⎜⎝<br />
k⎟⎠ = 1 ∑n−1<br />
(n − 1 − i) (n − i) = 1 2<br />
2<br />
i=0<br />
j=i<br />
i=0<br />
k=0<br />
i=0<br />
j∑<br />
v. (k), ce qui représente<br />
k=i<br />
n∑<br />
k (k − 1)<br />
Comme k (k − 1) = 1 3<br />
[(k + 1) k (k − 1) − k (k − 1) (k − 2)] , on obtient (sommation télescopique) :<br />
Il est alors clair que T (n) = Θ ( n 3) .<br />
2.b) Implémentation de la méthode 0 :<br />
let mssp_0 v =<br />
let n = vect_length v in<br />
let left = ref 0 in<br />
let right = ref 0 in<br />
let smax = ref v.(0) in<br />
for i = 0 to n - 1 do<br />
for j = i to n - 1 do<br />
let s = ref 0 in<br />
for k = i to j do<br />
s := !s + v.(k)<br />
done;<br />
if !s > !smax then (<br />
left := i;<br />
right := j;<br />
smax := !s<br />
)<br />
done<br />
done;<br />
(!smax, !left, !right)<br />
;;<br />
T (n) = 1 (n + 1) n (n − 1)<br />
6<br />
3) Pour chaque i ∈ {0, · · · , n − 1} , l’algorithme ci-dessus calcule toutes les sommes v. (i) , v. (i) + v. (i + 1) , etc ...<br />
v. (i) + · · · + v. (n − 1) . De nombreuses additions sont donc effectuées plusieurs. On peut donc améliorer les<br />
choses ainsi :<br />
let mssp_1 v =<br />
let n = vect_length v in<br />
let left = ref 0 in<br />
let right = ref 0 in<br />
let smax = ref v.(0) in<br />
for i = 0 to n - 1 do<br />
let s = ref 0 in<br />
for j = i to n - 1 do<br />
s := !s + v.(j);<br />
if !s > !smax then (<br />
left := i;<br />
right := j;<br />
smax := !s<br />
)<br />
done<br />
done;<br />
(!smax, !left, !right)<br />
;;<br />
k=1