Adloun

Le sac à dos, et le mot « pseudo »

Exercice · niveau 2 · informatique (MP2I/MPI), chapitre 31 — Décidabilité et classes de complexité

Énoncé

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

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.

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.