Chapitre 1

publicité
IFT-66975
Chapitre 1
Classes de complexité fondamentales:
P, BPP, RP, co-RP, ZPP, NP, co-NP, PP
Quatre exemples

1- Problème du tri
Entrée: une liste d’entiers a1, …, an
Sortie: Cette liste triée en ordre croissant.
Algorithme classiquement utilisé:
Quicksort: « entrée a1, …, an
1.
Comparer tous les entiers au pivot a1
pour obtenir les ensembles P et G des
ai respectivement plus petits et plus
grands que a1.
2.
Retourner la liste Quicksort(P), a1,
Quicksort(G). »


Problème classique de l’analyse de
Quicksort: sur une liste d’entrée
aléatoire, Quicksort nécessite (n log n)
comparaisons mais si la liste d’entrée
est triée, le nombre de comparaisons
est (n2).
Solution: exécuter l’algorithme sur une
permutation aléatoire de la liste
d’entrée ou choisir les pivots de façon
aléatoire. Alors l’espérance du temps
d’exécution est (n log n).

2- Problème du test de nullité d’un polynôme
sur un corps fini.
Entrée: Un polynôme p(x1, …, xn)
factorisé a plusieurs variables sur un
corps fini F (par exemple, les entiers
modulo un nombre premier q, Zq).
Question: Ce polynôme est-il égal au
polynôme nul lorsque développé?
Exemples:




Sur Z2, les polynômes x2 – x et x2 + x
sont toujours 0.
Sur Z3, x2 – x est nul mais x2 + x n’est
pas toujours nul car 12 + 1  2 (mod 3).
Sur Zp, xp-1 – x est nul. (Petit théorème
de Fermat)
Sur Z5, le polynôme x2 + xy – 2yz + z3
n’est pas nul. Si on prend x = 1, y = 0
et z = 2, on a bien 1 + 0 – 0 + 8 = 9 et
9  0 (mod 5).
Idée apparemment raisonnable pour un
algorithme:
1.
2.
Choisir au hasard une valeur i  F
pour chaque variable xi et calculer
p(1, …, n).
Si la valeur est non-nulle, arrêter et
conclure que p est non-nul. Sinon,
conclure que p est nul.



Temps d’exécution polynomial.
Pas si bête! Si le polynôme est nul
alors l’algorithme ne se trompe pas.
Si le polynôme est non-nul, il faudrait
être malchanceux pour tomber
précisément sur des i tels que p(1,
…, n)  0.
Peut-on formaliser ces intuitions?
Lemme:
[Schwartz, Zippel, deMillo, Lipton]
Soit p(x1, …, xn) un polynôme non-nul de
degré d sur Zq. Alors on a
Pr[p(1, …, n)  0]  d/q
où les i sont choisis uniformément
aléatoirement et de façon indépendante
dans S.
Algorithme modifié: «

Choisir au hasard une valeur i  Zq pour chaque
variable xi et calculer p(1, …, n).

Si la valeur est non-nulle, arrêter et conclure que p
est non-nul. Sinon, répéter 1 au plus n fois. »


Si p est nul alors la probabilité que l’algorithme
retourne la bonne réponse est 1.
Si p est non-nul, alors chaque exécution de 1 a une
probabilité d/q de nous induire en erreur. La
probabilité de se tromper n fois de suite est
seulement (d/q)n.

3- Test de graphe biparti (2-colorabilité
d’un graphe)
Entrée: Un graphe G = (V,E).
Question: Le graphe est-il biparti? Peuton colorier les nœuds du graphe avec 2
couleurs tel que deux nœuds adjacents
ont des couleurs différentes?
Idée simple: colorier un premier nœud et colorier
tous ses voisins avec l’autre couleur.
Il est clair que ce procédé nous permet de tester si le
graphe est 2-coloriable en temps O(|G|)

4. 3-coloriage de graphe
Entrée: Un graphe G = (V,E).
Question: Le graphe est-il 3-coloriable?
Peut-on colorier chaque nœud en bleu,
rouge ou vert tel que deux nœuds
adjacents aient des couleurs
différentes?
Algorithme: «
1.
Choisir un premier nœud et le colorier
en rouge.
2.
Choisir un noeud non-colorié d’un
nœud colorié et le colorier d’une
couleur possible choisie au hasard.
3.
Si tout le graphe a été colorié,
répondre oui. Si un nœud n’a pas de
couleur possible répondre non.»



Si le graphe est impossible à 3-colorier,
alors cet algorithme répond toujours
non.
Si le graphe est 3-coloriable, alors il est
possible que l’algorithme ne s’en rende
pas compte.
La probabilité que l’algorithme trouve
un 3-coloriage est peut-être très faible.
Même un grand nombre de répétitions
de l’algorithme pourrait ne pas suffire.
Machines de Turing probabilistes
Définition: Une machine de Turing probabiliste
est un sextuplet M = (Q,,,q0,0, 1,Q’)




