Adloun

Le glouton et la dynamique ne rendent pas la même monnaie

Exercice · niveau 2 · informatique (MP2I/MPI), chapitre 17 — Programmation dynamique

Énoncé

Avec des pièces de , et , quel est le nombre minimal de pièces pour rendre ? Que rend l'algorithme glouton du chapitre chap:gloutons ? Écrire la récurrence dynamique.

Corrigé

Le glouton prend la plus grosse pièce possible tant qu'il peut : , soit trois pièces.

L'optimum est , soit deux pièces. Le glouton se trompe.

La récurrence est immédiate une fois le sous-problème posé. Soit le nombre minimal de pièces pour rendre exactement la somme :

avec si aucune pièce ne convient.


/* Nombre minimal de pieces pour rendre s, ou -1 si c'est impossible.
   Preconditions : p[i] >= 1, k >= 1, s >= 0.
   Complexite : Theta(k*s) en temps, Theta(s) en memoire. */
int rendu(const int p[], int k, int s) {
    assert(k >= 1 && s >= 0);
    int n[s + 1];
    n[0] = 0;
    /* INVARIANT : pour tout t < c, n[t] est le minimum cherche
       (ou s+1, valeur sentinelle signifiant « impossible »). */
    for (int c = 1; c <= s; c = c + 1) {
        n[c] = s + 1;                            /* infini representable */
        for (int i = 0; i < k; i = i + 1) {
            if (p[i] <= c && n[c - p[i]] + 1 < n[c]) { n[c] = n[c - p[i]] + 1; }
        }
    }
    return (n[s] > s) ? -1 : n[s];
}

Mesure sur le système , pour à :


s     0  1  2  3  4  5  6  7  8  9 10 11 12
N[s]  0  1  2  1  1  2  2  2  2  3  3  3  3

La ligne donne , la ligne donne là où le glouton en donne .

Le point de méthode. La sous-structure optimale tient ici : si une solution optimale pour utilise une pièce , ce qu'elle fait du reste est nécessairement optimal (sinon on améliorerait le tout). Le glouton, lui, suppose davantage : que le premier choix local est celui d'une solution optimale. C'est vrai pour le système euro, c'est faux pour . La dynamique n'a pas besoin de cette hypothèse, et c'est exactement ce qu'elle coûte plus cher : au lieu de .

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.