Adloun

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

Combien de répartitions ?

Répartition optimale d'une ressource · niveau 2

Énoncé

On note le nombre de répartitions d'un stock sur entrepôts, c'est-à-dire de suites d'entiers positifs ou nuls de somme inférieure ou égale à .

  • Supposer le problème résolu et établir la récurrence des valeurs (base et hérédité).
  • Calculer à l'aide d'un programme, et comparer avec .
  • Calculer . Conclure sur l'énumération exhaustive.

Corrigé

  • Supposons connues toutes les répartitions sur entrepôts. Le -ème entrepôt reçoit unités, , et les premiers reçoivent une répartition de somme au plus . Ces cas sont disjoints.

Base. pour tout (la seule répartition est la suite vide).

Hérédité. , : .

  • Le calcul est le même que celui des gains maximum, en remplaçant par une somme (et des entiers longs, car les nombres deviennent vite énormes) :

BigInteger[][] N = new BigInteger[n + 1][S + 1];
for (int s = 0; s < S + 1; s++) N[0][s] = BigInteger.ONE;   // base
for (int k = 1; k < n + 1; k++)
    for (int s = 0; s < S + 1; s++) {
        N[k][s] = BigInteger.ZERO;
        for (int sp = 0; sp < s + 1; sp++) N[k][s] = N[k][s].add(N[k - 1][s - sp]);
    }

On obtient . De façon générale : une répartition de somme au plus correspond à une répartition de somme exactement sur entrepôts (le dernier recevant le reliquat).

  • . Même à un milliard de répartitions par seconde, l'énumération demanderait près d'un million d'années, alors que la programmation dynamique fait opérations.

N(4,5) = 126
N(20,100) = 29462227291176635718126

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 →