IFT Chapitre 1 Classes de complexité fondamentales:

Slides:



Advertisements
Présentations similaires
Explorer un espace d’états
Advertisements

Chapitre annexe. Récursivité
La théorie du monde est petit
Dans cette partie Graphes Eulériens.
Détecteurs de fautes pour réseaux dynamiques P. Sens, L. Arantes, M. Bouillaguet Projet REGAL.
Algorithmes et structures de données avancés
Risques d’erreur statistique et test statistique
Introduction à l’Algorithmique
Calculs de complexité d'algorithmes
Algorithmique et évaluation
Les tests d’hypothèses (I)
GEF 435 Principes des systèmes d’exploitation
Inférence statistique
Cours d'algorithmique 11 / Intranet 1 9 janvier 2006 Cours dAlgorithmique N P - complétude.
Séminaire Biblio LISC - 3/04/02 Complexité, information Daprès JP Delahaye (1999)
Séminaire Florin Périer Alain Gély LIMOS
Conception et analyse des algorithmes
Septième étape : travailler avec des graphes probabilistes
Démarche de résolution de problèmes
Algorithmique et Programmation
Preuves interactives: IP, AM, MA et isomorphisme de graphe
8PRO100 Éléments de programmation Comment faire prendre une décision à un ordinateur?
Chapitre 2 Réductions: exemples et méthodes
ALGORITHMIQUE en classe de seconde
Algorithmique et Programmation
Techniques de test Boulanger Jean-Louis.
Algorithme de Bellman-Ford
Chapitre 2 Réductions: exemples et méthodes
Coloration gap sommet identifiante de graphes
II- L’algorithme du recuit simulé (pseudo-code)
Chapitre 3 Machines de Turing.
Contourner la NP-complétude
IFT Complexité et NP-complétude
IFT Au delà de NP: hiérarchie polynomiale, EXP, NEXP.
IFT Théorème PCP: Aperçu et applications à linapproximabilité.
Algorithmes d ’approximation
Algorithmique (Introduction)
8PRO107 Éléments de programmation
Conception et analyse des algorithmes Les algorithmes probabilistes
Algorithmes probabilistes
21 février 2006Cours de graphes 2 - Intranet1 Cours de graphes Les plus courts chemins, les chemins les plus légers : à laide de la vague, à laide de la.
Les Algorithmes de Tri Introduction Tri par Sélection
ASI 3 Méthodes numériques pour l’ingénieur
Indécidabilité.
8INF8061 Conception et analyse des algorithmes Comment comparer deux problèmes?
Modélisation géométrique de base
IFT Complexité et NP-complétude Chapitre 0 Rappels.
Conception et analyse des algorithmes
D.E ZEGOUR Ecole Supérieure d’Informatique
Programmation linéaire en nombres entiers
STATISTIQUES – PROBABILITÉS
D.E ZEGOUR Ecole Supérieure d’Informatique. Problèmes de décision Concepts de base Expressions régulières Notation particulière pour exprimer certaines.
Exploration systématique de graphes
2008/ Plan du cours 1.Introduction –Contenu du cours 2.Logique mathématique –Calcul propositionnel –Calcul des prédicats –Logique floue et aide à.
Problème de double digestion
Recherches locales et méta-heuristiques
2005/2006 Structures de Données Introduction à la complexité des algorithmes.
CPI/BTS 2 Algorithmique & Programmation La récursivité Algo – Prog CPI/BTS2 – M. Dravet – 14/09/2003 Dernière modification: 14/09/2003.
STATISTIQUE INFERENTIELLE LES TESTS STATISTIQUES
Quelques pistes d’algorithmes possibles au lycée
Algorithmique et Complexité
Cours 5 - Trois algorithmes de tri d'un tableau
Recuit simulé Une métaheuristique venue de la métallurgie.
Algorithmique Boucles et Itérations
Chap. 3 Récursion et induction. Les définitions par récurrence consistent à construire des objets finis, à partir d'autres, selon certaines règles. Les.
Scénario Quatre hipsters entrent en collision un dans l'autre dans un ascenseur plein de personnes. En conséquence ils laissent tomber leurs téléphones.
Cycle, Cocycle, Arbre et Arborescence
ALGORITHME ET PROGRAMMATION RÉVISION Informatique et Sciences du Numérique.
Complexité algorithmique
CSI 3505 / Automne 2005: Conception et Analyse des Algorithmes I.
Transcription de la présentation:

IFT-66975 Chapitre 1 Classes de complexité fondamentales: P, BPP, RP, co-RP, ZPP, NP, co-NP, PP

Quatre exemples 1- Problème du tri Entrée: une liste d’entiers a1, …, an Sortie: Cette liste triée en ordre croissant.

Algorithme classiquement utilisé: Quicksort: « entrée a1, …, an Comparer tous les entiers au pivot a1 pour obtenir les ensembles P et G des ai respectivement plus petits et plus grands que a1. Retourner la liste Quicksort(P), a1, Quicksort(G). »

Problème classique de l’analyse de Quicksort: sur une liste d’entrée aléatoire, Quicksort nécessite (n log n) comparaisons mais si la liste d’entrée est triée, le nombre de comparaisons est (n2). Solution: exécuter l’algorithme sur une permutation aléatoire de la liste d’entrée ou choisir les pivots de façon aléatoire. Alors l’espérance du temps d’exécution est (n log n).

Question: Ce polynôme est-il égal au polynôme nul? 2- Problème du test de nullité d’un polynôme sur un corps fini. Entrée: Un polynôme à plusieurs variables sur un corps fini F (par exemple, les entiers modulo un nombre premier q, Zq). Ce polynôme p(x1, …, xn) est représenté par un circuit arithmétique. Question: Ce polynôme est-il égal au polynôme nul?

Exemples: Sur Z2, les polynômes x2 – x et x2 + x sont toujours 0. Sur Z3, x2 – x est nul mais x2 + x n’est pas toujours nul car 12 + 1  2 (mod 3). Sur Zp, xp-1 – x est nul. (Petit théorème de Fermat) Sur Z5, le polynôme x2 + xy – 2yz + z3 n’est pas nul. Si on prend x = 1, y = 0 et z = 2, on a bien 1 + 0 – 0 + 8 = 9 et 9  0 (mod 5).

Idée apparemment raisonnable pour un algorithme: Choisir au hasard une valeur i  F pour chaque variable xi et calculer p(1, …, n). Si la valeur est non-nulle, arrêter et conclure que p est non-nul. Sinon, conclure que p est nul.

Temps d’exécution polynomial. Pas si bête! Si le polynôme est nul alors l’algorithme ne se trompe pas. Si le polynôme est non-nul, il faudrait être malchanceux pour tomber précisément sur des i tels que p(1, …, n)  0. Peut-on formaliser ces intuitions?

Lemme: [Schwartz, Zippel, deMillo, Lipton] Soit p(x1, …, xn) un polynôme non-nul de degré d sur Zq, avec d < q. Alors on a Pr[p(1, …, n)  0]  d/q où les i sont choisis uniformément aléatoirement et de façon indépendante dans S.

Algorithme modifié: «  Choisir au hasard une valeur i  Zq pour chaque variable xi et calculer p(1, …, n). Si la valeur est non-nulle, arrêter et conclure que p est non-nul. Sinon, répéter 1 au plus n fois. » Si p est nul alors la probabilité que l’algorithme retourne la bonne réponse est 1. Si p est non-nul, alors chaque exécution de 1 a une probabilité d/q de nous induire en erreur. La probabilité de se tromper n fois de suite est seulement (d/q)n. (Note: cette analyse n’est rassurante que si d < q)

3- Test de graphe biparti (2-colorabilité d’un graphe) Entrée: Un graphe G = (V,E). Question: Le graphe est-il biparti? Peut-on colorier les nœuds du graphe avec 2 couleurs tel que deux nœuds adjacents ont des couleurs différentes?

Idée simple: colorier un premier nœud et colorier tous ses voisins avec l’autre couleur. Il est clair que ce procédé nous permet de tester si le graphe est 2-coloriable en temps O(|G|)

4. 3-coloriage de graphe Entrée: Un graphe G = (V,E). Question: Le graphe est-il 3-coloriable? Peut-on colorier chaque nœud en bleu, rouge ou vert tel que deux nœuds adjacents aient des couleurs différentes?

Algorithme: «  Choisir un premier nœud et le colorier en rouge. Choisir un noeud non-colorié voisin d’un nœud colorié et le colorier d’une couleur possible choisie au hasard.  Si tout le graphe a été colorié, répondre oui. Si un nœud n’a pas de couleur possible répondre non.»

Si le graphe est impossible à 3-colorier, alors cet algorithme répond toujours non. Si le graphe est 3-coloriable, alors il est possible que l’algorithme ne s’en rende pas compte. La probabilité que l’algorithme trouve un 3-coloriage est peut-être très faible. Même un grand nombre de répétitions de l’algorithme pourrait ne pas suffire.

Machines de Turing probabilistes Définition: Une machine de Turing probabiliste est un sextuplet M = (Q,,,q0,0, 1,Q’) Q un ensemble fini d’états, q0  Q l’état initial, Q’  Q des états d’arrêt.  un alphabet d’entrée.  un alphabet de ruban qui contient  et au moins un symbole blanc b. 0, 1: Q    Q    {-1,0,1} deux fonctions de transition.

