Introduction à la programmation dynamique !

a marqué ce sujet comme résolu.
Auteur du sujet

Tout le monde se secoue ! :D

Suite à un conseil de Hod, je vais commencer à transférer les articles de mon site sur Zeste de Savoir pour contribuer à la section "Algorithmique". Je commence donc avec un premier court article qui se veut être une introduction au concept de la programmation dynamique. N'hésitez pas à me faire part de vos retours et de vos remarques sur l'article que vous pouvez retrouver ici :

Merci d'avance de votre lecture :)

Édité par haltode

+0 -0

Puisque tu parles de la complexité, et que tu as envie de faire un article, peux-tu faire un lien vers ce tuto : https://zestedesavoir.com/tutoriels/484/nos-algorithmes-sont-ils-vraiment-comparables/

Le but est de créer du liant entre les contenus de zds.

De plus pour la mémoire, je me sens bien de faire un petit jsfiddle pour représenter l'espace mémoire pris au fur et à mesure du temps.

+0 -0
Auteur du sujet

Puisque tu parles de la complexité, et que tu as envie de faire un article, peux-tu faire un lien vers ce tuto : https://zestedesavoir.com/tutoriels/484/nos-algorithmes-sont-ils-vraiment-comparables/

Le but est de créer du liant entre les contenus de zds.

artragis

Bien sûr, pas de soucis !

De plus pour la mémoire, je me sens bien de faire un petit jsfiddle pour représenter l'espace mémoire pris au fur et à mesure du temps.

artragis

Hm je ne connais pas, je vais me renseigner dessus.

+0 -0

Merci pour la publicite artragis. ;-)

J'ai lu en diagonale et il y a un petit truc qui me manque lorsque tu compares diviser pour mieux regner a la programmation dynamique: divide and conquer est une approche top-down par design, la ou la programmation dynamique est l'oppose, c'est a dire a une approche bottom-up.

C'est a mon sens la difference fondamentale qui ensuite explique pourquoi la programmation dynamique permet de ne pas recalculer certain sous-problemes (aka principe d'optimalite de Bellman).

A mon avis c'est quelque chose qui devrait figurer dans l'introduction pour vraiment que le lecteur qui n'y connait rien voit tout de suite la difference d'approche entre les deux.

Bon, sinon comme je te l'ai dit sur IRC, c'est une bonne initiative et j'attends aussi tes ecrits sur l'apprentissage. ;)

« Kommunist Fried Chicken » | Macroeconomics: Three decades of intellectual regress

+1 -0
Auteur du sujet

J'ai lu en diagonale et il y a un petit truc qui me manque lorsque tu compares diviser pour mieux regner a la programmation dynamique: divide and conquer est une approche top-down par design, la ou la programmation dynamique est l'oppose, c'est a dire a une approche bottom-up.

C'est a mon sens la difference fondamentale qui ensuite explique pourquoi la programmation dynamique permet de ne pas recalculer certain sous-problemes (aka principe d'optimalite de Bellman).

A mon avis c'est quelque chose qui devrait figurer dans l'introduction pour vraiment que le lecteur qui n'y connait rien voit tout de suite la difference d'approche entre les deux.

KFC

Techniquement on peut faire des deux avec la programmation dynamique (et j'en parle justement), mais c'est pour ça que je préfère évoquer l'idée des sous-problèmes communs dans l'introduction comme principale différence entre diviser pour régner et programmation dynamique. Si je présente cette méthode comme uniquement ascendante, je me prive d'une étape assez importante dans l’appréhension du principe. Je vais voir si je peux tout de même l'évoquer en introduction car c'est effectivement un bon point. ;)

Bon, sinon comme je te l'ai dit sur IRC, c'est une bonne initiative et j'attends aussi tes ecrits sur l'apprentissage. ;)

KFC

Merci de ton soutien, mais j'ai déjà évoqué l'idée d'aider peut être les personnes qui sont en train de faire un tutoriel sur l'apprentissage artificiel plutôt que de publier mon article de mon côté (d'ailleurs je compte faire de même pour le tutoriel sur les algorithmes de graphe sans doute).

+0 -0

Pour le js fiddle c'est un moyen sympa d'insérer un peu d'interactivité dans le tutoriel. C'est ce qu'on fait dans l'article sur les nombres premiers dans le cadre du crible d'ératostène ainsi que dans le tuto sur la balise video en html.

C'est une possibilité qui est propre à zds (oc ne l'a pas par exemple) mais elle est assez peu utilisée. Or comme nos membres n'ont pas trop l'air friants de vidéo, j'essaie de voir comment intégrer un maximum cette fonctionalité pour donner un peu d'originalité à nos contenus.

+0 -0
Auteur du sujet

Ah effectivement, je ne savais même pas pour cette fonctionnalité ! Après personnellement je ne code pas en js, mais si une personne fait un code intéressant et qui apporte quelque chose à l'article, ça sera avec plaisir que je l'intégrerais ;)

+0 -0