Q un ensemble fini d’états, q0  Q l’état
initial, Q’  Q des états d’arrêt.
 un alphabet d’entrée.
 un alphabet de ruban qui contient  et au
moins un symbole blanc b.
0, 1: Q    Q    {-1,0,1} deux
fonctions de transition.
L’exécution se fait à l’aide d’une suite de
bits aléatoires indépendants X1, X2, …
tels que Pr[Xi = 0] = Pr[Xi = 1] = ½.
À la ième étape du calcul, la fonction de
transition Xi est utilisée.
 Formalisation naturelle du concept
d’algorithme probabiliste.
Deux notions de temps de calcul:




Le temps de calcul moyen de M sur w est l’espérance
du nombre d’étapes avant l’arrêt lorsque l’entrée est
w.
Le temps moyen de calcul de M est la fonction t: N
 N définie par t(n) = max{temps moyen de M sur
w: |w| = n}.
Le temps de calcul de M sur w est le maximum (peut
importe les bits aléatoires) du nombre d’étapes avant
l’arrêt lorsque l’entrée est w.
Le temps de calcul de M est la fonction t: N  N
définie par t(n) = max{temps de M sur w: |w| = n}.
Temps espéré polynomial


EP: classe des problèmes de calcul pour
lesquels il existe un algorithme
probabiliste dont le temps de calcul
moyen est polynomial.
Note: Il est possible que P  EP, mais
cela reste un problème ouvert.
Algorithmes tolérant l’erreur
Définition: Un algorithme probabiliste M
calcule la fonction f avec une probabilité
d’erreur (n) si Pr[M(w)  f(w)]  (|w|)
pour tous les mots w.
Note: Différent d’un algorithme qui calcule f
correctement sur une grande proportion d’entrées.

Définition: BPP((n)) est la classe des
fonctions f telles qu’il existe un
algorithme probabiliste avec temps de
calcul polynomial calculant f avec
probabilité d’erreur (n) < ½.
Si la probabilité d’erreur est très faible, on peut
raisonnablement considérer ces problèmes comme
ceux pour lesquels il existe un algorithme efficace.

Définition: RP((n)) est la classe des
problèmes de décision L tels qu’il
existe un algorithme probabiliste M
avec temps de calcul polynomial et tel
que
1.
2.
Si w  L, alors
Pr[M rejette w]  (|w|) < 1.
Si w  L, alors Pr[M accepte w] = 0.
L’erreur ne peut se produire que dans le cas où l’entrée
devrait être acceptée.

Définition: ZPP((n)) est la classe des
problèmes de décision L tels qu’il
existe un algorithme probabiliste M
avec temps de calcul polynomial et tel
que pour tout w, M(w)  {oui,non,?}
et
1.
2.
3.
Pr[M(w) = ?]  (|w|) < 1.
Si M(w) = oui alors w  L.
Si M(w) = non alors w  L.
L’algorithme ne se trompe jamais lorsqu’il répond mais il
peut ne pas répondre.
Théorème: pour toute fonction d’erreur
(n), on a
ZPP((n)) = RP((n))  co-RP((n)).
Théorème: EP = ZPP(½).
Dans une certaine mesure, cela permet d’ignorer la
notion de temps de calcul moyen.
Théorème: Pour tous polynômes p(n) et
q(n) on a
ZPP(1-1/p(n)) = ZPP(2-q(n))
RP(1-1/p(n)) = RP(2-q(n))

Si un algorithme ZPP ou RP n’a pas une chance trop
écrasante d’échec, alors on peut dramatiquement
améliorer sa performance. (Souvent appelé
amplification)

Définitions:
1.
2.
3.
4.
Un problème de décision appartient à ZPP
s’il appartient à ZPP(½). Donc tout L 
ZPP(1-1/p(n)) fait partie de ZPP.
Un problème de décision appartient à
ZPP* s’il appartient à ZPP((n)) pour un
(n) < 1.
Un problème de décision appartient à RP
s’il appartient à RP(½). Donc tout L 
RP(1-1/p(n)) fait partie de RP.
Un problème de décision appartient à
RP* s’il appartient à RP((n)) pour un
(n) < 1.

