Calculabilité et Complexité

07/09/23 - cours 1

site: https://vpenelle.pages.emi.u-bordeaux.fr/coca/

CC: projet + DS/partiel Exam 3h

2 sessions

livre de Papadimitriou: très important pour la complexité

(bd sur les logiciens des années 1920-1930)

“A beautiful mile” (John Nash) (film)

p22

Problème 2: $$ 1 < n < 2^k k bits 2,3,...,\sqrt(n) < 2^{k/2} $$

Problème 3: pattern matching -> linéaire

Problème 4: compilation -> automate à pile

Problème 5: exponentiel (3n)

p26

DFS: O(|V|+|E|) -> linéaire

Dijkstra: O(|V|(|E|+log(|V|))) -> quadratique

linéaire: n quadratique: n2 cubique: n3

11/09/23 - cours 2

A Automate fini L(A) ≠ ∅ ? chemin de I vers F

Si on a 2 automates, L(A1)⋂L(A2) ≠ ∅ ? facile

Si on a n automates, L(A1) ∩ ... ∩ L(An) ≠ ∅ ? |Ai| = k |Πi = 1nAi| = kn

Logique propositionnelle (p29/134)

-> SAT

CNF: “un ‘et’ de ‘ou’” (ex: $(x_1 \vee\overline{x_2} \vee\overline{x_4}) \wedge(\overline{x_1} \vee x_2 \vee x_3)$

CNF: chaque clause doit avoir 3 litéraux différents.

circuit booléen: formule sous forme d’arbre compressée (on peut réutiliser des sous-formules) description plus succinte (= compressée) de formules booléennes

SAT: Entrée: ϕ (en CNF) Sortie: Oui si ϕ est satisfait

Algo naif: on teste toutes les valuations des x1, ..., xn

Tester si σ satisfait ϕ se fait en temps |ϕ|

Tester si ϕ est satisfaisable: temps 2n|ϕ|

ϕ −  > ϕ̃: - on teste si ϕ est satisfaisable - si oui, alors ϕ̃ = 1 - si non, alors ϕ̃ = 0 ($x_1 \wedge\overline{x_1} \wedge\overline{x_1}$ par exemple) (exemple grossier, en réalité il faut des litéraux différents)

ϕ − >simpleϕ̃ tq ϕ est satisfaisable $\widetilde{phi}$ est satisfaisable

exemple: clause de taille 2

Clause $(x \vee\overline{y}) = Ci$

Nouvelle variable t

$\phi_i = (x \vee\overline{y} \vee t) \wedge(x \vee\overline{y} \vee\overline{t})$

pour x = y = 1: Ci vrai => ϕi vrai

pour x = 0, y = 1: ϕi ne peut pas être vrai, peu importe la valeur de t.

-> p38

c’est linéaire dans |ϕ| -> polynomial

Cliques

algo naif pour clique: complexité nk (pas polynomial car on peut avoir k = n et donc nn)

par contre si on fait un algo “Clique 4” qui fixe k=4, alors complexité n4 => polynomial

On va voir qu’on peut réduire 3-SAT vers Clique.

=> p43

18/09/23 - cours 3

rappel:

SAT: - Entrée: formule ϕ en CNF (ϕ=ϕ(x1,...,xn)) - Question: est-ce qu’il existe val: {x1, ..., xn} → {0, 1} tq val satisfait ϕ ?

Problème d’évaluation: - Entrée: formule ϕ, valuation val - Question: est-ce que ϕ est vraie sous val ? - Problème facile: P (temps polynomial)

Réduction clique p SAT (clique vers SAT)

Clique SAT
G = (V, E) Variables
k X(v,i): v ∈ V, 1 ≤ i ≤ k

Idée: X(v,i) doit être vrai si v est le i-ème sommet d’une clique

Contraintes:

  1. Parmi les {X(v,i)|v ∈ V}, exactement une est vraie (une liste de k sommets)
  2. Parmi les {X(v,j)|1 ≤ j ≤ k}, il y a au plus une qui est vraie (la liste n’a pas de sommets répétés)
  3. La liste est bien une clique: les éléments sont reliés 2 à 2.
  1. $_1 = $ $\bigwedge_{i=1}^{k} [ \bigvee_{v = 1}^{n} x(v,i) \wedge\bigwedge_{v\neq w; v, w = 1}{n} (\overline{x(v,i)} \vee\overline{x(w,i)}$
  2. $_2 = $ $\bigwedge_{v=1}^{n} \bigwedge_{j \neq l;j,l = 1}^{k} (\overline{x(v,j)} \vee\overline{x(v,l)})$
  3. $_3 = $ $\bigwedge_{j \neq l; j,l=1}^{k} \bigvee_{(v, w) \in E}^{} (x(v,j) \wedge x(w, l))$

3’ (en CNF): $\bigwedge_{j \neq l; j, l = 1}^{k} \bigwedge_{(v, w) \nin E}^{} (\overline{x(v,j)} \vee\overline{x(w, l)})$

G, K → ϕ1 ∧ ϕ2 ∧ ϕ3

I. G contient une clique de taille K ϕ1 ∧ ϕ2 ∧ ϕ3 est satisfaisable II. On peut calculer ϕ1, phi2, phi3 en temps polynomial !

$#$ variables: k ⋅ n taille(ϕ1)  ∈ 𝒪(kn2) taille(ϕ2)  ∈ 𝒪(nk2) taille(ϕ3)  ∈ 𝒪(k2m)

(=>)

Supposons C = {v1, ..., vk} est une clique (de taille k)

On prend la valuation val(vi, i) = vrai, 1 ≤ i ≤ k et val(v, i) = faux sinon

ϕ1 est satisfaite par val, car i: val(v, i) est vrai seulement pour v = vi

ϕ2 ” ” ” ” , car l ≠ j: ve ≠ vj

ϕ3 ” ” ” ” , car l ≠ j: (ve, vj)  ∈ E

(<==)

Soit val une valuation qui satisfait ϕ1 ∧ ϕ2 ∧ ϕ3

Soit vi l’unique (ϕ1 garantit ça) sommet tq val met x(vi, i) à vrai

{v1, ..., vk} est de taille k (ϕ2 le garandit) et c’est une clique (ϕ3 le dit)

3-coloration

|ϕ1| ∈ 𝒪(n)

|ϕ2| ∈ 𝒪(m)

|ϕ| ∈ 𝒪(n+m)

p48

si sommet “résultat” pas relié à 0: le graphe est toujours 3-coloriable, même si la formule n’est pas SAT.

p49

  1. x instance positive de A1 f(x) instance positive de A2 (f: fonction de réduction)

  2. A1pA2 via réduction polynomiale f

    A2pA3 via ” ” g

    A1fA2gA3

    A1g ⨾ fA3

Rq1: g ⨾ f se calcule en P

taille(f(x)) polynomiale en taille(x)

donc le calcul de g(f(x)) se fait en temps poly en taille(x)

ex: f se calcule en 𝒪(n2) g ” ” ” 𝒪(n3)

-> g ⨾ f temps 𝒪(n6)

25/09/23 - cours 4

p50/134

Classe NP

à propos du DS

DS 23/10/23 10h15-12h15 A9 amphis 2,3

Projet: en binome On va faire des réductions

Retour au cours

Chemin Hamiltonien (CH)

Entrée G = (V,E)

Q: Existe-t’il un chemin v1, v2, ..., vn dans G tq V = {v1, ..., vn}, |V| = n (tous les sommets apparaissent exactement une fois)

Solution = suite v1, v2, ..., vn, vi ∈ V

[elle doit être chemin et vi ≠ vj, i ≠ j]

Vérificateur pour CH:

prend en entrée G = (V,E), |V| = n et une suite v1, ..., vn

Il vérifie que

  1. v1, ..., vn est chemin de G (𝒪(|G|)

  2. vi ≠ vj, i ≠ j (𝒪(n))

Si G est instance + de CH alors il existe une solution v1, ..., vn qui montre ça.

Classe NP

Classe NP: problèmes qui possèdent des vérificateurs polynomiaux

Classe P: probèlemes qui possèdent des algorithmes polynomiaux

Pourquoi c’est évident que $P \inclus NP$?

P -> algo polynomial M -> M travaille sur <x, y> avec x entrée du problème y = ϵ

algo poly est cas particulier d’un vérificateur poly (y = ϵ)

en gros, pour P, sans donner une solution, on peut résoudre le problème en temps polynomial. Pour NP, avec une solution donnée, on peut résoudre le problème en temps polynomial. Donc si on donne une solution à P, il peut l’ignorer et quand même résoudre le problème en temps polynomial.

autres classes plus compliquées: PSPACE, ExpTime, …

réduction de CH vers SAT

CHpSAT G = (V,E) V = {1, ..., n}

On “code” la solution par x(i,j)

x(i,j) vrai le i-ème sommet de la solution est j

1 ≤ i, j ≤ n

  1. Chaque sommet apparait dans la suite. $$\bigwedge_{j=1}^{n} \bigvee_{i=1}^{n} x(i, j)$$

  2. (Chaque sommet apparait au plus 1 fois.) (pas besoin) $$\bigwedge_{j=1}^{n} \bigwedge_{i \neq i'} (\overline{x(i,j)} \vee\overline{x(i',j)})$$

  3. La suite est un chemin. $$\bigwedge_{i=1}^{n-1} \bigvee_{(u,v) \in E} (x(i,u) \wedge x(i+1, v))$$

(2’) $$\bigwedge_{i=1}^{n} \bigwedge_{j \neq k} (\overline{x(i,j)} \vee\overline{x(i, k)})$$

NP-Complet

On verra que SAT est NP-difficile:

-> NP-complet: SAT, 3-col, CH

Si A est NP-Complet et A ∈ P alors P = NP.

A = SAT

Supposons que SAT a un algorithme polynomial M.

On considère B ∈ NP quelconque.

SAT étant NP-difficile $\RightArrow^def$ BpSAT

[x -> f -> f(x) -> M -> oui/non] algorithme pour B polynomial

p56/134: cet algo est poly (n appels à P)

-> réduction de Turing

Résumé de fin de cours

Pour montrer que A ∈ NP:

Vu ILP (Programmation Linéaire sur les Entiers)

02/10/23 - cours 5

p58/134 - Théorème de Cook-Levin

p59

NP:

NP-complet:

Questions pour savoir si A ∈ NP (2.)

  1. quels certificats pour A

  2. quel vérificateur pour A

  1. vérificateur:

-> poly car p

( projet: partie 2 ici (réduction vers SAT)

partie 1: plus difficile )

p61

Cicruit booléen C = graphe acyclique avec des noeuds internes étiquetés par des , , $\not$, des feuilles étiquetées par z1, ..., zn et un noeud sortie.

(^)
^ ^  ^
| |  |
...  |
^ ^  | n
| |  |
(^)  |
^ ^  v
| |
(x)

-> formule de taille 2n

  1. Circuit-Eval

Entrée: Circuit C(z1,...,zn) + valuation val:{1, ..., n} → {tt, ff}

Question: Est-ce que C s’évalue à tt sous val ?

Circuit-Eval P

  1. Circuit-SAT

Entrée: Circuit C(z1,...,zn)

Question: Existe-t-il val:{1, ..., n} → {tt, ff} qui satisfait C ?

Circuit-SAT NP:

-> à la fin de la p61, on a fait A p Circuit-SAT

Circuit-SAT p SAT

C(z1,...,zn) → ϕ(z1,...,zn,t1,...,tm)

  1. |phi| poly dans |C|
  2. C satisfaisable ϕ satisfaisable

Remarque: applatir C: mauvaise idée (ϕ peut être exponentiel)

Les variables additionnelles (t1, ..., tm) sont pour chaque noeud de C:

noeud v de C variable yv

1) $v$ feuille, étiquetée par $z_i$
    contrainte $y_v \rightleftarrow z_i$ ($(\not{y_v} \or z_i) \and (y_v \or \not{z_i})$)

2) $v$ = AND($v_1, v_2$)
    contrainte: $y_v \rightleftarrow y_{v_1} \and y_{v_2}$

