Une réduction de Cook-Turing (notée ) est plus générale qu’une Réduction de Karp. Elle autorise des appels multiples à un oracle.
Définition
Un problème de décision est Cook-Turing réductible à s’il existe un algorithme polynomial résolvant qui peut appeler un oracle pour un nombre polynomial de fois.
Formellement : si on peut résoudre en temps polynomial en utilisant comme sous-routine en temps constant.
Différence avec la réduction de Karp
- Réduction de Karp () : Un seul appel à l’oracle, transforme l’instance
- Réduction de Cook-Turing ( ≪CT$) : Multiples appels à l’oracle possibles
Q≪PQ′ ⟹ Q≪CTQ′Q \ll_P Q’ \implies Q \ll_{CT} Q’Q≪PQ′⟹Q≪CTQ′
mais la réciproque est fausse.
Utilisation : Black box programming
Hypothèse :
Avec un oracle polynomial pour un problème de décision NP-complet, on pourrait résoudre efficacement de nombreux problèmes de recherche.
Exemple : Clique
Oracle : algocliquedec(G, k) retourne OUI/NON en O(1)O(1) O(1)
Algorithme de recherche :
k = TailleMax(G) // trouve k max avec dichotomie
pour x ∈ V:
si algocliquedec(G \ {x}, k):
G = G \ {x}
retourner G
Complexité : O(n)O(n) O(n) appels à l’oracle, donc polynomial.
Lien avec la Self-reduciblity
Un problème Q∈Q \in Q∈ 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.