L’exécution se fait à l’aide d’une suite de bits aléatoires indépendants X1, X2, … tels que Pr[Xi = 0] = Pr[Xi = 1] = ½. À la ième étape du calcul, la fonction de transition Xi est utilisée.  Formalisation naturelle du concept d’algorithme probabiliste.

Deux notions de temps de calcul: Le temps de calcul moyen de M sur w est l’espérance du nombre d’étapes avant l’arrêt lorsque l’entrée est w. Le temps moyen de calcul de M est la fonction t: N  N définie par t(n) = max{temps moyen de M sur w: |w| = n}. Le temps de calcul de M sur w est le maximum (peut importe les bits aléatoires) du nombre d’étapes avant l’arrêt lorsque l’entrée est w. Le temps de calcul de M est la fonction t: N  N définie par t(n) = max{temps de M sur w: |w| = n}. Note: l’espérance n’est pas calculée sur l’espace des entrées mais bien sur l’espace des choix probabilistes de la machine M.

Temps espéré polynomial EP: classe des problèmes de calcul pour lesquels il existe un algorithme probabiliste dont le temps de calcul moyen est polynomial. Note: Il est possible que P  EP, mais cela reste un problème ouvert.

Algorithmes tolérant l’erreur Définition: Un algorithme probabiliste M calcule la fonction f avec une probabilité d’erreur (n) si Pr[M(w)  f(w)]  (|w|) pour tous les mots w. Note: Différent d’un algorithme qui calcule f correctement sur une grande proportion d’entrées.

Définition: BPP((n)) est la classe des fonctions f telles qu’il existe un algorithme probabiliste avec temps de calcul polynomial calculant f avec probabilité d’erreur (n) < ½. Si la probabilité d’erreur est très faible, on peut raisonnablement considérer ces problèmes comme ceux pour lesquels il existe un algorithme efficace. Note de terminologie: souvent appelés algorithmes Monte Carlo.

Définition: RP((n)) est la classe des problèmes de décision L tels qu’il existe un algorithme probabiliste M avec temps de calcul polynomial et tel que Si w  L, alors Pr[M rejette w]  (|w|) < 1. Si w  L, alors Pr[M accepte w] = 0. L’erreur ne peut se produire que dans le cas où l’entrée devrait être acceptée.

Définition: co-RP((n)) est la classe des problèmes de décision L tels que le complément Lc de L est dans la classe RP((n)). De façon générale, pour chaque classe C de langages (problèmes de décision), on notera comme co-C l’ensemble des langages dont le complément fait partie de C.

Définition: ZPP((n)) est la classe des problèmes de décision L tels qu’il existe un algorithme probabiliste M avec temps de calcul polynomial et tel que pour tout w, M(w)  {oui,non,?} et Pr[M(w) = ?]  (|w|) < 1. Si M(w) = oui alors w  L. Si M(w) = non alors w  L. L’algorithme ne se trompe jamais lorsqu’il répond mais il peut ne pas répondre. Note terminologique: algorithmes dits Las Vegas.

ZPP((n)) = RP((n))  co-RP((n)). Théorème: pour toute fonction d’erreur (n), on a ZPP((n)) = RP((n))  co-RP((n)).

Théorème: EP = ZPP(½). Dans une certaine mesure, cela permet d’ignorer la notion de temps de calcul moyen.

Théorème: Pour tous polynômes p(n) et q(n) on a ZPP(1-1/p(n)) = ZPP(2-q(n)) RP(1-1/p(n)) = RP(2-q(n)) Si un algorithme ZPP ou RP n’a pas une chance trop écrasante d’échec, alors on peut dramatiquement améliorer sa performance. (Souvent appelé amplification ou boosting)

Définitions: Un problème de décision appartient à ZPP s’il appartient à ZPP(½). Donc tout L  ZPP(1-1/p(n)) fait partie de ZPP. Un problème de décision appartient à ZPP* s’il appartient à ZPP((n)) pour un (n) < 1. Un problème de décision appartient à RP s’il appartient à RP(½). Donc tout L  RP(1-1/p(n)) fait partie de RP. Un problème de décision appartient à RP* s’il appartient à RP((n)) pour un (n) < 1.

