in Introduction aux algorithmes (CLRS) , Cormen et al. Parlez de la résolution du problème de coupe de tige comme suit (Page 369)
EXTENDED-BOTTOM-UP-CUT-ROD(p, n)
let r[0...n] and s[0....n] be new arrays
r[0] = 0
for j = 1 to n:
q = -infinity
for i = 1 to j:
if q < p[i] + r[j - i]: // (6)
q = p[i] + r[j - i]
s[j] = i
r[j] = q
return r and s
3 Réponses :
Voici la clé: pour i = 1 à j code> p>
i code> commencera à 1 et augmentera la valeur j p>. p>
i code> ne sera jamais supérieur à j code>, donc j-i code> ne sera jamais inférieur à zéro. p>
Code Labs - Yup! Une supervision stupide. Merci d'avoir fait remarquer cela.
Pas de problème, nous négligeons tous les choses parfois :)
variable Je ne serai plus grand que la variable J en raison de la boucle interne et que l'indice r ne devient donc jamais moins de zéro. p>
Vous manquez les conditions dans l'intérieur de la boucle. En cela, la valeur de I ne va que jusqu'à J. Donc, s'il dépasse J, la boucle sera terminée. Par conséquent, aucune question des indices négatifs que vous avez mentionnés. P>