Optimisation discrète, séance 5 : Cours THÉORIE de la COMPLEXITÉ

Transcription

Optimisation discrète, séance 5 : Cours THÉORIE de la COMPLEXITÉ
Graphes et Optimisation discrète
1
Optimisation discrète, séance 5 : Cours
THÉORIE de la COMPLEXITÉ
Résumé
La solution d’un problème combinatoire, quand elle existe, peut être déterminée par l’énumération de toutes les possibilités : elle appartient à un ensemble fini et on peut à l’aide d’un
algorithme fini tester si un élément de cet ensemble est une solution. Mais l’énumération de
toutes les solutions exige souvent un temps de calcul exponentiel par rapport à la complexité des
données. Il existe de très nombreux problèmes, dits NP-complets, pour lesquels on ne connaît pas
d’algorithme plus efficace que l’énumération de tous les sous ensembles d’un ensemble. En un
certain sens ces problèmes sont équivalents entre eux : un algorithme efficace (précisément polynômial) pour l’un le serait pour tous. Curieusement on ne sait pas démontrer que ces problèmes
n’admettent pas d’algorithme polynômiaux, c’est la conjecture P 6= N P .
1
1.1
Problème combinatoire et notion d’algorithme
Exemples de problèmes résolus par un algorithme
– Opérations élémentaires sur les entiers par les méthodes apprises à l’école élémentaire.
– Calcul de la valeur d’un polynôme en un point par le “ schéma de Horner”
n
X
ak xk = ((...((an x + an−1 )x + an−2 )x...)x + a1 )x + a0
k=0
– Multiplication de deux matrices (n, n) : L’algorithme usuel en n3 opérations n’est pas optimal,
voir ci-dessous en annexe l’algorithme de Strassen.
– Résolution d’un système linéaire : algorithme de Gauss.
3
Pour une matrice pleine il faut n3 opérations élémentaires, l’algorithme n’est pas optimal.
– Calcul du PGCD de deux entiers : algorithme d’Euclide (PGCD).
– Test de primalité relative de deux entiers : on peut par l’algorithme d’Euclide tester si le PGCD
est 1.
– Test de primalité (PRIM).
Il s’agit de tester si un entier n est premier. Noter que si l’entier s’écrit en décimal avec 50
chiffres, il est de l’ordre de 1050 . Ce qui interdit en pratique de le diviser par tous les entiers
inférieurs. Certains entiers premiers célèbres sont des “nombres de Mersenne” (2p + 1), ils sont
donc très très grands par rapport à leur représentation (l’entier p écrit en décimal). Ce problème,
historiquement très important, a de nombreuses applications (cryptographie)
ECP 2006-2007
Mathématiques 2
Graphes et Optimisation discrète
2
– Construction d’un arbre minimal recouvrant un graphe.
Vu à la séance 1.
– Connexité d’un graphe.
La construction d’un arbre de recouvrement peut servir d’algorithme, voir la séance 1.
Notons que certains des algorithmes ci-dessus peuvent être appliqués théoriquement à des nombres
réels mais que, interprétés sur un ordinateur, ils utiliseront des opérations en “virgule flottante”, portant sur des réels tronqués à un nombre fini de décimale, opérations qui feront des “erreurs de troncature”, ils ne font pas alors de calcul exact. Nous ne considérerons dans ce qui suit que des algorithmes
portant sur des objets ayant une représentation finie. Nous en donnerons ci-dessous une définition
plus précise.
1.2
Problème combinatoire
Définition 1 (informelle) Un problème combinatoire est un problème portant sur un ensemble fini
d’objet fini et pour lequel on peut tester par un algorithme si un objet est solution.
Un tel problème peut donc être résolu par énumération des objets et test pour déterminer si un objet
est une solution.
1.2.1
Exemples
– k-coloration d’un graphe.
Est-il possible de colorier les noeuds d’un graphe de façon à ce que deux noeuds adjacents
n’aient jamais la même couleur ? Pour k = 2 on a un algorithme très rapide, vu à la séance 2.
– Circuit eulérien (EUL) : existe-t-il sur un graphe un circuit passant par toutes les arêtes une fois
et une seule ?
– Circuit hamiltonien (HAM) : existe-t-il sur un graphe un cycle passant par tous les sommets
d’un graphe une fois et une seule ?
– Le problème du voyageur de commerce (TSP) : trouver un cycle hamiltonien de longueur
minimal sur un graphe valué.
– Satisfiabilité d’un ensemble de clauses1 (SAT).
Un ensemble de n clauses2 (P1 ∨ ¬P2 ∨ ... ∨ Pk ) à p symboles est-il satisfiable, i.e. peuton donner des valeurs VRAI ou FAUX aux symboles Pi pour que toutes les clauses soient
vraies ? (Des propositions quelconques peuvent être écrites comme une conjonction de clauses,
leur satisfiabilité est ramenée à celle de chaque clause). On peut tester toutes les valeurs des
symboles de proposition.
– Satisfiabilité d’un ensemble de clauses de longueur au plus k (k-SAT).
– La programmation linéaire en nombres entiers (ILP) : chercher le maximum d’une fonction
linéaire sur tous les vecteurs de Rp à composantes entières qui vérifient un ensemble d’inéquations linéaires (si l’ensemble défini par les contraintes est borné il n’y a donc qu’un nombre fini
de solutions possibles).
1
2
voir annexe ci-dessous
Voir l’annexe 1
ECP 2006-2007
Mathématiques 2
Graphes et Optimisation discrète
1.3
3
Rappel sur la notion d’algorithme
La notion d’algorithme que nous utiliserons est stritement déterministe, ce qui exclut les opérations en “virgule flottante”. On suppose donné un langage de programmation L et une classe d’objets
C définis par des chaînes de caractères (nous dirons parfois que ces chaînes forment un mot). Un
algorithme est une fonction définie par un programme (notion à préciser) écrit dans le langage L qui,
si on lui donne en entrée un objet (ou un mot) n ∈ C, fournit en sortie un objet f (n). Comme à une
chaîne de caractères on peut associer un entier et réciproquement, nous pouvons considérer tout aussi
bien qu’un programme opère sur les entiers.
Dans tous les cas nous notons |n| le nombre de “bits” nécessaires pour représenter l’objet n.
− Il y a plusieurs façons de coder un entier sous forme de chaînes de caractères, nous y reviendrons.
− Un n-uple d’entiers peut être représenté par un seul entier, moyennant un codage adéquat, nous
nous limiterons donc aux fonctions à un argument.
− Tous les langages de programmation usuels (Assembleur, C, Pascal, CAML, Mathematica...) sont
équivalents en ce sens qu’une fonction calculable par l’un est calculable par tous les autres. Pour être
équivalent à ceux-ci un langage doit comprendre, outre les opérations élémentaires, les test (IF...) et
les boucles “while”, ou bien les tests et les “GO TO”, ou, c’est équivalent, la composition des fonctions et la récursivité (langages fonctionnels), ou encore la possibilité de reconnaître une chaîne de
caractères et la remplacer par une autre (Mathematica).
− L’exécution d’un algorithme ne se fait pas toujours en un temps fini : certains algorithmes “bouclent” indéfiniment. Nous supposerons que pour toutes les valeurs de n l’algorithme s’arrête en un
nombre fini d’étapes.
(Rappel : le problème de l’arrêt d’un algorithme est indécidable, mais c’est un autre problème...)
− Nous distinguerons dans la liste d’exemples ci-dessus les “problèmes” (par exemple la primalité
(PRIM)) des algorithmes particuliers pour les résoudre (par exemple tester toutes les divisions).
1.4
Algorithme de reconnaissance
Nous nous limiterons dans cette étude aux fonctions, calculables par un algorithme, à valeurs
{0, 1}. On peut considérer ces fonctions n → f (n) comme des tests d’appartenance des objets n ∈ C
à un certain sous-ensemble (correspondant à la valeur 1). On dit aussi que ces fonctions acceptent
un mot ou reconnaissent le sous langage de L qui est formé par les mots acceptés. Cela définit une
classe particulière d’algorithme, auxquels on peut ramener les autres, car à une fonction quelconque
n → f (n) définie sur les entiers, on peut associer la fonction de reconnaissance dont les données
sont (n, m) qui renvoie 1 si et seulement si m = f (n). On peut donc ramener le calcul de f (n) aux
problèmes de reconnaissance successifs f (n) = p pour des valeurs croissantes de p.
Ainsi au problème du voyageur de commerce nous associerons le problème de reconnaissance (TSP)
qui consiste à chercher si il existe un circuit hamiltonien de longueur égale ou inférieure à un entier
k.
1.5
Différentes notions de complexité
La complexité d’un algorithme présente plusieurs aspects :
- Complexité en nombre d’opérations algébriques : notion utile pour des algorithmes qui définissent
des fonction algébriques, elle est surtout utilisée pour des calculs en virgule flottante.
ECP 2006-2007
Mathématiques 2
Graphes et Optimisation discrète
4
- Complexité en temps : “temps de calcul”. C’est celle que nous allons développer.
- Complexité en espace : “encombrement mémoire”. Elle est toujours inférieure la complexité en
temps car lire ou écrire un bit est une opération.
- Complexité algorithmique : “longueur du programme”. Elle sert à définir la complexité d’un objet
comme la longueur du plus court programme qui peut le calculer : une définition précise de cette
complexité, la complexité au sens de Chaïtin-Kolmogorov a permis de donner une définition
précise de la notion de suite aléatoire.
2
La complexité en temps
2.1
Introduction
On veut mesurer le “temps de calcul” . Il dépend bien sûr de l’ordinateur sur lequel le programme
est exécuté. En première approximation nous pouvons considérer que le temps de calcul est proportionnel aux “nombres d’opérations élémentaires” effectuées par l’algorithme.
Il dépend de la complexité des données, représentée par |n|, la lecture des données est d’ailleurs une
borne inférieure de la complexité.
On peut préciser cette notion en remarquant que les ordinateurs opérant en pratique sur des “bits”
on peut considérer qu’une opération élémentaire est une opération sur les bits. On mesurera donc la
complexité en temps par le nombre d’opérations sur les bits, ce qui exige de décomposer les opérations des langages usuels en opérations proches de celles effectuées par des langages de très bas
niveau. Bien sûr cela entraîne toujours une dépendance vis à vis de l’ordinateur, par exemple du fait
de l’utilisation du parallélisme. Pour fixer les idées nous choisirons pour mesurer la complexité une
écriture de l’algorithme sous la forme d’une Machine de Turing”. Nous supposons donc qu’un algorithme est écrit dans le langage des machines de Turing et nous en déduirons une définition précise
de la complexité
2.2
Le codage des données
Nous avons supposé plus haut qu’un algorithme opérait sur des objets appartenant à une certaine
classe C codés par des chaînes de caractères, ou, c’est équivalent des entiers. Donnons quelques
exemples de codage des données d’un problème sous cette forme.
– Codage d’un entier n
Il peut être un-aire (une suite de n bâtons), binaire, décimal... Utiliser un codage un-aire signifie
en pratique que l’on rapporte la complexité d’un algorithme sur les entiers à la valeur de l’entier.
Le codage en base k ≥ 2 implique entre l’entier n et la longueur |n| de sa représentation
une relation n ∼ k |n| . Donc le simple balayage des entiers inférieurs à n définit un nombre
exponentiel d’opérations par rapport à la longueur |n| des données.
– Codage d’un graphe (G, A)
On peut représenter un graphe à n noeuds par sa matrice booléenne, soit n2 bits au plus.
– Codage d’un ensemble de clauses 3
On peut représenter un ensemble de n clauses (P1 ∨ ¬P2 ∨ ... ∨ Pk ) à p arguments par une
3
Voir annexe 1 ci-dessous
ECP 2006-2007
Mathématiques 2
Graphes et Optimisation discrète
5
matrice(n, p) à coefficients dans (1, −1, 0) pour représenter la présence d’un symbole de proposition, l’absence ou la présence de sa négation
Nous verrons d’autres exemples en exercice.
2.3
Les machines de Turing
Le lecteur trouvera sur le WEB de nombreux sites décrivant les machines de Turing, cf. wikipedia.
2.4
Définition précise de la complexité
Définition 2 La complexité d’un algorithme est le nombre d’opérations effectuées par la machine de
Turing associée à cet algorithme qui est supposée s’arrêter toujours.
Remarquer que sur une machine de Turing le simple accès un objet rangé en mémoire (quelque part
sur le ruban) est une opération polynômiale. C’est une grande différence avec les ordinateurs actuels
pour lesquels une copie d’un élément |n| de la mémoire dans un registre correspond au pire à un
nombre d’opérations de l’ordre de |n|.
3
Les problèmes combinatoires P et NP
3.1
Exemples de complexité
– Les opérations élémentaires sur les entiers (additions, multiplications...). Si les entiers sont
représentés en binaire ce sont des opérations dont la complexité est linéaire par rapport à |n|.
– Entiers premiers entre eux.
L’algorithme d’Euclide appliqué à deux nombres n et m < n réduit à chaque étape par une
division euclidienne le plus grand des deux entiers d’un facteur au moins 2. Il se termine donc
en au plus log2 n ∼ |n| opérations algébriques. Ce qui fait de l’ordre de |n|3 opérations élémentaires.
– Test de primalité (PRIM).
D’après un résultat récent4 la complexité est inférieure à C|n|12 .
– SAT
L’algorithme qui teste toutes les valeurs possibles des symboles de propositions (soit 2n ) est
exponentiel par rapport aux nombres de symboles, et donc par rapport à la longueur des données.
– CLIQUE
Etant donné un graphe n noeuds existe-t-il une clique (i.e. un sous graphe complet) à k noeuds ?
L’énumération de tous les sous-graphes à k noeuds exige Cnk tests sur ces sous-graphes. Il existe
donc une constante c telle que le nombre d’opérations pour cet algorithme est inférieur à cnk .
4
PRIMES is in P, Manindra Agrawal, Neeraj Kayal and Nitin Saxena
ECP 2006-2007
Mathématiques 2
Graphes et Optimisation discrète
3.2
6
Définitions
Définition 3 La complexité d’un algorithme est polynômial (On dit de classe P) si il existe une
constante C et un entier k tels que le nombre d’opérations effectuées par la machine de Turing
associée à cet algorithme pour une données n est inférieur à C|n|k .
La primalité relative de deux entiers, la connexité d’un graphe sont des algorithmes polynômiaux.
On sait depuis peu (2002, voir note 4) que PRIM est dans P, c’est un résultat non trivial. Voir en
exercices que 2 − SAT est polynômial. Pour CLIQUE si l’on suppose que k est fixe et ne fait pas
partie des données il est polynômial, mais on considère que k fait partie des données, l’algorithme
d’énumération n’est pas polynômial.
Définition 4 La complexité d’un algorithme est exponentielle (On dit de classe EXP) si, il existe
une constante C et un entier k tels que le nombre d’opérations effectuées par la machine de Turing
associée à cet algorithme pour une données n est inférieur à C2|n| .
On a donc P ⊂ EXP.
Ainsi SAT résolu par énumération des valeurs des symboles de proposition est exponentiel. Il en est
de même de CLIQUE, k-COL, HAM, TSP par les algorithmes d’énumération des solutions possibles.
On ignore s’ils sont dans P . La primalité par le test des divisions par tous les entiers inférieurs est
exponentielle.
Définition 5 Nous dirons qu’un problème de reconnaissance est de classe P, EXP si il existe un
algorithme de cette classe pour le résoudre.
Pour la plupart des problèmes que nous avons définis il existe un algorithme simple pour tester si une
donnée est une solution, mais il n’est pas simple de trouver une solution. Nous allons donner une
définition abstraite de ces problèmes :
Définition 6 Le problème de reconnaissance défini par une fonction f (n) est de classe NP (“nondeterministic polynômial”) si il existe une constante C, un entier k, et une fonction g(m) calculable
par un algorithme polynômial telle que à toute donnée n on puisse associer une donnée (le “témoin”)
m = φ(n) en entrée de g telle que |m| ≤ C|n|k et que g(m) = 1 si et seulement si f (n) = 1
Il y a beaucoup de variantes dans l’écriture de cette définition, mais la classe NP ne change pas !
Notons que la définition n’exige pas que l’on sache “construire” le témoin φ(n), mais seulement qu’il
existe : pour un problème NP on ne sait pas facilement trouver une solution, mais vérifier facilement
qu’une donnée est une solution. La totalité des problèmes de reconnaissance définis plus haut sont de
classe NP. Un des rares algorithmes pour lequel ce résultat n’est pas trivial ( test de primalité) s’est
révélé être de classe P !
3.3
Exemples de problèmes NP
– Pour k-COL, la fonction est f (n) est la fonction qui vaut 1 si le graphe, codé par n, est coloriable en k couleurs et 0 sinon. Un coloriage d’un graphe est la donnée du couple m = (n, p)
ou n est le codage du graphe et p le codage d’un coloriage des noeuds. On prend m = φ(n) =
ECP 2006-2007
Mathématiques 2
Graphes et Optimisation discrète
7
(n, p). La fonction g(m) est une fonction qui teste si deux noeuds adjacents ont la même couleur. Tester la propriété revient à balayer toutes les arêtes, c’est à dire la matrice du graphe,
c’est donc un algorithme linéaire par rapport à |m| = |n| + |p| car |n| est à peu près égal au
nombre d’arêtes du graphe.
– Pour CLIQUE, n est le code du graphe (et contient l’entier k), f (n) la fonction qui vaut 1 si
le graphe admet une clique d’ordre k, 0 sinon. Une clique est la donnée du couple m = (n, p)
ou N est le codage du graphe et p un sous-ensemble de noeuds. On prend donc m = φ(n) =
(n, p). La fonction g(m) avec m = (n, p) est une fonction qui teste si un sous graphe de
n associé aux noeuds p est complet. Tester la propriété revient à balayer toutes les arêtes du
sous-graphe associé à p, c’est donc un algorithme linéaire.
– Pour SAT, étant donné un ensemble de clauses codé par n, f (n) est la fonction qui vaut 1 si
cet ensemble est satisfiable 0 sinon. Une valuation de cet ensemble est un couple m = (n, p)
où n est le code de l’ensemble des clauses et p le code d’un ensemble de valeurs (VRAI ou
FAUX) attribuées aux symboles Pi . La complexité des données |p| et |N | sont (à peu près) le
nombre de symboles Pi et le nombre de symboles dans les clauses (|m| = |n| + |p|). On prend
donc m = φ(n) = (n, p). La fonction g(m) est la fonction qui calcule la valeur des clauses
avec pour données les clauses (codées par n) et un ensemble de valeurs des symboles (codées
par p). Le calcul, par les règles usuelles du calcul booléen, comporte un nombre d’opérations
de l’ordre de somme des longueurs des clauses, c’est donc un algorithme linéaire vis à vis des
données de g.
3.4
Robustesse de ces définitions
Toutes les opérations algébriques (addition, multiplication...) sont polynômiales. De même les
tests, les recopies d’éléments en mémoire, ce qui fait que la classe P ne dépend pas du type d’ordinateur ou du langage utilisé. Le parallélisme ne fait que modifier la constante C, l’utilisation de
machines de Turing très peu sophistiquées change la valeur de k seulement. Ces classes P, EXP, NP
sont indépendantes des types d’ordinateur utilisé, dès lors que l’algorithme est décomposé en opérations sur des bits.
3.5
Problèmes NP : variantes de la définition
Soit un problème NP. Par définition il existe une fonction g(m) opérant sur des objets m à définir,
telle que f (n) = 1 si et seulement si il existe m tel que g(m) = 1. Choisissons pour m un couple
(n, p) où p est le code d’une suite d’entier (p1 , ..., pk ). Si bien que le problème associé à la fonction g
a pour données k entiers supplémentaires. Ces entiers peuvent, par exemple, définir des “GO TO pi ”,
on peut donc considérer que ces entiers servent à définir l’ordre de déroulement des instructions du
programme. Le programme de la fonction g(m) est de complexité polynômial et il a pour donnée les
objets initiaux mais son déroulement n’est déterminé que par la donnée supplémentaire des entiers
p1 , ..., pk . On peut donc le considérer, par abus de langage, comme un programme “non déterministe”
qui avec des données supplémentaires devient déterministe et polynômial. Autrement dit on peut
considérer qu’un problème est N P si il existe un algorithme non déterministe 5 polynômial qui lui
5
i.e. il attend qu’on lui donne certains entiers pour s’exécuter
ECP 2006-2007
Mathématiques 2
Graphes et Optimisation discrète
8
est équivalent. Pour rendre la définition encore plus imagée on considère souvent qu’un “oracle”
donne les valeurs des entiers p1 , ..., pk , que l’on peut considérer comme la réponse à une question.
3.6
Représentation d’un problème par un autre
3.6.1
Définitions
Définition 7 Un problème de reconnaissance P1 (données n, fonction f (n)) est polynômialement
représentable dans le problème P2 (données m, fonction g(m)) si, il existe une constante C, un entier
k, et une fonction φ(m) telle que à toutes données n de P1 on puisse associer une donnée m = φ(n)
en entrée de P2 telle que
|m| ≤ C|n|k et que g(m) = 1 si et seulement si f (n) = 1
− On note
P
P1 ≤ P2
− On n’exige pas de “construire” φ(n).
P
− La relation P1 ≤ P2 est transitive.
− Si on a un algorithme polynômial pour P2 on a un algorithme polynômial pour P1 .
3.6.2
Exemples
− Représentation de SAT dans CLIQU E
voir l’annexe 3 ci-dessous.
− Représentation de k − COL dans SAT
voir les exercices.
− Représentation de SAT dans 3 − SAT
Voir les exercices.
− Représentation de 3 − SAT dans 3 − SAT sym
3-SATsym est le problème consistant à décider la proposition Π :
il existe un ensemble de valeurs de vérité Pj = V RAI ou Pj = F AU X tel que dans toutes les
clauses il y ait (au moins) un élément vrai et (au moins) un élément faux.
Voir l’annexe 4 pour la démonstration.
4
Problèmes NP-Complet
4.1
Le théorème de Cook
Théorème 1 Tous les problèmes de classe NP sont polynômialement représentables dans SAT.
Notons qu’il est souvent facile de démontrer qu’un problème est polynômialement représentable dans
SAT sans passer par le théorème de Cook (voir en exercice le cas de 3-SAT). Nous ne démontrons
pas ce théorème. Sa démonstration repose sur une description du déroulement du programme d’une
machine de Turing à l’aide de propositions6 et de clauses de façon à ce que la donnée de l’ensemble
des états du ruban soit équivalente à la donnée d’un ensemble de valeurs satisfaisant ces clauses.
6
Ex. : “La valeur de la case i est 0”,“Écrire 1”, “Déplacer la tête de lecture à gauche”...
ECP 2006-2007
Mathématiques 2
Graphes et Optimisation discrète
4.2
9
Les problèmes NP-Complet
Définition 8 Un problème de reconnaissance est NP-complet si tout problème de classe NP est polynômialement représentable dans ce problème.
Définition 9 Un problème d’optimisation (ou de calcul d’une fonction) est NP-difficile si le problème
de reconnaissance qui lui est associé est NP-complet.
Comme tout problème NP est représentable dans SAT, il suffit de montrer que SAT est représentable
dans un problème NP pour montrer que ce problème est NP-complet. En pratique on procède souvent
par complexité croissante
P
P
P
SAT ≤ 3 − SAT ≤ 3 − SAT sym ≤ 3 − COL
P
P
P
SAT ≤ CLIQU E ≤ HAM ≤ T SP
4.3
Exemples de problèmes NP-complets
– SAT d’après le théorème de Cook.
– CLIQUE parce que SAT est représentable dans CLIQUE (sera fait en cours).
– 3-SAT (voir exercices).
– 3-SATsym : voir l’annexe 4.
– 3-COL (voir exercices).
– HAM (admis)
– TSP (admis)
– La programmmation linéaire en nombre entiers.
Un très grand nombre de problèmes, parfois très particuliers ou très sophistiqués et d’une grande
utilité pratique (ordonnancement, logistique, transport) sont NP-complets. Si l’on connaissait un algorithme polynômial pour l’un d’entre eux, on en aurait un pour tous. Pour certains de ces problèmes
(CLIQUE) il semble naturel qu’il n’y ait pas de méthode plus efficace que l’énumération, d’où le
“l’intuition” que ces problèmes devraient être dans EXP mais pas dans P.
En pratique la notion de problème N P −Complet correspond à des problèmes qui sont effectivement
difficiles ; on ne connaît pas d’algorithmes efficaces pour traiter ces problèmes dans des situations tout
à fait usuelles. Un tel algorithme pour, par exemple SAT, étendrait considérablement les applications
de “l’intelligence artificielle”.
4.4
La conjecture P 6= N P
La situation étrange aujourd’hui est que on ne sait pas démontrer que les problèmes NP complet
ne sont pas polynômiaux, c’est la conjecture
P 6= N P
ECP 2006-2007
Mathématiques 2
Graphes et Optimisation discrète
5
5.1
10
Annexes
Annexe 1 : une présentation simplifiée du calcul propositionnel, point de vue “sémantique”
Nous résumons quelques définitions et propriétés classiques du calcul des propositions.
− Une variable (notée P ,Pi , Q...) du calcul propositionnel, appelée aussi symbole de proposition
peut prendre deux valeurs (dites de vérité) : VRAI (ou 1) et FAUX (ou 0).
− Une formule du calcul propositionel est construite à partir des symboles de proposition à l’aide des
opérateurs (“connecteurs”) négation (¬), disjonction (∨), conjonction (∧), exemple : ¬((P1 ∨ ¬P2 ) ∧
(P1 ∨ P3 )) .
− La valeur d’une formule pour des valeurs données des variables se calcule selon les règles bien
connues : en notant x, y les valeurs ( 0 ou 1) des variables, on a v(¬x) = 1 − x, v(x ∧ y) = xy et
v(x ∨ y) = x + y − xy).
− L’implication (⇒) et l’équivalence (⇔) sont des symboles dérivés : P ⇒ Q signifie ¬P ∨ Q,
P ⇔ Q signifie P ⇒ Q et Q ⇒ P .
− Une clause est une formule disjonctive :(P1 ∨ ¬P2 ∨ ... ∨ Pk ).
− Règle de De Morgan :
¬(P ∨ Q) ⇔ ¬P ∧ ¬Q
¬(P ∧ Q) ⇔ ¬P ∨ ¬Q
− Distributivité :
(P ∨ Q) ∧ R ⇔ (P ∧ R) ∨ (Q ∧ R)
(P ∧ Q) ∨ R ⇔ (P ∨ R) ∧ (Q ∨ R)
− Forme normale :
En utilisant les règles ci-dessus on montre que toute formule peut être mise sous une forme normale
conjonctive (P1 ∨ ¬P2 ∨ ... ∨ Pk ) ∧ ... ∧ (¬Pi ∨ Pj ∨ ... ∨ Pn ) ou disjonctive (P1 ∧ ¬P2 ∧ ... ∧ Pk ) ∨
... ∨ (∧Pi ∧ Pj ∧ ... ∧ Pn ).
− Un ensemble de formules est satisfiable si on peut donner des valeurs de vérité aux variables qui
rendent vraies toutes les formules de l’ensemble. Noter que si une formule s’écrit C1 ∧ C2 elle est
satisfiable si et seulement si C1 et C2 le sont ; en mettant les formules sous forme normale conjonctive
on peut donc toujours considérer que l’ensemble des formules à satisfaire est composé de clauses.
− Une formule est une tautologie si elle est vraie pour toutes les valeurs possibles de ses variables,
c’est à dire aussi si sa négation n’est pas satisfiable.
− Une démonstration de la formule C à partir des formules (hypothèses ou axiomes) Ci , i = 1, ..., p
équivaut à montrer que la formule (C1 ∧ ... ∧ Cp ) ⇒ C est une tautologie. Ce qui revient aussi à
démontrer que l’ensemble des formules (C1 , ..., Cp , ¬C) n’est pas satisfiable, d’où l’importance du
problème de la satisfiabilité.
5.2
Annexe 2 : L’algorithme de multiplication matricielle de Strassen
Un exemple classique de réduction de la complexité par partition, présenté sous forme d’exercice.
• Combien de multiplications et additions sont nécessaires pour effectuer la multiplication de deux
matrices par la formule classique ?
ECP 2006-2007
Mathématiques 2
Graphes et Optimisation discrète
11
Corr. n3 .
• Vérifier que la multiplication C = AB de deux matrices de dimension 2n partitionnées en 4 blocs
(n, n) peut s’écrire
m1 = (A12 − A22 )(B21 + B22 )
m2 = (A11 + A22 )(B11 + B22 )
m3 = (A11 − A21 )(B11 + B12 )
m4 = (A11 + A12 )B22
m5 = A11 (B12 − B22 )
m6 = A22 (B21 − B11 )
m7 = (A21 + A22 )B11
puis :
C11 = m1 + m2 − m4 + m6
C12 = m4 + m5
C21 = m6 + m7
C22 = m2 − m3 + m5 − m7
Noter qu’il y a 7 multiplications et 18 additions de blocs.
• Supposons que les matrices soient de dimension n = 2p (sinon on complète les matrices par des
zéros jusqu’à obtenir n = 2p ). On effectue récursivement la multiplication des blocs, montrer que
le nombre d’opérations (additions et multiplications) T (n) nécessaires pour calculer le produit est
solution de la récurrence
n
n
T (n) = 7T ( ) + 18( )2 , T (1) = 1
2
2
Corr. Comptez...
• Soit > 0. Montrer qu’il existe une constante C > 0 telle que
nlog2 7 ≤ T (n) ≤ Cnlog2 (7+)
Le calcul exact montre que T (n) < n3 pour n ≥ 215 .
Corr. On a
n
T (n) ≥ 7T ( )
2
log
7
2
et donc T (n) ≥ n
. Soit > 0, comme log2 7 > 2 il existe p0 tel que si n > 2p0 on a
n
n
n
18( )2 ≤ ( )log2 7 ≤ T ( )
2
2
2
n
et donc T (n) ≤ (7 + )T ( 2 ) d’où
T (2p ) ≤ (7 + )p−p0 T (2p0 )
et donc T (n) ≤ C(7 + )p avec C = (7 + )−p0 T (2p0 ), d’où
T (n) ≤ C(7 + )log2 n = Cnlog2 (7+)
ECP 2006-2007
Mathématiques 2
Graphes et Optimisation discrète
5.3
12
Annexe 3 : CLIQUE est NP-complet
Nous avons vu que CLIQUE est NP (ce qui implique que CLIQUE est représentable dans SAT),
il nous reste donc à montrer que SAT est représentable dans CLIQUE ; SAT étant NP-complet d’après
le théorème de Cook, nous aurons donc montré que CLIQUE est NP-complet.
Soit un ensemble de n clauses avec p symboles de proposition. Nous pouvons associer un graphe G à
SAT de la manière suivante :
− Pour chaque clause (P1 ∨ ¬P2 ∨ ... ∨ Pk ) on crée k noeuds auxquels nous donnerons le nom de la
proposition associée (i.e. Pi ou ¬Pi ).
− On crée une arête entre deux noeuds si :
i) les deux noeuds ne sont pas associés à des propositions qui sont la négation l’une de l’autre (i.e. Pi
et ¬Pi )
et
ii) les deux noeuds n’appartiennent pas à la même clause.
Montrons qu’il existe une clique à n noeuds dans G si et seulement si les clauses sont simultanément
satisfiables :
Si il existe une clique (i.e. un sous-graphe complet) à n noeuds dans ce graphe, donnons la valeur
VRAI à toutes les propositions associées (i.e. si c’est Pi on choisit Pi VRAI si c’est ¬Pi on choisit
Pi FAUX). Ce choix n’est pas contradictoire car deux noeuds de cette clique ne sont pas associés à
une proposition Pi et sa négation ¬Pi d’après i) ; d’autre part deux noeuds ne peuvent appartenir à
la même clause d’après ii) et il y a n noeuds dans la clique donc un noeud par clause et donc une
proposition vraie par clause qui sont donc toutes satisfiables.
Réciproquement, si les n clauses sont satisfiables, on peut choisir une proposition vraie par
clause ; les n propositions ainsi définies forment une clique de G : en effet deux propositions quelconques ne peuvent être négation l’une de l’autre (car simultanément vraies) et n’appartiennent pas à
la même clause, elles sont donc reliées par une arête dans le graphe G. Les propositions qui ne sont
pas dans la clique peuvent prendre des valeurs arbitraires.
F IG . 1 – Graphe complémentaire de G
Prenons comme exemple les 4 clauses suivantes :
¬P1 ∨ P2 ∨ P3 ∨ P4
ECP 2006-2007
Mathématiques 2
Graphes et Optimisation discrète
13
P1 ∨ ¬P2 ∨ P3
P1 ∨ ¬P2 ∨ ¬P3
P2 ∨ P3 ∨ ¬P4
Par souci de simplicité nous avons tracé7 ci-dessus, non pas G, mais le graphe G’ complémentaire de
G (i.e. une arête est dans G’ si et seulement si elle n’est pas dans G) ; une clique de G est un ensemble
“indépendant” dans G’, i.e. un ensemble de noeuds non reliés par des arêtes. Les noeuds en blanc
définissent une clique de G. En donnant la valeur VRAI à P1 , P2 , ¬P3 , ¬P4 on satisfait toutes les
clauses.
5.4
Annexe 4 : représentation de 3-SAT dans 3-SATSym
3-SATsym est le problème consistant à décider la proposition Π :
il existe un ensemble de valeurs de vérité Pj = V RAI ou Pj = F AU X tel que dans toutes les
clauses il y ait (au moins) un élément vrai et (au moins) un élément faux.
Proposition 1 3-SATSym est polynômialement représentable dans 3-SAT et réciproquement.
Noter d’abord que pour vérifier que un ensemble de clauses a la propriété Π il suffit d’ajouter à cet
ensemble toutes les clauses obtenues en remplaçant chaque symbole de proposition par sa négation
et de vérifier que cet ensemble est satisfiable ; ce qui montre que 3-SATSym est linéairement représentable dans 3-SAT.
Montrons que 3-SAT est représentable dans 3-SATSym. On considère un ensemble de n clauses
de la forme L1i ∨ L2i ∨ L3i où la notation Lji désigne un symbole Pk ou ¬Pk . L’ensemble des clauses
L1 ∨ L2 ∨ L3 est satisfiable si et seulement si les 4n clauses
 1
