IP (Integer programming) est NP-complet ? Certificat : un vecteur Verification :

3-partition NP-complet

Instance une séquence d’entiers Question : il existe sous sequences de tel que et

NP ? Certificat : une permutation (les positions des entiers à prendre dans la séquence) Vérification : Polynomial (on construit du sous-ensemble à partir de la permutation)

NP-hard ?

k = si k n’est pas pair retourner faux ajouter à S l’entier retourner 3P(S)

4-partition

Même chose avec

Dans l’examen : 3-partition partition

Balck box programming

Hypothèse que

: Réduction de Karp : réduction de Cook-Turing

A decision problem is Cook-Turing reducible to if there is a polytime algo solving whenever there is a poly-time algo solving .

A language is self-reducible if there is a Cook-Turing reduction from the serach problem for to the decision problem for .

Blackbox algo:

  • input = instance d’un pb de recherche
  • output = un algo poly pour le probleme de recherche

Exemple : CliqueMax L’oracle nous donne algocliquedec(G, k) oui ou non (avec une complexité O(1)) On cherche un algo algoclique(G) qui retourne une clique de taille max.

TailleMax algo poly

k = TailleMax(G) pour x X : si algocliquedec(G|x): alors G = G|x retourner G

Donc cliquemax est self-reducible

Pareil pour HAM en retirant les arrètes

  1. SAT est self-reducible
  2. partition
  3. SACADOS
  4. Color
  5. sous-graphe

SAT self-reducible

SATdec oui/non Exemple: Idée : est-ce qu’il y a une solution avec Algo: si ! SATdec(): retourner faux v[] pour i = 1 a n: si SATdec(): = v[i] = 0 sinon: = v[i] = 1 retourner v

SACADOS self-reducible

sacadosdec(X, w, u, B, k) Idée : on cherche le k max. on fixe les variables existe t il une solution avec .

Algo: k = 1 tant que sacadosdec(X, w, u, B, k): k = k+1

Mais cet algo est exponentielle donc on peut utiliser la dichotomie

pour x X: si sacadosdec(X, w, u, B, k): X = X \ (x) W = W \ (x) U = U \ (x) retourner X

Partition

partitiondec(S) oui/non Idée : Est-ce que deux entiers seront ensemble dans la même partition ?

Exemple : <2, 3, 4, 3, 6, 7, 5> <5, 4, 3, 6, 7, 5> // Le 2 et 3 seront donc ensemble <9, 3, 6, 7, 5> <15, 3, 7, 5> <22, 3, 5>

s1 = <2, 3, 4, 6> s2 = <3, 7, 5>

Algo : si ! partitiondec(S): retourner faux s1 = {x0}, s2 = {} pour i = 2 a n: si partitiondec(S \ {xi}): s1 = s1 {xi} sinon: s2 = s2 {xi} retourner (s1, s2)

Color

colordec(G, k) oui/non on a k min en O(n) Idée : Est-ce que deux sommets n’auront pas la même couleur ? Comment : on demande a l’oracle si on peut colorier le graphe avec une arete en plus entre les 2 sommets ?