L’amplification des algorithmes BPP est problématique
à cause de notre définition de BPP mais on peut
démontrer:
Théorème: Pour tous polynômes p(n) et
q(n), on retrouve les mêmes problèmes
de décision dans BPP(1/2 – 1/(p(n)) et
BPP(2-q(n)).

Possible aussi d’étendre ce théorème à certains
problèmes d’optimisation.

Définitions:
1.
2.
Un problème de calcul appartient à BPP
s’il appartient à BPP(1/3).
Un problème de calcul appartient à PP s’il
appartient à BPP((n)) pour un (n) < ½.
L’état du monde
Pour les problèmes de décision, on a
PP
BPP
RP*
RP
Co-RP
Co-RP*
ZPP* = RP*  co-RP*
ZPP = EP = RP  co-RP
P
Pourquoi RP*?


À quoi bon définir RP* alors qu’un
algorithme qui a une chance écrasante
d’échec est inutile?
Parce que beaucoup de problèmes
intéressants se retrouvent dans cette
classe!
Machines de Turing non-déterministes
Définition: Une machine de Turing nondéterministe est un septuplet M =
(Q,,,q0,0, 1,Q’0,Q’1)
 Q un ensemble fini d’états, q0  Q l’état
initial, Q’0, Q’1  Q des états d’arrêt.
  un alphabet d’entrée.
  un alphabet de ruban qui contient  et au
moins un symbole blanc b.
 0, 1: Q    Q    {-1,0,1} deux
fonctions de transition.
Les états d’arrêts sont soit acceptants (Q’1) soit
rejetants (Q’0).
Les machines non-déterministes servent à
accepter des langages.
La machine M accepte l’entrée w s’il existe une
séquence de bits X1, X2, … telle que
l’exécution définie par ces bits mène à un état
acceptant. Sinon, elle rejette w.
Le temps d’exécution de M sur w est le
maximum sur tous les choix de Xi du nombre
d’étapes avant d’atteindre un état d’arrêt.


Problème: les machines nondéterministes n’existent que
conceptuellement! Pour les simuler il
faut essayer tous les choix possibles de
Xi ou alors « savoir » d’avance quels bits
choisir.
Essayer tous les choix possibles requiert
un temps exponentiellement plus grand.
Définition: Un problème de décision (ou
un langage L) appartient à NP s’il existe
une m.t. non-déterministe avec un
temps de calcul polynomial qui accepte
L.
Théorème: RP* = NP.
L’état du monde (mis à jour)
Pour les problèmes de décision, on a
PP
BPP
NP
RP
Co-RP
Co-NP
NP  co-NP
ZPP = EP = RP  co-RP
P
Système de preuves
Algorithme NP en deux étapes. On veut
savoir si w  L.

1.
2.
Choix d’une « preuve » que w  L.
Vérification de cette preuve.
Quatre conditions:

1.
2.
3.
4.
la preuve est une chaîne de bits de longueur
p(|w|) pour un certain polynôme p.
La vérification se fait en temps q(|w|) pour un
certain polynôme q.
Si w  L alors il existe une preuve valide qui
montre que w  L.
Si w  L alors il n’existe aucune preuve valide
qui montre que w  L.
Exemple
3-coloriage d’un graphe.

1.
2.
1.
2.
3.
4.
Colorier chaque nœud avec une des 3 couleurs.
Vérifier que chaque nœud a bien une couleur
différente de celle de ses voisins.
La preuve est bien de longueur polynomiale.
La vérification se fait clairement en temps
polynomial.
Si le graphe est 3-coloriable alors par définition il
existe une preuve valide.
S’il n’est pas 3-coloriable alors tous les essais de
coloriage doivent contenir un conflit détecté à la
vérification.
Problèmes de NP (exemples)
Problème du commis-voyageur (TSP):
Entrée: un ensemble de ville v1, …, vn, un
coût de déplacement dij entre vi et vj et
un objectif de coût C.
Question: Existe-t-il un circuit qui passe
par toutes les villes et dont le coût total
est au plus C?

Ce problème est dans NP.
1.
2.
Choix non-déterministe d’un circuit.
Calcul du coût de ce circuit et
vérification que ce coût est  C.
1.
2.
la « preuve » est de longueur nlog n.
La vérification se fait en temps O(n).
Primalité
Entrée: Un entier q de n bits.
Question: q est-il un nombre premier?

Entiers composés
Entrée: Un entier q de n bits.
Question: q est il un entier composé?

Problèmes respectivement dans co-NP et
NP.
Algorithme NP pour entier composé:
1.
2.
Preuve: deux entiers 1 < s,t < q.
Preuve acceptée si st = q.
Note: Depuis 2002, on sait en fait que Primalité et
Entier composé sont dans P.
Problème du sac à dos. (Fait partie de NP)
Entrée: Un ensemble d’objets avec un poids p_i et une
valeur v_i + une capacité de sac à dos C + un
objectif de valeur V.
Question: Peut-on choisir un ensemble d’objets dont le
poids total est au plus C et la valeur totale au
moins V.

Problème de démineur (Fait partie de co-NP)
Entrée: une grille de démineur partiellement découverte
et une case à découvrir.
Question: Est-on certain que cette case peut-être
découverte?

Problème du mots-croisés. (Fait partie de NP)
Entrée: Une grille de mots-croisés et un dictionnaire.
Question: La grille peut-elle être complétée grâce à des
mots du dictionnaire?

Problème d’acceptation d’une machine non-déterministe
(Fait partie de NP)
Entrée: une machine de Turing non-déterministe M, un
polynôme p et une entrée w.
Question: La machine M accepte-t-elle l’entrée w en
temps p(|w|)?
Téléchargement