Adloun

Trouver d'autres systèmes de pièces où le glouton échoue

Exercice d'entraînement · niveau 2 · NSI (première), chapitre 8 — Dichotomie, voisins et gloutons · Gloutons : jusqu'où ?

Énoncé

Trouver d'autres systèmes de pièces où le glouton échoue. Que donne le système américain [25, 10, 5, 1] ? et [25, 10, 1], sans la pièce de ?

Corrigé


def glouton_optimal_partout(pieces, jusqua=60):
    return all(len(rendu_monnaie(s, pieces)) == rendu_exhaustif(s, pieces)
               for s in range(1, jusqua + 1))

assert glouton_optimal_partout(EURO)
assert glouton_optimal_partout([25, 10, 5, 1])          # systeme americain
assert not glouton_optimal_partout([6, 4, 1])
assert not glouton_optimal_partout([25, 10, 1])         # sans la piece de 5

Le contre-exemple américain est spectaculaire.


assert len(rendu_monnaie(30, [25, 10, 1])) == 6      # 25 + 1 + 1 + 1 + 1 + 1
assert rendu_exhaustif(30, [25, 10, 1]) == 3         # 10 + 10 + 10

Six pièces contre trois, pour trente cents. Retirer une seule valeur d'un système canonique suffit à le faire cesser de l'être : la propriété tient au jeu tout entier, pas à chaque pièce prise isolément.

Une famille entière de mauvais systèmes.


mauvais = [p for p in range(3, 12)
           if not glouton_optimal_partout(sorted([p, p - 1, 1], reverse=True))]
assert mauvais == [4, 5, 6, 7, 8, 9, 10, 11]

Les systèmes échouent pour tout de à : deux pièces de valent presque , et le glouton, qui a pris un , doit compléter à l'unité. Les systèmes où le glouton fonctionne ne sont donc pas la règle — ce sont des systèmes choisis.

Les autres exercices de ce chapitre Le cours du chapitre

Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.