Une heuristique n'est pas une approximation
Exercice · niveau 2 · informatique (MP2I/MPI), chapitre 25 — Algorithmes probabilistes, approximation, séparation et évaluation
Énoncé
Le glouton du sac à dos prend les objets par rapport valeur/poids décroissant.
- Construire une famille d'instances où son rapport à l'optimum tend vers .
- Le corriger d'une ligne pour en faire une -approximation.
Corrigé
1. Deux objets suffisent, et une capacité qu'on fait grandir :
| Objet | poids | valeur | rapport valeur/poids |
|---|---|---|---|
Le glouton prend d'abord — son rapport est le meilleur —, puis ne tient plus : il reste de capacité et pèse . Il rend . L'optimum prend seul et rend . Mesures :
| glouton | optimum | rapport | |
|---|---|---|---|
Le rapport tend vers : aucune constante ne convient. Le glouton du sac à dos n'est pas une -approximation, pour aucun . C'est ce que le tableau récapitulatif du chapitre note d'un « aucune garantie ».
2. La correction tient en une ligne : comparer le résultat du glouton à celui de la meilleure solution à un seul objet, et garder le meilleur des deux.
(* 1/2-approximation du sac a dos.
Entrees : poids p, valeurs v (positives), capacite c.
Sortie : une valeur atteignable >= OPT/2. Complexite : O(n log n). *)
let glouton_ameliore p v c =
let meilleur_seul = ref 0 in
for i = 0 to Array.length p - 1 do
if p.(i) <= c && v.(i) > !meilleur_seul then meilleur_seul := v.(i)
done;
max (glouton p v c) !meilleur_seul
La preuve. On peut supposer que tout objet tient seul dans le sac : un objet plus lourd que la capacité n'entre dans aucune solution, et les deux algorithmes l'ignorent à l'identique. Soit alors le premier objet que le glouton refuse par manque de place, et la valeur qu'il a accumulée avant ; on a , puisque le glouton continue après .
La relaxation continue — objets triés par rapport décroissant, fractionnement autorisé — donne une borne supérieure de , et cette borne vaut plus une fraction de . Donc
La dernière inégalité vient de ce que est la valeur d'un objet qui tient seul dans le sac, donc meilleur_seul.
Vérification : sur instances tirées au hasard, le rapport minimal du glouton seul descend à , tandis que celui du glouton amélioré ne descend pas sous — au-dessus de la garantie , comme il se doit.
Ce que cet exercice enseigne. Une heuristique et une approximation peuvent différer d'une ligne de code, mais elles ne diffèrent pas d'un peu : l'une n'a aucune garantie, l'autre en a une, prouvée sur toute instance. Et remarquer que la preuve suit exactement le patron annoncé par le chapitre : on minore l'optimum — ici en le majorant par —, jamais on ne le calcule.
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.