Adloun

Sacs avec répétitions, multi-ensembles et couples de sacs

Cours · algorithmique (école d'ingénieur), chapitre 3 · école d'ingénieur, informatique · le début du chapitre, la suite sur Adloun

Objectifs du chapitre

  • Adapter la récurrence du sac lorsque chaque objet est disponible en nombre illimité d'exemplaires.
  • Mémoriser les arguments des maximums dans un tableau pour reconstruire efficacement une solution.
  • Obtenir une seconde récurrence, plus rapide, en changeant la façon de découper les cas.
  • Passer à trois paramètres et à un tableau à trois dimensions avec le problème des deux sacs.

3.1 Le sac avec possibles répétitions

On reprend le problème du chapitre 2 avec une différence : chaque objet est disponible en autant d'exemplaires que l'on veut. Le sac peut contenir zéro, un, deux exemplaires ou plus de chaque objet, tant que la taille totale ne dépasse pas la contenance .

Définition 3.1Multi-ensemble

Un multi-ensemble est un « ensemble » dont les éléments peuvent apparaître en plusieurs exemplaires, par exemple . Un multi-sous-ensemble (MSE) d'un ensemble d'objets est un multi-ensemble dont tous les éléments sont des objets de cet ensemble. Sa taille et sa valeur sont les sommes des tailles et des valeurs de ses éléments, comptés avec leur multiplicité.

Problème

Calculer un MSE des objets de taille au plus et de valeur maximum.

Exemple 3.2deux objets, contenance

L'objet a pour valeur et pour taille ; l'objet a pour valeur et pour taille . Le sac de contenance peut contenir trois exemplaires de l'objet (taille , valeur ) et un exemplaire de l'objet (taille , valeur ) : taille , valeur . C'est le maximum.

Avec les cinq objets du chapitre 2 (, , ), la possibilité de répéter change tout : cinq exemplaires de l'objet (taille , valeur ) donnent un sac de valeur , presque le double de la valeur obtenue sans répétition.

Attention

On ne peut pas se ramener au chapitre 2 en « dupliquant » chaque objet autant de fois qu'il pourrait entrer dans le sac ( copies) : c'est correct, mais le nombre d'objets devient de l'ordre de , et le calcul de l'ordre de . Nous ferons mieux.

3.2 Première récurrence : combien d'exemplaires du dernier objet ?

3.2.1 Supposons le problème résolu

Notons la valeur maximum d'un sac de contenance contenant un MSE des objets, et considérons un tel sac optimal. Le dernier objet (numéro ) y figure en un certain nombre d'exemplaires. Comme exemplaires occupent la place , nécessairement .

Fixons . Les exemplaires de l'objet contribuent pour à la valeur du sac. Le reste du sac est un MSE des premiers objets, de taille au plus , et ce reste est de valeur maximum : sinon, on le remplacerait par un MSE meilleur et le sac entier ne serait pas optimal. Sa valeur est donc .

On ne connaît pas ; on prend le meilleur de toutes les valeurs possibles :

3.2.2 L'équation de récurrence

Proposition 3.3Sac avec répétitions (première version)

Pour et , est la valeur maximum d'un sac de contenance contenant un MSE des premiers objets.

Base. : .

Hérédité. , :

Le cas est toujours possible : il donne le terme . On retrouve le sac sans répétition en se limitant à .

3.3 Mémoriser les arguments : le tableau

Pour reconstruire le sac au chapitre 2, on comparait à . Ici, il faudrait retrouver quelle valeur de donne le maximum, ce qui obligerait à refaire la boucle sur . Il est plus simple et plus efficace de retenir cette valeur au moment où on la trouve.

Définition 3.4Argument d'un maximum

On note une valeur de pour laquelle le maximum de l'hérédité est atteint : c'est le nombre d'exemplaires du -ème objet dans un sac optimal . Les valeurs sont mémorisées « à la volée » dans un tableau , de mêmes dimensions que . Les valeurs sont sans importance ; on les pose égales à .

La fonction de calcul doit retourner deux tableaux. En Java, on les range dans un tableau de tableaux : new int[][][] {M, A} est un tableau à trois dimensions dont la case est et la case est .

La suite du cours est sur Adloun

Le chapitre en entier, formules et figures comprises, avec le tuteur, les fiches, les QCM et les exercices.

Lire la suite du cours

En accès libre, sans inscription.

Exercices corrigés de ce chapitre

Lire la suite du cours →