Un problème est self-réductible si on peut résoudre sa version recherche en utilisant sa version décision comme oracle.
Définition formelle
Un langage $Q \in NP est self-réductible s’il existe une Réduction de Cook-Turing du problème de recherche vers le problème de décision.
Autrement dit : avec un oracle polynomial pour la version décision, on peut résoudre la version recherche en temps polynomial.
Hypothèse
Si , alors tous les problèmes NP self-réductibles ont des algorithmes polynomiaux pour leurs versions recherche et décision.
Importance théorique
La self-réductibilité montre que pour ces problèmes, les versions décision et recherche ont essentiellement la même difficulté :
- Si la décision est facile (dans P), la recherche l’est aussi
- Si la décision est difficile (NP-complet), la recherche l’est aussi
Exemples de problèmes self-réductibles
Clique
algocliquedec(G, k) -> oui/non // oracle O(1)
k = TailleMax(G) // dichotomie : O(log n)
pour x ∈ V:
si algocliquedec(G\{x}, k):
G = G\{x}
retourner G
SAT
SATdec(C) -> oui/non // oracle O(1)
v = []
pour i = 1 à n:
si SATdec(C[xi=0]):
C = C[xi=0]
v[i] = 0
sinon:
C = C[xi=1]
v[i] = 1
retourner v
Sac à dos (Knapsack)
sacadosdec(X, w, u, B, k) -> oui/non
// Trouver k max avec dichotomie
k_max = dichotomie()
// Construire solution
pour x ∈ X:
si sacadosdec(X\{x}, w, u, B, k_max):
X = X\{x}
retourner X
Partition
partitiondec(S) -> oui/non
s1 = {x0}, s2 = {}
pour i = 2 à n:
si partitiondec(S\{xi}):
s1 = s1 ∪ {xi}
sinon:
s2 = s2 ∪ {xi}
retourner (s1, s2)
Coloration de graphe
colordec(G, k) -> oui/non
Idée : Déterminer si deux sommets peuvent avoir la même couleur
en testant si G avec une arête supplémentaire reste k-coloriable
Hamiltonian Path (HAM)
Retirer progressivement les arêtes en vérifiant l’existence d’un chemin.
Sous-graphe
pour x ∈ V2:
si sous-graphe(G1, G2\{x}):
G2 = G2\{x}