Tu es curieux de savoir ce quâest un algorithme glouton ? Tu nâas pas bien compris ton cours de NSI ? Ne t’inquiĂšte pas, nous sommes lĂ pour tâaider Ă comprendre ce concept fondamental en informatique.
Dans les problĂšmes oĂč lâon a un systĂšme dont on doit minimiser ou maximiser une caractĂ©ristique, les algorithmes gloutons sont efficaces. đȘ
Passons tout de suite aux explications.
Quâest-ce quâun algorithme glouton ? đ§
La dĂ©finition d’un algorithme glouton
đ Un algorithme glouton est un algorithme qui suit un principe permettant de trouver un optimum local. Par cela, il espĂšre atteindre une solution optimale globale (du problĂšme). Tu as lâimpression que je parle une autre langue ? Allons plus en dĂ©tail avec un exemple.
Prenons le tableau :
DĂ©but | 2 |
---|---|
3 | 5 |
1 | Fin |
Lâobjectif de ce problĂšme est de rejoindre la case âDĂ©butâ Ă la case âFinâ en ayant un coĂ»t de passage le plus faible (addition des chiffres dans les cases). Les dĂ©placements autorisĂ©s sont verticaux et horizontaux. Le chemin optimal est : DĂ©but â 3 â 1 â Fin, avec un coĂ»t de 4.
Pour autant, on pourrait construire lâalgorithme glouton cherchant Ă chaque Ă©tape le coĂ»t minimal. Il ferait donc : DĂ©but â 2 â 5 â Fin, avec un coĂ»t de 7. Ce chemin nâest pas le chemin optimal⊠đ„
Pourquoi choisir un algorithme glouton ?
Mais alors, pourquoi choisir un algorithme glouton ? Car les algorithmes gloutons ont une complexitĂ© plus faible. En effet, pour trouver dans lâexemple ci-dessus le chemin optimal, lâalgorithme de recherche fonctionnera comme un arbre. En moyenne, il mettra plus de temps Ă donner la solution.
Parfois lâalgorithme glouton peut donner la solution optimale, par exemple avec ce tableau et la mĂȘme rĂšgle que lâon a utilisĂ©e prĂ©cĂ©demment :
DĂ©but | 2 |
---|---|
3 | 1 |
2 | Fin |
Lâalgorithme glouton ferait : DĂ©but â 2 â 1 â Fin.
đ Pour autant, sans une autre vĂ©rification, on ne peut pas conclure Ă lâoptimalitĂ© dâun chemin si on utilise un algorithme glouton. Il trouvera une solution au problĂšme, mais celle-ci ne sera pas forcĂ©ment la meilleure.
Besoin d’un prof particulier d’informatique ? âš
Nos Sherpas sont lĂ pour t’aider Ă progresser et prendre confiance en toi !
Exemple dâun algorithme glouton : le rendu de monnaie đž
Explication de l’exemple du rendu de monnaie
Lâexemple principal sur les algorithmes gloutons du programme se base sur une situation dâachat dâun produit en espĂšces (piĂšces et billets) et du rendu de monnaie. đ°
Tu vas dans une boulangerie acheter un gĂąteau pour lâanniversaire dâun de tes parents. Soit X le prix de ce gĂąteau. Afin de le payer, tu disposes dans ton portefeuille de piĂšces et de billets de 1, 2, 5, 10, 20 et 50 euros. Tu souhaites toujours avoir un maximum de piĂšces et de billets sur toi, tu vas donc essayer de payer le gĂąteau avec le plus petit nombre de piĂšces et de billets.
Un algorithme glouton dans cette situation serait de : trouver la piĂšce ou le billet le plus grand qui soit infĂ©rieur au prix X, puis de rĂ©pĂ©ter lâopĂ©ration jusquâĂ arriver Ă 0.
Par exemple, si le gĂąteau coĂ»te 23âŹ, lâalgorithme va chercher le plus grand billet infĂ©rieur Ă 23⏠: câest le billet de 20âŹ. Il reste alors 3âŹ. La piĂšce la plus grande, mais infĂ©rieure Ă 3⏠est la piĂšce de 2âŹ. Il reste 1âŹ. Tu paieras donc avec un billet de 20âŹ, une piĂšce de 2⏠et une piĂšce de 1âŹ.
Le code Python simplifiĂ© de l’exemple du rendu de monnaie
đ En python, on pourrait Ă©crire cet algorithme avec la fonction renduMonnaie ci-dessous :
def renduMonnaie(prix: int) :
portefeuille = [50,20,10,5,2,1]
i = 0
a_rendre = []
k=0
while(prix>0) :
if(portefeuille[i]>prix) :
i = i+1
else :
a_rendre[k] = portefeuille[i]
k = k+1
prix = prix-portefeuille[i]
return a_rendre
Cette fonction prend en valeur dâentrĂ©e un entier (le prix) et renvoie en sortie un tableau dâentiers comprenant les billets et piĂšces Ă utiliser pour payer ce prix.
Le tableau « portefeuille » comprend les valeurs de nos piĂšces et billets. « a_rendre » sera le tableau renvoyĂ© en fin de fonction. Les variables « i » et « k » vont nous permettre d’incrĂ©menter la boucle While et de se dĂ©placer dans « a_rendre ».
La boucle « While » (tant que) marche tant que le prix est supérieur à 0. En effet, le prix est diminué à chaque occurence de la boucle si le billet/piÚce (i-Úme case de « portefeuille ») est inférieur au prix (le « else »). Dans ce cas, on ajoute le billet/piÚce à « a_rendre » et on incrémente « k » pour que le prochain billet/piÚce soit mis dans la case suivante du tableau.
Sinon, si le billet/piÚce est supérieur au prix, on incrémente « i ». Cela permet de changer le billet/piÚce à comparer au prix. On repÚte ces opérations tant que le prix est supérieur à 0.
Avec ce code simplifié, on suppose que les prix présentés sont dénombrables à partir des piÚces et billets de notre portefeuille.
Exercice supplĂ©mentaire : complexifie lâalgorithme ! đ€Ż
đĄ Si tu te sens Ă lâaise avec la premiĂšre solution, je te conseille dâessayer de complexifier lâalgorithme afin de jongler avec les notions de python, tout en conservant bien en tĂȘte lâobjectif de ton algorithme glouton sur ce problĂšme de rendu de monnaie.
Par exemple, tu pourrais changer la boucle While par une boucle For. Tu peux aussi ajouter de nouveaux billets et piĂšces. Si tu ne souhaites pas utiliser de centimes, tu pourrais essayer de trouver la meilleure approximation en utilisant des divisions euclidiennes.
Enfin, tu pourrais instaurer un dialogue avec lâutilisateur qui va renseigner Ă la fois le prix du gĂąteau et le type de piĂšces quâil a dans son porte-monnaie. đ
Pour finir, une derniĂšre version un peu plus complexe consisterait en crĂ©ant un portefeuille sous forme de matrice de telle sorte quâil y ait un nombre limitĂ© de chaque valeur de piĂšces.
Ton premier cours particulier d’informatique est offert ! đ
Tous nos profs sont passés par les meilleures écoles de France !
Algorithme glouton : la solution optimale ? đ€©
đ Comme dĂ©jĂ dit prĂ©cĂ©demment, un algorithme glouton ne conduit pas toujours Ă une solution optimale globale. Pour autant, par dĂ©finition il cherche une succession dâoptimum locaux.
Et, dans beaucoup de problĂšmes, un bon algorithme glouton trouvera la solution optimale. Mais ce nâest pas forcĂ©ment le cas ! Lâavantage rĂ©side surtout dans les temps de calcul largement infĂ©rieurs, car les diffĂ©rents cas ne sont pas testĂ©s.
Pour sâassurer de lâoptimisation dâune solution, la complexitĂ© de lâalgorithme utilisĂ© sera plus grande. Pour cela, plusieurs solutions algorithmiques existent, tu en verras certaines si tu poursuis tes Ă©tudes dâinformatique !
Pour aller plus loin, je vais tâintroduire Ă un autre problĂšme cĂ©lĂšbre : le problĂšme du sac Ă dos. ConsidĂšre un sac Ă dos qui a une capacitĂ© de 20 kg. Et supposes que tu as 3 objets possĂ©dant chacun une masse et un prix.
Objet | A | B | C |
---|---|---|---|
Masse (kg) | 7 | 18 | 3 |
Prix (Euros) | 13 | 20 | 6 |
đ Lâobjectif de ce problĂšme est dâavoir au final la plus grande valeur dans ton sac, sans que le poids des objets dĂ©passe la capacitĂ© de ton sac.
đĄ Plusieurs stratĂ©gies gloutonnes sont faisables, les plus communes sont :
- prendre lâobjet avec la plus grande valeur nâexcĂ©dant pas la capacitĂ© restante
- prendre lâobjet avec la plus faible masse
- prendre lâobjet avec le plus grand rapport valeur/masse nâexcĂ©dant pas la capacitĂ© restante
Essaie dâappliquer ces 3 stratĂ©gies au problĂšme et trouve la meilleure dans ce cas. Compare les Ă la solution optimale (2 objets A et 2 objets C faisant un prix de 38 euros et 20kg soit prĂ©cisĂ©ment la capacitĂ© du sac).
Tu peux Ă©videmment retravailler ce problĂšme en changeant les valeurs de masse et de prix des objets. Tu trouveras facilement des variantes avec leurs solutions sur internet.
Conclusion sur les algorithmes gloutons đ
Tu connais donc maintenant les avantages et inconvĂ©nients des algorithmes gloutons. Lâexemple du rendu de monnaie est au programme de NSI, Ă toi de bien prendre le temps de le comprendre. NâhĂ©site pas Ă le recoder sur ta machine ! đ»
Globalement, les algorithmes gloutons sont efficaces dans les problĂšmes dâordonnancement. Par exemple, pour Ă©valuer le chargement dâun sac en y mettant le moins dâobjets. Lâoptimisation de la solution nâest pas garantie par les algorithmes gloutons.
đ Bref, quâon Ă©tudie le chargement dâun sac ou un rendu de monnaie, plusieurs solutions existent, et les stratĂ©gies gloutonnes proposent des approximations qualitatives et rapides.
Si tu souhaites trouver la solution optimale, lâutilisation dâun arbre de recherche sera nĂ©cessaire !
A bientĂŽt pour un nouvel article !
je vous aime. vous etes les meilleurs . i love you