Adloun

algorithmique (école d'ingénieur) · Chapitre 2 · Application directe du cours

Sous-ensemble de taille minimum

Le sac de valeur maximum · niveau 2

Énoncé

On reprend le problème du sous-ensemble de somme , mais on veut, parmi les sous-ensembles de somme , en afficher un qui a le plus petit nombre d'éléments. Exemple : et ; on veut afficher et non .

  • On note le nombre minimum d'éléments d'un sous-ensemble des premiers éléments de de somme , avec s'il n'en existe pas. Donner l'équation de récurrence.
  • Écrire le calcul du tableau et la fonction d'affichage.
  • Application : et .

Corrigé

  • Supposons le problème résolu : un sous-ensemble de taille minimum des premiers éléments, de somme , contient ou non . Base : et pour . Hérédité : , ,

  • On représente par INF = Integer.MAX_VALUE / 2 ( ne déborde pas).

static int[][] calculerP(int[] X, int S) { int n = X.length;
    int[][] P = new int[n + 1][S + 1];
    for (int s = 1; s < S + 1; s++) P[0][s] = INF;  // base ; P[0][0] = 0
    for (int k = 1; k < n + 1; k++)
        for (int s = 0; s < S + 1; s++) {
            P[k][s] = P[k-1][s];                          // x_{k-1} absent
            if (X[k-1] <= s && P[k-1][s - X[k-1]] + 1 < P[k][s])
                P[k][s] = P[k-1][s - X[k-1]] + 1;         // x_{k-1} présent
        }
    return P;
}
static void afficherP(int[][] P, int[] X, int k, int s) {
    // précondition : P[k][s] < INF. Appel principal : afficherP(P, X, n, S)
    if (k == 0) return;                              // sous-ensemble vide
    if (P[k][s] == P[k-1][s]) afficherP(P, X, k-1, s);
    else { afficherP(P, X, k-1, s - X[k-1]); System.out.print(" " + X[k-1]); }
}

Calcul en , affichage en . -


X = [3, 5, 2], S = 5 : p = 1, sous-ensemble { 5 }
X = [1, 2, 3, 4, 5, 6], S = 10 : p = 2, sous-ensemble { 4 6 }

Parmi les sous-ensembles de somme (par exemple ou ), a le moins d'éléments.

100 % gratuit

La suite du chapitre est sur Adloun

Exercice suivant et tuteur

Sans compte : le cours, le premier QCM et 2 minutes de podcast et de vidéo. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant et tuteur →