Sie sind auf Seite 1von 42

COMPLEXITE

ALGORITHMIQUE
ENSAK- S5
1
2
Rsoudre un problme implique:
Chercher UN algorithme adquat :

1/ Choisir une faon dorganiser les instructions
2/ choisir une structure de donnes, parfois plusieurs
Concevoir lalgorithme
Limplmenter:
Le traduire en langage
Lexcuter
Rsum de la discussion:
* La conception dpend dune personne lautre, les structures utilises sont varies,
*le temps dexcution, la consommation en mmoire, la clart, la simplicit, la
pertinence,
3
Les algorithmes proposs pour rpondre une mme tche
donne, sont gnralement (pour ne pas dire toujours) diffrents
Pourquoi? De quoi dpendrait cette diffrence?
Par quels critres les valuer et juger le meilleur? ?
Les temps dexcution de deux algorithmes rpondant la mme
tche et tournant sur la mme machine, peuvent tre trs

Un mme algorithme, sexcutera sur des machines diffrents en
des temps ncessairement diffrents. Pourquoi?
Nbr doprations,
dure dune opration,.
A/ Caractristiques dun algorithme
Parmi les caractristiques, et qui servent de critres dvaluation
des algorithmes, nous citons:
1. La Pertinence:
elle juge la qualit du rsultat obtenu.
Elle juge "Lalgo. doit bien faire, et dans tous les cas, ce
quon attend de lui".
2. La simplicit de lalgorithme : un algorithme simple est
facile comprendre, implmenter. Si le problme est
complexe=> le dcomposer


4
3. La complexit en temps:
Elle caractrise le temps ncessaire pour excuter le
programme traduit de lalgorithme.
Elle dpend de lalgorithme lui-mme : conception et
structures de donnes retenues.
Elle dpend des caractristiques de la machine

4. La complexit en espace:
Elle est dite aussi complexit en place de lalgo.
Elle caractrise la "consommation" en mmoire lors de
lexcution du programme traduit de lalgorithme
Elle aussi, dpend la fois de lalgorithme et des
structures de donnes retenues.


5
Remarque:
Si la place prise en mmoire est importante la taille
des problmes considrs devra tre limite!
Elle est "lie" au nombre de variables utilises:
variables introduite par lditeur de lalgo.
variables ncessaires ventuellement la conservation
des rsultats intermdiaires lors de lexcution (cas
dalgo. Rccurents par ex)

A quoi est-elle lie?
5. Remarque: Les complexits temporelle et en espace ne
vont pas ncessairement de pair!

6
NB: Ainsi, il sagira toujours dans la suite de complexit
temporelle, sauf indication contraire.
Qui lemporte si amliorer lune peut dgrader lautre?
Faux t-il vraiment chercher un compromis espace-temps?
Avant ctait oui, le cot en mmoire tait un vrai souci.
De nos jours, les situations ou l'espace mmoire est restreint
tant rares, on considre donc "presque" exclusivement la
complexit en temps
La complexit en mmoire saborde par ex. dans les cas des
algo. rcursifs si le nombre des appels rcurrents est trs
important puisquil faut sauvegarder tout les rsultats
intermdiaires. (ex: n!, voir TD/TP)
1: Le pourquoi
savoir comment croissent les besoins en
temps lorsque la taille des entres
augmente permet de:

=> savoir s'il est utilisable en un temps
raisonnable qlq soit linstance.
=>Comparer lefficacit des algo. qui
rpondent la mme tche.
7
B/ La complexit: une grandeur mesurable?!
L'tude de la complexit algorithmique vise ltude de
lvolution des ressources en temps et en espace ncessaires
lexcution de lalgorithme en fonction de la taille de
l'entre. (et non pas des valeurs!)
2: Linstance:

* Dfinition:
Pour un problme donn, on appelle instance tout jeu de donnes de
ce problme.
on obtient une instance en spcifiant les valeurs numriques des
donnes dentres de lalgorithme


* Exemple:
Problme:
Ecrire un algo. qui trie un tableau de n lments
Instance:
Trier le tableau de taille 5, compos de {1,5,3,9,4}
3 . Les oprations lmentaires
* Dfinition:
Nous appelons oprations lmentaires dun algorithme :
un accs en mmoire pour lire ou crire la valeur dune
variable ou dune case dun tableau ;
une opration arithmtique : +, -,
une comparaison entre deux entiers ou deux rels
* Exemple : Quel est le nombre dop. lmentaires dans
linstruction c := a + b ?
Rp:
- accs en mmoire pour lire la valeur de a,
- accs en mmoire pour lire la valeur de b,
- addition de a et b,
- accs en mmoire pour crire la nouvelle valeur de c.

