diff --git a/gloutons/README.md b/gloutons/README.md index 39d97f8..d9bd120 100644 --- a/gloutons/README.md +++ b/gloutons/README.md @@ -16,6 +16,7 @@ Un ***algorithme glouton*** est un algorithme qui vise à optimiser la résoluti - On procède par étapes, en effectuant à chaque fois le meilleur choix possible. - On ne revient jamais sur un choix déjà fait. +- Répétez ces étapes jusqu'à ce qu'une solution globale soit obtenue. Selon le problème on utilise une méthode pour résoudre ce dernier. Il peut exister plusieurs instances qui donneront lieu à des résultats différents. @@ -24,10 +25,10 @@ Selon le problème on utilise une méthode pour résoudre ce dernier. Il peut ex Prenons un exemple simple : la liste des 23 joueurs selectionnés pour la coupe du monde : ``` -Didier Desvilles est bien embêté : il doit choisir 23 joueurs pour aller jouer au Kotor. +Didier Desvilles est bien embêté : il doit choisir 23 joueurs pour aller jouer une compétition. Dans cette optique, il décide d'utiliser une méthode simple: choisir le meilleur joueur possible pour chaque poste, puis le deuxième meilleur comme remplaçant. -Peu importe si les joueurs selectionnés ne s'entendent pas forcément très bien, comme Olivier Gibrun et Karim Bamazette, l'important c'est de faire le meilleur choix à chaque étape. +Peu importe si les joueurs selectionnés ne s'entendent pas forcément très bien, comme Olivier Gibrun et Karim Benzemb, l'important c'est de faire le meilleur choix à chaque étape. ``` Un algorithme glouton ne renvoie pas obligatoirement un résultat optimal, dans ce cas la, on parle ***d'heuristique.*** Il renverra un résultat optimal pour chacun des sous-problèmes. @@ -68,7 +69,12 @@ def rendu_monnaie(systeme, montant): while reste > 0 and i >= 0: # On trouve le nombre de pièces de la valeur courante à rendre - ... + nb_pieces = reste // systeme[i] + for _ in range(nb_pieces): # Pour chaque pièce à rendre + resultat.append(systeme[i]) # On ajoute cette pièce au résultat + reste -= systeme[i] # On met à jour le reste à rendre + i -= 1 # On passe à la valeur inférieure dans le système + return resultat # Exemples d'utilisation @@ -77,6 +83,7 @@ systeme_2 = [1, 2, 5, 7, 10] print(rendu_monnaie(systeme_1, 14)) # Devrait afficher [10, 2, 2] qui est optimal pour le système_1 print(rendu_monnaie(systeme_2, 14)) # Devrait afficher [10, 2, 2] qui est non optimal car [7, 7] est mieux pour le système_2 + ``` Force brute avec le ```system_2``` pour ```14```: