Algorithmique Avancée Cours n 7 : Classes de complexité P et NP Master 1 Génie Logiciel Université Abou Bakr Belkaïd Tlemcen 2016/2017 Mahfoud Houari mahfoud.houari@gmail.com hmahfoud.wordpress.com
Pourquoi étudier la complexité? 1. On étudie uniquement les problèmes décidables (qui terminent). 2. On s'intéresse souvent à la complexité minimale d'un algorithme dans les plus mauvais cas. 3. Borner les ressources nécessaires d'un algorithme. 4. Classer un problème : a) Praticable b) Impraticable (NP complet, NP dur, EXPTIME, APXHard,...) 5. Dire si un algorithme est optimal. 6. Comparer entre deux algorithmes résolvant le même problème.
Qu'est ce que la complexité? (rappel) Définition : La complexité d'un problème est le minimum des coûts de tous les algorithmes permettant de le résoudre dans le pire des cas. On s'intéresse souvent à la complexité temporelle. D'autres critères de mesure : espace, nombre d'appels récursifs, nombre de comparaisons, nombre de processus crées,
Qu'est ce que la complexité? (rappel) Définition : La complexité d'un problème est le minimum des coûts de tous les algorithmes permettant de le résoudre dans le pire des cas. On s'intéresse souvent à la complexité temporelle. D'autres critères de mesure : espace, nombre d'appels récursifs, nombre de comparaisons, nombre de processus crées, Complexité pire des cas (WCC) v.s en moyenne (ACC) : WCC est le maximum des coûts sur les différentes entrées. ACC est la moyenne de tous les coûts sur les différentes entrées. ACC est souvent difficile à mesurer. ACC reflète le mieux le comportement de l'algorithme. Il se peut que le Worst Case ne se produit jamais.
Qu'est ce que la complexité? (rappel) Définition : La complexité d'un problème est le minimum des coûts de tous les algorithmes permettant de le résoudre dans le pire des cas. Complexité minimale dans le pire des cas? Si un problème est quadratique alors : 1) Il existe un algorithme qui le résout avec une WCC quadratique. && 2) Il n'y a pas un autre algorithme qui le résout avec une WCC plus petite.
Comment calculer la complexité? Calculer la complexité d'un «algorithme» : Arbres de décision. Calculer la complexité d'un «problème» : Les réductions.
Arbres de décision Exemple (Problème de pesée) Description : Soient données N pièces de monnaie dont une est fausse et plus légère que les autres. On possède une balance à plateaux. Comment détecter cette pièce fausse en minimisant le nombre de pesées? Solution naïve : O(????).
Arbres de décision Exemple (Problème de pesée) Description : Soient données N pièces de monnaie dont une est fausse et plus légère que les autres. On possède une balance à plateaux. Comment détecter cette pièce fausse en minimisant le nombre de pesées? Solution naïve : O( N ).
Arbres de décision Exemple (Problème de pesée) Description : Soient données N pièces de monnaie dont une est fausse et plus légère que les autres. On possède une balance à plateaux. Comment détecter cette pièce fausse en minimisant le nombre de pesées? Solution naïve : O( N ). Algorithme DPR : Soit un ensemble P contenant N pièces. Construire deux ensembles P1 et P2 ayant chacun N/2 pièces. Si N est impair et P1 et P2 ont le même poids alors la pièce restante et la pièce fausse. Sinon : L'ensemble le plus léger est celui qui contient la fausse pièce. Recommencer l'algorithme avec l'ensemble ayant la fausse pièce.
Arbres de décision Exemple (Problème de pesée) Rech(P) P1 P2 Pièce restante R Poids(P1) < Poids(P2) Poids(P2) < Poids(P1) Poids(P2) = Poids(P1) return Rech(P1) return Rech(P2) return R
Arbres de décision Exemple (Problème de pesée) Rech(P) P1 P2 Pièce restante R Poids(P1) < Poids(P2) Poids(P2) < Poids(P1) Poids(P2) = Poids(P1) return Rech(P1) return Rech(P2) return R P11 P12 R1...
Arbres de décision Exemple (Problème de pesée) Rech(P) P1 P2 Pièce restante R Poids(P1) < Poids(P2) Poids(P2) < Poids(P1) Poids(P2) = Poids(P1) 2 pesées return Rech(P1) return Rech(P2) return R P11 P12 R1 2 pesées...
Arbres de décision Exemple (Problème de pesée) Rech(P) P1 P2 Pièce restante R Poids(P1) < Poids(P2) Poids(P2) < Poids(P1) Poids(P2) = Poids(P1) 2 pesées return Rech(P1) return Rech(P2) return R P11 P12 R1 2 pesées.... À chaque niveau on fait 2 pesées.. L'arbre comprend log 2 (N) niveaux.. Nombre total des pesées : O(log 2 (N)).
Arbres de décision Exemple (Problème de pesée) Coût de décomposition = N/2 Coût de décomposition = N Rech(P) P1 P2 Pièce restante R Poids(P1) < Poids(P2) Poids(P2) < Poids(P1) Poids(P2) = Poids(P1) return Rech(P1) return Rech(P2) return R P11 P12 R1... Quel serait le coût total si on s'intéresse au temps nécessaire, à chaque niveau, pour la décomposition en deux ensembles?
Réductions Principe : Soit un problème P1 qui admet une WCC O(C). On dit que le problème P2 se réduit à P1 si chaque instance de P2 peut être transformée en une instance de P1 à travers une fonction de réduction R. Résoudre P2(x) revient à résoudre P1(R(x)) en O(C). Si la fonction R est polynomiale alors on parle de réduction polynomiale. On note ça par : P2 P1. p
Réductions Exemple : Soit le problème P1 qui consiste à trouver une clique maximale dans un graphe G. Soit le problème P2 qui consiste à trouver un stable (ensemble indépendant) maximal dans un graphe G. Il est facile de prouver que : P2 P1. p
Classe P : Définition : La classe P (ou PTIME) est la classe des problèmes informatique pour lesquels il existe un algorithme de résolution ayant une WCC polynomiale en temps. Conséquence : Un problème est dit praticable s'il appartient à la classe P.
Classe P : Quelques exemples de problèmes : Trier un tableau est en P. Calculer la fonction de Fibonacci est en P. Sac à dos fractionnaire est en P. Sous tableau maximal est en P. Sac à dos 0/1 n'est pas en P. Trouver un chemin hamiltonien n'est pas en P.
Autres classes : PSPACE : Problèmes admettant une WCC polynomiale en espace.
Autres classes : PSPACE : Problèmes admettant une WCC polynomiale en espace. PTIME PSPACE : Chaque problème PTIME consomme souvent un espace polynomiale.
Autres classes : PSPACE : Problèmes admettant une WCC polynomiale en espace. PTIME PSPACE : Chaque problème PTIME consomme souvent un espace polynomiale. EXPTIME : Problèmes admettant une WCC exponentielle en temps. NP :???.
Classe NP : Définition : La classe NP (ou Non déterministe Polynomial) est la classe des problèmes informatique pour lesquels il n'existe pas un algorithme de résolution ayant une WCC polynomiale en temps, MAIS, étant donné une solution, cette solution peut être vérifiée en temps polynomial. Exemple : Trouver un cycle hamiltonien dans un graphe est dans NP. Vérifier si un chemin donnée P est hamiltonien peut être vérifié en O( P ) [à réfléchir].
Classe NP : Quelques exemples de problèmes en NP : Chemin ou cycle hamiltonien. Sac à dos 0/1. Emploi du temps. Clique maximale (stable maximal). Répartir des étudiants en trinômes compatibles.
Classe NP : Savoir si un problème est en NP : 1. Le réduire à un problème qui est en NP. OU 2. Vérifier qu'il nécessite un traitement non polynomial && qu'une solution proposée est vérifiable en temps polynomial.
P == NP ou P == NP? /