=>4 oprations
10
.
s = 0,
Pour i = 1 n faire
s := s + i,
FinPour
.
.
.
s =n*(n + 1)/2
.
4. Exercice: Proposer deux algorithmes permettant de calculer
la somme 1+2++n. Calculer le nombre dop. lem.
Discuter et comparer
T(n)=a n + b
T(n)=constante
5: Le temps dexcution T(n)
Il dpend :
De linstance(gnralement): trier un tableau de 1000
lments durera plus que le tri dun tableau de 10 lments.
Du nombre doprations ncessaires: trier un mme tableau
peut durer plus ou moins selon le type de tri choisi
De la machine: trier un mme tableau de 1000 lments,
suivant un mme algo. sur deux machines diffrentes
dure diffrentes . Pourquoi?


11
La dure dune op. dpend aussi bien du matriel que du
compilateur.
Pour une instance donne:
Temps dexcution = nbr dop. lem. x dure dune op. lem.

T(n) = T(n) x o
1. Estimer o ?
"Algorithmiquement" parlant, la dure dune op. est une
inconnue
A chaque op. sa dure!
- des oprations plus "coteuse" en temps que dautres: la
dure dune + et de celle dune * Log \
12
Solution : considrer o est comme unit => ignorer
l'influence des caractristiques de la machine/du
compilateur=> comme sil sagissait de la mme machine
De+, les constantes sont ignores dans le calcul des
complexit asymptotique (voir aprs)
Temps dex.= nbr dop. = T(n)
2. Le dcompte exact de toutes les oprations est PEU
important pour connaitre le comportement asymptotique.
=> approximation de T(n)
* Le temps dexcution est il rigoureusement calcul?
C: La Complexit asymptotique
13
T(n) =O(f (n)) => n
0
N, c R
+
tel que n>n
0
,T (n) cf (n)


T (n,m) = O(f (n,m)) => (n
0
,m
0
) N
2
, c R
+

Tel que n>n
0
, m>m
0
, T (n,m)cf(n,m)


* pour une une fonction f (n,m):
1: Le grand O
* Soit f(n) une fonction dfinie sur N
T (n) est dite en grand O de f (n), ou dans O(f (n)), si pour n
assez grand, t(n) est major par un multiple de f(n):
* Remarque:
La dfinition se gnralise de la mme manire pour les
algo. plusieurs donnes dentres.
On trouve aussi lcriture T(n) e O(f(n))
* Proprits: voir annexe 1

Cd: pour n assez grand, T(n) est minor par un multiple de f(n).
Ouiii, si T(n) est majore par f(n), elle lest aussi par toute
fonction qui majore f(n) Ainsi, un algo en O(n
2
) signifie que:
la complexit peut tre constante ou linaire
au pire des cas, elle sera en n
la complexit est toujours en n,
T(n) = (f(n)) => n
0
N, c R
+
tel que n>n
0
,T (n) cf (n)


2: Lensemble
Attention : un algorithme en O(n) est-il en O(n
2
), en O(n
3
), ?
3: La notation thta O
Une fonction T(n) est de l'ordre de f(n) si
n
0
N et c
1
, c
2
R
+
tel que n>n
0
, c
1
f (n) T (n) c
2
f (n)


On crira:
T(n)= O(f(n)) avec O(f(n)) = O(f(n)) (f(n))
15
4. a.Exercice:
Trouvez f(n) tq T
3
(n) = (n + 1)
2
soit en O(f). Idem pr T
4
(n) = (an +b)
2

n
2
+ 2n + 1 < 3n
2
, n > 2
T
3
(n) < 3 n
2
n > 2

n
0
=2, c=3 /
n>n
0
,T
3
(n) c.n

f(n)= n
2

T
3
(n) = O(n
2
)
n
2
+ 2n + 1 < 3n
3
pour n > 2

T
3
(n) < 3 n
3


T
3
(n) = O(n
3
)


T
3
=O(n
4
)


etc
!! Toutes justes, mais le plus petit des majorant est le +signifiant

