Complexité et algorithmique

publicité
Complexité et algorithmique
●
Modèle de calcul, algorithmes, décidabilité
●
Classe P
●
« Méthodes de résolution » :
●
Diviser pour régner
●
Algorithmes de Tri
●
Algorithmes gloutons
●
Programmation dynamique
●
Classe NP (Définition, NP-complétude et réductions)
●
« Méthodes de résolution » :
●
Algorithmes d'approximation
●
Heuristiques
Introduction
B. Estellon - Complexite - Master MINT - U2
Informatique ?
●
●
L'informatique désigne l'automatisation du
traitement de l'information par un système.
Questions :
●
Qu'est-ce que le calcul ?
●
Que peut-on calculer ?
●
Comment calculer efficacement ?
●
Comment décrire un algorithme de calcul ?
●
Comment représenter un certain objet pour pouvoir
le traiter ?
B. Estellon - Complexite - Master MINT - U2
Algorithmique ?
●
●
●
Un algorithme est une représentation de la
résolution par calcul d'un problème pour :
●
l'exposer à une autre personne,
●
le résoudre avec un ordinateur.
Un algorithme est un énoncé dans un langage
bien défini d'une suite d'opérations.
L'implémentation d'un algorithme consiste à
automatiser son utilisation à l'aide d'une
machine.
B. Estellon - Complexite - Master MINT - U2
Algorithme d'Euclide
●
Permet de calculer le PGCD de deux entiers.
a et b deux entiers
non nuls et a > b
Calculer r = a mod b
a devient b
b devient r
Non
int PGCD(int a, int b) {
r := a % b;
if (r==0) return b;
a:=b;
b:=r;
return PGCD(a,b);
}
r=0?
Oui
Résultat = b
B. Estellon - Complexite - Master MINT - U2
Algorithmes de tri
●
Ordonner des nombres entiers.
void selection(int t[MAX]) {
int i, min, j, x;
for (i = 0; i<MAX - 1 ; i++) {
min = i ;
for ( j = i+1 ; j < MAX ; j++)
if ( t[j] < t[min] )
min=j;
if (min != i) {
x = t[i];
t[i] = t[min];
t[min] = x;}
}
}
}
●
Nous verrons d'autres algorithmes plus
efficaces : tri rapide, tri par tas, tri fusion...
B. Estellon - Complexite - Master MINT - U2
Colorer un graphe
●
●
Colorer les sommets d'un graphe avec k
couleurs de sorte qu'aucun sommet du graphe
n'ait la même couleur que ses voisins.
Algorithme : tester les kn colorations !
Méthode efficace ?
Envisageable en pratique ?
B. Estellon - Complexite - Master MINT - U2
Problèmes
●
●
Un problème est une relation binaire sur un ensemble
d'instances et un ensemble de solutions.
Problème du calcul du PGCD :
●
●
Problème du tri :
●
●
A chaque couple {a,b}, on associe le PGCD de a et b.
A chaque tableau d'entiers non triés, on associe le tableau
d'entiers triés.
Problème de coloration de graphe :
●
A chaque graphe G et chaque entier k, on associe la
réponse « oui » si le graphe G peut être coloré avec k
couleur et « non » sinon.
B. Estellon - Complexite - Master MINT - U2
Problèmes de décision
●
●
Un problème de décision est un problème où chaque
instance a pour solution soit « oui » soit « non ».
Problème de coloration de graphe :
●
A chaque graphe G et chaque entier k, on associe la
réponse « oui » si le graphe G peut être coloré avec k
couleur et « non » sinon.
B. Estellon - Complexite - Master MINT - U2
Fonctionnement des ordinateurs
B. Estellon - Complexite - Master MINT - U2
Codage de l'information
●
●
Pour des raisons physiques, on code
l'information avec des 0 et des 1.
Une mémoire peut être vue comme une longue
ligne de 0 et de 1.
0 1 1 0 1 1 0 0 1 0 0 1 1 0 0 1
●
●
Une unité de mémoire (une « case » du
tableau) est appelé bit.
0 1 0 1 1 0
1
0
En informatique, on regroupe souvent les bits
par 8 :
●
8 bits forment un octet.
B. Estellon - Complexite - Master MINT - U2
Codage de l'information
●
Avec des 0 et des 1, on peut représenter :
–
–
–
–
–
–
Des nombres entiers, rationnels...
Des caractères, du texte,
Des images,
Du son,
Des adresses mémoires,
Des programmes informatiques...
B. Estellon - Complexite - Master MINT - U2
Nombres entiers
●
On utilise la base 2 (au lieu de la base décimale)
27
26
25
24
23
22
21
20
1
0
1
1
0
0
1
0
= 1 x 27 + 0 x 26 + 1 x 25 + 1 x 24 + 0 x 23 + 0 x 22 + 1 x 21 + 0 x 20
= 178 (en base 10)
0
0
0 =0
Sur n bits, on peut coder 2n valeurs différentes :
- de 0 à 2n-1 si tous positifs
- ou de -2n/2 à 2n/2-1
0
0
1 =1
0
1
0 =2
0
1
1 =3
1
0
0 =4
1
0
1 =5
1
1
0 =6
1
1
1 =7
Sur 8 bits, on peut coder 256 valeurs différentes :
- de 0 à 255 si tous positifs
- ou de -128 à 127
B. Estellon - Complexite - Master MINT - U2
Codage des nombres flottants
●
Nombres à virgule flottante = approximation des réels.
●
Un nombre à virgule flottante possède :
●
●
Un signe s
●
Une mantisse m
●
Un exposant e
s
(-1) x m x 2
e-x
Norme IEEE 754 :
Encodage
Signe
Exposant
Mantisse
Simple précision
32 bits
1 bits
8 bits
23 bits
s x m x 2e - 127
Double précision
64 bits
1 bits
11 bits
52 bits
s x m x 2e - 1023
B. Estellon - Complexite - Master MINT - U2
Valeur du nombre
Codage des images
●
Une image est composée de pixels
●
chaque pixel a une couleur
●
●
Couleur = une quantité de rouge, de bleu, de
vert
Une quantité = un nombre (codé en binaire)
0 0 0 0 0 1 1 0 1 0 1 1 0 1 0
0
14
14
Un pixel
B. Estellon - Complexite - Master MINT - U2
Codage des images
Le code d'une image est la succession des
codes des pixels de l'image
●
0
1
2
3
4
5
6
7
8
0
1
2
3
4
5
6
7
8
+ longueur d'une ligne
Avec ce codage, si on code chaque pixel sur 2
octets,
une image de 300x300 pixels prend 180000
octets
B. Estellon - Complexite - Master MINT - U2
Ordinateur vs Calculatrice
●
●
Calculatrice :
●
En entrée : des données, une opération
●
La calculatrice effectue l'opération sur les données
●
En sortie : le résultat de l'opération
Ordinateur :
●
En entrée : des données, un programme
●
L'ordinateur exécute le programme sur les données
●
En sortie : les données transformées par le prog.
B. Estellon - Complexite - Master MINT - U2
Programme
●
●
●
●
●
Un programme est une suite d'instructions
Chaque processeur a un jeu d'instructions qui
représente l'ensemble des opérations
élémentaires qu'il peut réaliser
Un code (binaire) compréhensible par le
processeur est associé à chaque instruction
De cette manière, un programme peut être
décrit par une suite de bits
Les programmes sont des données
exécutables par un ordinateur
B. Estellon - Complexite - Master MINT - U2
Programme
●
Exemple de programme :
●
Entrée : valeur de la cellule 50
●
0 : Mettre la valeur 0 dans la cellule numéro 40
●
1 : Diviser par 2 la valeur de la cellule numéro 50
●
2 : Ajouter 1 à la valeur de la cellule numéro 40
●
3 : Si la valeur de la cellule numéro 50 est > 0
●
Retourner l'instruction numéro 1
Sortie : valeur de la cellule 40
MOV
0
40
DIV
2
50
ADD
1
40
JGZ
50
1
120
0
40
125
2
50
140
1
40
145
50
1
B. Estellon - Complexite - Master MINT - U2
Programme
●
MOV
0
40
DIV
2
50
ADD
1
40
JGZ
50
1
120
0
40
125
2
50
140
1
40
145
50
1
L'ordinateur répète indéfiniment :
●
Charger la prochaine instruction à exécuter
●
Charger les données nécessaires en mémoire
●
Effectuer l'opération
●
Ranger le résultat du calcul
●
Se déplacer sur la prochaine instruction à exécuter
B. Estellon - Complexite - Master MINT - U2
Modèles de calcul
B. Estellon - Complexite - Master MINT - U2
Machine de Turing
●
●
●
Définit par Alan Turing (1936)
Modélise le fonctionnement des appareils
mécaniques de calcul.
Donne une définition précise au concept
d'algorithme :
●
●
Thèse de Church-Turing : « tout traitement
réalisable mécaniquement pour être accompli par
une machine de Turing »
Fournit un modèle théorique pour étudier la
complexité des problèmes.
B. Estellon - Complexite - Master MINT - U2
Machine de Turing
●
Elle est constituée de :
●
●
●
●
Un ruban infini à droite et à gauche. Chaque case
contient un symbole parmi un alphabet fini.
Une tête de lecture/écriture qui peut lire et écrire
des symboles sur le ruban et se déplacer vers la
gauche ou vers la droite.
Un registre d'état qui mémorise l'état courant de la
machine. Le nombre d'états est fini et il existe un
état de départ.
Une table d'actions.
B. Estellon - Complexite - Master MINT - U2
Machine de Turing
●
●
●
La table d'action associe une action à chaque
couple (état, caractère lu).
Une action indique à la machine quel caractère
écrire sur le ruban et comment déplacer la tête
de lecture/écrire.
Tant qu'il existe une action à appliquer, la
machine l'applique, sinon elle s'arrête.
B. Estellon - Complexite - Master MINT - U2
Machine de Turing
...
0
1
1
0
1
1
0
0
1
0
1
1
1
...
0/1/D
État
Car. lu
Car. écrit
Direction
État
0
0
1
D
1
0
1
0
G
1
1
0
0
D
0
...
0
1
1
0
1
0/0/D
0
1/0/G
1
1
0
1
0
1
B. Estellon - Complexite - Master MINT - U2
1
1
...
1
Exercice 1
●
Écrire une machine de Turing qui effectue le
complément d'un nombre binaire.
●
Entrée : un nombre écrit en binaire (entouré de #).
–
●
Exemple : #01101001#
Sortie : le complément binaire du nombre :
–
Exemple : #10010110#
On supposera que le nombre contient au moins un digit.
Au début, la tête de lecture est positionnée sur le premier
# et doit se trouver, à la fin, sur le # qui précède le résultat.
B. Estellon - Complexite - Master MINT - U2
Solution de l'exercice 1
0/1/d
0
#/#/d
1
1/0/d
●
0/0/g
#/#/g
2
1/1/g
Quel est le nombre d'actions effectuées par la
machine de Turing en fonction de la longueur
d'écriture du nombre ? de la valeur du
nombre ?
B. Estellon - Complexite - Master MINT - U2
Exercice 2
●
Écrire une machine de Turing qui ajoute 1 à un
nombre binaire écrit avec les bits de poids
faibles à gauche.
●
Entrée : un nombre écrit en binaire.
–
●
Exemple : #11101101# = 183
Sortie : le nombre plus 1.
–
Exemple : #00011101# = 184
On supposera que le nombre contient au moins un digit.
Au début, la tête de lecture est positionnée sur le premier
# et doit se trouver, à la fin, sur le # qui précède le résultat.
B. Estellon - Complexite - Master MINT - U2
Solution de l'exercice 2
1/0/d
0/0/g
#/1/g
0
#/#/d
1
2
0/1/g
1/1/g
●
Quel est le nombre d'actions effectuées par la
machine de Turing en fonction de la longueur
d'écriture du nombre ? de la valeur du
nombre ?
B. Estellon - Complexite - Master MINT - U2
Exercice 3
●
Écrire une machine de Turing qui compte le
nombre de 1 dans un chiffre binaire :
●
Entrée : un nombre écrit en binaire.
–
●
Exemple : #11101101#.
Sortie : le nombre de 1.
–
Exemple : #110#
Mêmes consignes que dans les exercices précédents.
On supposera que la partie non visible du ruban est
initialisée avec des #.
B. Estellon - Complexite - Master MINT - U2
Solution de l'exercice 3
#/#/d
0/#/d
0/0/d
1/0/d
0/0/g
0/0/g
#/1/g
0
#/#/d
1
1/#/d
2
#/#/d
3
2
#/#/g
2
0/1/g
1/1/d
●
1/1/g
1/1/g
Quel est le nombre d'actions effectuées par la
machine de Turing en fonction de la longueur
d'écriture du nombre ? de la valeur du
nombre ?
B. Estellon - Complexite - Master MINT - U2
Modèle RAM
●
●
Les RAM sont des machines abstraites qui
« ressemblent » aux ordinateurs actuels.
Elles sont constituées d'un programme formé d'une
suite d'instructions et d'une suite infinie de registres.
●
Registres spéciaux :
Compteur ordinal (prochaine instruction).
– L'accumulateur.
Les données manipulées par ces machines sont des
entiers qui peuvent être arbitrairement grands.
–
●
●
Les entrées et les sorties sont faites à travers une
bandes d'entrée et une bande de sortie.
B. Estellon - Complexite - Master MINT - U2
Modèle RAM
●
Les instructions se divisent en 4 catégories :
●
Manipulations de registres :
Adresse direct, indirect des registres, etc.
Opérations arithmétiques,
–
●
Addition des registres, multiplication, etc.
Ruptures de séquences :
–
●
Sauts conditionnels et inconditionnels, stop.
Instructions d'entrées/sorties :
–
●
–
Lire et écrire sur les bandes.
B. Estellon - Complexite - Master MINT - U2
Modèle RAM
●
Exécution d'un programme :
●
On commence à l'instruction 0
●
Tant que l'instruction STOP n'est pas rencontrée :
–
–
●
On exécute l'instruction courante
On passe à l'instruction suivante
Le temps d'exécution du programme dépend du
nombre d'instructions exécutées.
B. Estellon - Complexite - Master MINT - U2
Exemple de programme
public static int truc(int n) {
int s = 0;
while (n>0) {
if (n%2==0) n=n/2;
else { n=n-1; s++; }
}
return s;
}
Questions :
0
: R1 = lire
1
: R2 = 0
2
: gotoif(R1<=0) 10
3
: R3 = R1%2
4
: gotoif(R3!=0) 7
5
: R1=R1/2
6
: goto 9
7
: R1 = R1-1
8
: R2 = R2+1
9
: goto 2
10
: ecrire R2
11 : stop
- Que fait l'algorithme précédent ?
- Quel est son temps d'exécution en fonction de
la longueur d'écriture de n ? en fonction de n ?
B. Estellon - Complexite - Master MINT - U2
RAM / Machine de Turing
●
Équivalence entre RAM et Machine de Turing :
●
●
●
●
Il est facile d'écrire un programme RAM qui simule
une machine de Turing.
Il est possible de simuler toute RAM avec une
machine de Turing !!!
Exercice : écrire une machine de Turing qui ajoute
deux nombres représentés en binaire.
Attention : Le nombre d'actions réalisées par la
machine de Turing et le nombre d'instructions
exécutées par la RAM ne sont pas forcement
identiques.
B. Estellon - Complexite - Master MINT - U2
Problèmes et algorithmes
●
●
●
Un problème est une relation binaire sur un ensemble
d'instances et un ensemble de solutions.
Les instances et les solutions sont des informations qui
doivent être codées pour être traitées automatiquement
par un algorithme.
Un algorithme résout un problème s'il donne la solution
de chaque instance du problème en un temps fini.
Instance
Algorithme
B. Estellon - Complexite - Master MINT - U2
Solution
Décidabilité
B. Estellon - Complexite - Master MINT - U2
Décidabilité
●
●
●
Un problème de décision est un problème où chaque
instance a pour solution soit « oui » soit « non ».
Un problème de décision est décidable s'il existe un
algo qui pour toute instance I :
●
Se termine en un nombre fini d'étapes;
●
Répond « oui » si la solution de I est « oui »;
●
Répond « non » si la solution de I est « non ».
Question : peut-on décider tous les problèmes
de décision ?
B. Estellon - Complexite - Master MINT - U2
Problème de l'arrêt
●
Remarque :
●
●
●
La table d'actions d'une machine de Turing (ou un
programme informatique) est représentable par une
suite de 0 et de 1.
Donc, un algorithme peut être donné en entrée d'un
autre algorithme.
Problème de l'arrêt :
●
●
Instance : un algorithme A et une instance I.
Solution : « oui » si A s'arrête après un nombre fini
d'étapes lorsqu'on l'exécute sur l'instance I, « non » sinon.
B. Estellon - Complexite - Master MINT - U2
Semi-décidabilité
●
●
Un problème de décision est semi-décidable
s'il existe un algo qui, pour toute instance I
dont la solution est « oui », se termine en un
nombre fini d'étapes en répondant « oui ».
Remarque : le problème de l'arrêt est semidécidable car il suffit de simuler l'exécution de
l'algorithme A sur l'instance I et de répondre
« oui » dès qu'il s'arrête.
B. Estellon - Complexite - Master MINT - U2
Le problème de l'arrêt est
indécidable
●
●
●
Démonstration par l'absurde :
Supposons qu'un algorithme H(A,i) existe pour
décider le problème de l'arrêt.
Par définition, H(A,i) est un algorithme prend en
entrée un algorithme A et une instance i et retourne
en un nombre fini d'étapes :
–
–
« oui » si l'algorithme A s'arrête lorsqu'on
l'exécute sur l'instance i.
« non » si l'algorithme A ne s'arrête pas.
B. Estellon - Complexite - Master MINT - U2
Le problème de l'arrêt est
indécidable
●
Nous définissons maintenant l'algorithme T(A)
qui prend en entrée un algorithme A :
T(A) :
1. exécuter H(A,A)
2. si H(A,A) retourne « oui » alors {...} tant que (vrai)
●
Cas 1 : T(T) s'arrête
●
●
Cas 2 : T(T) boucle indéfiniment
●
●
H(T, T) retourne « oui » et T(T) boucle => Contrad.
H(T,T) retourne « non » et T(T) s'arrête => Contrad.
Conclusion : H n'existe pas
B. Estellon - Complexite - Master MINT - U2
Introduction à la complexité
B. Estellon - Complexite - Master MINT - U2
Introduction
●
●
●
Par la suite, nous allons considérer uniquement les
problèmes pour lesquels il existe un algorithme.
La complexité algorithmique s'intéresse aux
ressources nécessaires pour mettre en œuvre un
algorithme.
Dans ce cours, nous allons nous intéresser :
●
au temps d'exécution des algorithmes;
●
à l'espace mémoire utilisé par les algorithmes.
B. Estellon - Complexite - Master MINT - U2
Complexité en temps
●
Soit A un algorithme qui résout un problème P.
●
La complexité en temps d'un algo. A est
●
une fonction f : N->N où f(n) est le nombre
maximum d'étapes de calcul de A sur toutes les
entrées de taille n.
●
On dit que A s'exécute en temps f(n).
●
Idem pour la complexité en espace.
B. Estellon - Complexite - Master MINT - U2
Rappel : Notation Landau
●
Soit deux fonctions f, g : N->R+, on dit que
●
f(x) = O(g(x)) (quand x tend vers +∞) s'il existe deux
nombres réels c et x0 tels que pour tout x ≥ x0,
f(x) ≤ c∙g(x)
●
Pour les polynômes, il suffit de garder le terme
de plus grand ordre et supprimer son coeff. :
3x4+2x3+x+4 = O(x4)
B. Estellon - Complexite - Master MINT - U2
Complexité en temps
●
●
Un algorithme A résout un problème P en
temps O(T(n)) si, pour tout n et pour toute
instance de taille n, l'algorithme retourne une
solution admissible après O(T(n)) étapes.
L'ensemble des problèmes de décision pour
lesquels il existe un algorithme qui s'exécute en
temps O(T(n)) est noté :
●
DTIME(T(n)) pour les machines de Turing;
●
DRAM(T(n)) pour le modèle RAM.
B. Estellon - Complexite - Master MINT - U2
Complexité en temps
Notation
Type de complexité
Pour n = 100 avec 10^8 ops/sec
O(1)
constante
Temps constant
O(log(n))
logarithmique
10-7 secondes
O(n)
linéaire
10-6 secondes
O(nlog(n))
quasi-linéaire
10-5 secondes
O(n2)
quadratique
10-4 secondes
O(n3)
cubique
10-2 secondes
O(np)
polynomiale
11 jours si p = 7
O(2n)
exponentielle
1014 années
O(n!)
factorielle
10142 années
B. Estellon - Complexite - Master MINT - U2
Exercice 1
public static int truc(int n) {
int s = 0;
while (n>=0) {
if (n%2==0) n=n/2;
else { n=n-1; s++; }
}
return s;
}
●
Exprimer le temps d'exécution du programme
précédent en fonction de la longueur d'écriture
de n puis en fonction de n.
B. Estellon - Complexite - Master MINT - U2
Exercice 2
●
Écrire une fonction Java qui calcule le produit
de deux matrices.
int[][] prodMat(int a[][], int b[][])
●
Exprimer le temps d'exécution de votre programme en
z
fonction de x, y et z.
x
y
a
b
Résultat
B. Estellon - Complexite - Master MINT - U2
Exercice 3
●
●
Écrire un algorithme qui prend en entrée un
tableau de n entiers compris entre 0 et n-1 et
qui vérifie que tous les éléments sont distincts.
0
1
2
4
3
5
7
6
8
« oui »
0
1
5
4
3
5
4
6
8
« non »
Exprimer le temps d'exécution de votre
algorithme en fonction de n.
B. Estellon - Complexite - Master MINT - U2
Exercice 4
●
●
Calculer la somme des n premiers entiers
positifs (1+2+3+4+...+n).
Exprimer le temps d'exécution de votre
programme en fonction de n.
B. Estellon - Complexite - Master MINT - U2
Exercice 5
●
Trouver le plus grand nombre d'objets qui
partagent au moins k propriétés.
Objets
Propriétés
●
Donner un algorithme en O(2nbPropriétés · nbObjets · nbPropriétés).
●
Donner un algorithme en O(2nbObjets · nbObjets · nbPropriétés).
B. Estellon - Complexite - Master MINT - U2
Classe P
B. Estellon - Complexite - Master MINT - U2
Classe P
●
●
●
Un problème se résout en temps polynomial
(ou est polynomial) s'il existe un algorithme
permettant de le résoudre en temps O(nk) pour
une certaine constante k.
La classe P contient l'ensemble des problèmes
polynomiaux, c'est-à-dire, P = Uk≥0DTIME(nk).
La classe P capte les problèmes « faciles » à
résoudre, c'est-à-dire, pour lesquels il existe un
algorithme « efficace » (même si un algo. en
O(n10) est souvent inefficace en pratique).
B. Estellon - Complexite - Master MINT - U2
Classe P
●
La classe P est intéressante car elle est :
●
Robuste : La classe P définit en utilisant le modèle
RAM est identique à celle définit en utilisant les
machines de Turing :
Uk≥0DRAM(nk)=Uk≥0DTIME(nk)
●
Stable par composition : un algo. polynomial qui
appelle un nombre polynomial de fois un algo.
polynomial est polynomial.
B. Estellon - Complexite - Master MINT - U2
Classe P
●
Pour montrer qu'un problème appartient à P :
●
●
●
Proposer un algorithme polynomial;
Montrer que l'algorithme est correct, c'est-à-dire,
montrer qu'il retourne, pour toutes les instances du
problème, une solution admissible.
Montrer que l'algorithme est polynomial.
B. Estellon - Complexite - Master MINT - U2
Calcul du PGCD
●
Montrer que l'algorithme suivant est un
algorithme polynomial pour résoudre le
problème du PGCD :
int pgcd (int a , int b)
{
if (a == 0 || b == 0) {
return a + b ;
} else if (a%2==0 && b%2==0) {
return 2 * pgcd (a/2, b/2);
} else if (a%2==1 && b%2==0) {
return pgcd(a, b/2);
} else if (a%2==0 && b%2==1) {
return pgcd(a/2, b);
} else if (a > b) {
return pgcd((a-b)/2, b);
} else return pgcd ((b-a)/2, a) ;
}
B. Estellon - Complexite - Master MINT - U2
SAT
●
Le problème SAT est un problème de décision.
●
●
Entrée :
–
Un ensemble de variables booléennes x1, x2, x3, ... , xn.
–
Un ensemble de clauses a1∨a2∨a3∨...∨ak où les ai
sont des littéraux, c'est-à-dire, ai = xj ou xj
Sortie :
–
–
« oui » s'il existe une affectation des variables
booléennes qui satisfait toutes les clauses;
« non » sinon.
B. Estellon - Complexite - Master MINT - U2
SAT
●
Exemples :
x1∨x2∨x3∨x4
● x ∨x ∨x
1
2
3
● x ∨x ∨x
1
2
3
● x ∨x ∨x
1
2
3
● x ∨x ∨x
1
2
3
● x ∨x ∨x
1
2
3
● x ∨x ∨x
1
2
3
● x ∨x ∨x
1
2
3
●
« oui »
x1∨x2∨x3
● x ∨x ∨x
1
2
3
● x ∨x ∨x
1
2
3
● x ∨x ∨x
1
2
3
● x ∨x ∨x
1
2
3
● x ∨x ∨x
1
2
3
● x ∨x ∨x
1
2
3
● x ∨x ∨x
1
2
3
●
« non »
B. Estellon - Complexite - Master MINT - U2
2SAT
●
●
●
●
Le problème kSAT est le problème SAT où toutes
les clauses sont de tailles k
Théorème : Le problème 2SAT est polynomial.
Pour vérifier une clause a1∨a2, les deux
implications a1⇒a2 et a2⇒a1 doivent être vérifiées.
On construit un graphe orienté G de 2n sommets :
●
●
Pour chaque xi, on crée un sommet xi et xi.
Pour chaque clause a1∨a2, on ajoute une arête
de a1 vers a2 et une de a2 vers a1.
B. Estellon - Complexite - Master MINT - U2
2SAT
●
●
Si dans le graphe, pour une variable xi, il existe
un chemin de xi vers xi et un de xi vers xi, alors
l'instance est insatisfaisable.
Donc, l'instance de 2SAT est satisfaisable si et
seulement si, pour tout i, les sommets xi et xi
sont dans deux composantes fortement
connexes différentes de G.
B. Estellon - Complexite - Master MINT - U2
2SAT
calcul de l'affectation admissible
●
On numérote les CFC (ordre topologique).
CFC(0)
●
●
CFC(1)
CFC(2)
CFC(3)
Soit f la fonction définie par f(v):=a où a est le numéro de
la CFC qui contient v, i.e., v CFC(a).
Fixons xi à 0 lorsque f(xi) f(xi) et xi à 1 sinon.
B. Estellon - Complexite - Master MINT - U2
2SAT
calcul de l'affectation admissible
●
Preuve de l'admissibilité de la solution :
●
●
●
●
●
●
Raisonnons par l'absurde et supposons qu'il existe
une clause x∨y non satisfaite.
Donc f(x) < f(x) et f(y) < f(y).
La clause implique f(x) ≤ f(y) et f(y) ≤ f(x).
On obtient f(x) < f(x) ≤ f(y) < f(y) ≤ f(x).
Donc f(x) < f(x), contradiction.
Conclusion, toutes les clauses sont
satisfaites par l'affectation.
B. Estellon - Complexite - Master MINT - U2
2SAT
●
●
Remarque : Le graphe G a une taille
polynomial en la taille de l'instance de 2SAT et
peut être construit en temps polynomial.
Nous venons de réduire le problème 2SAT à
un problème de recherche des composantes
fortement connexes d'un graphe.
B. Estellon - Complexite - Master MINT - U2
Algorithme naïf
●
Il est facile de vérifier (en temps linéaire) que
deux sommets x et y se trouvent dans une
même composante fortement connexe :
●
●
Il suffit de vérifier qu'il existe un chemin de x vers y
et un chemin de y vers x en utilisant deux parcours
en profondeur (un à partir de x et un autre à partir
de y).
On obtient un algorithme quadratique pour le
problème 2SAT.
B. Estellon - Complexite - Master MINT - U2
Composantes fortement connexes
en temps linéaire
●
Algorithme de Tarjan (1972)
11
0 0
88
21
61
71
3
1
8
9
10
8
4
2
8
11
52
B. Estellon - Complexite - Master MINT - U2
Algorithme de Tarjan
●
Les composantes fortement connexes (CFC)
forment des sous-arbres de l'arbre issu du
parcours en profondeur.
=> impossible par construction
B. Estellon - Complexite - Master MINT - U2
=> les sommets
du chemin rouge
sont dans les deux
composantes.
Algorithme de Tarjan
●
Un sommet v est racine d'une CFC s'il n'existe
pas de chemin de v vers un sommet qui se
trouve entre lui et la racine.
11
0 0
88
21
61
71
3
1
9
8
10
8
4
2
8
11
52
B. Estellon - Complexite - Master MINT - U2
Algorithme de Tarjan
●
Problème des arrêtes transverses.
11
0 0
88
22
3
62
72
2
9
8
10
8
24
8
11
52
B. Estellon - Complexite - Master MINT - U2
Algorithme de Tarjan
●
A la fin de l'analyse du sous-arbre de racine v,
si v est la racine d'une CFC, on crée une CFC
avec les descendants de v et on supprime ces
sommets de l'arbre.
Supposons que u soit traité après w.
Comme le sommet w n'a pas été supprimé,
il doit exister un chemin de w vers un sommet z.
Donc, on peut détecter le chemin de u à z
(qui passe par w) en regardant l'information
calculée pour w.
z
v
u
w
B. Estellon - Complexite - Master MINT - U2
Devoir 1
●
Réaliser un programme Java qui prend en
entrée une instance de 2SAT est qui affiche :
●
« oui » si elle est satisfaisable;
●
« non » sinon.
●
Implémenter l'algorithme naïf (quadratique).
●
Implémenter l'algorithme de Tarjan.
●
Analyser sa complexité.
●
Comparer l'efficacité des deux algorithmes.
B. Estellon - Complexite - Master MINT - U2
Diviser pour régner
●
Recherche d'un entier dans un tableau trié.
2
5
8
10
13
18
20
25
30
32
45
102
2
5
8
10
13
18
20
25
30
32
45
102
2
5
8
10
13
18
20
25
30
32
45
102
2
5
8
10
13
18
20
25
30
32
45
102
B. Estellon - Complexite - Master MINT - U2
Diviser pour régner
●
Recherche d'un entier dans un tableau trié.
n
n/2
n/2
O(log n)
n/4
n/4
n/4
n/4
1
1
1
1
Complexité : O(log n)
B. Estellon - Complexite - Master MINT - U2
Tri par sélection et tri à bulles
static void triParSelection(int T[]) {
for (int j = 0; j < T.length - 1; j++) {
int min = j;
for (int i = j + 1; i < T.length; i++) {
if (T[i] < T[min]) {
min = i;
}
}
swap(T, j, min);
}
}
static void triBulle(int T[]) {
boolean permut;
do {
permut = false;
for (int i = 0; i < T.length - 1; i++) {
if (T[i] > T[i + 1]) {
swap(T, i, i + 1);
permut = true;
}
}
} while (permut);
}
B. Estellon - Complexite - Master MINT - U2
Tri Fusion
●
Fusion de deux listes triées : on compare les
deux éléments qui se trouvent au dessus...
5
9
4
10
8
11
10
12
20
25
22
38
35
42
40
50
48
60
Complexité : linéaire
B. Estellon - Complexite - Master MINT - U2
Tri Fusion
O(n)
O(log n)
O(n)
O(n)
Complexité : O(n log n)
B. Estellon - Complexite - Master MINT - U2
Tri par tas
11
Un tas :
8
6
6
7
5
2
Un tas dans un tableau :
11
8
6
6
7
5
B. Estellon - Complexite - Master MINT - U2
2
Tri par tas
●
Entasser un élément : le faire descendre à
une place correcte (en supposant que les
éléments situés en dessous forment deux tas).
2
2
3
1
9
9
Complexité : O(log n)
6
2
3
5
2
B. Estellon - Complexite - Master MINT - U2
Tri par tas
●
Construire le tas à partir d'un tableau (non trié) :
●
●
●
●
On entasse chaque élément du premier élément qui
possède un fils en remontant jusqu'à la racine.
Complexité : O(n).
Extraire le maximum du tas en O(log n):
●
Échanger le dernier élément avec le premier; O(1)
●
Diminuer la taille du tas de 1; O(1)
●
Entasser le premier élément; O(log n)
Trier par tas :
●
Extraire n fois le maximum; O(n log n)
B. Estellon - Complexite - Master MINT - U2
Tri rapide
●
Partition en temps linéaire
Pivot = 8
8
2
18
7
5
3
10
12
4
3
9
5
8
2
5
7
5
3
10
12
4
3
9
18
8
2
5
7
5
3
3
12
4
10
9
18
8
2
5
7
5
3
3
4
12
10
9
18
B. Estellon - Complexite - Master MINT - U2
Tri rapide
●
QuickSort :
●
Choisir un pivot
●
Partitionner autour de ce pivot
●
Trier les deux parties avec la même méthode
8
2
5
7
5
3
3
4
12
Complexité : O(n2)
Efficace en pratique
B. Estellon - Complexite - Master MINT - U2
10
9
18
Borne inférieure
●
●
Un algorithme de tri (basé sur la comparaisons
des éléments) effectue au moins n∙log(n)
comparaisons dans le pire des cas.
Remarque : pour produire tous les ordres
possibles, il faut que l'arbre de décision (ou
chaque nœud correspond à une comparaison)
ait n! feuilles.
B. Estellon - Complexite - Master MINT - U2
Borne inférieure
Ω(log k)
= Ω(log n!)
= Ω(n log n)
K = n!
Formule de Stirling :
B. Estellon - Complexite - Master MINT - U2
Tri par dénombrement
●
Pour trier une tableau T d'entiers compris
entre 0 et n-1 :
1. On initialise à 0 un tableau D de n cases,
2. On parcourt T de façon à obtenir dans la case i du
tableau D le nombre d'occurrences de i dans T.
3. On reconstruit le tableau T trié en utilisant D.
●
Exercices :
●
écrire le programme Java qui implémente ce tri.
●
Quelle est la complexité du tri par dénombrement ?
B. Estellon - Complexite - Master MINT - U2
Tri par base
●
Pour trier un tableau T d'entiers :
1. On considère chacun des chiffres des nombres
du moins significatif ou plus significatif.
2. On trie la liste des éléments suivant chaque
chiffre en conservant l'ordre des éléments ayant
le même chiffre (stabilité).
170 45 75 90
2 24 802 66
170 090 002 802 024 045 075 066
002 802 024 045 066 170 045 090
002 024 045 066 075 090 170 802
2 24 45 66 75 90 170 802
B. Estellon - Complexite - Master MINT - U2
Complexité ?
Devoir 2
●
●
Programmer en Java :
●
Le tri par sélection;
●
Le tri fusion;
●
Le tri par tas;
●
Le tri rapide;
●
Le tri par base.
Comparer leur efficacité en pratique.
B. Estellon - Complexite - Master MINT - U2
Algorithme glouton : tâches
●
Considérons un ensemble de tâches :
temps
Problème : trouver un ensemble de tâches de
cardinalité maximale qui ne s'intersectent pas.
B. Estellon - Complexite - Master MINT - U2
Algorithme glouton : tâches
●
Algorithme glouton :
●
Trier les tâches dans l'ordre croissant des dates de fin.
●
Tant qu'il existe des tâches :
–
–
Ajouter la tâches T qui a la plus petite date de fin.
Supprimer les tâches qui intersectent T.
temps
B. Estellon - Complexite - Master MINT - U2
Algorithme glouton :
pièces de monnaie
●
●
●
On dispose de pièces en nombre illimité de
valeurs 10, 5, 2 et 1.
Problème : rendre une somme S avec un nombre
minimum de pièces.
Algorithme :
●
●
On trie les tas de pièces par ordre croissant de valeur.
Pour chaque valeur (dans cette ordre), on prend le
nombre maximum de pièces possibles.
B. Estellon - Complexite - Master MINT - U2
Algorithme glouton :
pièces de monnaie
●
Dans une solution optimale :
●
On a au plus 1 pièce de 5;
●
On a au plus 1 pièce de 1;
●
On a au plus 2 pièces de 2;
●
On a au plus 3 pièces qui ne sont pas des pièces
de 10 pour un total inférieur ou égal à 9 car
1 x 5 + 1 x 1 + 1 + 2 x 2 = 1 x 10
●
●
Donc une solution optimale contient un nombre de
pièces de 10 maximum (= à l'algo. glouton).
Il suffit de vérifier que l'algorithme glouton est
optimale lorsque S ≤ 9.
B. Estellon - Complexite - Master MINT - U2
Algorithme glouton :
pièces de monnaie
●
●
L'algorithme glouton est-il optimal si on a des
pièces de valeurs 6, 4 et 1 ?
Non, pour S = 8 :
●
L'algorithme glouton :
–
–
●
1 pièce de 6,
2 pièces de 2.
La solution optimale :
–
2 pièces de 4.
B. Estellon - Complexite - Master MINT - U2
Pièces de monnaie :
programmation dynamique
●
Notation :
●
●
●
Soit {v1, v2, ..., vn} l'ensemble des valeurs
disponibles triées dans l'ordre croissant.
v1=1 pour qu'il existe toujours une solution.
Problème intermédiaire :
●
●
Soit p(K,i) le nombre minimum de pièces de
valeurs {v1, v2, ..., vi} nécessaires pour rendre la
somme K
Nous voulons calculer p(S,n).
B. Estellon - Complexite - Master MINT - U2
Pièces de monnaie :
programmation dynamique
●
Les formules suivantes sont vérifiées :
p(0,i) = 0 pour tout i inclus dans {1,...,n}
p(K,1)=K pour tout K inclus dans {1,...,S}
Si K < vi alors p(K,i) = p(K,i-1)
Si K ≥ vi alors p(K,i) = min{p(K,i-1), p(K-vi,i)+1}
B. Estellon - Complexite - Master MINT - U2
Pièces de monnaie :
programmation dynamique
n
p
S
1
4
6
0
0
0
0
1
1
1
1
2
2
2
2
3
3
3
3
4
4
1
1
5
5
2
2
6
6
3
1
7
7
4
2
8
8
2
2
9
9
3
3
10 10
4
2
Complexité : O(n x S)
Algorithme pseudo-polynomial
B. Estellon - Complexite - Master MINT - U2
Pièces de monnaie :
programmation dynamique
n
p
S
1
4
6
0
0
0
0
1
1
1
1
2
2
2
2
3
3
3
3
4
4
1
1
5
5
2
2
6
6
3
1
7
7
4
2
8
8
2
2
9
9
3
3
10 10
4
2
Construction d'une solution :
en temps O(n + S)
B. Estellon - Complexite - Master MINT - U2
Classe NP
B. Estellon - Complexite - Master MINT - U2
Classe NP
●
NP signifie Polynomial non-déterministe.
●
Un problème de décision appartient à NP si
●
●
●
●
il existe un algorithme vérifieur (déterministe) A;
s'il existe, pour chaque instance I dont la réponse
est « oui », un certificat C(I) de taille polynomiale;
l'algorithme A permet de vérifier que le certificat est
valide ou non en un temps polynomial en la taille de
I.
Remarque :
●
La classe P est incluse dans la classe NP.
B. Estellon - Complexite - Master MINT - U2
Classe NP
Exemples
●
Problème de coloration de graphe :
●
●
●
A chaque graphe G et chaque entier k, la réponse est
« oui » si le graphe G peut être coloré avec k couleur et
« non » sinon.
Certificat : une coloration admissible.
Problème SAT :
●
Certificat : un assignement admissible.
B. Estellon - Complexite - Master MINT - U2
Classe NP
●
Pourquoi « Non-déterministe polynomial » ?
●
Une machine de Turing non-déterministe est
définie par une relation de transition : à chaque
couple (état, car. lu) est associées une ou
plusieurs transitions possibles.
1/0/g
1/1/g
3
1/0/d
B. Estellon - Complexite - Master MINT - U2
Classe NP
●
La réponse est « oui » si et seulement si au moins une
branche d'exécution aboutit sur une réponse positive.
non
non
oui
non
non
non
non
non
« oui »
non
non
« non »
B. Estellon - Complexite - Master MINT - U2
non
non
Classe NP
●
Temps d'exécution : nombre de transitions de
la plus longueur branche d'exécution.
non
non
non
oui
non
non
B. Estellon - Complexite - Master MINT - U2
Classe NP
●
●
Un problème de décision appartient à NP s'il existe
une machine de Turing non-déterministe
polynomiale qui le résout.
Les deux définitions sont équivalentes car :
●
●
Pour les instances positives, on peut fournir à la
machine de Turing non-déterministe le chemin à suivre
pour la rendre déterministe. Ce chemin peut être codé
sous la forme d'une suite de bits de taille polynomiale,
ce qui forme un certificat.
Inversement, l'algorithme vérifieur déterministe peut
être transformé en un algorithme non-déterministe qui
« teste » tous les certificats possibles.
B. Estellon - Complexite - Master MINT - U2
Classe co-NP
●
●
●
Remarque : la définition de NP repose sur une
dissymétrie entre le « oui » et le « non ».
La classe co-NP contient les problèmes pour
lesquels il existe un algorithme polynomial et
non-déterministe qui retourne :
●
« non » si au moins une branche retourne « non »,
●
« oui » si toutes les branches retournent « oui ».
La classe co-NP contient les problèmes pour
lesquels il existe un certificat pour les
instances négatives vérifiables en temps
polynomial.
B. Estellon - Complexite - Master MINT - U2
Classe co-NP
●
Remarque :
La classe P est incluse dans NP et co-NP.
NP
P
co-NP
B. Estellon - Complexite - Master MINT - U2
Réduction
●
Un problème de décision A se réduit en temps
polynomial à un problème de décision B si :
●
●
●
Il existe une machine de Turing déterministe M qui
transforme en temps polynomial toute instance I
de A en une instance M(I) de B;
Pour tout I, la solution de I pour A est identique à la
solution de M(I) pour B.
Remarque : La longueur d'écriture de M(I) est
polynomial en la longueur d'écriture de I.
B. Estellon - Complexite - Master MINT - U2
Les classes P et NP sont fermées
par réduction polynomiale
●
●
Une classe de complexité C est fermée par
réduction si le fait de réduire un problème A à
un problème B de C implique que A appartient
à la classe C.
Remarque :
Les classes P et NP sont fermées par
réduction polynomiale.
B. Estellon - Complexite - Master MINT - U2
NP-complétude
●
●
●
●
Un problème A est NP-difficile si tous les
problèmes de la classe NP se réduisent
polynomialement à A.
Un problème A est NP-complet si :
●
A appartient à la classe NP;
●
A est NP-difficile.
Remarque : si un problème NP-complet appartient à
P alors P=NP, ce qui semble peu probable.
Question ouverte : P est-il différent de NP ?
B. Estellon - Complexite - Master MINT - U2
Théorème de Cook-Levin (1971)
●
●
●
Le problème SAT est NP-complet.
En d'autres termes, tout problème de décision
décidable par une machine de Turing nondéterministe polynomiale peut être réduit en
temps polynomial au problème SAT.
Idée de la preuve : On construit en temps
polynomial un ensemble de clauses
satisfaisables si et seulement si il existe une
branche de l'exécution de la MT nondéterministe qui s'arrête sur « oui ».
B. Estellon - Complexite - Master MINT - U2
Théorème de Cook-Levin
●
Idée de la preuve :
●
Les variables :
–
–
–
●
Les clauses :
–
–
–
–
●
E(i,e) = vrai ssi l'état de la MT à l'instant i est e.
P(i,j) = vrai ssi la position de la MT à l'instant i est j.
L(i,j,c) = vrai ssi, à l'instant i, la case j contient c.
On se trouve dans un et un seul état.
Il n'y a qu'un et un seul caractère dans chaque case.
On applique une transition entre l'instant i et i+1.
On code la configuration initiale et finale.
Remarque : le nombre d'étapes est polynomial.
B. Estellon - Complexite - Master MINT - U2
Réduction et NP-complétude
●
●
Si un problème NP-difficile A se réduit
polynomialement à un problème B alors B est
NP-difficile.
Preuve : tous les problèmes de NP se
réduisent en temps polynomial à A et A se
réduit en temps polynomial à B donc tous les
problèmes de NP se réduisent en temps
polynomial à B
Rappel : la composition de deux algorithmes
polynomiaux produit un algorithme polynomial
B. Estellon - Complexite - Master MINT - U2
3SAT est NP-complet
●
●
Le problème 3SAT appartient à NP.
Réduisons en temps polynomial SAT à 3SAT en
remplaçant chaque clause a1∨a2∨a3∨...∨ak par :
–
(a1∨a2∨z1)
–
(z1∨a3∨z2)
–
(z2∨a4∨z3)
–
...
(zk-3∨ak- 1∨zk)
–
k-2 clauses
B. Estellon - Complexite - Master MINT - U2
Vertex Cover est NP-Complet
●
●
Une couverture par les sommets d'un graphe
G est un sous-ensemble C de sommets de G
tel que, pour chaque arrête (a,b) de G, le
sommet a ou le sommet b appartient à C.
Problème Vertex Cover : Etant donné un
graphe G et un entier k, existe-t-il une
couverture par les sommets de G de taille k ?
B. Estellon - Complexite - Master MINT - U2
Vertex Cover est NP-Complet
●
Réduction de 3SAT à Vertex Cover.
a
x
x
Gadget variable
b
c
Gadget clause
B. Estellon - Complexite - Master MINT - U2
Vertex Cover est NP-Complet
●
Compléter le graphe en ajoutant une arête
entre chaque littéral d'un gadget clause et sa
copie dans le gadget variable.
x
x
y
y
z
z
x
k=nombre de variables +
2 * nombre de clauses
y
z
B. Estellon - Complexite - Master MINT - U2
Clique est NP-complet
●
●
Dans un graphe, une clique est un sousensemble de sommets deux à deux voisins.
Problème Clique : Étant donné un graphe G et
un entier k, existe-t-il une clique de taille k ?
B. Estellon - Complexite - Master MINT - U2
Clique est NP-complet
●
●
Réduction de Vertex Cover à Clique.
Remarque : un graphe G=(V,E) possède une
couverture par les sommets de taille k si et
seulement si son complémentaire contient une
clique de taille |V|-k.
B. Estellon - Complexite - Master MINT - U2
Cycle Hamiltonien est NP-complet
●
●
Un cycle hamiltonien d'un graphe G est un
cycle qui passe une et une seule fois par tous
les sommets de G.
Problème du Cycle Hamiltonien : Étant donné
un graphe G, le graphe G possède-t-il un cycle
hamiltonien ?
B. Estellon - Complexite - Master MINT - U2
Cycle Hamiltonien est NP-complet
●
Le gadget arête :
B. Estellon - Complexite - Master MINT - U2
Cycle Hamiltonien est NP-complet
●
Réduction de Vertex Cover.
k=2
a
b
c
d
1
2
a
a
b
c
b
c
c
d
B. Estellon - Complexite - Master MINT - U2
Cycle Hamiltonien est NP-complet
●
Réduction de Vertex Cover.
k=2
a
b
c
d
1
2
a
a
b
c
b
c
c
d
B. Estellon - Complexite - Master MINT - U2
Voyageur de commerce
●
Étant donné un graphe complet G=(V,E) et une
fonction de longueur l : E->N sur les arrêtes,
trouver un cycle hamiltonien de longueur
minimum.
2
4
3
Longueur = 2+4+7+3+2+1 = 19
7
2
1
Le problème du voyageur de commerce
est un problème d'optimisation.
B. Estellon - Complexite - Master MINT - U2
Voyageur de commerce
●
Le problème du voyageur de commerce est
NP-difficile. Réduction de Cycle Hamiltonien :
●
●
●
●
Considérons un graphe G=(V,E) et construisons
une instance du voyageur de commerce.
Soit G'=(V,E') le graphe complet construit sur
l'ensemble de sommets V.
Fixons l(e):=1 si e ∈ E et l(e):=2 sinon.
Le graphe G' contient un cycle hamiltonien de
longueur minimale égale à |V| si et seulement si G
contient un cycle hamiltonien.
B. Estellon - Complexite - Master MINT - U2
Algorithmes d'approximation
●
Un algorithme d'approximation avec un
facteur (d'approximation) f pour un problème
d'optimisation P est un algorithme qui, pour
toute instance I de P, retourne en temps
polynomial une solution dont le coût est :
●
Pour les problèmes de minimisation, inférieur ou
égal à f fois celui d'une solution optimale de I.
OPT
●
≤
ALGO
≤
f·OPT
Pour les problèmes de maximisation, supérieur ou
égal à 1/f fois celui d'une solution optimale de I.
B. Estellon - Complexite - Master MINT - U2
Facteur 2 pour Vertex Cover
●
Vertex Cover est approximable avec un facteur 2.
Commencer avec un ensemble S vide.
Tant qu'il existe des arêtes non-couvertes
Choisir une arête { x, y} non-couverte
Ajouter x et y à S
Supprimer les arêtes adjacentes à x et à y
Retourner S
●
●
●
Soit n le nombre d'arêtes choisies par l'algo.
Pour une arête choisie, deux sommets sont ajoutés à S.
Donc, ALGO = 2n.
Les arêtes choisies sont deux à deux disjointes.
Donc, OPT ≥ n.
ALGO ≤ 2OPT
B. Estellon - Complexite - Master MINT - U2
Voyageur de commerce
●
●
Si P  NP, le problème du voyageur de commerce
n'est pas approximable avec un facteur f
constant.
Réduction de Cycle hamiltonien.
●
●
Considérons un graphe G=(V,E) (instance du
problème Cycle hamiltonien).
Construisons une instance du voyageur de commerce.
–
–
Soit G'=(V,E') le graphe complet.
Fixons l(e):=1 si e ∈ E et l(e):=1+f|V| sinon.
B. Estellon - Complexite - Master MINT - U2
Voyageur de commerce
●
●
●
●
Le graphe G possède un cycle hamiltonien s'il existe un
cycle hamiltonien dans G' de coût égal à |V|.
Sinon tous les cycles hamiltoniens de G' ont un coût
supérieur ou égal à (f+1)|V|.
Donc un algorithme d'approximation avec un facteur f
doit retourner une solution de coût :
●
= |V| si G possède un cycle hamiltonien;
●
> f|V| si G n'en possède pas.
Si P  NP, cet algorithme ne peut exister car il déciderait
en temps polynomial le problème du cycle hamiltonien.
B. Estellon - Complexite - Master MINT - U2
Voyageur de commerce
●
Supposons que la fonction de longueur vérifie
l'inégalité triangulaire.
b
a
≤a+b
●
Dans ce cas, le problème du voyageur de
commerce est approximable avec un facteur 2.
B. Estellon - Complexite - Master MINT - U2
Voyageur de commerce
●
Algorithme avec un facteur 2 :
●
Trouver un arbre couvrant A de poids minimum.
●
Construire un cycle C à partir de A :
Longueur du cycle C
≤ 2 fois le poids de A
≤ 2 OPT
Un cycle optimal moins une arête est un
arbre couvrant donc, par optimalité de A,
poids de A ≤ OPT
B. Estellon - Complexite - Master MINT - U2
Voyageur de commerce
●
●
Complexité de l'algorithme facteur 2 :
●
Soit n le nombre de sommets
●
Arbre couvrant : O(n2log n) car n(n-1)/2 arêtes
●
Parcours en profondeur : O(n)
●
Complexité totale : O(n2log n)
Attention à l'algorithme de tri si vous utilisez
l'algorithme de Kruskal :
●
Avec un algorithme quadratique, on obtient une
complexité en O(n4) !
B. Estellon - Complexite - Master MINT - U2
Couverture d'ensemble (Set Cover)
●
Une instance du problème Set Cover est formée de :
●
●
●
un ensemble fini X;
une famille F de sous-ensembles de X telle que tout
x ∈ X appartient à au moins un ensemble de F.
Le problème Set Cover consiste à trouver une sousfamille S de F de cardinalité minimum qui couvre tous
les éléments de X (i.e. chaque élément de X est
contenu dans au moins un ensemble de S).
B. Estellon - Complexite - Master MINT - U2
Couverture d'ensemble (Set Cover)
●
Remarque : Set Cover est NP-difficile car
Vertex Cover se déduit polynomialement au
problème Set Cover
B. Estellon - Complexite - Master MINT - U2
Couverture d'ensemble (Set Cover)
●
●
Le problème Set Cover est approximable avec un
facteur k lorsque |{s∈F : x∈s}| ≤ k pour tout x∈X.
Modélisation en PLNE :
Minimiser ∑s∈Fys
avec ∑s∈F : x∈s ys ≥ 1 pour tout x∈X
et ys∈{0, 1} pour tout s∈F
B. Estellon - Complexite - Master MINT - U2
Couverture d'ensemble (Set Cover)
●
●
Le problème Set Cover est approximable avec un
facteur k lorsque |{s∈F : x∈s}| ≤ k pour tout x∈X.
On relâche le programme linéaire :
Minimiser ∑s∈Fys
avec ∑s∈F : x∈s ys ≥ 1 pour tout x∈X
et ys ≥ 0 pour tout s∈F
●
On résout le programme linéaire en temps
polynomial.
B. Estellon - Complexite - Master MINT - U2
Couverture d'ensemble (Set Cover)
●
●
Le problème Set Cover est approximable avec un
facteur k lorsque |{s∈F : x∈s}| ≤ k pour tout x∈X.
Pour tout x∈X,
●
∑s∈F : x∈s ys≥ 1 et |{s∈F : x∈s}| ≤ k
●
Donc ys' ≥ 1/k pour au moins un s'∈{s∈F : x∈s}
●
Donc S:={s∈F : ys≥ 1/k} couvre X.
●
De plus, |S| ≤ k·∑s∈Fys ≤ k·OPT
B. Estellon - Complexite - Master MINT - U2
Couverture d'ensemble (Set Cover)
●
●
Le problème Set Cover est approximable avec
un facteur (ln |X|+1).
Algorithme glouton :
U←X
C←Ø
Tant que U ≠ Ø faire
Choisir un s dans F qui maximise |s∩U|
U←U–s
C ← C ∪ {σ}
Ρε τ ουρνερ Χ
B. Estellon - Complexite - Master MINT - U2
Couverture d'ensemble (Set Cover)
●
●
Soit si le ième ensemble choisi par l'algo.
Si x est couvert pour la première fois par si, on
pose
1
c x :=
∣si − s1∪s 2∪⋯∪s i−1 ∣
●
Soit C* une solution optimale.
●
Nous avons, |C| = ∑x∈Xcx ≤ ∑s∈C*∑x∈scx
●
Si, pour tout s de F, ∑x∈scx ≤ H(|s|) alors
●
|C| ≤ ∑s∈C*H(|S|) ≤ |C*|·H(|X|) ≤ |C*|·(ln |X| +1)
B. Estellon - Complexite - Master MINT - U2
Couverture d'ensemble (Set Cover)
●
●
u0 = |s|
Soit s∈F.
Pour tout i, soit ui le nombre d'éléments non
couverts dans s après le choix de si par l'algo.
●
Soit k le plus petit indice i tel que ui=0.
●
Nous avons
k
1
∑ c x =∑ ui−1−u i  ∣s − s ∪s ∪⋯∪s ∣
x ∈s
i =1
i
1
2
i−1
Et pour tout i entre 1 et k, nous avons
ui−1=∣s− s1∪s 2∪⋯∪si −1 ∣∣si −s1∪s2 ∪⋯∪si−1 ∣
B. Estellon - Complexite - Master MINT - U2
Couverture d'ensemble (Set Cover)
●
Par conséquent,
k
1
∑ c x ∑ ui −1−ui  u
x ∈s
i=1
i−1
Pour tous entiers a, b avec a inférieur à b, on a :
b
Donc,
1
1
H b− H a= ∑ b−a
b
i =a1 i
k
∑ c x ∑  H ui−1− H ui 
x ∈s
= H u 0 − H u k 
i=1
= H ∣s∣
B. Estellon - Complexite - Master MINT - U2
Recherche locale
●
●
Le recherche locale est une méta-heuristique
utilisée pour résoudre des problèmes
d'optimisation difficiles.
Algorithme de descente par recherche locale :
●
On débute avec une solution admissible;
●
Tant qu'il nous reste du temps...
–
–
On choisit une transformation locale;
Si cette transformation n'augmente pas le coût
de la solution courante, on l'effectue.
B. Estellon - Complexite - Master MINT - U2
Recherche locale
●
●
●
●
Donne en pratique des résultats intéressants pour de
nombreux problèmes d'optimisation;
Pas (ou peu) d'analyse théorique de la qualité des
solutions retournées par ces méthodes;
Avec un algorithme de descente simple, il est possible de
tomber dans des minima locaux. Dans ce cas, on peut
●
modifier les transformations autorisées (i.e. le voisinage);
●
relâcher certaines contraintes;
●
adapter la fonction de coût pour mieux guider la recherche;
●
Autoriser la dégradation dans certains cas (recuit simulé)
Remarque : il est possible de partir d'une solution obtenue
à l'aide d'un algorithme d'approximation.
B. Estellon - Complexite - Master MINT - U2
Recherche locale
●
●
●
Dans tous les cas, le fait de tester un grand nombre
de transformations ne peut qu'améliorer en pratique
l'efficacité de la méthode.
Donc, il est important de faire attention à la
complexité (théorique) de la procédure d'évaluation
des mouvements.
Pour améliorer la rapidité de la descente, il est
possible de choisir les transformations en essayant de
« limiter » sa probabilité d'échec. Cette procédure de
choix doit avoir une complexité faible pour que
l'algorithme reste efficace.
B. Estellon - Complexite - Master MINT - U2
Recherche locale
●
Application de la recherche locale à la coloration :
Coût de la solution :
Nombre d'arêtes avec un conflit.
●
Voisinage : modifier la couleur d'un sommet
●
Complexité de l'évaluation « brutale » : O(|E|)
●
Complexité d'une évaluation incrémentale : O(1)
B. Estellon - Complexite - Master MINT - U2
Recherche locale
●
●
●
Pour cela, on conserve (et on met à jour) pour
chaque sommet v et pour chaque couleur c, le
nombre nc[v][c] de voisins de v ayant la couleur c.
Si v a la couleur c et qu'on lui donne la couleur c',
alors on sait que le coût de la solution va évoluer
de nc[v][c'] – nc[v][c]. --> Complexité : O(1).
Mise à jour (si on effectue la transformation) :
●
Modifier nc[u][c] et nc[u][c'] pour les voisins u de v;
●
Complexité : O(degré(v)).
B. Estellon - Complexite - Master MINT - U2
Téléchargement