IFT-66975 Complexité d’espace L, NL, PSPACE P-complétude et NC

Download Report

Transcript IFT-66975 Complexité d’espace L, NL, PSPACE P-complétude et NC

IFT-66975 Complexité d’espace L, NL, PSPACE P-complétude et NC

Complexité d’espace

 Le temps de calcul est la ressource la plus naturelle à considérer pour mesurer la complexité d’un problème.

 L’ espace (quantité de mémoire) est clairement la seconde ressource dont on se soucie le plus en pratique.

 On veut développer pour cette mesure une taxonomie de complexité aussi riche que celle existant pour le temps.

 On mesure la mémoire utilisée par une machine de Turing en comptant le nombre de cellules du ruban utilisées lors d’un calcul.  On veut éviter de compter les cellules utilisées pour décrire le mot d’entrée x. Ainsi il est possible de dire d’un calcul qu’il utilise moins de |x| cellules de mémoire.

Machines de Turing à ruban d’entrée Contrôle fini de M (déterministe ou non) x 1 x 2 x 3 x n Ruban d’entrée (lecture seulement) ...

Ruban de travail (lecture/écriture) Une transition de la machine de Turing à l’état q, lisant le symbole e sur le ruban d’entrée et le symbole t sur le ruban de travail spécifie: 1. Le nouvel état q’ du contrôle fini; 2. Un éventuel mouvement (droite, gauche) pour chaque tête de lecture; 3. Un symbole écrit sous la tête du ruban de travail.

 Une telle machine de Turing peut être non déterministe.

 La complexité d’espace d’une m.t. est la fonction s: N  N telle que s(n) est le plus grand nombre de cases du ruban de travail utilisées sur une entrée de longueur n.

 Dans le cas d’une machine non déterministe, s(n) = plus grand nombre de cases du ruban de travail utilisées sur une entrée de longueur n pour une certaine suite de choix non-déterministes.

 Définitions : Pour f: N  N , on définit DTAPE(f) = classe des langages reconnus par une machine déterministe en espace O(f).

NTAPE(f) = classe des langages reconnus par une machine non-déterministe en espace O(f).

Note: la notation DSPACE et NSPACE est parfois utilisée.

Exemples

 Les langages réguliers peuvent être reconnus en espace 0.  On peut montrer que DTAPE(1) est exactement la classe des langages réguliers. (pas facile)  En fait, même DSPACE(o(log log n)) ne contient que les langages réguliers. (démonstration ++ difficile)

 s-t-connexité est dans NTAPE(log n). Entrée: graphe dirigé G = (V,E), et s,t  Question: existe-t-il un chemin de s à t?

V.

 Idée: choisir non-déterministement une suite de sommets et vérifier qu’ils relient s à t. Mais attention: on ne peut pas écrire notre choix sur le ruban!

 1.

2.

3.

4.

5.

6.

7.

Algorithme pour s-t-connexité: Entrée: graphe G, avec |V| = n et s,t  Initialiser un compteur c := 0; Initialiser point courant p := s; Si p = t alors accepter; Si c = n alors rejeter; Choisir non-déterministement un v  (p,v)  E, alors p := v et c := c+1; Répéter 4-6.

V; V. Si Espace utilisé: log n bits pour c, log n bits pour se souvenir du choix de v.

 s-t-connexité pour des graphes non dirigés est dans DTAPE(log n).  Résultat très récent et très subtil .

 L’acyclicité d’un graphe non dirigé est également calculable en espace O(log n) (exercice du devoir 3).

Trois nouvelles classes importantes

 L = DTAPE(log n).

 NL = NTAPE(log n).

 PSPACE =  c>0 DTAPE(n c ).

 NPSPACE  c>0 NTAPE(n c ).

 Définition : La fonction s: s(|x|).

N  N est espace-constructible s’il existe une m.t. déterministe utilisant un espace s(n) qui étant donné x écrit sur son ruban de travail la représentation binaire de En particulier, si s est espace-constructible on peut en espace s(|x|) délimiter une région de s(|x|) cellules du ruban de travail.

