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 />
;;