Algorithmes et structures de données avancés Cours 10 Patrick Reuter http://www.labri.fr/~preuter Considérons un graphe complet avec n sommets : Trouver le meilleur chemin du sommet s1 à s2 Comparer tous les chemins possibles • Pour aller d’un sommet s1 à un sommet s2, combien y-a-t-il de possibilités ? Autrement dit : • Combien de différentes chaînes simples existent de s1 jusqu’à s2 ? • Chaînes simples de longueur 1 s1, s2 1 possibilité • Chaînes simples de longueur 2 s1, s3, s2 s1, s4, s2, … s1, .., sn, s2 n-2 possibilités • Chaînes simples de longueur 3 s1, s3, s4, s2 s1, s3, s5, s2, … s1, s3, sn, s2 S1, s4, s5, s2 S1, s4, s6, s2 … S1, s4, sn, s2 … S1, sn-1, sn, s2 (n-2) * (n-3) possibilités • Chaînes simples de longueur 4 (n-2) * (n-3) * (n-4) possibilités • … • Chaînes simples de longueur n-1 (n-2) * (n-3) * (n-4) * .. * 2 * 1 possibilités (n-2)! possibilités • En total : – 1 + (n-2) + (n-2) * (n-3) + … + (n-2)! Possibilités O(n!) possibilités • Pour certaines problèmes, les algorithmes gloutons peuvent trouver la meilleur permutation plus vite • Pour le problème de la chaîne (simple!) la plus courte, c’est l’Algorithme de Dijkstra. • Si le graphe possède m arcs et n sommets, alors la complexité de l'algorithme est Θ(m + n log n) Algorithme de Dijkstra Ensembles M1 {} M2 Distances M3 s1 s2 s3 s4 s5 0 ∞ ∞ ∞ ∞ Théorie de la complexité Classes de Grand-O • • O(1) O(log n) complexité constante complexité logarithmique • O(n) complexité linéaire • O(n log n) complexité quasi-linéaire • O(na) complexité polynomiale – – • • O(n2) O(n3) O(an) O(n!) complexité quadratique complexité cubique complexité exponentielle complexité factorielle O(log n) O(n) O(n log n) O(n2) O(n3) O(an) O(n!) Théorie de la complexité – Changement de la fonction 2ème solution changer la fonction O(n) • O(log n) logarithmique • O(n) linéaire • O(n log n) Quasi-linéaire • O(n2) quadratique • O(n3) cubique • O(an) exponentiel n Informatique théorique • Théorie de complexité • Théorie de calculabilité Exemple • Un homme à un ensemble de n pépites (pièces d'or), qui pèsent p1, p2, …, pn grammes. • Cet homme à deux enfants • Existe-t-il une partition des pépites en deux sous-ensembles disjoints pour que la somme des poids des deux sous-ensembles soit égal ? Il s'agit du problème PARTITION PARTITION • Comment trouver les partitions ? • Comment vérifier avec une partition donnée si les sommes des deux poids sont égales ? Théorie de complexité • L'étude formelle de la difficulté des problèmes en informatique. • Elle se distingue de la théorie de la calculabilité – qui s'attache à savoir si un problème peut ou peut pas être résolu par un ordinateur. Théorie de complexité • Concentration sur les problèmes qui peuvent effectivement être résolus, • Savoir s'il y a une solution "efficace" en se basant sur une estimation (théorique) – des temps de calcul et (complexité temporelle) – des besoins en mémoire informatique. (complexité de mémoire) Théorie de complexité • Un problème est formalisé de la manière suivante : – un ensemble de données (ou instance) en entrée, – une question sur ces données (pouvant demander éventuellement un calcul). • La théorie de la complexité ne traite que des problèmes de décision binaire, (réponse soit oui ou non) Théorie de complexité • Cependant : – on étend la notion de complexité aux problèmes d'optimisation. • En effet, il est facile de transformer un problème d'optimisation en problème de décision. Théorie de complexité • Si par exemple on cherche à optimiser une valeur n – on traite le problème de décision qui consiste à comparer n à un certain k. – En traitant plusieurs valeurs de k on peut déterminer une valeur optimale. TSP TSP – Traveling Salesman Problem (Problème du voyageur de commerce) étant donné - n sommets (des « villes ») - et les distances séparant chaque sommet, trouver une chaine de longueur totale minimale qui passe exactement une fois par chaque sommet (et revienne au sommet de départ). (n-1)! Possibilités ! • TSP métrique : On peut passer plusieurs fois par le meme sommet TSP Voici un énoncé plus formel du problème du voyageur de commerce sous forme de problème de décision. Données : • un graphe complet G = (V,E,φ) avec V un ensemble de sommets, E un ensemble d'aretes et φ une matrice de distances; • un entier B Question : • Existe-t-il un cycle passant une et une seule fois par chaque sommet tel que la somme des coûts des arcs utilisés soit inférieure à B TSP • on ne connaît pas de méthode de résolution permettant d'obtenir des solutions exactes en un temps raisonnable pour de grandes instances (grand nombre de villes) du problème. • Pour ces grandes instances, on devra donc souvent se contenter de solutions approchées (heuristiques), car on se retrouve face à une explosion combinatoire : – Le nombre de chemins possibles passant par 69 villes est déjà un nombre de 100 chiffres. – Pour comparaison, un nombre de 80 chiffres permettrait déjà de représenter le nombre d'atomes dans tout l'univers connu ! TSP Borne supérieur : L'arbre recouvrant minimale permet de déterminer une solution du TSP métrique qui est au pire 2 fois plus long que la solution optimale. Séparation et évaluation, (branch and bound) TSP • Logiciel Concorde – A résolu un TSP de 15,112 villes • http://www.tsp.gatech.edu/concorde.html Théorie de la complexité • Repose sur la définition de classes de complexité qui permettent de classer les problèmes en fonction de la complexité des algorithmes qui existent pour les résoudre. Classes de complexité • Parmi les classes les plus courantes, on distingue: – Classe P (polynomial) – Classe NP (Non déterministe Polynomial) Classes de complexité Classe P (polynomial): un problème de décision est dans P s'il peut être décidé par un algorithme déterministe en un temps polynomial par rapport à la taille de l'instance. Classes de complexité Classe NP (Non déterministe Polynomial) : c'est la classe des problèmes de décision pour lesquels la réponse oui peut être décidée par un algorithme non-déterministe en un temps polynomial par rapport à la taille de l'instance. Non-déterminisme La classe NP • De manière intuitive, dire qu'un problème peut être décidé à l'aide d'un algorithme non-déterministe polynomial signifie – qu'il est facile, pour une solution donnée, de vérifier en un temps polynomial si celle-ci répond au problème pour une instance donnée – mais que le nombre de solutions à tester pour résoudre le problème est exponentiel par rapport à la taille de l'instance. • Le non-déterminisme permet de masquer la taille exponentielle des solutions à tester tout en permettant à l'algorithme de rester polynomial. Classes de complexité • On a trivialement P NP, – car un algorithme déterministe est un algorithme non déterministe particulier. • En revanche : NP P ? – que l'on résume généralement à P = NP ? – est l'un des problèmes ouverts les plus fondamentaux et intéressants en informatique théorique. • 1970 : le premier qui arrivera à décider si P et NP sont différents ou égaux recevra le prix Clay (plus de 1.000.000 $) • P = NP ?? Pourquoi c'est difficile de prouver ? (1 sur 2) • Le problème de fond est que les algorithmes que l'on programme sont tous déterministes. • Pour la bonne et simple raison que l'on ne sait pas construire de machine non déterministe. • Ce qui fait que l'on ne peut que simuler un algorithme non déterministe par un algorithme déterministe Pourquoi c'est difficile de prouver ? (2 sur 2) • Or il est démontré qu'un algorithme déterministe qui simule un algorithme non-déterministe qui fonctionne en temps polynomial, fonctionne en temps exponentiel. • Ce qui fait que pour de grandes entrées on ne peut pas résoudre le problème en pratique, quelle que soit la puissance de la machine. Relation entre P et NP (supposé…) • Si NP P NP P