Je dirais que la programmation dynamique est une programmation dynamique. C'est un concept distinct des algorithmes. Si vous demandiez des "applications algorithmiques de la programmation dynamique", cela me semblerait plus logique.
Yoshio Okamoto
1
Bien sûr, dp est dp, mais programmation et dynamique signifient quelque chose de différent aujourd'hui, alors lorsque j'enseigne la programmation dynamique, j'aimerais que le nom soit différent.
Jack
4
Désolé, je n'ai pas été assez clair. Êtes-vous intéressé par la programmation dynamique en général, y compris son utilisation dans le contrôle et la planification des politiques, etc., et même par la programmation dynamique stochastique, ou simplement par la programmation dynamique en tant que méthode de conception d'algorithmes? Le public principal ici ne connaît que le dernier, mais votre question est assez générale et comprendrait le premier.
Yoshio Okamoto
1
Yoshio, je pense que vous devriez juste expliquer le concept plus général ou les différences de réponse car cela pourrait éclairer beaucoup d'entre nous.
Raphaël
2
Une autre idée qui n'est pas entièrement ironique: "la chose qui vous procure un emploi chez Google" - basée sur l'expérience de mes étudiants :)
Les années 1950 n'étaient pas de bonnes années pour la recherche mathématique. Nous avons eu un homme très intéressant à Washington nommé Wilson. Il était secrétaire à la Défense et avait en fait une peur pathologique et une haine du mot "recherche". Je n'utilise pas le terme à la légère; Je l'utilise précisément. Son visage suffoquait, il rougissait et il devenait violent si les gens utilisaient le terme «recherche» en sa présence. Vous pouvez imaginer comment il se sentait alors à propos du terme «mathématique». La RAND Corporation était employée par l'armée de l'air et l'armée de l'air avait essentiellement Wilson pour patron. Par conséquent, j’ai senti que je devais faire quelque chose pour protéger Wilson et l’armée de l’air du fait que je pratiquais réellement les mathématiques au sein de RAND Corporation.
Quel titre, quel nom pourrais-je choisir? En premier lieu, je m'intéressais à la planification, à la prise de décision, à la réflexion. Mais planifier n'est pas un bon mot pour diverses raisons. J'ai donc décidé d'utiliser le mot "programmation". Je voulais faire comprendre que cela était dynamique, multi-étapes, variable dans le temps - je pensais, faisons d'une pierre deux coups. Prenons un mot qui a une signification absolument précise, à savoir «dynamique», au sens physique classique. Il possède également une propriété très intéressante en tant qu'adjectif: il est impossible d'utiliser le mot "dynamique" dans un sens péjoratif. Essayez de penser à une combinaison qui lui donnera éventuellement un sens péjoratif. C'est impossible. Ainsi, je pensais que «programmation dynamique» était un bon nom. C’était quelque chose que même un membre du Congrès ne pouvait objecter.
(Comme le soulignent Russell et Norvig dans leur manuel d’IA, cette histoire doit être un embellissement créatif de la vérité. Bellman a utilisé pour la première fois l’expression "programmation dynamique" en 1952 , et Charles Erwin Wilson n’a été nommé secrétaire à la Défense en 1953. )
Quoi qu'il en soit, la motivation initiale de Bellman suggère une planification en plusieurs étapes , mais du moins pour des raisons algorithmiques, je préférerais quelque chose comme une récursion ascendante frugale , seulement avec moins de syllabes.
DP présente deux aspects importants: (1) la définition des sous-problèmes (c’est-à-dire la création d’une "table", qui pourrait être un tableau multidimensionnel indexé peut-être par des entiers, des sommets, des sous-ensembles de sommets, etc.) et (2) résolvant récursivement le sous-problèmes. Je propose "récursion tabulaire / tabulée" comme un nom faisant référence aux deux aspects.
La mémorisation est utilisée, mais ne caractérise pas dp.
Jack
20
Exactement. La mémorisation est une programmation dynamique accidentelle.
Jeffε
@professor erickson - très bien dit. je ne peux pas m'arrêter de rire.
Akash Kumar
7
Néanmoins, si nous devions choisir un nouveau nom pour DP, utiliser la mémoisation serait tout à fait approprié. Par exemple, "la distance d'édition peut être calculée en plusieurs temps à l'aide de la mémorisation".
Noam
La programmation dynamique est un cas particulier de mémorisation, plus de diriger explicitement le flux de contrôle au lieu de suivre l'ordre d'évaluation applicatif naturel. C'est dommage qu'on l'enseigne généralement telle qu'elle est, car elle insiste trop sur le remplissage d'un tableau, au lieu de la spécification récursive. Cela semble magique.
Neil Toronto
8
Pour aller avec diviser pour régner , je dirais épisser et combiner.
J'utilise habituellement les deux mots, joignant et combinant tout en enseignant / expliquant le DP; mais pas utilisé splice-and-combine explicitement. Parfois, j'ai utilisé le chevauchement des divisions et des conquêtes pour contraster les deux paradigmes.
Après ma récente conférence sur la programmation dynamique dans la conception d'algorithmes, j'avais demandé aux étudiants de proposer un nouveau nom pour cette technique. Bien que la "programmation difficile" m'amuse, je voulais quelque chose qui rende la technique plus mémorable. Après la discussion ici, je peux proposer deux noms, un pour top-down et un pour bottom-up:
Multiway-Divide et Memoized-Conquer (aka Divide ^ M & Conquer ^ M), et
Fusionner tous les sous-problèmes (aka Merge_all)
Je ne pense pas que créer une association forte avec les habituelles divisions et divisions (comme dans Mergesort) soit une bonne idée. Là, les sous-problèmes sont résolus indépendamment et seuls deux résultats sont fusionnés. Dans DP, les sous-problèmes vérifiés ne sont pas indépendants et toutes les combinaisons sont vérifiées. (les deux en gros). Par conséquent, je pense qu'un nom devrait souligner la différence plutôt que de créer un sentiment de similitude.
Raphaël
@ Raphaël, je partage l'inquiétude suscitée par les dangers de la création d'une association forte, mais je ne suis pas d'accord avec votre déclaration des différences. Dans DP, il est crucial que les sous - problèmes soient "résolus indépendamment" même si les solutions aux sous-problèmes sont partagées. Je souligne habituellement que si un oracle vous disait la bonne division, ce serait diviser pour régner, mais puisque je ne parle pas le grec (contrairement à mon directeur de thèse), je dois essayer toutes les divisions possibles.
Jack
2
Oui, les sous-problèmes sont conceptuellement indépendants. Cependant, je les rapportais en utilisant les mêmes résultats partiels, comme vous le dites. Cela sépare le DP de D & C, car il est par exemple possible de paralléliser ce dernier sans avoir à calculer plusieurs fois les sous-problèmes (ou à communiquer les résultats), par opposition au premier. Votre analogie est bonne mais ne justifie pas le nom dans ce cas car trouver les divisions correctes est une partie essentielle du problème. Je suppose que vous pourriez dire que DP est une généralisation de D & C basée sur ce raisonnement, cependant.
Raphaël
@Raphael, désolé d'être pédant, mais puisqu'il s'agit d'une question d'enseignement, je veux que la notion d'indépendance de sous-problème soit claire, et dire simplement que "conceptuellement indépendant" n'est pas précis. Lorsque vous essayez une division, les sous-problèmes que vous créez peuvent ne pas avoir de dépendances. Vos autres commentaires portent sur les étapes des algorithmes DP; Je préfère commencer par définir avec précision le problème à résoudre. Mes exemples préférés: triangulation min. Poids et décomposition convexe min. De polygones simples ( cs.unc.edu/~snoeyink/demos/convdecomp/MWTDemo.html )
Jack
C'est bon d'être pendu. Mais considérons l’importance didactique du choix des mots: vous dites aux étudiants que les sous-problèmes sont indépendants, puis vous leur donnez un algorithme qui ne sépare pas leur calcul, mais qui repose en réalité sur un calcul "entrelacé". Je pense que cela peut être très déroutant. Par conséquent, vous devez vraiment séparer un concept / mathématique / optimisation / ... et une indépendance informatique à un moment donné.
Raphael
4
Ce papier ( paywalled doi ) appelle des problèmes qui peuvent être attaqués en utilisant DP "decomposable".
J'ai récemment discuté de cette question avec des collègues et, après une discussion animée, nous avons proposé la mise en cache des appels sous forme de tableau .
cela ressemble à quelque chose que vous faites dans un centre d'appels externalisé;)
Suresh Venkat
2
Je suggérerais de nommer Programmation inductive - comme une sorte de pont semblable à celui de notre époque aux bons vieux temps de Euler, Kepler et al. Ou peut-être même la programmation inductive inversée . Et oui, pour moi, le DP est fortement associé à l’induction, au sens ancien du terme. La mémorisation, la mise en cache, les tables, etc. ne sont que des éléments de technique, et non pas le cœur de l’approche.
Bah. La programmation dynamique ne concerne pas les tables ; il s'agit d'une récursion intelligente.
Jeffε
3
Je pense qu'il est préférable de séparer deux aspects: "Extraire une structure récursive du problème et écrire en tant que récurrence" (modélisation) et "Résoudre la récurrence obtenue de manière ascendante" (algorithmes). Je me sens programmation dynamique (algorithmes) fait référence à la fois, ce qui est également le cas pour la programmation linéaire, la programmation entière, semidéfinie, etc.
Yoshio Okamoto
1
Des tables sont parfois utilisées. La programmation dynamique sur les arbres (par exemple: ensemble maximum indépendant) n'utilise normalement pas de tableau [= tableau] pour mémoriser la récurrence; il utilise un arbre, ou dans certains cas, un arbre de tableaux, ou un tableau d'arbres, ou dans certains cas, un produit cartésien d'arbres. De même pour la programmation dynamique sur dags ou la programmation dynamique sur des décompositions arborescentes pour des graphes de largeur d'arbre liée.
Jeff E
1
JeffE, le nom d'une technique ne couvre pratiquement jamais toutes les applications. Prenez la "diagonalisation", par exemple; dans les applications avancées, il n’ya aucune diagonale visible (ou du moins pas le domaine d’action exclusif). Mais je ne suis pas trop amoureux du "remplissage de table", de toute façon, alors que je pense que cela pourrait être un nom raisonnable pour les débutants.
Raphaël
3
Mes 2 centimes sur ce sujet. La programmation dynamique a deux aspects distincts pour concevoir des algorithmes. Tout d’abord, il faut comprendre les mécanismes de dp en tant que: récursion intelligente plus mémoisation conduisant à un algorithme plus rapide. Le deuxième aspect consiste à reconnaître qu’un problème peut admettre une récursion intelligente et à le résoudre. Les deux sont importants pour enseigner. Pour ces derniers, un cas courant est celui de la division et de la conquête, avec une interaction limitée et, à mon avis, intéressant à souligner explicitement.
Réponses:
L'autobiographie de Richard Bellman suggère qu'il a choisi le terme «programmation dynamique» pour distraire intentionnellement.
(Comme le soulignent Russell et Norvig dans leur manuel d’IA, cette histoire doit être un embellissement créatif de la vérité. Bellman a utilisé pour la première fois l’expression "programmation dynamique" en 1952 , et Charles Erwin Wilson n’a été nommé secrétaire à la Défense en 1953. )
Quoi qu'il en soit, la motivation initiale de Bellman suggère une planification en plusieurs étapes , mais du moins pour des raisons algorithmiques, je préférerais quelque chose comme une récursion ascendante frugale , seulement avec moins de syllabes.
la source
DP présente deux aspects importants: (1) la définition des sous-problèmes (c’est-à-dire la création d’une "table", qui pourrait être un tableau multidimensionnel indexé peut-être par des entiers, des sommets, des sous-ensembles de sommets, etc.) et (2) résolvant récursivement le sous-problèmes. Je propose "récursion tabulaire / tabulée" comme un nom faisant référence aux deux aspects.
la source
La mémorisation est une variante assez commune.
la source
Pour aller avec diviser pour régner , je dirais épisser et combiner.
J'utilise habituellement les deux mots, joignant et combinant tout en enseignant / expliquant le DP; mais pas utilisé splice-and-combine explicitement. Parfois, j'ai utilisé le chevauchement des divisions et des conquêtes pour contraster les deux paradigmes.
la source
Après ma récente conférence sur la programmation dynamique dans la conception d'algorithmes, j'avais demandé aux étudiants de proposer un nouveau nom pour cette technique. Bien que la "programmation difficile" m'amuse, je voulais quelque chose qui rende la technique plus mémorable. Après la discussion ici, je peux proposer deux noms, un pour top-down et un pour bottom-up:
Multiway-Divide et Memoized-Conquer (aka Divide ^ M & Conquer ^ M), et
Fusionner tous les sous-problèmes (aka Merge_all)
la source
Ce papier ( paywalled doi ) appelle des problèmes qui peuvent être attaqués en utilisant DP "decomposable".
la source
J'ai récemment discuté de cette question avec des collègues et, après une discussion animée, nous avons proposé la mise en cache des appels sous forme de tableau .
la source
Je suggérerais de nommer Programmation inductive - comme une sorte de pont semblable à celui de notre époque aux bons vieux temps de Euler, Kepler et al. Ou peut-être même la programmation inductive inversée . Et oui, pour moi, le DP est fortement associé à l’induction, au sens ancien du terme. La mémorisation, la mise en cache, les tables, etc. ne sont que des éléments de technique, et non pas le cœur de l’approche.
la source
Probablement quelque chose qui inclut le tableau de mots et le remplissage , comme c'est ce qui se passe.
la source
Vue récursive ou horizon récursif
la source
Je l'appellerais "Récursion avec mémoization".
la source