Quelle est la principale différence entre la programmation dynamique et l’approche gourmande en termes d’utilisation?
Autant que j'ai compris, l'approche glouton donne parfois une solution optimale; dans d'autres cas, l'approche programmation dynamique donne une solution optimale.
Existe-t-il des conditions particulières à remplir pour utiliser l’une ou l’autre des approches pour obtenir une solution optimale?
_ {D'après les articles de Wikipedia.
Un algorithme glouton est un algorithme qui suit l'heuristique de résolution de problème pour faire de Le choix localement optimal à chaque étape avec l'espoir de trouver un optimum global. Dans beaucoup de problèmes, une stratégie gourmande ne produit pas en général une solution optimale, mais une heuristique gourmande peut donner des solutions localement optimales qui se rapprochent d'une solution optimale globale dans un délai raisonnable.
Nous pouvons faire le choix qui semble le mieux pour le moment, puis résoudre les problèmes qui se posent ultérieurement. Le choix fait par un {un algorithme glouton peut dépendre des choix effectués jusqu'ici mais pas des choix futurs ni de toutes les solutions au sous-problème}. Il fait de manière itérative un choix gourmand après un autre, réduisant chaque problème donné en un problème plus petit.
L'idée derrière la programmation dynamique est assez simple. En général, pour résoudre un problème donné, nous devons résoudre différentes parties du problème (sous-problèmes), puis combiner les solutions des sous-problèmes pour parvenir à une solution globale. Souvent, lorsque vous utilisez une méthode plus naïve, de nombreux sous-problèmes sont générés et résolus plusieurs fois. La méthode de programmation dynamique cherche à résoudre chaque sous-problème une seule fois, réduisant ainsi le nombre de calculs: une fois que la solution à un sous-problème donné a été calculée, elle est stockée ou "mémorisée": la prochaine fois que la même solution est nécessaire, elle est simplement recherchée. Cette approche est particulièrement utile lorsque le nombre de sous-problèmes répétés augmente de manière exponentielle en fonction de la taille de l'entrée.
Nous pouvons faire le choix qui semble le mieux pour le moment, puis résoudre les problèmes qui se posent ultérieurement. Le choix d'un algorithme glouton peut dépendre des choix effectués jusqu'à présent, mais pas des choix futurs ni de toutes les solutions au sous-problème. Il fait de manière itérative un choix gourmand après un autre, réduisant chaque problème donné en un problème plus petit. En d'autres termes, un algorithme glouton ne revient jamais sur ses choix.
C'est la principale différence avec la programmation dynamique, qui est exhaustive et qui garantit de trouver la solution. Après chaque étape, la programmation dynamique prend des décisions en fonction de toutes les décisions prises à l'étape précédente et peut reconsidérer le cheminement algorithmique de l'étape précédente vers la solution.
Par exemple, supposons que vous deviez vous rendre du point A au point B le plus rapidement possible, dans une ville donnée, aux heures de pointe. Un algorithme de programmation dynamique examinera l'intégralité du rapport de trafic, toutes les combinaisons possibles de routes et vous indiquera ensuite quel chemin est le plus rapide. Bien sûr, vous devrez peut-être attendre un moment jusqu'à la fin de l'algorithme et vous pourrez alors commencer à conduire. Le chemin que vous emprunterez sera le plus rapide (en supposant que rien ne change dans l'environnement externe).
D'autre part, un algorithme glouton vous permettra de démarrer immédiatement et de choisir la route la plus rapide à chaque intersection. Comme vous pouvez l'imaginer, cette stratégie pourrait ne pas aboutir à l'heure d'arrivée la plus rapide, car vous pourriez emprunter des rues "faciles" et vous retrouver ensuite désespérément dans un embouteillage.
En optimisation mathématique, algorithmes gloutons résolvent des problèmes combinatoires ayant les propriétés de matroids .
Programmation dynamique est applicable aux problèmes présentant les propriétés des sous-problèmes qui se chevauchent et de la sous-structure optimale.
La différence entre méthode gourmande et programmation dynamique est donnée ci-dessous:
La méthode gourmande ne revient jamais sur ses choix alors que la programmation dynamique peut prendre en compte l'état précédent.
L'algorithme Greedy est moins efficace alors que la programmation dynamique est plus efficace.
Les algorithmes Greedy ont un choix local de sous-problèmes alors que la programmation dynamique résoudrait tous les sous-problèmes et en choisirait un qui conduirait à une solution optimale.
Algorithme Greedy prend la décision en une fois alors que la programmation dynamique prend la décision à chaque étape.
Avec la référence de Biswajit Roy: La programmation dynamique planifie d'abord puis Go ..__ et L'algorithme Greedy utilise le choix glouton, il commence par Go, puis de façon continue.