IMPSI – Option Informatique
Ann´ee 2002, Huiti`eme TP Caml
Vincent Simonet (http://cristal.inria.fr/~simonet/)
Rendu de monnaie
D’apr`es la composition d’Informatique du concours Centrale-Sup´elec 2002
Le sujet traite du probl`eme du monnayeur : comment rendre la monnaie en utilisant le plus
petit nombre possible de pi`eces ? Les deux premi`eres parties mettent en place le formalisme
et les outils qui serviront pour la suite. On ´etudiera dans la partie 3 «l’algorithme glouton ».
La derni`ere partie pr´esente un algorithme permettant de d´ecider si l’algorithme glouton est
optimal pour un syst`eme de pi`eces donn´e. Cette derni`ere partie utilise les r´esultats ´etablis
dans les parties pr´ec´edentes.
Notations
Lorsque Eest un ensemble fini, |E|esigne son cardinal.
Lorsque xR,bxcd´esigne la partie enti`ere inf´erieure
de xet dxesa partie enti`ere sup´erieure : ce sont les
uniques entiers relatifs v´erifiant bxc ≤ x < bxc+ 1 et
dxe − 1< x ≤ dxe.
Si p, q Zavec pq,Jp, qKesigne l’ensemble des
entiers relatifs compris entre pet q:Jp, qK= [p, q]Z.
Si mN=N\{0},Rmest muni de sa structure eucli-
dienne canonique en posant, pour u, v Rm:
u·v=
m
X
i=1
uivi
Si 1 im,eid´esigne le m-uplet dont toutes les
composantes sont nulles sauf la i-`eme qui vaut 1.
Formalisation du probl`eme
Soit (ci)1imun m-uplet d’entiers v´erifiant c1> c2>
. . . > cm= 1. Nous utiliserons le terme syst`eme pour
d´esigner un tel m-uplet. Les cisont les valeurs faciales
des pi`eces en service. Par exemple, le syst`eme utilis´e en
zone Euro est (200,100,50,20,10,5,2,1).
Pour chaque iJ1, mK, nous disposons d’une quantit´e
illimit´ee de pi`eces de valeur (ci). Soit xun entier (le mon-
tant `a rendre). Une repr´esentation de xdans le syst`eme
cest un m-uplet k= (k1, . . . , km) v´erifiant :
x=
m
X
i=1
kici=k·c
kiest donc le nombre de pi`eces (ci) qui seront rendues.
Pour ´epargner les poches des clients, nous souhaitons
minimiser le poids de cette repr´esentation, c’est-`a-dire
la quantit´e :
kkk=
m
X
i=1
ki=k·1
avec 1= (1, . . . , 1) (le m-uplet dont toutes les compo-
santes sont ´egales `a 1).
1 Syst`emes de pi`eces
Nous utiliserons des listes d’entiers pour repr´esenter
aussi bien un syst`eme (liste de valeurs de pi`eces)
qu’une repr´esentation d’un montant dans ce syst`eme.
Par exemple, la liste [4; 1; 3] est une repr´esentation de
30 dans le syst`eme (6,3,1).
IQuestion 1 ediger en Caml une fonction
est un systeme telle que est un systeme c rende un
bool´een indiquant si la liste cest bien un syst`eme.
value est un systeme :int list bool
Par exemple, est un systeme [5; 2; 1] rendra la valeur
true, tandis que est un system [5; 7; 1] rendra la valeur
false, tout comme le fera est un systeme [7; 5; 2].
c
°Vincent Simonet 2002
Ce document est distribu´e selon les termes de la GNU Free Documentation License.
2 Repesentations de poids minimal
Soient c= (c1, . . . , cm) un syst`eme et xN.
Nous notons Mc(x) (ou mˆeme M(x) lorsqu’aucune am-
bigu¨ıt´e n’est `a craindre) le plus petit nombre de pi`eces
n´ecessaires pour repr´esenter xdans le syst`eme c:
M(x) = min{kkk | kNmet k·c=x}
Nous nous int´eresserons aux repr´esentations de poids
minimal de x: ce sont les repr´esentations ktelles que
kkk=M(x). Pour all´eger la r´edaction, nous parlerons
simplement de repr´esentations minimales.
IQuestion 2 D´emontrer que dx/c1e ≤ M(x)x.
IQuestion 3 Montrer que M(x)1+M(xcj)pour
tout indice jtel que cjx. Montrer que M(x) = 1 +
M(xcj)si et seulement si il existe une repr´esentation
minimale kde xfaisant intervenir cj(c’est-`a-dire telle
que kj>0).
IQuestion 4 Notons sle plus petit indice itel que
cix. Justifier l’´egalit´e
M(x) = 1 + min
simM(xci)
IQuestion 5 D´eduisez-en une fonction Caml
poids minimaux telle que poids minimaux x c construit
la liste des valeurs de Mc(y)pour 1yxdans
l’ordre des ycroissants.
value poids minimaux :int int list int list
Indication : vous pourrez commencer par construire
le r´esultat sous forme d’un tableau, puis le convertir
en liste en utilisant la fonction list of vect de la bi-
blioth`eque standard.
3 L’algorithme glouton
Avertissement : Dans cette partie, on travaillera obli-
gatoirement sur des listes sans passer par des vecteurs.
L’algorithme glouton pour rendre une somme x > 0
consiste `a choisir le plus grand cix, puis `a rendre
r´ecursivement xci. Par exemple, avec le syst`eme
c= (10,5,2,1), l’algorithme d´ecomposera 27 en 10+10+
5+2. Avec le formalisme propos´e, la solution fournie par
l’algorithme glouton est donc k= (2,1,1,0). Le fonc-
tionnement de l’algorithme glouton peut ˆetre acc´el´er´e
par la remarque suivante : notant q=bx/c1c, cet algo-
rithme rend qpi`eces de valeur c1, puis rend le montant
xqc1en utilisant le syst`eme (c2, . . . , cm).
IQuestion 6 R´ediger en Caml une fonction glouton
telle que glouton x c construit la repr´esentation de x
dans le syst`eme cen utilisant l’algorithme glouton.
value glouton :int int list int list
Soient c= (c1, . . . , cm) un syst`eme et xN. Nous no-
terons Γc(x) la repr´esentation gloutonne de xdans le
syst`eme c, (c’est-`a-dire la repr´esentation obtenue en ap-
pliquant l’algorithme glouton), et Gc(x) (ou mˆeme G(x)
lorsqu’aucune ambigu¨ıt´e n’est `a craindre) le nombre
de pi`eces utilis´ees par l’algorithme glouton : Gc(x) =
kΓc(x)k.
Nous dirons qu’un syst`eme cest canonique lorsque
l’algorithme glouton nous donne toujours une
repr´esentation minimale ; on a alors Mc(x) = Gc(x)
pour tout xN.
IQuestion 7 Montrer que tout syst`eme c= (c1, c2)
est canonique. Exhiber un syst`eme c= (c1, c2, c3)non
canonique.
4 L’algorithme de Kozen et Zaks
Nous allons voir ici un algorithme efficace permettant de
d´eterminer si un syst`eme c= (c1, . . . , cm) est canonique.
Nous dirons qu’un entier xest un contre-exemple pour c
si M(x)< Gc(x). Un syst`eme canonique n’admet donc
pas de contre-exemple.
Dans la suite, on suppose m3.
IQuestion 8 Soit cun syst`eme non canonique. Il ad-
met donc des contre-exemples. Montrer que le plus petit
d’entre-eux, disons x, v´erifie cm2+ 1 < x < c1+c2.
Ce r´esultat nous donne un algorithme d´eterminant si
un syst`eme est canonique : il suffit de rechercher un
contre-exemple dans l’intervalle discret Jcm2+ 2, c1+
c21K. Ceci n´ecessiterait la construction (coˆuteuse) des
repr´esentations minimales de chacun des ´el´ements de cet
intervalle.
Nous allons ´etudier un algorithme plus efficace, dˆu `a
Kozen et Zaks. Leur m´ethode repose sur la notion de
emoin. Nous dirons qu’un entier xest un t´emoin pour
le syst`eme c= (c1, . . . , cm) s’il existe un indice itel que
ci< x et G(xci)< G(x)1.
IQuestion 9 emontrer que tout t´emoin est un
contre-exemple. Montrer que le r´esultat pr´ec´edent n’ad-
met pas de r´eciproque. (On pourra consid´erer le syst`eme
(5,4,1).)
IQuestion 10 Montrer que si le syst`eme cadmet des
contre-exemples, alors le plus petit d’entre eux est un
emoin.
Il r´esulte de cette ´etude que, pour savoir si un syst`eme
est canonique, il sufit de v´erifier l’in´egalit´e G(x)
G(xci) + 1 pour tout xJcm2+ 2, c1+c21K,
et tout indice iJ1, mKtel que ci< x. C’est le principe
de l’algorithme de Kozen et Zaks.
IQuestion 11 ediger en Caml une fonction
kozen zaks prenant pour argument un syst`eme et in-
diquant si celui-ci est canonique.
value kozen zaks :int list bool
2
IMPSI – Option Informatique
Ann´ee 2002, Huiti`eme TP Caml
Vincent Simonet (http://cristal.inria.fr/~simonet/)
Rendu de monnaie
Un corrig´e
IQuestion 1
l e t r ec e st un sys teme = function
[] >false
|[1] >t ru e
|[ ] >false
|c 1 : : c 2 : : c’ >
c 1 >c 2 && ( est un sy st em e ( c 2 : : c ’ ) )
; ;
§
IQuestion 2 Montrons tout d’abord que dx/c1e ≤
M(x).Soit kune repr´esentation pour laquelle le mi-
nimum (dans la d´efinition de M(x)) est atteint. On a
M(x) = kkket k·c=x. Par d´efinition k·c=Pikici
et, pour tout iJ1, mK,cic1. On en d´eduit que
xPikic1=c1Piki=c1kkk. Il vient x/c1M(x)
et, M(x) ´etant un entier, dx/c1e ≤ M(x).
erifions maintenant que M(x)x.Posons c=em.
Soit kd´efini par km=xet, pour tout iJ1, m 1K,
ki= 0. On a k·c=xet kkk=x. On en d´eduit que
M(x)x.
IQuestion 3 Soit k0une repr´esentation minimale de
xcj.k=k0+ejest une repr´esentation de x. On en
d´eduit que M(x)≤ kk0+ejk=M(xcj) + 1.
Supposons M(x) = 1 + M(xcj) et consid´erons tou-
jours une repr´esentation minimale k0de xcj. On a
kk0+ejk=M(x). k=k0+ejest donc une repr´esentation
minimale de xqui fait intervenir cj.
Inversement, si kest une repr´esentation minimale de x
telle que kj1, k0=kejest une repr´esentation de
xcj. On en d´eduit que M(xcj)≤ kk0k=kkk − 1 =
M(x)1. On conclut que M(xcj)+1 M(x) et grˆace
`a la premi`ere in´egalit´e on obtient M(x) = M(xcj)+1.
IQuestion 4 La question 3 donne imm´ediatement
M(x)1 + min
ximM(xci)
Consid´erons kune repr´esentation minimale de xet j
tel que kj1. La question 3 nous assure que M(x) =
1 + M(xcj). On en d´eduit l’´egalit´e.
IQuestion 5
let poids minimaux x c =
l e t m = make vect x 1 i n
l e t rec mini y = function
[] >failwith ” sy st em e v i d e ”
|c 1 : : [ ] >m. ( y c 1 1)
|c 1 : : c when c 1 >y>mini y c ’
|c 1 : : when c 1 = y >0
|c 1 : : c >min m. ( y c 1 1) ( mi ni y c ’ )
i n
f o r y = 2 to xdo
m. ( y 1) <1 + mini y c
done ;
list of vect m
; ;
§
IQuestion 6
l e t r ec glouton x = function
[] >[]
|c 1 : : c >
l e t q = x / c 1 i n
q : : glouton ( x qc 1 ) c ’
; ;
§
IQuestion 7 Montrons tout d’abord que tout
syst`eme `a deux ´el´ements c= (c1,1) est canonique.
Soit xN. Effectuons la division euclidienne de x
par c1:x=qc1+ravec r < c1. L’algorithme glou-
ton propose k= (q, r) comme repr´esentation minimale.
Soit k0= (q0, r0) une autre repr´esentation de xdans le
syst`eme c. On a n´ecessairement q0< q (sinon k=k0,
puisque q0c1x. On a alors r0r= (qq0)c11×2.
On en d´eduit que kk0k>kkk.
On v´erifie que le syst`eme (4,3,1) n’est pas canonique :
pour x= 6, l’algorithme glouton propose de rendre 3
pi`eces, (1,0,2), alors qu’il est possible de n’en rendre
que 2 : (0,2,0).
IQuestion 8 Consid´erons xle contre-exemple mini-
mal de c.
Montrons tout d’abord que cm2+ 1 < x.Si x < cm2
alors xcm1. Toute d´ecomposition de xne fait donc
intervenir que cm1et cm. On en d´eduit, par la ques-
tion 7, que xn’est pas un contre-exemple (puisque l’al-
gorithme glouton est optimal sur tout syst`eme `a deux
´el´ements).
Pour x=cm2, l’algorithme glouton propose de rendre
une pi`ece, ce qui est optimal. De mˆeme, pour x=
cm2+ 1, l’algorithme propose 1 pi`ece si x=cm3et 2
pi`eces sinon, ce qui est optimal ´egalement. On en d´eduit
que tout contre-exemple pour le syst`eme cest stricte-
ment sup´erieur `a cm2+ 1.
Montrons maintenant que x<c1+c2.Raisonnons par
l’absurde et supposons xc1+c2. On a G(x)> M(x)
et G(x) = 1 + G(xc1). x´etant un contre exemple
minimal, on a G(xc1) = M(xc1). Soit jtel que
cjapparaisse dans une d´ecomposition minimale de x.
M(x) = 1 + M(xcj) = 1 + G(xcj). On en d´eduit
que M(xc1)> M(xcj). On a M(x)<1+ M(xc1)
donc, par la question 3, on sait qu’il n’existe pas de
d´ecomposition minimale de xfaisant intervenir c1. On
en d´eduit que cjc2et xcjx1. Or xest
le contre-exemple minimal donc xcjn’est pas un
contre-exemple. L’algorithme glouton donne donc une
d´ecomposition minimale de xcj, qui fait intervenir c1.
On en d´eduit qu’il existe une d´ecomposition minimale
de xfaisant intervenir c1, d’o`u la contradiction.
IQuestion 9 Soit xun t´emoin pour le syst`eme cest
itel que ci< x et G(xci)< G(x)1. G(xci) est le
poids d’une d´ecomposition de xci. On en d´eduit que
M(xci)G(xci). Or M(x)M(xci) + 1 donc
M(x)< G(x). xest donc un contre-exemple.
IQuestion 10 Soit xun contre-exemple minimal de
c. Supposons que xn’est pas un t´emoin. Soit itel que
ci< x. On a G(xci)G(x)1. Or xest un contre-
exemple minimal, donc G(xci) = M(xci). On en
d´eduit que M(xci)+1 G(x)> M(x). Il n’existe
pas de d´ecomposition minimale de xfaisant intervenir
ci. On en d´eduit que x=cj, puis que G(x) = 1 = M(x),
d’o`u la contradiction.
IQuestion 11
l e t k ozen zaks c =
match cwith
[ ] |[ ] |[ ; ] >tr ue
| −>
let v = v e c t o f l i s t c i n
let m = v e c t l e n g t h v i n
let g = make vect ( v .( 0) + v . ( 1 ) ) 0 i n
let j = r e f (m 1) i n
for x = 1 to v . (0 ) + v . (1 ) 1do
while ! j >= 0 && v . ( ! j ) <= x do j : = ! j 1done ;
g . ( x) <1 + g . ( x v . ( ! j + 1))
done ;
let r es = r e f t ru e i n
for x = v . (m 3) + 2 to v .( 0) + v .(1) 1do
f o r i = 0 to m1do
i f v . ( i ) <x && g . ( x) >g . ( x v . ( i )) + 1
then r es := f a l s e
done ;
done ;
! r e s
; ;
§
2
1 / 4 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !