From 7e2b6fb302366e3f8145c7081448f29dc5e51920 Mon Sep 17 00:00:00 2001 From: Romain Vuillemot <romain.vuillemot@gmail.com> Date: Tue, 7 May 2024 06:59:04 +0200 Subject: [PATCH] Petites correction de texte --- TD07/INF-TC1-td07.ipynb | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/TD07/INF-TC1-td07.ipynb b/TD07/INF-TC1-td07.ipynb index 23086cb..dd5bcdb 100644 --- a/TD07/INF-TC1-td07.ipynb +++ b/TD07/INF-TC1-td07.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "931d31d6", + "id": "7f210b68", "metadata": {}, "source": [ "NAME:" @@ -31,13 +31,13 @@ "source": [ "## Objectif du TD\n", "\n", - "Dans ce TD nous allons aborder le problème de rendu de monnaie selon plusieurs méthodes algorithmiques : \n", + "Dans ce TD nous allons aborder le problème dit de de _rendu de monnaie_ selon plusieurs méthodes algorithmiques : \n", "\n", - "- technique dite Gloutonne\n", + "- technique de programmation Gloutonne\n", "- chemin minimal dans un arbre de recherche \n", - "- Programmation Dynamique (**prochain TD7bis et devoir à rendre**)\n", + "- Programmation Dynamique (cela fera l'objet du **prochain TD7bis et du devoir à rendre**)\n", "\n", - "Vous serez amené également à créer une structure de données de graphe et une méthode de parcours de celui-ci. \n", + "Vous serez amené dans ce TD (et les suivant) à créer une structure de données de graphe et une méthode de parcours de celui-ci. \n", "\n", "**Les réponses de la partie sur la programmation dynamique feront l'objet d'un autre sujet de TD et d'un rendu sous forme de rapport à rendre sur Moodle.**" ] @@ -49,7 +49,7 @@ "source": [ "## Le problème de \"rendu de monnaie\"\n", "\n", - "Le problème de rendu de monnaie est très fréquent dans la vie de tous les jours et peut être défini comme suit : étant donné un montant, une machine capable de rendre la monnaie doit rendre ce montant au client à partir de pièces (1c à 2€) et de billets. On suppose pour simplifier qu'il n'y a que des pièces en centimes; un billet de 5€ sera représenté comme une pièce de 500 centimes. On supposera dans un premier temps qu'il existe un nombre suffisant (autant que nécessaire) de chaque pièce, mais dans un second temps nous introduirons des contraintes de disponibilité des pièces." + "Le problème de rendu de monnaie est très fréquent dans la vie de tous les jours et peut être défini comme suit : étant donné un montant, une machine capable de rendre la monnaie doit rendre ce montant au client à partir de pièces (1c, 2€, etc.) et de billets (10€, 50€, etc.). On suppose pour simplifier qu'il n'y a que des pièces en centimes; un billet de 5€ sera représenté comme une pièce de 500 centimes. On suppose également (dans un premier temps) qu'il existe un nombre suffisant (autant que nécessaire) de chaque pièce, mais dans un second temps nous introduirons des contraintes de disponibilité des pièces." ] }, { @@ -120,7 +120,6 @@ "source": [ "## Résolution du problème\n", "\n", - "\n", "L'exemple de la Table 1 est un système *canonique*, c'est à dire qu'en choisissant systématiquement les pièces de plus grande valeur (algorithme glouton) on obtient toujours la solution optimale. Il existe des systèmes pour lesquels c'est moins simple, par exemple $S=(1,7,23)$. Pour **M = 28**, en choisissant en priorité les pièces de plus grande valeur on trouvera $T=(5,0,1)$ (6 pièces), alors que la solution optimale est $T=(0,4,0)$ (4 pièces).\n", "\n", "Dans le cas général, ce problème est démontré NP-difficile, c'est-à-dire qu'on ne connaît pas d'algorithme qui puisse le résoudre en complexité polynomiale par rapport à la taille de $S$.\n", @@ -239,15 +238,15 @@ }, "outputs": [], "source": [ - "Rep= gloutonne(sorted([1, 7, 23]), 28)\n", + "Rep = gloutonne(sorted([1, 7, 23], reverse=True), 28)\n", "print(Rep[1], ': ', sum(Rep[1]),' pièces') if Rep[0] else print('Echec') \n", - "# [5, 0, 1] : 3 pièces Un pièce de 23 et 5 pièces de 1\n", + "# [28, 0, 0] : 28 pièces\n", "\n", - "Rep= gloutonne(sorted([7, 23]), 5)\n", + "Rep = gloutonne(sorted([7, 23], reverse=True), 5)\n", "print(Rep[1], ': ', sum(Rep[1]),' pièces') if Rep[0] else print('Echec') \n", "# Echec car M < la + petite pièce\n", "\n", - "Rep= gloutonne(sorted([7, 23]), 8)\n", + "Rep = gloutonne(sorted([7, 23], reverse=True), 8)\n", "print(Rep[1], ': ', sum(Rep[1]),' pièces') if Rep[0] else print('Echec') \n", "# Echec car on ne peut jamais faire la monnaie avec cette S" ] @@ -313,9 +312,13 @@ }, "outputs": [], "source": [ - "Rep= gloutonne_avec_D(sorted([1,7,23]), 28, [10,10,0])\n", + "Rep= gloutonne_avec_D([23, 7, 1], 28, [0, 10, 10]) # On ne fait pas de tri car il faudrait trier D aussi\n", + "print(Rep[1], ': ', sum(Rep[1]),' pièces utilisées') if Rep[0] else print('Echec')\n", + "# Echec\n", + "\n", + "Rep= gloutonne_avec_D([23, 7, 1], 28, [0, 1, 21])\n", "print(Rep[1], ': ', sum(Rep[1]),' pièces utilisées') if Rep[0] else print('Echec')\n", - "# [0, 4, 0] : # On utilise 4 pièces " + "# [21, 1, 0] : 22 pièces utilisées" ] }, { -- GitLab