L ∨ L2 ∨ ¬Qi


 i 1 i
¬Li ∨ Qi ∨ R
(1)
¬L2 ∨ Qi ∨ R


 3i
Li ∨ Qi ∨ R
ont la propriété Π.
Pour le montrer on notera que L1i ∨ L2i ∨ L3i est équivalent à L1i ∨ L2i ⇔ Qi et Qi ∨ L3i et donc, en
utilisant la définition de l’équivalence (A ⇔ B ssi A ⇒ B et B ⇒ A) et les règles du calcul des
propositions, à
 1
L ∨ L2 ∨ ¬Qi


 i 1 i
¬Li ∨ Qi
(2)
¬L2i ∨ Qi


 3
Li ∨ Qi
Si les clauses L1i ∨ L2i ∨ L3i sont satisfiables on vérifie facilement que les 4 clauses (1) ont la propriété
Π en donnant à Qi la valeur de L1i ∨ L2i et à R la valeur FAUX.
7
Il faut ajouter des arêtes entre tous les noeuds d’une même clause.
ECP 2006-2007
Mathématiques 2
Graphes et Optimisation discrète
14
Réciproquement si ces 4n clauses (1) ont la propriété Π on peut supposer que R a la valeur
FAUX : en effet si les 4n clauses ont la propriété Π, cela signifie qu’il existe un ensemble de valeurs
de vérité pour les symboles Pk , Qi et R tel que une proposition soit VRAI et une FAUX dans chaque
clause ; Si dans cet ensemble R est VRAI, on prend les valeurs complémentaires (i.e. on remplace
VRAI per FAUX et vice-versa) ces nouvelles valeurs vérifient la propriété Π et R est FAUX. Si R
est FAUX les 4n clauses 1 sont satisfiables ce qui implique que l’ensemble 2 est satisfiable ; or ces
clauses sont elles même sont équivalentes à l’ensemble
L1i ∨ L2i ∨ L3i
ECP 2006-2007
Mathématiques 2

Documents pareils