la complexit asymptotique volue une cadence sn, s n
3
,

A refaire pour T4
16
4.b. Exercice:
T
3
(n) = (n + 1)
2
est en (??) , O(??). Idem pour T4
n
2
+ 2n + 1 > n
2
, n
T
3
(n) > n
2
n

n
0
=0, c=1 /
n>n
0
,T
3
(n) c.n

f(n)= n
2

T
3
(n) = (n
2
)
n
2
+ 2n + 1 > 2n ,n

T
3
(n) >2 n
n
0
=0, c=2
T
3
(n) = (n)
n
2
+ 2n + 1 > 1

T
3
=O(1)

etc
!! Toutes justes, mais le plus grand des minorant est le +signifiant

la complexit asymptotique volue une cadence n, n,

Tenant compte de ce qui prcde, T3 est de lordre de n
T
3
(n) = O(n
2
)
4.c: Conclusion

Pour T
3
(n) = (n + 1)
2
toutes les propositions sont justes

T
3
(n) =O(n
2
)
= O(n
3
)
..

T
3
(n) = (n
2
)
= (n)
.

T
3
(n) = O(n
2
) la plus signifiante !
17
18
5. Simplifications rapides pour trouver O et O
Les coefficients et constantes nont pas dimportance
Les termes en a
n
lemportent sur les polynmes, qui leur tour
lemporte sur les termes en logarithmes.
Les termes dordre infrieurs dans les polynmes sont ngligs
Ex: Donnez lordre de grandeur O
des complexits suivantes
T(n)= 100n
2
+2
T(n)=2
n+2

T(n)=5n
4
+3n
3
+2n
2
+4n+1
T(n)= 2
n
+n
100

T(n)=5n
2
+2n.log n+2n+5
T(n)=7n
2
+3n.log n+2n+5
!Pensez
la limite
+linfini
Solutions:

O(n
2
)
O(2
n
)
O(n
4
)
O(2
n
)
O(n
2
)
O(n
2
logn)
19
6. Exercice: Vrification des acquis
Complexit Justification
Pour T(n) = an+b

est en O(n.logn)
T(n) =O(n)
est en O(n)
T(n)= O(n)
T(n)=(n)
Pour T(n)= (an+b)
2

T(n)=(n)
est en O(n)
T(n)=O(n)
T(n)=(n.logn)
est en O(n.logn)
T(n)=O(n)
Complexit logarithmique :
ex : recherche dichotomique dans un tableau tri

Complexit linaire :
ex : calcul du produit scalaire de deux vecteurs de R
n


Complexit quasi-linaire :
ex : tri par fusion.

Complexit polynomiale : avec k > 1.
ex : multiplication de deux matrices carres d'ordre n

Complexit exponentielle : avec a > 1.
ex : tours de Hano.

20
Problmes
de taille
quelconque
7. Exemples de complexit asymptotique courantes:
Attention
la taille
du pb !
a: la complexit dans le pire des cas (worst-case):
Complexit "maximale", cest le cas le + dfavorable =
le plus grand nombre dop. lm. effectues sur
lensemble des instances possibles.
Raliste et pertinent pour l'obtention d'une borne sup.

8. Complexit moyenne, au pire et au meilleur des cas
21
Pour un mme algorithme, une mme taille des donnes, une
mme machine, la complexit temporelle sera-t-elle la mme? ex?
b: la complexit dans le meilleur des cas (best-case):
Complexit "minimale", cest le cas le + favorable
le plus petit nombre dop. lm. effectues sur
lensemble des instances;
Situation souvent rare en pratique
Non! Cela dpend de linstance, cd des donnes dentres elles mme.
La complexit asymptotique oui, elle ne dpend ni de la taille ni de la
machine, uniquement de lalgo.
Ex: trier un tableau presque ordonn tableau trs dsordonn
22
c: la complexit moyenne (average-case):
Il sagit de la moyenne des nbr dop. lm. ncessaires.
Dlicat formuler faudrait-il connaitre les
probabilits de toutes les instances possibles?!
Exercice:
Recherche dun lment dans un tableau de taille n.
Evaluer lordre de T(n) lorsque:
la donne ne figure pas dans le tableau.
llment recherch est le premier de la liste
llment figure alatoirement dans le tableau
Rp: Cas 1: la complexit est linaire O(n).
Cas 2: la complexit est de lordre de 1.
Cas 3: la moy est en O(n)
D: Analyse de la complexit asymptotique
23
2. Blocs ( suite dinstructions)
La complexit dune suite d instructions est la somme des
complexit des instructions qui la composent: O(f
i
(n))
Elle vaut donc

