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
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
-> 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
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
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
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)
| 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:
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) ∈ 𝒪(k⋅n2) taille(ϕ2) ∈ 𝒪(n⋅k2) taille(ϕ3) ∈ 𝒪(k2⋅m)
(=>)
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)
|ϕ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
x instance positive de A1 ⇔ f(x) instance positive de A2 (f: fonction de réduction)
A1≤pA2 via réduction polynomiale f
A2≤pA3 via ” ” g
A1→fA2→gA3
A1→g ⨾ 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)
p50/134
DS 23/10/23 10h15-12h15 A9 amphis 2,3
Projet: en binome On va faire des réductions
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
v1, ..., vn est chemin de G (𝒪(|G|)
vi ≠ vj, ∀i ≠ j (𝒪(n))
Si G est instance + de CH alors il existe une solution v1, ..., vn qui montre ça.
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, …
CH≤pSAT 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
Chaque sommet apparait dans la suite. $$\bigwedge_{j=1}^{n} \bigvee_{i=1}^{n} x(i, j)$$
(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)})$$
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)})$$
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$ B≤pSAT
[x -> f -> f(x) -> M -> oui/non] algorithme pour B polynomial
p56/134: cet algo est poly (n appels à P)
-> réduction de Turing
Pour montrer que A ∈ NP:
Vu ILP (Programmation Linéaire sur les Entiers)
p58/134 - Théorème de Cook-Levin
p59
NP:
NP-complet:
Questions pour savoir si A ∈ NP (2.)
quels certificats pour A
quel vérificateur pour A
-> 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
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
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)
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:
ce qu’on a écrit ici: Circuit-SAT ≤p SAT
donc c’est bon, on a montré A ≤p SAT pour tout A ∈ NP
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):
$$\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
$$\bigwedge_{u \neq v, (u,v) \in E} \bigvee_{i=1}^{k} (x(u,i) \wedge x(v,i))$$ -> 𝒪(m ⋅ k
Réduction
On prouve que 1 et 2 fontionnent
1 + 2 => Xi cliques qui couvrent E
p62/134
Somme de 2 nb binaires à m bits: 𝒪(m); Multiplication de 2 nb binaires à m bits: 𝒪(m2)
Remarque:
Nb binaires à k bits -> valeurs 0 ≤ v ≤ 2k
Nb codés en unaire de longueur k: -> valeurs 0 ≤ v ≤ k
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'
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.
Dans toute sol de Somme
∀1 ≤ i ≤ n: soit yi ou zi est dans la sol (pas les 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.
Que sur la partie complexité
aujourd’hui on va voir la partie Calculabilité qui n’y est pas.
DS:
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
-> on fait les diagonales
ℚ -> p/q -> q ∈ ℕ, p ∈ ℤ -> énumérer ℤ * ℕ
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), ...
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é.
$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
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
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
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:
x := y +- cx := cIF (x=0) THEN GOTO lGOTO lSi 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`)
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:
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
(oublié sur le diapo: c’est si x est suffisamment grand)
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)
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 - ≤ M→P ≤ 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
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
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