3.6 Retour sur le problème des pièces de monnaie
Dans le problème des pièces de monnaie, nous avons résolu le problème à l’aide d’une récurrence, puis d’une fonction génératrice ordinaire, et nous avons remarqué que les deux méthodes nous donnaient des solutions différentes. À l’aide de la récurrence, notre solution tenait compte de l’ordre des pièces, alors qu’avec les fonctions génératrices ordinaires, notre solution n’en tenait pas compte. Une question intéressante se pose maintenant. Est-ce que les fonctions génératrices exponentielles pourraient nous permettre d’obtenir la même solution que celle que nous avions obtenue à l’aide de la récurrence ? À première vue, la réponse semble être oui, mais en essayant, on remarque assez rapidement qu’il y a un problème.
Les valeurs semblent correctes, sauf pour et qui nous donnent des valeurs complètement absurdes. Que s’est-il passé ? On remarque assez rapidement que et pence sont les deux plus petits montants qui nécessitent à la fois des pièces de pence et de pence. Le problème se répète par la suite pour tous les montants qui nécessitent ces deux pièces. Le problème est que la fonction génératrice exponentielle considère les pièces de deux pence et de cinq pence non pas comme une seule pièce, mais plutôt comme et pièces individuelles respectivement. Les fonctions génératrices exponentielles ne peuvent donc pas nous permettre d’obtenir directement la même solution que celle que nous avions obtenue à l’aide de la récurrence.
Il y a cependant une façon de contourner ce problème, mais il nous faut utiliser une combinaison de fonctions génératrices ordinaires et exponentielles, et donc cela nécessite deux variables. Si nous considérons comme une variable représentant les montants et une seconde variable tenant compte du nombre de pièce. Comme seul les pièces individuelles doivent tenir compte de l’ordre, ces seulement le qui sera une fonction génératrice exponentielle, les resteront sous la forme d’une fonction génératrice ordinaire. On obtient donc:
Ceci nous indique que pour faire un montant de pence, il y a deux façons en utilisant deux pièces. Pour faire un montant de pence, il y a une seule façon en utilisant quatre pièce. Pour faire un montant de pence, il y a façons en utilisant trois pièces, puis pour faire un montant de pence, il y a une façon en utilisant cinq pièce et une façon qui utilise deux pièce (et donc 2 façons au total). Ceci correpond donc à ce que nous avions obtenu en utilisant une récurrence. On peut ensuite utiliser le code Python suivant pour obtenir un tableau complet.
1 from sympy import *2 from pandas import *3 init_printing()45 x = Symbol(’x’)6 y = Symbol(’y’)7 rep = [1]8 p2 = sum([x**(2*n)*y**n/factorial(n) for n in range(0,11)])9 p5 = sum([x**(5*n)*y**n/factorial(n) for n in range(0,11)])10 for i in range(1,16):11 polynome = expand(p2*p5).coeff(x**i)12 rep.append(sum([polynome.coeff(y**j) * factorial(j) for j in range(1,21)]))13 rep = DataFrame([rep])14 rep.index = ["Valeurs"]15 rep
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | |
| 1 | 0 | 1 | 0 | 1 | 1 | 1 | 2 | 1 | 3 | 2 | 4 | 4 | 5 | 7 | 7 |