29.10.2015 Views

Lycée Thiers mpsi 123

Correction - MPSI-3 - Accueil

Correction - MPSI-3 - Accueil

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!