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≪P​Q′⟹Q≪CT​Q′

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.