(Note: toute fonction “raisonnable” est espace constructible.)

 Théorème : [Savitch] Si s: N s(n)   N est espace-constructible et si log n, alors NTAPE(s(n))  DTAPE(s 2 (n)).

 Corollaire : PSPACE = NSPACE  Contraste important avec la complexité de temps où on pense que la simulation d’une machine non-déterministe ne peut se faire qu’à un coût exponentiel.

 Démonstration : Supposons que L est reconnu par une m.t. à ruban d’entrée non-déterministe M qui utilise un espace s(n). On veut construire une m.t. déterministe M’ qui reconnaît L avec espace s 2 (n).

Idée maîtresse: analyser le graphe de configurations de M .

   Soit Q les états de M et  configuration tuple dans Q l’alphabet de ruban. Une de M sur une entrée de longueur n est un  {1, ..., n}  cellules du ruban de travail.

{1, ..., s(n)}   s(n) qui spécifie un état, une position de la tête de lecture sur le ruban d’entrée, une position de la tête de lecture sur le ruban de travail et un contenu des s(n) premières Le graphe de configurations de M sur l’entrée x , est le graphe dirigé G ..., |x|} entrée.

 M,x = (V,E) où V est l’ensemble Q    s(|x|) et tel que [(q,i,j,w),(q’,i’,j’,w’)]  E de la configuration (q,i,j,w) lorsque M a reçu x en {1, si la configuration (q’,i’,j’,w’) peut être atteinte à partir La configuration K initiale 0 = (q configuration acceptante 0 .

,1,1,b acc s(|x|) ) est la configuration = (q acc ,1,1,b s(|x|) ) est la

 On peut supposer que la m.t. M n’atteint l’état acceptant qu’après avoir effacé le contenu de son ruban de travail et ramené les deux têtes de lecture à gauche. Donc, M accepte x si et seulement s’il existe dans G acceptante.

M,x un chemin de la configuration initiale à la configuration   La machine déterministe M’ va fonctionner en vérifiant cette condition en utilisant O(s car s(n)  log n.

2 (n)) cellules de mémoire. Notez qu’une configuration de M peut être décrite avec O(s(n)) symboles Comme s(n)  log n, on a |G M,x |  |Q|  n  s(n)  |  | s(n) = 2 O(s(n)) .

 Que fait M’?

1.

Étant donné x, M’ calcule s(|x|) et délimite s(|x|) cellules de travail.

2.

 Lorsque deux configurations K , K de M sur x sont décrites sur le ruban de travail de M’ on veut calculer le prédicat T K 2 j j (K 1 ,K est atteignable à partir de K 1 2 faisable en espace O((j+1)s(n)).

) qui est vrai si sur entrée x en Si j = 0, il suffit de générer à partir de K 1 = (q,i,j,w) M. Plus précisément, M’ lit x de transition de M pour calculer les deux configurations possibles K K 2 i et consulte les fonctions ’ et K ’’ qu’il compare avec . L’espace utilisé est bien O(s(n)).

2.

3.

 M’ calcule T j (K 1 ,K 2 ) = K 2 plus 2 j étapes.

Si j  atteignable de K 1, M’ procède par récurrence. On a 1 en au T j (K 1 ,K 2 )   K 3 : T j-1 (K 1 ,K 3 )  T j-1 (K 3 ,K 2 ) M’ essaie donc toutes les configurations possibles K 3 en ordre lexicographique. Le temps nécessaire est considérable car on a 2 tel que promis.

O(s(n)) candidats pour K 3 . Cependant, l’espace nécessaire est O(s(n) + 2j s(n)) M’ accepte x si et seulement si T O(s(n)) (K 0 ,K acc ) qui est calculé en espace O(s 2 (n)). Puisque M accepte x si et seulement si K acc à partir de K 0 est atteignable sans repasser deux fois par une même configuration, on a bien que M accepte le même langage que M.

Relations avec les classes de temps

Pour f: N  N , f(n)  log n, f espace constructible et calculable en temps 2 f(n) :  DTIME(f)  DTAPE(f)  DTIME(2 O(f) )  NTIME(f)  NTAPE(f)  DTIME(2 O(f) )  DTAPE(f 2 ).

 La seule inclusion non-triviale est NTAPE(f)  DTIME(2 O(f) ).

Soit M une m.t. non déterministe avec complexité d’espace f. On peut en temps O(2 O(f) ) construire entièrement le graphe G M,x et vérifier si K acc partir de K 0 est atteignable à à l’aide d’une fouille en profondeur (par exemple).

On a donc les inclusions L  NL  P  NP  PSPACE = NPSPACE.

 Théorème : PH  PSPACE.

 Démonstration on a  k Si k  L’   k-1  : On montre par récurrence que pout tout k PSPACE et  k Pour k = 0 on a  0 tel que =  0  1 on sait que L   k PSPACE.

= P  PSPACE.  0 s’il existe un langage L = {x | on a que (x,y) Donc  k   y  {0,1}  p(|x|) : (x,y)  L’}.

On peut essayer tous les y possibles en utilisant un espace borné par O(p(|x|))! Par récurrence L’ peut être vérifié avec complexité d’espace polynomiale. PSPACE. Par symmétrie  k  PSPACE.

On a donc les inclusions L  NL  P  NP co-NP   2  ...  PH  PSPACE  Par diagonalisation on peut démontrer que L  PSPACE. Donc au moins une des inclusions de cette chaîne est stricte. On pense que démontré.

toutes ces inclusions sont strictes mais aucun résultat n’est

PSPACE-complétude

 Un problème K de PSPACE est PSPACE complet si pour tout L  PSPACE on a L  p K.

 La PSPACE-complétude est une très forte indication qu’un problème n’admet pas d’algorithme efficace. De nombreux problèmes naissant de la théorie des jeux sont PSPACE-complets.

 Formule Booléenne quantifiée (QBF) Entrée: une formule booléenne quantifiée  : Q 1 x 1 où Q i Q  2 x { 2  ... Q n x n :  (x 1 , ..., x n ) ,  } et avec variables x i .

 est une formule booléenne Question: La formule est-elle vraie?

À noter que le nombre d’alternations entre les quantificateurs existentiels et universels n’est pas borné, contrairement aux problèmes SAT k cir .

 Théorème : QBF est PSPACE-complet.

 Démonstration : On veut d’abord montrer QBF  PSPACE. Supposons Q 1 =  . Alors  deux formules Q 2 x 2 ... Q n x n : E(1,x 2 ,...,x n ) est vraie si une des ou Q 2 x 2 ... Q n x n : E(0,x 2 ,...,x n ) est vraie. On peut ainsi bâtir un algorithme récursif. La base de la récursion est l’évaluation d’une formule sans variable, ce qui se fait en temps polynomial. La gestion de la récurrence nécessite que l’on conserve en mémoire au plus n bits.

 Soit L  PSPACE, reconnu par la machine M utilisant un espace p(n). On veut montrer L  p QBF.

Considérons encore le graphe de configurations de M sur l’entrée x. Cette fois M est déterministe donc il existe au plus une arête sortante de chaque configuration. On a toujours que x  L si et seulement si M accepte x s’il existe un chemin de longueur  2 O(p(|x|)) de K 0 à K acc dans le graphe de configurations. On va montrer comment construire en temps polynomial une formule booléenne quantifiée S(x) qui est vraie si et seulement s’il existe un tel chemin.

On réutilise l’idée de Savitch. Pour deux configurations K 1 , K 2 on définit T j (K 1 ,K 2 ) s’il y a un chemin de longueur  2 j entre K 1 K 2 . On aura alors S(x) = T O(p(|x|)) (K 0 ,K acc ).

et On a vu que: T j (K 1 ,K 2 )   K 3 : T j-1 (K 1 ,K 3 )  T j-1 (K 3 ,K 2 ) Chaque configuration peut être représentée par une chaîne de O(p(n)) bits et donc on peut voir “  K 3 ” comme O(p(n)) quantificateurs existentiels.

En utilisant les idées du théorème de Cook-Levin, on peut écrire une formule A si et seulement si T 0 (K 1 ,K 2 ). K1,K2 (x) qui est vraie Donc, on peut utiliser récursivement T j (K 1 ,K 2 )   K 3 : T j-1 (K vraie si et seulement si T 1 ,K 3 ) O(p(|x|))  (K T 0 j-1 ,K (K pour construire une formule quantifiée qui est acc Cependant, la taille de cette formule est exponentielle ce qui est inacceptable.

3 ,K ). 2 ) Pour éviter cela, on utilise un  pour simuler le  dans cette formule et profiter de sa symmétrie.

T j (K 1 ,K 2 )   K 3  (K 4 ,K 5 )  {(K 1 ,K 3 ), (K 3 ,K 2 )}: T j-1 (K 4 ,K 5 )

T j (K 1 ,K 2 )   K 3  (K 4 ,K 5 )  {(K 1 ,K 3 ), (K 3 ,K 2 )}: T j-1 (K 4 ,K 5 ) En utilisant cette équivalence, on voit que si T alors T j taille O(r+p(|x|)).

j-1 peut être représenté par une formule de taille r, peut être représenté par une formule de Comme T 0 peut être représenté par une formule de taille p(|x|), on peut donc construire une formule quantifiée S(x) de taille O(p 2 (|x|)) qui est vraie si et seulement si T O(p(n)) (K 0 ,K acc ). Cette formule est vraie si et seulement si x  L. Puisque S(x) a été construite en temps polynomial on a bien que L  p QBF.

Stratégies de jeux gagnantes

 De façon abstraite, un jeu entre Alice et Bob est une compétition se déroulant en n rondes de coups. Pour chaque ronde, Alice joue un coup et Bob joue un coup (selon des règles spécifiées). Après n rondes, l’un des deux joueurs est déclaré gagnant, selon une règle préétablie. L’identité du gagnant dépend de la suite de coups joués.

    On dit qu’Alice a une elle peut toujours gagner lorsque les deux joueurs jouent de façon optimale. stratégie gagnante pour le jeu J si En d’autres mots, Alice peut jouer un coup à la première ronde tel que peu importe le coup joué par Bob elle peut jouer un second coup tel que peu importe le second coup joué par Bob ... Alice peut jouer un dernier coup tel que peu importe le dernier coup de Bob, Alice est gagnante.

On retrouve des exemples de jeu un peu partout en IA mais aussi en économie, en sociologie, en sciences stratégiques etc.

La question fondamentale à propos de tout jeu est: Alice a-t-elle une stratégie gagnante?

 Exemple: le jeu Géographie.  À la ronde 1, Alice choisit un nom de ville du monde qui commence par “A”. Bob doit répondre par un nom de ville du monde qui commence par la dernière lettre de la ville choisie par Alice. On alterne ainsi sans réutiliser la même ville. Le premier qui ne peut nommer une ville a perdu.

 Il se peut qu’Alice est une stratégie gagnante aujourd’hui mais pas demain!

 On définit Géographie Généralisée (GG): Entrée: une liste de villes représenté comme un graphe dirigé G avec un point de départ distingué s a perdu.

 V.

Question: Existe-t-il une stratégie gagnante pour Alice dans le jeu suivant? On part du point s. Chaque coup à partir du point v correspond au choix d’un point v’ non visité et tel que (v,v’)  E. Le premier joueur qui n’a pas de coup possible  GG est PSPACE-complet.

 On a tout d’abord GG  PSPACE.

 On construit un algorithme récursif qui détermine si Alice peut gagner sur le graphe G à partir du point s.

 1.

Algorithme A Entrée:  G,s  .

2.

3.

Si s a degré sortant 0, alors  G,s  est perdant .

Sinon, pour chaque s i tel que (s,s i )  E faire appel récursif A(  G’,s i  ) où G’ est G – {s}. Si tous ces appels acceptent alors Bob aura une stratégie gagnante peut importe le coup de Alice donc  G,s  est perdant . Sinon,  G,s  est gagnant .

 A peut être implémenté en espace O(|G|).

 On montre maintenant QBF  p GG.

On veut donc transformer en temps polynomial une formule quantifiée  en un graphe G  avec un point de départ s tel que  est vraie si et seulement si Alice gagne le jeu  G  ,s  .

Pour se simplifier la tâche, on suppose que  de la forme  =  x 1  x 2 x k :  (x 1 ,...,x n ) où   x 3  est en 3-CNF.

x 4 ... Q k est

 La plupart des jeux de stratégie (go, échecs, dames, tic-tac-toe, othello) sont des jeux se jouant sur une grille fixe. Donc, selon nos définitions, on peut déterminer si Alice a une stratégie gagnante en temps constant!

 La plupart de ces jeux (pas les échecs) se généralisent naturellement à des grilles n d’othello, etc. donnent naissance à des problèmes PSPACE-complets.

 n arbitrairement grandes. On peut montrer que des versions généralisées du go, des dames,

Problèmes NL-complets

 Puisque NL  P, tous les problèmes non-triviaux de NL sont NL-complets sous les transformations polynomiales.  On a donc besoin d’utiliser une notion de réduction beaucoup plus restrictive afin d’obtenir une notion intéressante de NL-complétude.

Fonctions calculables en espace log

 Une fonction f:  *   * est calculable en espace logarithmique s’il existe une machine avec un ruban d’entrée (lecture seulement), un ruban de travail (lecture/écriture) et un ruban de sortie (écriture seule) qui en entrée x produit f(x) sur le ruban de sortie et utilise O(log n) cellules du ruban de travail.

Transformations logarithmiques

 Un problème A est logarithmiquement réductible au problème B (A  log B) s’il existe une fonction f calculable en espace logarithmique qui transforme les instances de A en instances de B tel que  x: x  A  f(x)  B.

 Propriétés à noter: 1.

Si A  log B et B  log C alors A  log C.

2.

Si A  log B et B  NL alors A  NL.

3.

Si A  log B et B  L alors A  L.

4.

Si A  log B alors A  p B.

 On dit que B est NL-complet si B  et pour tout A  NL, on a A  log B.

NL  On dit que B est P-complet si B  pour tout A  P, on a A  log B.

P et  Encore une fois ces notions ne sont intéressantes que parce que l’on peut trouver des exemples naturels de problèmes NL-complets et P-complets.

 Théorème : s-t-conn est NL-complet.

 Démonstration : On a déja montré s-t-conn  NL.

Soit A  NL et M une m.t. non-déterministe avec complexité de mémoire O(log n) qui accepte A. Pour tout x, on veut construire un graphe G(x) avec deux points s,t tels qu’il y a un chemin de s à t si et seulement si M accepte x.

Ce graphe est tout simplement le graphe des configurations G M,x avec s = K 0 et t = K facile de voir qu’une représentation de ce graphe est calculable en espace logarithmique.

acc . Il est

 Note: si L  NL alors s-t-conn n’est pas dans L. (C’est, bien sûr le but des résultats de complétude)  Il existe plusieurs autres problèmes intéressants qui sont NL complets, notamment 2SAT.

NL vs co-NL

 On pense que NP  co-NP. Plus précisément, il semble que la complexité de temps non déterministe d’un langage L peut être radicalement différente que la complexité de temps non déterministe du complément de L.

   Soupçonne-t-on la même chose pour la complexité d’espace? Non car co-NPSPACE = PSPACE = NPSPACE!

Qu’en est-il pour NL et co-NL?

 Théorème : [Immerman-Szelepcsényi] NL = co-NL Théorème très surprenant au moment de sa découverte.

Pour le montrer, il suffit de montrer que le complément de s-t-conn fait partie de NL. Appelons ce problème s-t-unconn.

 Comment montrer s-t-unconn  NL?

  Supposons d’abord qu’en plus de G,s,t, on reçoit en entrée le nombre c de points de G qui sont atteignables à partir de s. Soit A(s) l’ensemble de ces points. Notre algorithme fonctionne comme suit: pour chaque point u  V – {t}, choisir non déterministement si u  Lorsque l’on choisit u  alors on accepte.

A(s) ou non. A(s), on vérifie ce choix en trouvant non-déterministement un chemin de s vers u. Si on a choisi c points dans A(s) et validé ce choix pour chacun

  Reste à calculer c. Soit A i les points atteignables en au plus i étapes à partir de s. On a donc A 0 = {s} et A i  A i+1 et A |G| = A(s). Soit c i = |A i |.

 On va montrer comment calculer c partir de c i déterministe.

i+1 à grâce à notre machine non (Idée similaire à la précédente)

 1.

Algorithme C calculant c i+1 à partir de c veut faire en sorte que pour chaque choix non déterministe, C rejette ou calcule c i+1 .

i . On Entrée: G,s,c i .

2.

3.

c i+1 := 0; Pour chaque v  V faire 4.

1.

2.

intialiser compteur d:=0; Pour chaque u  1.

2.

V choisir non-déterministement si u  A i . Si on choisit u vérifier un chemin de longueur i de s à u. Si échec rejeter .  V alors choisir non-déterministement et 3.

4.

3.

4.

Si réussite d:= d+1; Si (u,v)  E alors flag:= 1; Si d  c i rejeter .

Si flag = 1, alors v  A i+1 alors c i+1 Retourner c i+1 .

= c i+1 +1.

  1.

2.

 Remarques: Il faut un vrai miracle pour que C ne fasse pas des choix non-déterministes qui l’amènent à rejeter.

La seule possibilité pour que C ne rejette pas est que Pour chaque v  V, la boucle traitant v fait toujours la bonne hypothèse en choisissant u  A i ou u  A i . (Si u  A i est incorrect, alors impossible de trouver un chemin de s à u. Si u  A i est incorrect on aura d < c i .) Pour chaque u  A i , un chemin de longueur i de s vers u est correctement choisi. Lorsque ces miracles ont lieu simultanément C ne rejette pas et calcule c i+1 correctement. À noter aussi que la complexité d’espace de C est O(log n) car on n’a jamais besoin d’inscrire plus que trois points du graphe et deux compteurs en mémoire.

 Algorithme NL pour s-t-unconn 1.

2.

Entrée: graphe G, source s, cible t; c 0 := 1. Calculer c 1 puis c suite jusqu’à c = c |G| . 2 et ainsi de (Forte probabilité d’échec mais le calcul de c |G| sur au moins un choix non-déterministe.) est correctement effectué 3.

4.

5.

initialiser compteur d:=0; 1.

Pour chaque u  V-{t} choisir non déterministement u  A(s) ou u  A(s).

Si u  A(s), choisir et vérifier un chemin de s vers u. Si échec rejeter , sinon d := d+1; Si d = c alors accepter , sinon rejeter .

Autres classes d’espace logarithmique    On peut également définir des classes probabilistes telles que RL, BPL, PL.

On a presque réussi à démontrer que RL = L.

De façon générale, on croit que ces classes ne sont pas beaucoup plus grandes que L.

Algorithmes parallèles

 Le problème s-t-conn peut-être calculé rapidement par un algorithme massivement parallèle.     Supposons |G| = n et utilisons  processeurs.

n 2  log n On peut imaginer les n 2 premiers processeurs sont responsables chacun de calculer T 0 (u,v) pour une paire (u,v).

Les n 2 suivants calculent chacun un T 1 (u,v) grâce à la relation T 1 (u,v)   m: T 0 (u,m)  T 0 (m,v). Avec log n niveaux on peut donc calculer T n’est pas appréciable.

log n (s,t). Le temps à chaque niveau est linéaire donc le gain

Pourquoi s’arrêter en si bon chemin?    Considèrons le processeur qui calcule T j (u,v)   m: T j-1 (u,m)  T j-1 (m,v).

Remplaçons le par n processeurs, chacun calculant T j-1 demande à nouveau (u,m)   T j-1 (m,v) pour un m! Ces réponses sont ensuite combinées par un OU d’arité n. (ce qui n processeurs).

Il existe donc un algorithme massivement parallèle qui calcule s-t conn en temps O(log 2 n).

La classe NC

 Grossièrement la classe de complexité NC est l’ensemble des langages calculables par O(n c ) processeurs en temps O(log d n).  Puisque le nombre de processeurs est polynomial, on a NC  P. Là encore, on croit que l’inclusion est stricte.

 Modèle plus précis de calcul parallèle: les PRAM (parallel random-access machines).

Informellement, NC correspond aux problèmes ayant un algorithme parallèle très efficace. Mais l’implémentation d’algorithmes massivement parallèles est souvent trop délicate pour que cette correspondance soit réaliste.

 Par contre, il est raisonnable de postuler qu’un problème en dehors de NC n’admet pas d’algorithme parallèle très efficace.

 Exemples de problèmes dans NC:        st-conn Tous les problèmes de NL!

Multiplication de matrices Calcul de déterminant de matrice Calcul d’inverse de matrice Évaluation de formule Booléenne etc.

P-complétude

 Si A  log B et B  NC, alors A  NC.

 Ainsi si NC on a K   NC. P alors si K est P-complet  Les problèmes P-complets sont intrinsèquement séquentiels.

 Soit CVP le problème suivant: Entrée: circuit booléen C sans variables.

Question: Quel est la valeur de sortie du circuit?

Théorème : CVP est P-complet.

 Clairement, on a CVP  P: on peut calculer la valeur de chaque porte du circuit niveau par niveau.

  Soit maintenant A un problème de P et M la m.t. déterministe qui reconnaît A en temps polynomial.

Pour chaque x, on peut réutiliser notre construction pour Cook-Levin pour obtenir en espace logarithmique un circuit C(x) dont la valeur de sortie est 1 si et seulement si M accepte x.

n k  Tableau du calcul de M n k # # # q 0 x 1 x 2 ... x n

b

...

b b

# # # config initiale 2 ème config  # # config finale

 Chaque cellule [i,j] contient un symbole de l’alphabet  ou un état q configuration acceptante.

 Q. On veut construire à partir d’une entrée x à M un circuit C qui évalue à 1 si et seulement si M accepte x, donc si et seulement si le tableau aboutit dans une  Chaque cellule va être transformée en un ensemble |  | + |Q| portes dans le circuit. La structure du circuit est donc très régulière, ce qui facilite sa construction en espace logarithmique.  Le reste n’est qu’une question de détails. (!) (voir 14.2 de Wegener)

Il existe de très nombreux exemples de problèmes P-complets:      Horn-SAT programmation linéaire ordre DFS Max-flow etc.

Notre vue sur le monde

Pour les problèmes de décision, on a vu L  NL  NC   P  NP  PSPACE  ...  EXP  PH NEXP Pour un problème de décision donné K, on voudrait idéalement être capable de montrer que K est C -complet pour une classe actuellement.

C car cela indique que l’on comprend la complexité de K aussi bien que le domaine le permet

 Seul problème: il existe beaucoup classes de complexité, dont plusieurs qui sont probablement égales et plusieurs qui ne contiennent que très peu de problèmes dignes d’intérêt.

de  cf Complexity Zoo