Au fait, j'ai aussi un tuto en cours de rédaction sur la programmation dynamique. C'est une reprise de mon tuto sur le SdZ. Si tu est intéressé par une collaboration sur le sujet c'est bienvenu de mon coté (je n'ai jamais pris le temps de le finaliser proprement pour ZdS).

+1 -0
Auteur du sujet

Au fait, j'ai aussi un tuto en cours de rédaction sur la programmation dynamique. C'est une reprise de mon tuto sur le SdZ. Si tu est intéressé par une collaboration sur le sujet c'est bienvenu de mon coté (je n'ai jamais pris le temps de le finaliser proprement pour ZdS).

yoch

Avec plaisir, tu préfères me rajouter sur ton tutoriel ou l'inverse ? :p

+0 -0

Merci pour la publicite artragis. ;-)

Sinon, je n'ai parcouru le tuto que vite fait, c'est assez sympa à lire !

Juste un truc par rapport au code C pour Fibnoacci : tu dis mettre -1 car toutes les valeurs sont positives. C'est vrai, mais vu que tu stockes dans un unsigned long long, ton résultat sera tout de même considéré comme un nombre positif. Ce sera en réalité le plus grand nombre positif que peut stocker un ull.

Le hasard n’est que le nom donné à notre ignorance et n’existerait pas pour un être ominscient., Émile Borel

+0 -0
Auteur du sujet

Juste un truc par rapport au code C pour Fibnoacci : tu dis mettre -1 car toutes les valeurs sont positives. C'est vrai, mais vu que tu stockes dans un unsigned long long, ton résultat sera tout de même considéré comme un nombre positif. Ce sera en réalité le plus grand nombre positif que peut stocker un ull.

Bermudes

Oups, merci d'avoir vu cette erreur. Je corrige ! ;)

+0 -0

Avec plaisir, tu préfères me rajouter sur ton tutoriel ou l'inverse ? :p

napnac

Comme tu veux, ce qui est surtout intéressant est de savoir comment intégrer les deux tutos pour n'en faire qu'un. Si tu veux on en discute par MP.

+0 -0
Auteur du sujet

Salut !

Non malheureusement la rédaction n'a pas avancé pour un manque de temps tout d'abord, et puis plus récemment j'avais la tête ailleurs. Mais comme j'envisageais de toute façon de ré-écrire une bonne partie de l'article, je pense m'y remettre bientôt, à voir si yoch est aussi disponible. ;)

+0 -0
Auteur du sujet

Bonjour à tous !

J’aimerais tout d’abord m’excuser pour ce "délai" de plusieurs mois. Il s’est passé beaucoup de choses entre temps, et écrire l’article n’était pas une de mes priorités. J’ai cependant repris l’écriture il y a un peu plus d’un mois. L’article a été totalement réécrit, à la base pour tenter d’inclure l’autre tutoriel de yoch sur le sujet, puis j’ai voulu reprendre entièrement le projet pour adopter une approche plus concrète et moins superflue que celle que j’avais mise en place lors de la bêta précédente. L’article est certes plus long, mais j’ai essayé d’être à la fois complet et synthétique dans mes explications et de suivre un raisonnement logique et le plus naturel possible.

J’attends avec impatience vos retours sur l’article ! ;)

Édité par haltode

+0 -0

Bonjour,

Ça me semble assez clair, cependant, j’aurais bien aimé retrouver des images, une avec le tableau une fois rempli et l’autre avec le chemin emprunté. Car celle avec les ronds verts n’est pas forcément explicite.

+0 -0
Auteur du sujet

Ça me semble assez clair, cependant, j’aurais bien aimé retrouver des images, une avec le tableau une fois rempli et l’autre avec le chemin emprunté. Car celle avec les ronds verts n’est pas forcément explicite.

JuDePom

C’est l’image en elle-même que tu ne trouves pas claire ou bien les explications qui vont avec (ou les deux) ? Car cette image a pour but de présenter le cas général, et de faire apparaître les 3 informations nécessaires pour mettre en place notre algorithme itératif parcourant le tableau (les points de départ, les liens de dépendance d’une case à l’autre et l’objectif final).

Il n’est pas réellement possible de montrer le chemin emprunté car encore une fois c’est un cas général puisque le résultat d’une case varie en fonction du poids des objets. Après, même en prenant un exemple et en appliquant le schéma à cet exemple bien spécifique, je ne suis pas certain de l’intérêt d’expliciter le chemin suivi car l’algorithme ne "suit" pas réellement un chemin mais se contente de remplir le tableau. Je pense que cela pourrait porter à confusion dans la compréhension de l’algorithme. L’image a pour but d’expliquer comment le résultat d’une case est calculée (le point bleu), donc les explications pour les autres cases du "chemin" seront exactement les mêmes.

Je vais tout de même essayer de réfléchir à une manière d’améliorer ce point, merci de ton retour ;)

Édité par haltode

+0 -0
Ce sujet est verrouillé.