Adloun

Du seuil à l'optimum

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

Énoncé

Un problème d'optimisation demande le coût minimal d'une solution, un entier compris entre et . On dispose d'un algorithme qui décide « existe-t-il une solution de coût ? ».

Corrigé

1. Par dichotomie sur le seuil. La fonction « existe-t-il une solution de coût ? » est croissante au sens booléen : fausse jusqu'à l'optimum, vraie ensuite. C'est exactement la situation de la recherche dichotomique du chapitre chap:diviser.


inf <-- 0 ; sup <-- M
tant que inf < sup
    m <-- (inf + sup) / 2
    si decide(m) alors sup <-- m sinon inf <-- m + 1
rendre inf

Invariant : l'optimum est toujours dans . Variant : , qui décroît strictement — de moitié à chaque tour.

2. appels. Mesuré, en cherchant un optimum placé au tiers de l'intervalle :

IntervalleAppels

3. Le nombre d'appels est logarithmique en , donc linéaire en la taille de . Si la version décision est polynomiale, la version optimisation l'est aussi. Les deux versions ont donc la même difficulté, et c'est ce qui autorise à ne parler que de problèmes de décision — comme le fait la définition de .

Une précaution. L'argument suppose que s'écrit en un nombre polynomial de bits, ce qui est le cas dès que les coûts sont des entiers donnés en entrée. Il tombe si l'optimum peut prendre des valeurs sans borne écrite dans l'instance.

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.