J'ai rencontré un problème où l'objectif était d'utiliser une programmation dynamique (au lieu d'autres approches). Il y a une distance à parcourir et un jeu de câbles de différentes longueurs. Quel est le nombre minimum de câbles nécessaires pour couvrir exactement la distance?
Pour moi, cela ressemblait à un problème de sac à dos , mais comme il pouvait y avoir des multiples d'une longueur particulière, c'était un problème de sac à dos borné, plutôt qu'un problème de sac à dos 0/1. (Considérez la valeur de chaque élément comme son poids.) En adoptant l'approche naïve (et sans se soucier de l'expansion de l'espace de recherche), la méthode que j'ai utilisée pour convertir le problème du sac à dos borné en un problème de sac à dos 0/1, était simplement décomposer les multiples en simples et appliquer l'algorithme de programmation dynamique bien connu. Malheureusement, cela conduit à des résultats sous-optimaux.
Par exemple, pour des câbles donnés:
1 x 10 pi,
1 x 7 pi,
1 x 6 pi ,
5 x 3 pi,
6 x 2 pi,
7 x 1 pi
Si la portée cible est de 13 pieds, l'algorithme DP sélectionne 7 + 6 pour couvrir la distance. Un algorithme gourmand aurait choisi 10 + 3, mais c'est une égalité pour le nombre minimum de câbles. Le problème se pose lorsque vous essayez de franchir 15 pieds. L'algorithme DP a fini par choisir 6 + 3 + 3 + 3 pour obtenir 4 câbles, tandis que l'algorithme gourmand choisit correctement 10 + 3 + 2 pour seulement 3 câbles.
Quoi qu'il en soit, en effectuant un léger balayage de la conversion limitée à 0/1, cela semble être l'approche bien connue pour convertir plusieurs éléments en {p, 2p, 4p ...}. Ma question est de savoir comment fonctionne cette conversion si p + 2p + 4p ne correspond pas au nombre de plusieurs éléments. Par exemple: j'ai 5 câbles de 3 pieds. Je ne peux pas très bien ajouter {3, 2x3, 4x3} car 3 + 2x3 + 4x3> 5x3. Dois-je ajouter {3, 4x3} à la place?
[J'essaie actuellement de chercher le document "Oregon Trail Knapsack Problem", mais il semble actuellement que l'approche utilisée n'est pas une programmation dynamique.]