En Introduction to Algorithms(CLRS), Cormen et al. hablar sobre la solución del problema Rod-corte, como sigue (página 369)Comprensión de la implementación de corte de varilla ascendente
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
Aquí p[i]
es el precio de corte de la varilla a la longitud i, r[i]
es el ingreso de cortar la varilla al fin, y s[i]
, nos da el tamaño óptimo para la primera pieza para cortar.
Mi pregunta es sobre el bucle exterior que itera j
1
-n
y el bucle interior i
que va 1
-n
también.
En la línea 6 estamos comparando q
(la ganancia máxima obtenida hasta ahora) con r[j - i]
, el ingreso máximo ganado durante el corte anterior.
Cuando j = 1 and i = 1
, parece estar bien, pero la próxima iteración del lazo interno donde j = 1 and i = 2
, ¿no r[j - i] be r[1 - 2] = r[-1]
?
No estoy seguro si el índice negativo tiene sentido aquí. ¿Eso es un error tipográfico en CLRS o me falta algo aquí?
I caso de que algunos de ustedes no saben cuál es el problema de corte de varilla, aquí hay un example.
Code labs - Yup! Un estúpido descuido Gracias por señalar eso. –
No hay problema, todos pasamos por alto algunas cosas a veces :) – Unsigned