3) $v$ = OR($v_1, v_2$)
    contrainte: $y_v \rightleftarrow y_{v_1} \or y_{v_2}$

4) $v$ = NOT($v_1$)
    contrainte: $y_v \rightleftarrow \not{y_{v_1}}$

-> ce qu’on a vu en TD -> formule de taille linéaire par rapport au circuit

p61:

  1. Observation
  2. A p Circuit-SAT

ce qu’on a écrit ici: Circuit-SAT p SAT

donc c’est bon, on a montré A p SAT pour tout A NP

fin cours -> on voit un exemple

Sujet d’examen Juin18

réduction de Clique vers SAT

certificat: X1, ..., Xk ⊂ V, k ≤ |E| -> taille poly 𝒪(m,n)

vérificateur (G, X1, ..., Xk):

  1. xi est une clique

$$\bigwedge_{i=1}^{k} \bigwedge_{u \neq v, u,v=1}^{n} (u, v) \nin E \rightarrow (\overline{x(u,i)} \vee\overline{x(v,i)}$$ -> 𝒪(k ⋅ n2

  1. Toute arête est couverte:

$$\bigwedge_{u \neq v, (u,v) \in E} \bigvee_{i=1}^{k} (x(u,i) \wedge x(v,i))$$ -> 𝒪(m ⋅ k

Réduction

09/10/23 - cours 6

p62/134

Problèmes de type “sac à dos”: problème d’optimisation

On commence avec un problème de taille (Somme d’entiers)

Somme de 2 nb binaires à m bits: 𝒪(m); Multiplication de 2 nb binaires à m bits: 𝒪(m2)

Problème “Partition”: celui qu’on aura dans le projet

Remarque:

Somme d'entiers - unaire
    indices 1..p // poly
    somme s // poly
    Pour tout 1 <= r <= p, pour tout s' <= s
        existe-t-il des 1 <= i_1, ..., i_t <= r tq
            (Somme pour j de 1 à t de x[i][j]) = s'

p64: Somme d’entiers p Partition

x1, ..., xp, s y1, ..., yr

X x1, ..., xp, X − 2s

On part d’un ensemble X = {x1, ..., xp}. Si Somme d’entiers est bon, alors la somme d’une partie de ces x est égale à s.

On prend ces entiers et X − 2s d’un côté, la somme de tout ça donne s + (X−2s) = X − s.

De l’autre côté, on prend tous les autres x. Donc X − s.

Ainsi, si on a une somme égale à s, on a la partition, sinon c’est impossible de partitionner.

3-SAT p Somme d’entiers

Dans toute sol de Somme

  1. ∀1 ≤ i ≤ n: soit yi ou zi est dans la sol (pas les 2)

  2. ∀1 ≤ j ≤ m: parmi les entiers yi, zi qui sont dans la sol, au moins un a 1 à la position j.

exemple: $(x_1 \vee\overline{x_3}) \wedge(\overline{x_1} \vee x_2 \vee x_3)$

m = 2 (il y a 2 clauses)

C1 C2
y1 1 1 0
z1 1 0 1
y2 1 0 0 1
z2 1 0 0 0
y3 1 0 0 0 1
z3 1 0 0 1 0

(nombres codés en base 10)

on ajoute t1 = w1 = 10 et t2 = w2 = 1

s = 1...1|3...3 (j’ajoute les | pour montrer la séparation, mais en réalité c’est un seul nombre)

ici formule sat: x1 = x2 = x3 = tt

 → y1 + y2 + y3 = 111|12

 → 11112 + t1 + w1 + t2 = 111|33

et c’est égal à s.

si x3 = x2 = tt et x1 = ff

 → z1 + y2 + y3 = 111|03

$\RightArrow$ on peut pas transformer le 0 en 3 car on a juste 2 entiers supplémentaires par clause.

. (1) valuation des vars xi

σ satisfait ϕ à cause de (2)

clause, il y a au moins un 1 au moins un littéral de la clause est vrai.

Fin cours; on voit le partiel 2020/2021 (sur EDNA)

16/10/23 - cours 7

A propos du DS

Que sur la partie complexité

aujourd’hui on va voir la partie Calculabilité qui n’y est pas.

DS:

Cours

p68/134

f : ℕ → ℕ calculable: il existe un algo qui calcule f étant donné n ∈ ℕ, on veut f(n)

Question: est-ce qu’il existe des fonctions non-calculables ?

La réponse sera oui, et on va montrer ça en comptant.

Aujourd’hui: quels objets peut-on compter ?

p72: bijections

  1. : logique
  2. : 0, 1, -1, 2, -2, …
  3. 2: | | 0 | 1 | 2 | 3 | |:-:|:—–:|:—–:|:—–:|:—–:| | 0 | (0,0) | (0,1) | (0,2) | | | 1 | (1,0) | (1,1) | | | | 2 | (2,0) | | | | | 3 | | | | |

-> on fait les diagonales

  1. -> p/q -> q ∈ ℕ, p ∈ ℤ -> énumérer ℤ * ℕ

  2. matrices avec entrées entières

taille de matrice m * n

M = max(aij(1 ≤ i ≤ m, 1 ≤ j ≤ n

énumérer 3

-> pour chaque (m,n,M) on énumère toutes les matrices m * n avec valeur absolue  ≤ M

par exemple avec (2,1,2):

(0,0), (0,1), (0,2), (0,−1), (0,−2), (1,0), ...

Diagonalisation de Cantor

Supposons qu’on peut énumérer E : e1, e2, ...

on construit e qui suit la diagonale et inverse le bit associé

e11 = 0 → e1 = 1, …

e = 100

e n’apparait pas dans le tableau puisque pour chaque ei, eii ≠ ei.

Contradiction => E ne peut pas être énuméré.

p76: LOOP

$x \dotdiv y = \{ \frac{x-y \text{si} x \geq y}{0 \text{sinon}}$

Exercice: x - y

z := x
LOOP(y) DO x := x-1 OD

Exercice: IF (x=0) THEN P ELSE Q FI

y := 1 - x // 1 si x=0; 0 si x > 0
z := 1 - y // 1 si x > 0; 0 si x=0

LOOP(y) DO P OD
LOOP(z) DO Q OD

Exercice: que calcule ce programme ?

LOOP(y) DO x := x-1 OD
z := y
LOOP(x) DO z := z+1 OD

-> calcule le maximum de x et y

Exercice: n mod k

x0 := 0
x1 := 1
...
x(k-1) := (k-1)

LOOP(n) DO
    x := x0 // variable temporaire pour sauver x0
    x0 := x1
    x1 := x2
    ...
    x(k-2) := x(k-1)
    x(k-1) := x
OD
res := x0

Exercice: n div k

x0 = x1 = ... = x(k-1) = 0
LOOP(n) DO
    x = x(k-1) // variable temporaire encore
    x(k-1) := x(k-2)
    ...
    x1 := x0 + 1
    x0 := x
OD
res := x0

k = 2, n = 5

tour de boucle x0 x1
0 0 0
1 0 1
2 1 1
3 1 2
4 2 2
5 2 3

-> 5/2 = 2

-> p78

06/11/23 - cours 8

p78: WHILE

on peut faire une liste: (n1,n2,...,nk) en la codant avec un entier: M = n1 + n2 ⋅ N + n3 ⋅ N2 + ... + nk ⋅ Nk − 1

=> n1 = M mod N

décoder: division, modulo

p79: GOTO

WHILE-calculable => GOTO-calculable

WHILE (x!=0) DO P OD

P WHILE-calculable, on suppose qu’on a un programme GOTO P’, équivalent à P.

     1  IF (x=0) THEN GOTO 4
     2  P'
     3  GOTO 1
     4  HALT

GOTO-calculable => WHILE-calculable

On utilise une variable de plus: PC (program counter)

notre programme GOTO: P: I1; I2; ...; Ik (Ik = HALT)

WHILE (PC != HALT) DO
    IF PC=1 THEN ^Î_1 FI;
    IF PC=2 THEN ^Î_2 FI;
    ...
    IF PC=k-1 THEN ^Î_{k-1} FI;
OD

I peut être:

Si I = (x := y +- c ou x := c)

alors ^I = (`I; PC := PC + 1`)

Si I = GOTO l

alors ^I = (`PC := l`)

Si I = (IF(x!=0) THEN GOTO l)

alors ^I = (`PC := PC + 1; LOOP(x) DO PC := l OD`)

Si I = (IF(x=0) THEN GOTO l)

alors ^I = (`IF (x=0) THEN PC:=l ELSE PC := PC + 1 FI`)

p81: fonction d’Ackermann

A(1,2):

(1,2)       (1,1)       (1,0)  (0,1)
  |           |           |      |
(0, (1,1))  (0, (1,0))  (0,1)    2

A(0,1) = 2 A(1,0) = 2 $$A(1,1) = A(0, 2$ = 3$ $$A(1,2) = A(0,3) = 4$$

=> Variante

p82:

Chaque fonction Bm (pour m fixé) est LOOP-calculable

preuve:

  1. B0(x) = x + 1 => ok
  2. Supposons que Bm est LOOP-calculable. On veut montrer que Bm + 1 l’est aussi.

Si Pm est un programme LOOP qui calcule Bm, alors:

Pm + 1 =

LOOP(x) DO
    P_m;
    x_0 := res                 // x_0 = x
    x_1 = x_2 = ... = x_k = 0
OD

=> ok

p83

(oublié sur le diapo: c’est si x est suffisamment grand)

  1. preuve que B n’est pas LOOP-calculable (alors que Bm l’est)

Est-il possible qu’il existe M > 0 tq B(m,x) < BM(max(m,x))

Prenons m = M + 1 = x : BM + 1(M+1) < BM(M+1) => faux! (contradiction)

  1. exemples de foncitons LOOP-calculables qui satisfont le truc

f(x) = x + 1: m=1

g(x) = x2: m=2

Soit n(P) la … profondeur d’imbrication des boucles LOOP

P utilise que x := y+-c, x := c

-> fct calculées sont f(x) = x +  − c ou f(x) = c

f(x) < B1(x) (si x suffisamment grand)

possibilités: LOOP(x) DO x:=x+1 OD ou LOOP(x) DO x:=2 OD

p84: pour tout n(P) = k

S = LOOP(x) DO P OD

n(P) ≤ k

m tq les variables de (x fois P):

1 -  ≤ MP ≤ Bm(M)

2 -  ≤ Bm(M)→PBm ⋅ Bm(M)

Après x fois P: les variables de P sont  ≤ Bm ⋅ Bm ⋅ ... ⋅ Bm(x) (x Bm)

S = P1, P2, ..., Pr

Si pour chaque Pi:

var de Pi(≤M)→Pi var de Pi(≤Bm + 1(M))

Après S les var sont  ≤ Bm + 1 ⋅ ... ⋅ Bm + 1(M) (r Bm + 1) leqBm + 2(M)

Si M > r

remarque

algos “union find”

On peut montrer qu’un algo de “union find” est majoré par l’inverse de la fonction d’Ackermann (donc le logarithme)

On a vu que B4(2) >  = 22048 ce qui est immense

donc on peut dire que cet algo est majoré par 4

p86: Machines de Turing

p89:

----------------------------------------
... | [] | 0 | 1 | 1 | 1 | [] | [] | ...
           ^
----------------------------------------

entrée: 0111

Ce que ça fait: ça remplace son entrée par des blancs (donc ça l’efface)

Asymétrie: Un calcul peut retourner OUI, NON, ou ne pas s’arrêter.

Fin cours