29.10.2015 Views

Lycée Thiers mpsi 123

Correction - MPSI-3 - Accueil

Correction - MPSI-3 - Accueil

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

CORRECTION DS 2 6<br />

5)<br />

5.a) Le principe “diviser pour régner” consiste, étant donné un problème de taille n, à le fractionner en un<br />

certain nombre a de problèmes de taille n/b.<br />

Ces derniers sont traités récursivement et leurs solutions respectives sont alors assemblées d’une<br />

manière appropriée, pour produire une solution au problème posé.<br />

5.b) Pour résoudre le MSSP via le principe diviser pour régner, on a besoin d’une fonction qui détermine<br />

la somme maximale pour les vecteurs “à cheval”.<br />

Si l’on note a, b les indices de début et de fin et i l’indice intermédiaire, il est clair que σ (v [a : i])<br />

doit être maximale parmi les sommes de sous-vecteurs qui se terminent avec le terme d’indice i et que<br />

σ (v [i : b]) doit être maximale parmi les sommes de sous-vecteurs qui démarrent avec ce même terme.<br />

En en déduit le code suivant :<br />

let mss_a_cheval v debut interm fin =<br />

let left = ref interm in<br />

let sLeftMax = ref 0 in<br />

let s = ref 0 in<br />

for i = interm downto debut do<br />

s := !s + v.(i);<br />

if !s > !sLeftMax then (<br />

left := i;<br />

sLeftMax := !s<br />

)<br />

done;<br />

let right = ref interm in<br />

let sRightMax = ref 0 in<br />

s := 0;<br />

for i = interm + 1 to fin do<br />

s := !s + v.(i);<br />

if !s > !sRightMax then (<br />

right := i;<br />

sRightMax := !s<br />

)<br />

done;<br />

(! sLeftMax + !sRightMax, !left, !right)<br />

;;

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

Saved successfully!

Ooh no, something went wrong!