Adloun

informatique (MP2I/MPI) · Chapitre 31 · Application directe du cours

Le sac à dos, et le mot « pseudo »

Décidabilité et classes de complexité · niveau 2

Énoncé

L'algorithme de programmation dynamique du sac à dos est en , où est le nombre d'objets et la capacité.

  • Pourquoi n'est-il pas polynomial ?
  • Que mesure-t-on si l'on multiplie par ?
  • Dans quel cas l'emploie-t-on quand même ?

Corrigé

1. L'entrée est constituée de objets et de la capacité ; sa taille est bits environ. Un coût est donc exponentiel en la taille : doubler le nombre de bits de élève au carré.

2. Le temps est multiplié par , alors que l'entrée n'a grossi que de ou bits. Mesuré, à objets fixés :

Taille de Cases calculéesTemps
bits s
bits s
bits s
bits s

Dix bits de plus, huit cents fois plus de temps. La croissance est linéaire en , donc exponentielle en la taille de : c'est la définition même de pseudo-polynomial.

3. On l'emploie quand est réellement petit — c'est-à-dire quand l'instance vient d'une situation où les capacités sont bornées par une constante du problème, et non par la place mémoire. Un sac de kg à g près donne : la table tient. Une somme d'argent au centime près sur des millions d'euros donne : elle ne tient plus.

La leçon générale. « Pseudo-polynomial » n'est pas une nuance de vocabulaire : c'est la différence entre un algorithme qui passe à l'échelle et un qui ne passe pas, et elle ne se voit que si l'on compte la taille en bits. C'est aussi la première ligne du tableau du chapitre : quand un paramètre reste petit, on a le droit d'être pseudo-polynomial.

Exercices semblables

Le cours du chapitre · Tous les exercices du chapitre