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 =a1 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