3. Structure pour - faire
pour j = 1 n faire
...........
...
finpour
1. Instructions simples
nbr dop. constant qlq soit linstance => complexit en O(1)
Si la complexit du corps dune boucle comportant n itration
est en O(f(n)), la complexit de la boucle pour - faire
sera en
Test pour lex. de la boucle/test de sortie => instructions
simples => en O(1). Test rpt n fois => T1= n.O(1)

Corps de la boucle : T2
Cplexit asym. de la boucle: T(n)=T1.T2=n.O(1).T2=n.T2
n. O( f(n))
max[O(f
i
(n)].
pour i = 1 n faire
pour j =1 n faire
A(i,j) :=0
Finpour
Finpour
24
i := 1
pour j = 1 n faire
A(i,j) :=0
finpour
O(n)
O(1)
O(n)
4. Structure conditionnelle
le temps d'un branchement conditionnel tant gal la somme
du tps. d'ex. du test et du plus grand des deux tps. d'ex.
correspondant aux deux alternatives:
"si A alors B sinon C est en

Elle vaut donc
Q: le test A est en O(1), quelle est la complexit de Si A alors B?
T(n)=max(O(1), O(fb)) = O(fb) ou T(n) = O(1)+O(fb)= O(fb)
Exemples:
O(n)

O(n)
O(n)
max{O(A), O(f
b
(n)),O(f
c
(n))},
O(A) +max{O(f
b
(n)),O(f
c
(n))}.
! EX7
La complexit dune boucle (Tant que ..Faire..) est
O(x . (C(n)+T(n)) ) = O(x . max(C(n),T(n)) )
O :
x : le nombre ditration maximal ( linstance)
O(C(n)) : complexit du Corps (cd d'une itration)
O(T(n)) : la complexit du Test vrifier.(O(1))
5. Complexit dune boucle : Tant que..Faire
25
Exemple
i := 1
tant que elem A[i] et i n faire
i := i+1
fintantque
Condition= instructions simples => O(1)
Corps= instruction simple => O(1)
T(n)= O(nbr max ditration . max((Condition,corps))
= O(n . max(1,1))
=O(n)
Max = n itrations
Stratgies de conception des
algorithmes
Techniques de rduction des calculs

26
Approche inductive,
Diviser-pour-rgner,
Programmation dynamique;
Gloutonne
Un problme donn, plusieurs approches possibles pour
le rsoudre

Tel problme donn, telle approche correspondante

A/ La dmarche inductive
27
Etroitement lie la rcursivit.
Elle se caractrise par :
un cas de base : cest la condition darrt de boucle rcursive
un cas inductif : sobtient par rcurrence.

b) Exemple:
On sait rsoudre le problme des tours de Hanoi avec 4
disques, et on voudrait le rsoudre pour 5 disques.
a) Principe de linduction :
Nous assumons que nous savons comment rsoudre le
problme pour lordre n-1
Nous cherchons la solution pour le problme dordre n
c) Complexit :
La relation de rcurrence qui lie lordre n n-1, permet
dexprimer T(n) en fonction de T(n-1), et de dduire
algbriquement une expression explicite de T(n) (voir TD)
c) Exemple: La factorielle
Algorithme Fonction fact
Entre: n entier
Sortie: entier
--------------------
dbut
si n = 0, alors
retourner 1
sinon
retourner n * fact (n - 1)
FinSi
Fin

28
Le test : en O(1)

Branchement 1: si n=0
=>T(n) = O(1)

Branchement 2: Si n 0
T(n)=T(n-1)+a,
T(n) =max(test, branch1, branch2)
=O(n)
base
induction
T(n-1)=T(n-2)+a
T(n-2)=...
...
T(2)=T(1)+a
T(1)=cte
T(n)= cte+ (n-1)*a
T(n)= an+ cste
=O(n)
1. subdiviser un problme de dpart P en
sous problmes P1, P2, , PN de mme
nature que P.
2. rsoudre les problmes P1, P2, , PN
en utilisant un mme algorithme
3. combiner les solutions de ces sous
problmes pour obtenir la solution globale
du problme initial P.
Il sagit dune approche descendante la rsolution d'un
problme

