Le même sous-problème, vingt-deux millions de fois
Exercice · niveau 2 · informatique (MP2I/MPI), chapitre 14 — Exploration exhaustive et retour sur trace
Énoncé
Le retour sur trace du sac à dos donné en exemple s'appelle avec deux paramètres : la capacité restante et l'indice de l'objet courant. Compter, sur une instance, le nombre d'appels et le nombre de couples distincts de paramètres. Que conclure ?
Corrigé
Instance choisie pour être la pire : objets de poids , de valeurs , capacité .
| appels | couples distincts | rapport | ||
|---|---|---|---|---|
| 10 | 5 | 51 | ||
| 15 | 7 | 100 | ||
| 20 | 10 | 176 | ||
| 24 | 12 | 247 | 88 978 |
Lecture. À , l'algorithme fait vingt-deux millions d'appels pour ne rencontrer que deux cent quarante-sept situations différentes. Chaque situation est donc recalculée, en moyenne, quatre-vingt-neuf mille fois — et le calcul recommencé est identique à chaque fois, puisqu'il ne dépend que de .
Le nombre de couples est borné par , soit ici , dont sont effectivement atteints. C'est polynomial en et , tandis que le nombre d'appels est exponentiel.
Ce que cela annonce. Retenir le résultat de chaque couple dans une table, et le relire au lieu de le recalculer, ramène le coût au nombre de couples : . C'est exactement la programmation dynamique du chapitre chap:dynamique — et l'écart mesuré ici, , est la raison d'être de ce chapitre.
Un mot de prudence. n'est pas polynomial en la taille de l'entrée : s'écrit avec chiffres. On dit que ce coût est pseudo-polynomial. Si vaut , la table est hors de portée et le retour sur trace redevient préférable. Aucune des deux méthodes ne domine l'autre : le chapitre chap:probabilistes en dresse le bilan complet.
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.