Master I - Le Havre
Plan
Complexité en temps La fonction de complexité d un algorithme fait correspondre pour une taille donnée le nombre maximum d instructions qui lui est nécessaire pour résoudre une instance quelconque de cette taille. La notation qui est généralement utilisée pour indiquer la complexité d un algorithme est la notation en O() (notation en grand O ).
Notation en O() Plan On dira d une fonction f (n) qu elle est en O(g(n)) s il existe une constante c > 0 telle que f (n) c g(n) pour toutes les valeurs de n 0. Par extension et abus de langage, on dira généralement d un algorithme qu il est en O(n 2 ) ou en O( n log n ). on parlera plus simplement de la complexité d un algorithme plutôt que de la fonction de complexité en temps d un algorithme.
Algorithmes polynomiaux exponentiels On distingue deux types principaux d algorithmes, les algorithmes polynomiaux (polynomial time algorithms) et ceux qui ne le sont pas : les algorithmes exponentiels (exponential time algorithms).
Algorithmes polynomiaux Les algorithmes polynomiaux sont tels que leur fonction de complexité est en O(P(n)) où P(n) est un polynôme fonction de n et dont le degré est constant et indépendant de n, la taille des instances. Lorsqu il est possible de concevoir un algorithme polynomial pour résoudre un problème donné, on dira de ce dernier qu il peut être résolu de manière efficace.
Algorithmes polynomiaux les schémas d encodage sont considérés comme équivalents. quel que soit le schéma d encodage choisi, et à la condition que celui-ci soit raisonnable (taille de l alphabet des symboles supérieure à un) alors : Tout algorithme permettant de résoudre en un temps polynomial toutes les instances d un problème donné, restera de complexité polynomiale quel que soit le schéma d encodage choisi.
: principe de calcul Déterminer la complexité algorithmique c est "compter" le nombre d instructions qui seront exécutées ; Pour une instruction élémentaire le coût est considéré unitaire. Deux expressions sont supposées équivalentes du point de vue du coût car proportionnelles. Exemples : a 1 T [a] N[b]/W [z] sin(x) (((a = 6)OU(n B))ET (a = faux))
: principe de calcul Pour une instruction conditionnelle, en l absence d informations complémentaires, on choisit le nombre maximum d instructions auquel s ajoute l évaluation de l expression booléenne. Exemples : Si condition Alors instruction 1 Sinon instruction 2 instruction 3 instruction 4 instruction 5 instruction 6 instruction 7 FinSi Pour ce cas de figure, on choisit de compter 7 instructions (l évaluation de la condition et les instructions de 2 à 7).
: principe de calcul Pour une instruction itérative, en l absence d informations complémentaires, on multiplie le nombre d instructions internes à la boucle au nombre de fois que cette boucle sera exécutée. Exemple : Pour i 1 à n Faire instruction 1 instruction 2 instruction 3 FinPour Pour ce cas de figure, on compte 3 n instructions.
: principe de calcul Pour i 1 à n Faire instruction 1 Si i est pair Alors instruction 2 Sinon instruction 3 instruction 4 instruction 5 FinSi FinPour Pour ce cas de figure, on pourrait compter 4 n instructions, mais d autres informations sont disponibles sur la condition donc la complexité sera de n + 1+3 2 n
: principe de calcul Pour une instruction itérative conditionnelle, il faut évaluer le cas au pire. Exemple : TantQue condition Faire instruction 1 instruction 2 instruction 3 FinTantQue Pour ce cas de figure, il convient d évaluer le nombre de tours de boucle maximum qui pourrait être effectué avant la sortie de la boucle. Cette évaluation peut s avérer parfois difficile à réaliser.
: exercice Un exemple de boucle TantQue : a k TantQue a n Faire a a k FinTantQue Quelle est la complexité de la boucle en fonction de n la taille des données?
: graphe régulier Soit le graphe G = (S, A), on veut vérifier que ce graphe est régulier, c est-à-dire que tous les sommets ont le même degré. Soit S l ensemble des sommets régulier vrai s retirer_sommet(s) /* s un sommet quelconque du graphe */ d degré(s) TantQue S ET régulier Faire s retirer_sommet(s) Si degré(s) d Alors régulier faux FinSi FinTantQue Si régulier Alors Le graphe est régulier Sinon Le graphe n est pas régulier FinSi
: graphe régulier 3 instructions + complexité de la boucle TantQue + condition + instruction conditionnelle 3 + C(boucle) + 1 + 1 = 5 + C(boucle). Analyse de la boucle : TantQue S ET régulier Faire s retirer_sommet(s) Si degré(s) d Alors régulier faux FinSi FinTantQue
: graphe régulier Chaque sommet n est examiné qu une seule fois, donc la boucle sera parcourue, dans le pire des cas que n 1 fois (un premier sommet a été retiré de l ensemble S au départ). Donc, la condition S ET régulier est évaluée n fois n évaluations de conditions. Dans le pire des cas (en termes de complexité), le graphe est régulier pour les n 2 premiers sommets examinés et le dernier sommet présente un degré différent. 2 (n 2) pour le retrait des sommets de S et pour l évaluation de la condition degré(s) d. Enfin, pour le dernier sommet, il faut rajouter une instruction 3. au final C(algo) = 5 + n + 2(n 2) + 3 = 4 + 3n =O(n)
: connexité Intitulé du problème de décision : Détermination de la connexité d un graphe. Description des paramètres : un graphe G = (S, A), ( S = n, A = m). Question : étant donné un sommet s S, alors, s S, s s, existe-t-il un chemin de s à s?
Connexité : principe de l algorithme sommet non atteint sommet atteint et non traité sommet traité étape 1 étape 2 étape 3 étape 4 étape 5
Connexité : principe de l algorithme sommet non atteint sommet atteint et non traité sommet traité étape 6 étape 7 étape 8 étape 9 Non connexe
Connexité : algorithme Soit L ensemble des sommets déjà atteints mais non traités (non visités) Soit V ensemble des sommets visités L {s} /* s un sommet quelconque du graphe */ V TantQue L Faire s tirage arbitraire d un élément de L V V S {s} N voisins(s) Pour chaque élément e de N Faire Si e / V ET e / L Alors L L S {e} FinSi FinPour FinTantQue Si V = S Alors Le graphe est connexe Sinon Le graphe n est pas connexe FinSi
Connexité : analyse de la complexité En dehors de structures itératives : 3 instructions + évaluation d une condition. C(algo) = 4 + C(TantQue) TantQue L Faire s tirage arbitraire d un élément de L V V S {s} N voisins(s) Pour chaque élément e de N Faire Si e / V ET e / L Alors L L S {e} FinSi FinPour FinTantQue
Connexité : analyse de la complexité Difficulté du comptage du nombre d instructions. Une boucle TantQue se termine lorsque la condition n est plus vérifiée. La condition d arrêt est L, or à chaque tour de boucle, cette liste est modifiée à deux endroits : s tirage aléatoire d un élément de L. Un élément est systématiquement retiré de la liste L et ajouté à une autre liste (V ). L L {e} : on ajoute un élément à L! Mais cet élément est ajouté seulement s il n est pas déjà présent dans V. chaque sommet passe dans L une et une seule fois.
Connexité : analyse de la complexité Ainsi, dans le pire des cas, la boucle TantQue sera parcourue n fois. A chaque tour de boucle TantQue, 3 instructions seront exécutées 3 n. Quid de la bouche Pour? Si le graphe était k-régulier, le nombre total de tour de boucle Pour serait de n k. Si le degré maximum est borné par une valeur indépendante de n complexité C(algo) = 4 + 3n + kn = 3 + (3 + k)n = O(n)
Connexité : analyse de la complexité Mais dans le cas général, le graphe n est pas régulier. Donc, il faut identifier ce que représente le n k. Cette valeur représente la somme du nombre de voisins de tous les sommets la somme des degrés des sommets le double du nombre d arêtes : 2 m Ainsi, la complexité algorithmique de cet algorithme est de : C(algo) = 4 + 3n + 2m = 4 + n + 2(n + m) = O(n + m)
: énumeration de mots Soit un ensemble de symboles S de cardinalité k, on souhaite énumérer l ensemble des mots de longueur L formés à partir des symboles de S.
: énumération de mots programme principal T tableau de longueur L qui contient le mot courant S liste de k symboles position 1 EnumerationDesMots(position) fonction EnumerationDesMots(position) Si position L Alors symbole S.premierSymbole() TantQue il reste des symboles non considérés pour cette position Faire T [position] symbole EnumerationDesMots(position+1) /* appel récursif */ symbole S.suivant() FinTantQue Sinon afficher le tableau FinSi
: énumeration de mots Exercice Montrez que la complexité de l algorithme est en O(k L )
: énumération de mots Motivation Pourquoi s intéresser à l énumération de mots? parce que le principe de l énumération est à la base d algorithmes de résolution de nombreux problèmes de théorie des graphes : coloration couverture minimale etc.
Ouverture vers le monde de la NP-complétude La distinction entre algorithmes polynomiaux et algorithmes exponentiels est essentiel à la notion de NP-complétude. En effet, la manière dont les problèmes sont classés est directement liée à la possibilité de les résoudre à l aide d algorithmes de complexité polynomiale ou exponentielle. On distinguera ainsi les problèmes pour lesquels il existe des algorithmes efficaces permettant de les résoudre et des problèmes pour lesquels il est peu probable que de tels algorithmes existent.
Déterminisme Définitions conception philosophique selon laquelle il existe des rapports de cause à effet entre les phénomènes physiques [Larousse 2006]. On appelle algorithme déterministe un algorithme dont les résultas qu il produit peuvent être déduits des spécifications de l algorithme lui-même. Deux exécutions d un algorithme déterministe sur des entrées identiques donneront les mêmes sorties.
Classe P Plan Définition La classe P regroupe tous les problèmes qui peuvent être résolus par un algorithme déterministe de complexité polynomiale Π P? construire un algorithme déterministe qui résolve Π en temps polynomial
Classe P : exemples problème du plus court chemin (Dijkstra) problème de la détermination de l arbre de recouvrement de poids minimum (Prim, Kruskal) certains problèmes de flots (Ford-Fulkerson)
Intuition de NP Vertex Cover Intitulé du problème : Vertex Cover (VC). Description des paramètres : un graphe G = (S, A), un entier positif K S Question : Soit S un sous-ensemble des sommets de S de telle sorte que toute arête de A ait au moins l un de ses deux sommets incidents qui appartienne à S. Existe-t-il un tel sous-ensemble dont la cardinalité est inférieure ou égale à K?
Intuition de NP supposons qu un oracle réponde oui à cette question et nous fournisse en supplément le sous-ensemble S, le temps nécessaire pour vérifier que S répond effectivement à la question est polynomial en fonction de la taille de l instance, il est donc possible de construire un algorithme déterministe de complexité polynomiale qui puisse vérifier la validité de la solution proposée.
Intuition de NP Algorithme non déterministe l algorithme composé de l oracle et de la méthode déterministe de vérification constitue un algorithme non déterministe.
Classe NP Plan Définition La classe NP regroupe tous les problèmes qui peuvent être résolus par un algorithme non-déterministe de complexité polynomiale
Conséquence P NP
Classe NP : exemples problème du voyageur de commerce vertex cover le problème de la clique le problème du plus court chemin (Dijkstra) principale référence : l ouvrage de Garey et Johnson [?]
P NP Plan Vue du NP-monde NP Conjecture P NP P
Symétrie des problèmes soit Π un problème de décision : soit I, Q est-elle vraie pour I? et son problème complémentaire : soit I, Q est-elle fausse pour I? si Π P alors Π P par contre, si Π NP et Π / P alors on ne peut rien dire de Π
Difficulté des problèmes Les problèmes appartenant à NP sont de deux catégories : les problèmes appartenant à la classe P sont "faciles", tandis que les problèmes dits NP-complets sont les plus difficiles que l on puisse trouver dans NP.
3-SAT Plan Enoncé Intitulé du problème : 3-Satisfaisabilité (3-SAT). Description des paramètres : une collection C = {c 1, c 2,..., c n } de clauses, sur un ensemble fini U de variables booléennes (littéraux), telles que c i = 3, i 1 i n. Question : existe-t-il une configuration des variables de U telle que toutes les clauses de C soient vraies?
3-SAT Plan Instance U = {u 1, u 2, u 3, u 4 } C = {{u 1 ū 2 ū 4 }, {ū 1 u 3 u 4 }, {ū 1 ū 2 u 3 }} la réponse est "oui" (u 1 = u 2 = u 3 = u 4 vrai)
Difficulté de 3-SAT chaque variable a deux choix possibles VVVV VVVF VVFV VVFF VFVV VFVF VFFV VFFF FVVV FVVF FVFV FVFF FFVV FFVF FFFV FFFF n littéraux : 2 n possibilités.
Théorème de Cook (1971) ce problème a été prouvé NP-complet par Cook c est le premier problème qui a été prouvé NP-Complet preuve longue et fastidieuse : machine de Turing indéterministe aujourd hui autre méthode : la transformation polynomiale d un problème en un autre problème connu pour être NP-complet.
Preuve de NP-complétude Principe en 4 étapes : 1 montrer que le problème π NP, c est-à-dire qu un algorithme non déterministe proposant une solution peut-être vérifiée en temps polynomial, 2 choisir un problème π NP connu pour être NP-Complet 3 construire une transformation f de π en π, c est-à-dire proposer un codage des entrées et des sorties de telle sorte qu une solution à toute instance de π constitue une réponse à π et réciproquement 4 montrer que f est une transformation polynomiale
NP-complet NP-difficile pour les problèmes de décision, nous parlerons de problèmes NP-complets pour les problèmes de recherche, nous parlerons de problèmes NP-difficiles.
Méthodologie générale de résolution d un problème 1 Modélisation du problème. 2 Analyse de la difficulté du problème. 3 Choix d une méthode de résolution. 4 Implémentation.