Exemple 2 :
Montrer que SAD3 est un sch´ema d’approximation pour le probl`eme du sac `a dos.• Soit ε quelconque. Soit I une instance quelconque du sac `a dos. On note S(I) une solution optimale de I de valeur OPT(I).
• Si k = n, alors clairement une solution optimale est trouv´ee par SAD3. On s’int´eresse donc au cas o`u k = d1/εe − 2.
• On note SAD3(I) et SAD2(IK) les solutions obtenues par les deux
algo-rithmes sur I et IK.
• Soit K∗ l’ensemble des indices des objets de plus grande valeur dans S(I),
avec |K∗| = k. On a OPT(I) = X i∈K∗ vi+ OPT(IK ∗ ) .
• Comme SAD3 va trouver K∗et que SAD2 est une approximation 1
2-relative, on a SAD3(I) ≥ X i∈K∗ vi+SAD2(IK ∗ ) ≥ X i∈K∗ vi+ 1 2OPT(I K∗) = 1 2 OPT(I) + X i∈K∗ vi ! . • Si P i∈K∗ vi ≥ k+2k OPT(I), alors SAD3(I) ≥ 1 2 1 + k k + 2 OPT(I) = k + 1 k + 2 OPT(I) . • Si P i∈K∗ vi < k+2k OPT(I) : – R´esultat interm´ediaire :
– SAD2(IK∗) = maxSAD1(IK∗), vmax o`u vmaxest la valeur maximale
d’un objet dans IK∗.
– La valeur maximale de IK∗ sans contrainte d’int´egrit´e (instance not´ee
IKrel∗) est plus petite ou ´egale `a SAD1(IK∗) + vmax car une telle
solu-tion est obtenue ´eventuellement en ajoutant une partie d’un objet `a la solution obtenue par SAD1.
– Donc OPT(IK∗) ≤ OPT(IK∗ rel) ≤ SAD1(IK ∗ ) + vmax ≤ SAD2(IK ∗ ) + vmax.
– Et comme IK∗ ne contient que des objets de valeur ≤ min
r∈K∗{vr}, et que
vmax ≤ min
r∈K∗{vr}, on obtient
OPT(IK∗) ≤ SAD2(IK∗) + min
r∈K∗{vr} (fin du r´esultat interm´ediaire).
– Donc OPT(IK∗) ≤ SAD2(IK∗) + 1 k P i∈IK∗ vi < SAD2(IK ∗ ) + k+21 OPT(I). – Donc SAD2(IK∗) ≥ OPT(IK∗)− 1
k+2OPT(I) et comme on avait SAD3(I) ≥
P i∈IK∗ vi+ SAD2(IK ∗ ), alors SAD3(I) ≥ X i∈K∗ vi+OPT(IK ∗ )− 1 k + 2OPT(I) = OPT(I) 1 − 1 k + 2 = k + 1 k + 2 OPT(I) .
• Dans tous les cas on a donc SAD3(I) ≥ k+1
k+2 OPT(I). • k+1 k+2 = 1 − 1 k+2 = 1 − 1 d1/εe−2+2 = 1 − 1 d1/εe ≥ 1 − ε. • Au final :
OPT(I) ≥ SAD3(I) ≥ (1 − ε)OPT(I) ,
SAD3 est une approximation ε-relative au probl`eme du sac `a dos. Examen du temps de calcul :
• Dans SAD2, il faut trier les objets. On peut faire ce tri une fois pour toutes au d´ebut de SAD3. Ceci prend un temps ∈ O(n log2n).
• Chaque appel `a SAD2 prend un temps ∈ O(n).
• Le nombre de sous-ensembles d’au plus k ´el´ements est ∈ O(nk).
• Le temps total d’ex´ecution est donc en O(n log2n + nk+1).
• Si k = n, SAD3 trouve la solution optimale mais s’ex´ecute en temps O(nn+1), ce qui n’est pas polynomial. On n’a donc pas de sch´ema
d’ap-proximation.
• Si k = d1/εe − 2, l’algorithme s’ex´ecute en temps O(n log2n + n1/ε−1), ce qui est polynomial en n mais pas en 1/ε. SAD3 est donc un sch´ema d’approximation non compl`etement polynomial.