L’amplification des algorithmes BPP est problématique à cause de notre définition de BPP mais on peut démontrer: Théorème: Pour tous polynômes p(n) et q(n), on retrouve les mêmes problèmes de décision dans BPP(1/2 – 1/(p(n)) et BPP(2-q(n)). Possible aussi d’étendre ce théorème à certains problèmes d’optimisation.

Définitions: Un problème de calcul appartient à BPP s’il appartient à BPP(1/3). Un problème de calcul appartient à PP s’il appartient à BPP((n)) pour un (n) < ½.

L’état du monde Pour les problèmes de décision, on a PP BPP RP* Co-RP* ZPP* = RP*  co-RP* ZPP = EP = RP  co-RP P

Pourquoi RP*? À quoi bon définir RP* alors qu’un algorithme qui a une chance écrasante d’échec est inutile? Parce que beaucoup de problèmes intéressants se retrouvent dans cette classe!

Machines de Turing non-déterministes Définition: Une machine de Turing non-déterministe est un septuplet M = (Q,,,q0,0, 1,Q’0,Q’1) Q un ensemble fini d’états, q0  Q l’état initial, Q’0, Q’1  Q des états d’arrêt.  un alphabet d’entrée.  un alphabet de ruban qui contient  et au moins un symbole blanc b. 0, 1: Q    Q    {-1,0,1} deux fonctions de transition.

Les états d’arrêts sont soit acceptants (Q’1) soit rejetants (Q’0). Les machines non-déterministes servent à accepter des langages. La machine M accepte l’entrée w s’il existe une séquence de bits X1, X2, … telle que l’exécution définie par ces bits mène à un état acceptant. Sinon, elle rejette w. Le temps d’exécution de M sur w est le maximum sur tous les choix de Xi du nombre d’étapes avant d’atteindre un état d’arrêt.

Problème: les machines non-déterministes n’existent que conceptuellement! Pour les simuler il faut essayer tous les choix possibles de Xi ou alors « savoir » d’avance quels bits choisir. Essayer tous les choix possibles requiert un temps exponentiellement plus grand.

Définition: Un problème de décision (ou un langage L) appartient à NP s’il existe une m.t. non-déterministe avec un temps de calcul polynomial qui accepte L. Théorème: RP* = NP.

L’état du monde (mis à jour) Pour les problèmes de décision, on a PP BPP NP Co-NP RP Co-RP NP  co-NP ZPP = EP = RP  co-RP P

Système de preuves Algorithme NP en deux étapes. On veut savoir si w  L. Choix d’une « preuve » que w  L. Vérification de cette preuve. Quatre conditions: la preuve est une chaîne de bits de longueur p(|w|) pour un certain polynôme p. La vérification se fait en temps q(|w|) pour un certain polynôme q. Si w  L alors il existe une preuve valide qui montre que w  L. Si w  L alors il n’existe aucune preuve valide qui montre que w  L.

L = {x|  z  {0,1}p(|x|): (x,z)  L’}. Théorème: Un langage L est dans NP si et seulement s’il existe un polynôme p et un langage L’  P tel que L = {x|  z  {0,1}p(|x|): (x,z)  L’}. Formalisation précise des «systèmes de preuves».

Exemple 3-coloriage d’un graphe. Colorier chaque nœud avec une des 3 couleurs. Vérifier que chaque nœud a bien une couleur différente de celle de ses voisins. La preuve est bien de longueur polynomiale. La vérification se fait clairement en temps polynomial. Si le graphe est 3-coloriable alors par définition il existe une preuve valide. S’il n’est pas 3-coloriable alors tous les essais de coloriage doivent contenir un conflit détecté à la vérification.

Problèmes de NP (exemples) Problème du commis-voyageur (TSP): Entrée: un ensemble de ville v1, …, vn, un coût de déplacement dij entre vi et vj et un objectif de coût C. Question: Existe-t-il un circuit qui passe par toutes les villes et dont le coût total est au plus C?

Choix non-déterministe d’un circuit. Ce problème est dans NP. Choix non-déterministe d’un circuit. Calcul du coût de ce circuit et vérification que ce coût est  C. la « preuve » est de longueur nlog n. La vérification se fait en temps O(n).

Primalité Entrée: Un entier q de n bits. Question: q est-il un nombre premier? Entiers composés Question: q est il un entier composé?

Problèmes respectivement dans co-NP et NP. Algorithme NP pour entier composé: Preuve: deux entiers 1 < s,t < q. Preuve acceptée si st = q. Note: Depuis 2002, on sait en fait que Primalité et Entier composé sont dans P.

Problème du sac à dos. (Fait partie de NP) Entrée: Un ensemble d’objets avec un poids pi et une valeur vi + une capacité de sac à dos C + un objectif de valeur V. Question: Peut-on choisir un ensemble d’objets dont le poids total est au plus C et la valeur totale au moins V. Problème de démineur (Fait partie de co-NP) Entrée: une grille de démineur partiellement découverte et une case à découvrir. Question: Est-on certain que cette case peut-être découverte?

Problème du mots-croisés. (Fait partie de NP) Entrée: Une grille de mots-croisés et un dictionnaire. Question: La grille peut-elle être complétée grâce à des mots du dictionnaire? Problème d’acceptation d’une machine non-déterministe (Fait partie de NP) Entrée: une machine de Turing non-déterministe M, un polynôme p et une entrée w. Question: La machine M accepte-t-elle l’entrée w en temps p(|w|)?