1. Principe
29
B: Diviser pour rgner
la rcursivit sur les
donnes
sparation des donnes en
deux parties ou plus,
rsolution des sous-
problmes
combinaison des rsultats
Ex: le tri fusion.
la rcursivit sur le rsultat
Sparation des donnes
avec ou sans prtraitement
rsolution des sous-problmes:
les sous-rsultats se combinent
d'eux-mmes la fin.
Ex: le tri rapide (= pivot)
2. Stratgies : Les algorithmes Diviser pour rgner appliquent
deux types de stratgies principales
30
Lorsquun problme de taille n est divis en b sous-problmes
rsolus rcursivement et dont a sont traits, et que les phases
de division et combinaison des rsultats a une complexit totale
en f(n), alors:
T(n) = a T(n/b) + f(n) avec T(1) = constante

31
3. Complexit et thorme matre
3.a) Dcomposition
La complexit dun algorithme diviser pour rgner dpend de
faon rcurrente de la complexit ses sous parties rcursives.
Taille des
ss-problmes
nbr de ss-problmes
traiter
(Peut valoir 1)
Complexit
de lalgo. de
division/combinaison
3.b) Le thorme matre
32
Le thorme matre permet dexprimer explicitement la
complexit partir de la relation rcurrente prcdente.

On le cite ici uniquement dans deux cas particuliers:
Pour T(n) = a T(n/b) + c.n + cte
Si a<b => T(n)= O(n)
Si a=b => T(n)= O(n.log n)
Si a>b => T(n)= O(n
log
b
(a)
)
Pour T(n) = T(n/k) + g(n)

T(n)= T(1) +

* f(n) est linaire:







* On divise en k problmes mais on ne traite par la suite quun seul
:

T(n) = T(n/2) +a
T(n/2) = T(n/4) +a
T(n/4) =

T(n/ 2
i-1
) = T(n/ 2
i
) +a
arrt la ligne i, qui correspond T(1)
n/ 2
i
=1
n= 2
i
=> i =log
2
n

T(n)= a . i = a. log
2
n

T(n) = O(log
2
n)
Il est possible dexprimer algbriquement la complexit
partir de la relation de rcurrence.

4. Remarque
33
T(n) = T(n/k) + g(n) avec g(n)=a, k=2

T(n)= T(1) + E a




T(n) = cte+ a. E 1

T(n) = cte+a . log
2
(n)

T(n) = O(log
2
n)
log
2
(n)

i=1
log
2
(n)

i=1
Algbriquement Thorme matre
5/ Exemple: Recherche dichotomique du plus grand
lment dun tableau
a) Principe de lalgorithme
Cas inductif:
Couper L en deux tableaux T1et T2 de taille "presque"
identiques
Chercher m1 le max de T1,
Chercher m2 le max de T2
Retourner le max de m1et m2
Cas de base (condition darrt) :
Si L contient un seul lment : retourner cet lment
34
b) Relation de rcurrence
T(n)= 2T(n/2)+a
Question: pourquoi cette fois on a mis 2 devant T(n/2)?
Rponse: ..
c) Complexit asymptotique:
On tudie le cas le pire : T(n) = O(n.log
2
n)

Les rsultats intermdiaires ne sont pas sauvegards =>
Lapproche diviser-pour-rgner peut conduire des algorithmes
inefficaces lorsque la dcomposition rcursive conduit
rsoudre plusieurs fois un mme sous-problme.

Mieux: Commencer les calculs par le bas et mmoriser les
calculs intermdiaires pour une utilisation ultrieure
=> Cest le principe de la prog. dynamique

6. Quand lapproche Diviser pour rgner nest pas efficace?
35
Exemple:
Ici, Fibo(2) est
calcul deux fois

Combien de fois sera-t-il
calcul pour trouver
Fibo(20)?

Rp: .
B/ Programmation dynamique
36
Il sagit dune rsolution ascendante du problme.

a) Principe:
Rsoudre les plus petits sous-problmes,
Sauvegarder les rsultats des sous dans une table pour une
rutilisation ultrieure.
Combiner ces solutions pour obtenir les solutions des sous-
problmes de plus en plus grands


