Sigui v una llista de mida
que conté enters (tant positius com negatius). Una
divisió de v és una
posició
de la llista (on
),
tal que que divideix la llista v en dues parts: de les
posicions que van del
a
,
i l’altra que va de
fins a l’última posició:
.
La divisió equilibrada de v és una
posició i
()
que minimitza aquesta diferència (on
és el valor absolut):
Dit altrament, la divisió equilibrada és una posició de la llista tal que diferència entre la suma dels elements que hi ha des de la posició fins a la posició i la suma dels elements entre les posicions i és mínima. Fixeu-vos també que aquesta posició pot ser . Això voldrà dir que la part esquerra de la llista serà buida (i per tant, la seva suma valdrà ) i la part dreta anirà de la posició fins a la , és a dir, serà tot el vector.
Fes la funció divisio_equilibrada(v) tal que, donat una
llista v, en torni la divisió equilibrada. Si n’hi
haguessin més d’una, torneu la de més a l’esquerra. Com ja hem explicat,
el valor
per a una divisió equilibrada és possible, ja que vol dir que una la
divisió de l’esquerra és buida. Recordeu, que per definició, la suma
d’una llista (o un tros de llista) buit és zero.
Per exemple, si la funció rep la llista , torna , ja que , mentre que si rep la llista , torna un , que és la partició equilibrada, ja que és la diferència mínima entre la divisió esquerra i la dreta.
Tingueu en compte que, si calculeu la suma total de la llista al
principi de la funció, podreu resoldre aquest problema amb una
sola passada sobre la llista v.
Una llista v d’enters, amb, almenys, dos elements.
La divisió equilibrada de la llista v. Si n’hi haguessin
més d’una, torneu la de més a l’esquerra.
Input
4 1 2 3
Output
2
Input
2 1 -3 4
Output
1