Existe-t-il une différence entre la programmation dynamique descendante et ascendante?

33

Existe-t-il une différence fondamentale entre la programmation dynamique descendante et ascendante?

En particulier, y a-t-il un problème qui peut être résolu de bas en haut mais pas de haut en bas? Ou bien l’approche ascendante est-elle simplement un dénouement de la récurrence de l’approche descendante?

utilisateur695652
la source

Réponses:

27

Pour utiliser la méthode ascendante, vous devez être en mesure de déterminer efficacement ce qu'est le "fond", ce qui signifie généralement que vous avez besoin d'un espace de problème fortement contraint. Si vous savez quels seront les calculs de niveau le plus bas et que l'ordre de dépendance augmentera, il est logique de le faire de manière itérative dans le bon ordre et de stocker ces résultats. Factoriels, Fibonacci naïf et la relation de récurrence d'Euler pour les partitions sont tous de bons exemples de problèmes adaptés à cette approche.

Certains problèmes ne disposent pas d'un ordre de calcul ou de dépendance facile à déterminer pour les calculs. Les évaluations de positions d’échecs, par exemple, sont utilement mémorisées par position, le score d’évaluation étant stocké, il n’a pas besoin d’être recalculé. Les positions peuvent se reproduire à plusieurs niveaux de l’arbre de recherche en raison de la transposition et de la répétition de mouvements. Il est donc utile d’enregistrer les résultats de l’évaluation. Mais il n’ya aucun moyen de savoir quelles seront les positions aux niveaux les plus bas de l’arbre sans descente récursive (et en tenant compte de l’élagage intermédiaire), aussi la méthode descendante est-elle vraiment la seule approche possible.

Kyle Jones
la source
4
  • Approche descendante: Il s’agit de la conséquence directe de la formulation récursive de tout problème. Si la solution à un problème peut être formulée de manière récursive en utilisant la solution à ses sous-problèmes, et si ses sous-problèmes se chevauchent, on peut facilement mémoriser ou stocker les solutions aux sous-problèmes dans un tableau. Chaque fois que nous essayons de résoudre un nouveau sous-problème, nous vérifions d'abord le tableau pour voir s'il est déjà résolu. Si une solution a été enregistrée, nous pouvons l’utiliser directement, sinon nous résolvons le sous-problème et ajoutons sa solution au tableau.

  • Approche ascendante: Une fois que nous avons formulé la solution à un problème de manière récursive, en termes de sous-problèmes, nous pouvons essayer de reformuler le problème de manière ascendante: essayez d'abord de résoudre les problèmes secondaires et utilisez leurs solutions pour résoudre les problèmes de construction. sur et arriver à des solutions à des problèmes plus graves. Cela se fait aussi généralement sous forme de tableau en générant de manière itérative des solutions à des problèmes de plus en plus gros en utilisant les solutions à de petits problèmes. Par exemple, si nous connaissons déjà les valeurs de F41 et F40, nous pouvons calculer directement la valeur de F42.

M. Shahzad
la source