b) Exemple:
Calculer Fibo(2),
lutiliser pour Fibo(3),
utiliser les 2 pour Fibo(4),

jusqu Fibo(n)
Fibo(n) appelle Fibo(n-1) et Fibo(n-2),
qui appellent 4 autres,

jusqu Fibo(1) et Fibo(0) ,
On remonte les chanes.
Inductive
c) Programmation dynamique VS Diviser pour rgner
37
La solution dun problme dpend des solutions prcdentes
obtenues des sous-problmes, comme dans le cas de lapproche
diviser et rgner

Permet aux sous-problmes de se superposer, contrairement
lapproche diviser pour rgner ou les sous-problmes sont
spars et peuvent tre rsolus indpendamment,

Calcul de bas en haut, Contrairement lapproche diviser pour
rgner ou les calculs se font de haut en bas:
Flches !
Diviser pour Rgner Programmation dynamique
..
{
Si (n < 2)
retourner 1 ;
sinon
retourner (Fibo(n-1) + Fibo(n-2))
}












.
{
F[1] =1 ; F[2] =1 ;
pour i=2 n ;
F[i] := F[i-1] + F[i-2]; i++;
Finpour
retourner (F[i]);
}
.
{
si (n< 2)
return 1;
sinonsi ( Fib(n) est dans la table)
returner table[n] ;
sinon {
sol := Fib(n-1) + Fib(n-2)
table[n] := sol; //sauvegarde du rsultat;
retourner (sol) ;
} } 38
d) Exemple: Les nombres de Fibonacci
b)Dmarche globale:
On choisi intuitivement la meilleur solution X0 parmi celle qui -
On choisi une sous-solution X1 qui, lorsquon lajoutera la solution
prcdente, sera plus proche de la solution optimale
=> la nouvelle solution est X0+X1


On choisi une autre sous-solution X2 qui, lorsquon lajoutera la
solution prcdente X0+X1, sera encore meilleure
=> la nouvelle solution est X0+X1+X2
etc
D/Dmarche Gloutonne
39
a)Principe: Construction progressive de la solution en rajoutant
chaque fois un lment qui parat "localement" le meilleur.
!!! Les tapes intermdiaires de la construction sont dfinitives,
elles ne sont plus remis en cause ultrieurement.


Attention:
+ signifie ici
combinaison
c) Utilisation typique: problmes doptimisation, ou le but est:
construire une solution
qui maximise/minimise une fonction objectif
partir des lments dun ensemble fini E,
40
e) Exemples:
Le rendu de la monnaie : choisir parmi un ensemble de pices
celles qui minimisent le nombre de pices rendre pour un
montant fix.

Le sac dos : Choisir parmi un ensemble dobjets (de poids et
valeurs connus) ceux emporter en maximisant la valeur
totale des objets emports dans le sac dos, sans dpasser un
poids limite donn.
Les sous solutions combines progressivement aux prcdentes
sont dites Solutions locales
41
e) Exemple illustratif : Minimiser le nombre de pices rendre
pour le montant 171dhs
* Algorithme naf : numrer toutes les combinaisons
possibles, choisir celles qui impliquent le min de pices
* Solution gloutonne: choisir chaque fois la pice de plus
grande valeur , qui ne dpasse pas la somme restante
d) Glouton exact ou heuristique gloutonne?
la construction de la solution est souvent trs simple, le problme
est de justifier si la solution construite est bien optimale!
Si la dmarche donne toujours une solution optimale, il sagit
dalgorithme glouton exact sinon dheuristique gloutonne
Solution dite locale:
d de CE ss-problme
42
Que ce passera t-il si on applique cet algorithme pour la somme 171,03
dh pour un systme montaire ne contenant pas les pices 1,2
centimes? Solution gloutonne exacte ou heuristique gloutonne?
Etape Sol.locale Solution
Rendre 171 dh : Recehrche de
la +gr pice qui ne dpasse
pas 171
100 dh 1*100dh
Rendre 71 dh : Recherche de
la +gr pice, qui ajoute 100
ne dpasse pas 171.
50 dh 1*100dh + 1*50dh.
Rendre 21 dh

10 dh 1*100dh
+ 1*50dh+ 2*10dh.
Rendre 1 dh

1 dh 1*100dh+ 1*50dh
+ 2*10dh+1*1dh
Plus rien rendre 1*100dh+ 1*50dh
+ 2*10dh+1*1dh