J'essaie de concevoir un pseudo-code pour les algorithmes Knapsack, où un seul élément peut être sélectionné plusieurs fois. L'algorithme classique estAlgorithme pour Knapsack avec répétition
OPT(i, w) = max(OPT(i-1, w) or vi + OPT(i-1, w-wi))
Afin de répondre aux exigences, je suis en train de modifier à
k=1;
max = maximum(OPT(i-1, w))
while(OPT(i-1, w - k*wi) > 0) {
maximum = max(maximum, k*vi + OPT(i-1, w - k*wi))
k++
}
OPT(i, w) = maximum
Est-ce semble être une solution appropriée? Ou une meilleure solution existe-t-elle? S'il vous plaît laissez-moi savoir si des informations supplémentaires sont requises. Reste tout reste le même, vi désigne la valeur de l'élément ith et wi indique le poids de l'élément ith.
Par chance, pouvons-nous réduire cela à un problème avec la sortie 1D? – LearningToCode
Je ne suis pas ce que vous voulez dire par "sortie 1D". la sortie de 'OPT' est une valeur booléenne/ – amit
Puisque nous utilisons les variables i et W, la complexité de l'espace du code est O (nW). Pouvons-nous le réduire à O (n)? – LearningToCode