ENSAE Ecole Nationale de la Statistique et de l ... - xavierdupre.fr
ENSAE Ecole Nationale de la Statistique et de l ... - xavierdupre.fr
ENSAE Ecole Nationale de la Statistique et de l ... - xavierdupre.fr
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
1. Séances notées 146) Comme l’algorithme précé<strong>de</strong>nt ne fournit pas <strong>la</strong> bonne solution pour tous les montants, il faut imaginerune solution qui puisse traiter tous les jeux <strong>de</strong> pièces. On procè<strong>de</strong> par récurrence. Soit P = (p 1 , . . . , p n )l’ensemble <strong>de</strong>s pièces. On définit <strong>la</strong> fonction f(m, P ) comme étant le nombre <strong>de</strong> pièces nécessaire pourdécomposer le montant m. On vérifie tout d’abord que :1. La fonction f(m, P ) doit r<strong>et</strong>ourner 1 si le montant m est déjà une pièce.2. La fonction f(m, P ) vérifie <strong>la</strong> re<strong>la</strong>tion <strong>de</strong> récurrence suivante :f(m, P ) = min {f(m − p, P ) + 1 pour tout p ∈ P }C<strong>et</strong> algorithme perm<strong>et</strong> <strong>de</strong> construire <strong>la</strong> meilleure décomposition en pièces pour tout montant. La <strong>de</strong>rnièreexpression signifie que si le montant m est décomposé <strong>de</strong> façon optimale avec les pièces (p 1 , p 2 , p 3 , p 4 ) alorsle montant m − p 4 est aussi décomposé <strong>de</strong> façon optimale avec les mêmes pièces (p 1 , p 2 , p 3 ).Il ne reste plus qu’à implémenter <strong>la</strong> fonction 5 f(m, P ). (5 points)7) Qu’obtient-on avec le jeu <strong>de</strong> pièces pieces = [1, 2, 4, 5, 10, 20, 50] ? Prolongez le programme pour déterminertous les choix possibles du prési<strong>de</strong>nt parmi les pièces [3,4,6,7,8,9] ? (1 point)8) Quel est le coût <strong>de</strong> votre algorithme ? (facultatif)Correction# -*- coding: <strong>la</strong>tin-1 -*-#################################### question 1 : r<strong>et</strong>ourner un tableau################################### 5pieces = [1,2,5,10,20,50]pieces.reverse ()print pieces # affiche [50, 20, 10, 5, 2, 1]# il existait d’autres solutionspieces.sort (reverse = True)10# ou encore l’utilisation d’une fonction compare modifiée# qui s’inspire <strong>de</strong> l’exemple 15# http://www.<strong>xavierdupre</strong>.<strong>fr</strong>/enseignement/initiation/...# ...initiation_via_python_ellipse/chap2_type_tex_-_tri-_3.html# on encore un tri programmé# http://www.<strong>xavierdupre</strong>.<strong>fr</strong>/enseignement/initiation/... 20# ...initiation_via_python_ellipse/chap3_syntaxe_tex_-_tri-_27.html################################################################### question 2 : trouve <strong>la</strong> plus gran<strong>de</strong> pièce inférieure à un montant################################################################## 25<strong>de</strong>f plus_gran<strong>de</strong>_piece (montant, pieces) :# on suppose que les pièces sont triées par ordre décroissantfor p in pieces : 30if p le montant est négatif ou nul# on vérifie5. Même si l’algorithme est présenté <strong>de</strong> façon récurrente, il peut être implémenté <strong>de</strong> façon récurrente ou non. La métho<strong>de</strong>récurrente est toutefois déconseillée car beaucoup plus lente.