Dans l'introduction du livre à des algorithmes, l'approche naïve de problème de coupe de la tige de résolution peut être décrit par la récurrence suivante:approche alternative pour Rod coupe algorithme (récursive)
Soit q le prix maximum qui peut être obtenu à partir de une tige de longueur n.
Laissez le prix tableau [1..n] stocker les prix donnés. prix [i] est le prix donné pour une tige de longueur i.
rodCut(int n)
{
initialize q as q=INT_MIN
for i=1 to n
q=max(q,price[i]+rodCut(n-i))
return q
}
si je résous en utilisant l'approche ci-dessous:
rodCutv2(int n)
{
if(n==0)
return 0
initialize q = price[n]
for i = 1 to n/2
q = max(q, rodCutv2(i) + rodCutv2(n-i))
return q
}
Cette approche est correcte? Si oui, pourquoi utilisons-nous généralement le premier? Pourquoi est-ce mieux?
NOTE: Je suis juste concerné par l'approche pour résoudre ce problème. Je sais que ce problème présente une substructure optimale et des sous-problèmes qui se chevauchent et peut être résolu efficacement en utilisant une programmation dynamique.
Je n'ai pas l'intention de mémoriser la solution. Mon doute est sur l'approche, pourquoi nous allons avec le premier et pas le second. En outre, le tableau des prix stocke les prix «donnés», pas les prix optimaux. –