13.07.2015 Views

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

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

1. Séances notées 16################################## question 6 : algorithme optimal 105################################## version récursive : très longue<strong>de</strong>f <strong>de</strong>composer_optimal (montant, pieces) :if montant in pieces : 110r<strong>et</strong>urn [ montant ]else :r = [ 1 for m in range (0, montant) ]for p in pieces :if montant > p : # si ce test n’est pas fait, <strong>la</strong> récurrence peut être infinie 115# car les montants négatifs ne sont pas pris en compte# par le premier test<strong>de</strong>c = <strong>de</strong>composer_optimal (montant - p, pieces) + [p]if len (<strong>de</strong>c) < len (r) :r = <strong>de</strong>c 120r<strong>et</strong>urn r# print "<strong>de</strong>composer_optimal (98, pieces4) =", <strong>de</strong>composer_optimal (98, pieces4)# trop long 125# version non récursive<strong>de</strong>f <strong>de</strong>composer_optimal (montant, pieces) :memo = [ [ 1 for l in range (0, m) ] for m in range (0, montant+1) ]# memo [i] contient <strong>la</strong> pire décomposition du montant i (que <strong>de</strong>s pièces <strong>de</strong> un) 130# pour les pièces <strong>de</strong> pieces, on sait faire plus courtfor p in pieces :if p < len (memo) :memo [p] = [ p ] 135for m in range (1, montant+1) :for p in pieces :if m > p :# on calcule <strong>la</strong> nouvelle décomposition 140<strong>de</strong>c = [p] + memo [m-p]# si elle est plus courte, on <strong>la</strong> gar<strong>de</strong>if len (<strong>de</strong>c) < len (memo [m] ) :memo [m] = <strong>de</strong>c# on r<strong>et</strong>ourne <strong>la</strong> meilleur décomposition pour montantr<strong>et</strong>urn memo [ montant ]# beaucoup plus rapi<strong>de</strong>print "<strong>de</strong>composer_optimal (98, pieces4) =", <strong>de</strong>composer_optimal (98, pieces4) 150# affiche [50, 20, 20, 4, 4]145######################## question 7 : résultat 155######################## pour trouver <strong>la</strong> décomposition <strong>la</strong> plus longue avec n’importe quel jeu <strong>de</strong> pièces# on reprend <strong>la</strong> fonction maximum_piece <strong>et</strong> on remp<strong>la</strong>ce <strong>de</strong>composer par <strong>de</strong>composer optimale 160<strong>de</strong>f maximum_piece (pieces) :# détermine le nombre maximum <strong>de</strong> pièces à utilisermaxi = 0montant = 0 165for m in range (1, 100) :r = <strong>de</strong>composer_optimal (m, pieces)if len (r) >= maxi : # si on remp<strong>la</strong>ce c<strong>et</strong>te ligne par if len (r) > maxi :

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!