Intro Le principe Exemples Intro Le principe Exemples R ETOUR SUR LE DERNIER COURS Diviser pour Régner Divide and Conquer Praticable ACT Par “convention”, un algorithme est dit praticable si il est polynomial, c.à.d. si sa complexité temporelle dans le pire des cas est polynomiale. Sophie Tison Université Lille 1 Master Informatique S1 Intro Le principe Exemples L ES LIMITES DE LA CONVENTION Intro -L’exécution d’un algorithme dont la complexité moyenne est de l’ordre de grandeur de n5 microsecondes prendrait 30 ans si n = 1000. Exemples M AIS CE N ’ EST PAS UNE SI MAUVAISE CONVENTION ... - Si un algorithme est exponentiel dans le pire des cas, il peut être polynomial en moyenne; si les pires cas sont exceptionnels, il peut être praticable ...en pratique: certains algos impraticables selon la définition ci-dessus sont ... pratiqués tous les jours (comme le simplexe). Le principe M ÊME SI ELLE COMMENCE À ÊTRE DISCUT ÉE + En pratique, il s’avère que la plupart des algorithmes polynômiaux ont un comportement asymptotique équivalent à un polynôme de faible degré, 2 ou 3. + De plus, la classe des algorithmes polynomiaux a de bonnes propriétés de clôture (par exemple, une ”séquence” de deux algorithmes polynomiaux est polynomiale). + Enfin, et surtout, elle est indépendante du modèle séquentiel “classique” choisi: un algorithme polynômial pour le modèle des machines de Turing, le sera pour une RAM et vice-versa . Intro Le principe Exemples O RDRES DE GRANDEUR : log n n n log n n2 2n 10 3µs 10µs 30µs 100µs 1000µs 100 7µs 100µs 700µs 1/100s 1014 siècles 1000 10µs 1000µs 1/100s 1s astronomique 10000 13µs 1/100s 1/7s 1, 7mn astronomique 100000 17µs 1/10s 2s 2, 8h astronomique Intro Le principe Le principe Exemples T ROIS PARADIGMES D ’ ALGORITHMES EXEMPLES Exemples de temps d’exécution en fonction de la taille de la donnée et de la complexité de l’algorithme, si on suppose qu’une instruction est de l’ordre de la µs; T.\C. Intro Exemples I Rappels I Paradigmes d’algorithme I Complexité des problèmes I Algorithmique Avancée I Calculabilité Intro Le principe PARADIGME ? T ROIS PARADIGMES / SCH ÉMAS D ’ ALGORITHMES D ILBERT COMICS A LGORITHMIC D ESIGN PATTERN I Diviser pour régner I Programmation Dynamique I Algorithmes Gloutons Exemples Intro Le principe Exemples T ROIS PARADIGMES / SCH ÉMAS D ’ ALGORITHMES Le principe Exemples D IVISER POUR R ÉGNER C ALCULER : L E PRINCIPE A LGORITHMIC D ESIGN PATTERN Intro Intro D IVIDE AND C ONQUER / D IVIDE UT REGNES / D IVIDE ET IMPERA I Diviser pour régner I Programmation Dynamique I Algorithmes Gloutons Le principe Exemples Intro I cas de base: savoir résoudre les ”petits” problèmes. I Diviser le problème en sous-problèmes I Résoudre les sous-problèmes par induction I Combiner les solutions des sous-problèmes Le principe D IVISER POUR R ÉGNER : L E SCH ÉMA DivReg (Probleme P) si P est "petit" CasBase(P); sinon{ Diviser P en P1, ..Pk; Combiner_Solution(DivReg(P1), DivReg(P2),...DivReg(Pk)); } finsi Exemples? Exemples Intro Le principe Exemples U N PREMIER EXEMPLE : RECHERCHE DICHOTOMIQUE V ERSION R ÉCURSIVE Intro Le principe Exemples U N PREMIER EXEMPLE : RECHERCHE DICHOTOMIQUE C ORRECTION ? //T trié croissant //retourne Vrai Ssi x présent dans T[g..d] boolean rechDico(int x, int g, int d){ if (g>d) return false; else { int m=(g+d)/2; if (T[m]==x) return true; else if (T[m] < x) return rechDicho(x,m+1,d); else return rechDicho(x,g,m-1); } } //T trié croissant //retourne Vrai Ssi x présent dans T[g..d] boolean rechDico(int x, int g, int d){ if (g>d) return false; else { int m=(g+d)/2; if (T[m]==x) return true; else if (T[m] < x) return rechDicho(x,m+1,d); else return rechDicho(x,g,m-1); } } Arrêt: d − g décroı̂t strictement à chaque appel. Correction: par induction Intro Le principe U N PREMIER EXEMPLE : RECHERCHE DICHOTOMIQUE V ERSION R ÉCURSIVE B IS //T trié croissant //retourne Vrai SSi x présent dans T[g..d] //g<=d boolean rechDico(int x, int g, int d) { if (g>=d) return (T[g]==x); else { int m=(g+d)/2; if (T[m] < x) return rechDicho(x,m+1,d); else return rechDicho(x,g,m); } } Exemples Intro Le principe R ECHERCHE DICHOTOMIQUE V ERSION IT ÉRATIVE // T trié croissant // T.length >=1 // retourne Vrai Ssi n présent dans T boolean dicho(int x) { int g=0; int d=T.length-1; while (g<d) { int m=(g+d)/2; if (T[m] < x) g=m+1; else d=m; } return (T[g]==x); } Exemples Intro Le principe Exemples Intro Le principe R ECHERCHE DICHOTOMIQUE L A COMPLEXIT É ? C ORRECTION ? V ERSION IT ÉRATIVE // T trié croissant // T.length >=1 // retourne Vrai SSi n présent dans T boolean dicho(int x) { int g=0; int d=T.length-1; while (g<d) { // Invariant: T trié g <=d et si x est dans T, T[g]<=x<=T[d] int m=(g+d)/2; if (T[m] < x) g=m+1; else d=m;} return (T[g]==x); } Exemples Soit n = T.length. I le nombre de boucles est de l’ordre de log n, I chaque boucle est en O(1) I l’algorithme est en O(log n) Arrêt: d − g décroı̂t strictement. Intro Le principe Exemples Intro Le principe L A COMPLEXIT É ? V ERSION R ÉCURSIVE Soit A(n) est le nombre d’appels récursifs faits pour un tableau de taille n. A(1) = 1, A(n) = 1 + A(n/2), L’algorithme est en O(log n) Un autre exemple? Exemples Intro Le principe Exemples U N AUTRE EXEMPLE : L E T RI FUSION - M ERGE S ORT Intro Le principe Exemples C OMPLEXIT É ? //L Liste à trier Liste triFusion(L) si L.length<=1 retourne L; //cas Base sinon milieu= L.length/2; retourne fusion(triFusion(L[0..milieu-1]), triFusion(T[milieu..L.length-1])); finsi Comptons le nombre de comparaisons d’éléments: La fusion de deux listes triées de k éléments nécessite au plus 2k − 1 comparaisons d’éléments. Soit Comp(n) le nombre de comparaisons faites pour trier n éléments. Supposons n pair: Comp(n) <= 2 ∗ Comp(n/2) + n Comp(1) = 0 Avec fusion qui fusionne deux listes triées en une liste triée. Preuve :par induction Arrêt: longueur de la liste à trier décroı̂t strictement à chaque appel Intro Le principe A NALYSE DE LA C OMPLEXIT É ? Exemples Intro Le principe A NALYSE DE LA C OMPLEXIT É : M ÉTHODE 1 EN UTILISANT L’ ARBRE DES APPELS Comp(n) <= 2 ∗ Comp(n/2) + n Comp(1) = 0 Comp(n) <= 2 ∗ Comp(n/2) + n Comp(1) = 0 On représente l’arbre (voir tableau!) complexité en O(n log n). Exemples Intro Le principe Exemples A NALYSE DE LA C OMPLEXIT É : M ÉTHODE 2 Intro Le principe Exemples A NALYSE DE LA C OMPLEXIT É : M ÉTHODE 3 L E M ASTER T HEOREM - VERSION ALL ÉG ÉE Supposons n = 2k . Master Theorem -version allégée Comp(n) <= 2 ∗ Comp(n/2) + n 2 ∗ Comp(n/2) <= 4 ∗ Comp(n/4) + n .. . Si T(n) = kT(bn/bc) + O(nd ), avec k > 0, b > 1, d ≥ 0 alors 2i ∗ Comp(n/2i ) <= 2i+1 ∗ Comp(n/2i+1 ) + n .. . I si d > logb k, T(n) = O(nd ) I si d = logb k, T(n) = O(nd log n) 2k ∗ Comp(n/2k ) = 0 I si d < logb k, T(n) = O(nlogb k ) Soit en sommant et en simplifiant: Comp(n) <= n ∗ k ou encore Exemple de la Recherche dichotomique: T(n) = T(n/2) + O(1) donc k = 1, b = 2, d = 0 On est dans le cas 2, et T(n) = O(log n) Comp(n) <= n ∗ log n Intro Le principe Exemples Intro Le principe L E M ASTER T HEOREM POUR LE M ERGE S ORT Master Theorem -version allégée Si T(n) = kT(bn/bc) + O(nd ), avec k > 0, b > 1, d ≥ 0 alors I si d > logb k, T(n) = O(nd ) I si d = logb k, T(n) = O(nd log n) I si d < logb k, T(n) = O(nlogb k ) Comp(n) = 2 ∗ Comp(n/2) + O(n) Donc k = b = 2, d = 1 On est encore dans le cas 2, la complexité est ici O(n log n). Un troisième exemple Exemples Intro Le principe Exemples L A MULTIPLICATION D ’ ENTIERS Intro Le principe Exemples D IVISER POUR MULTIPLIER Supposons n = 2k Soit x1 (reps. y1 ) formé des n/2 premiers chiffres (les plus à gauche) de x (resp. de y), x2 (resp. y2 ) formé des n/2 derniers. Donnée: x, y entiers > 0 à n chiffres Sortie: x ∗ y Donc: x = 10n/2 x1 + x2 , y = 10n/2 y1 + y2 On compte le nombre d’opérations élémentaires sur les chiffres. Soit: x ∗ y = 10n (x1 ∗ y1 ) + 10n/2 (x1 ∗ y2 + x2 ∗ y1 ) + x2 ∗ y2 Algo de l’école primaire: n2 opérations élémentaires On obtient donc un algorithme dont la complexité est donnée par: et: x ∗ y = (10n/2 x1 + x2 ) ∗ (10n/2 y1 + y2 ) C(n) = 4 ∗ C(n/2) + 0(n) Master Theorem: k = 4, b = 2, d = 2 = log2 4 On obtient encore un algorithme en O(n2 ). Intro Le principe U NE ASTUCE Exemples Intro Le principe Exemples L A MULTIPLICATION D ’ ENTIERS x ∗ y = 10n (x1 ∗ y1 ) + 10n/2 (x1 ∗ y2 + x2 ∗ y1 ) + x2 ∗ y2 Il suffit de faire trois multiplications d’entiers à au plus n/2 chiffres: 1. x1 ∗ y1 Donnée: x, y entiers < 0 àn chiffres Sortie: x * y On compte le nombre d’opérations élémentaires sur les chiffres. I 2. x2 ∗ y2 I 3. (x1 − x2 ) ∗ (y2 − y1 ) On obtient un algorithme dont la complexité est donnée par: I C(n) = 3C(n/2) + O(n) I Par le Master Theorem avec k = 3, b = 2, d = 1, On obtient un algorithme en O(nlog2 3 ) (log2 3 ≈ 1.58). I C’est l’algorithme de Karatsuba. I Algo de l’école primaire: O(n2 ) Multiplication à la russe (ou égyptienne ou française) plus efficace mais aussi en O(n2 ), si on compte les opérations sur les chiffres. Algorithme de Karatsuba en O(nlog2 3 ) Algorithme de Tomm-Cook, toujours par ”Diviser pour régner”, par exemple en O(nlog3 5 ) pour la variante où l’entier est divisé en trois parties. Algorithme Schoenage-Strassen, basé sur la FFT en O(n log n log(log n)) On ne sait si on peut faire mieux! Intro Le principe Exemples U N DERNIER EXEMPLE : L A PAIRE DE POINTS LA PLUS Intro Le principe Exemples E N DIMENSION 1? PROCHE Le problème : Soient n points d’une droite. On cherche la paire de points la plus proche (pour la distance euclidienne). Le problème : Soit P un ensemble de n points du plan. On cherche la paire de points la plus proche (pour la distance euclidienne). Il suffit de trier par une composante et de calculer la distance entre un point et son successeur! Pour simplifier, on supposera que tous les points ont une abscisse différente (pas nécessaire mais plus simple pour la présentation) Intro Le principe E N DIMENSION 2? On obtient un algorithme en O(n log n) Exemples Intro Le principe D IVISER POUR R ÉGNER ? Idée: Diviser le plan en deux parties, chacune contenant la moitié des points. Une méthode exhaustive serait en O(n2 ). Par exemple, on peut le couper par la droite x = med avec med la valeur médiane des x. Remarque: pourquoi a-t-on supposé les abscisses des points sont toutes différentes? Exemples Intro Le principe Exemples D IVISER POUR R ÉGNER ? Intro Le principe Exemples D IVISER POUR REGNER ? Soit P_x la liste des points de P triée par x croissant. cpt=0; pour chaque x dans P_x { si cpt <=n/2 ajouter x à G sinon ajouter x à D cpt++;} Soit P_x la liste des points de P triée par x croissant. cpt=0; pour chaque x dans P_x { si cpt <=n/2 ajouter x à G sinon ajouter x à D cpt++;} Remarque: G et D sont triés aussi par x croissant. Intro Le principe Exemples D IVISER L’ ENSEMBLE DES POINTS EN DEUX Intro Le principe Exemples D IVISER L’ ENSEMBLE DES POINTS EN DEUX Soit P_x la liste des points de P triée par x croissant. cpt=0; pour chaque x dans P_x { si cpt <=n/2 ajouter x à G sinon ajouter x à D cpt++;} Soit P_x la liste des points de P triée par x croissant. cpt=0; pour chaque x dans P_x { si cpt <=n/2 ajouter x à G sinon ajouter x à D cpt++;} Coût? Coût= celui du tri soit en O(n log n). Intro Le principe Exemples D IVISER POUR R ÉGNER ? Intro Le principe Exemples R ÉCAPITULATIF 1. Trier les points selon x I Diviser le plan en deux parties, chacune contenant la moitié des points. I On calcule la paire des points plus proches dans chacune des deux parties. I Problème? Peut-être que la paire est composée d’un point de chaque partie! I Comment faire? 2. Partager en deux parties de même cardinal (à 1 près) par une droite verticale x = med, G, D. 3. Résoudre à gauche et à droite. cela donne une distance minimale minG à gauche, minD à droite. 4. Trouver, si il existe un point de G et un point de D, à distance inférieure à δ = min(minG , minD ), la distance minimale minGD entre un point de G et un point de D 5. La distance minimale est donc le minimum de minG , minD , ( resp. de minG , minD , minGD ) Coût du point 4? Intro Le principe Exemples Intro Le principe U N LEMME ... Remarque: si deux points sont à distance < δ et de part et d’autre de la droite x = med, ils sont à distance au plus δ de la droite. On peut donc limiter la recherche aux points de S l’ensemble des points (x, y) tels que med − δ ≤ x ≤ med + δ. Lemma Soit δ = min(minG , minD ) Soit S trié par y croissant. Alors si deux points de chaque côté de la droite sont séparés par au moins 11 points dans la liste, ils sont à distance > δ. Exemples Au plus un point par “carré” y=a+3δ/2 y=a+δ y=a+δ/2 y=a b b b b b b b b b b x=med-δ/2 b b b x=med+δ/2 x=med - δ x=med x=med + δ Intro Le principe Exemples R ÉCAPITULONS Intro Le principe Exemples L A PAIRE DE POINTS LA PLUS PROCHE 1. Initialisation 1.1 trier les points selon x pour construire Sx : 1.2 trier les points selon y pour construire Sy Le problème Soit P un ensemble de n points du plan. On cherche la paire de points la plus proche (pour la distance euclidienne). 2. Partager en deux parties de même cardinal (à 1 près) par une droite verticale x = med: on obtient G (Gx , Gy ), D (Dx , Dy ). 3. Résoudre à gauche et à droite. Cela donne une distance minimale minG à gauche, minD à droite. 4. Trouver, si il existe un point de G et un point de D, à distance inférieure à δ = min(minG , minD ), la distance minimale minGD entre un point de G et un point de D 5. La distance minimale est donc le minimum de minG , minD , ( resp. de minG , minD , minGD ). On a obtenu un algorithme en O(n log n). L’algorithme peut être généralisé en dimension > 2. La complexité est donnée par l’équation C(n) = 2C(n/2) + O(n) L’algorithme sera en O(n log n). Intro Le principe Exemples Q UELQUES EXEMPLES CLASSIQUES I les algorithmes de recherche dichotomique, recherche de la médiane, .. I le tri fusion I les algorithmes de multiplication: entiers (Karatsuba), matrices (Strassen) I La transformée de Fourier rapide, FFT I Géométrie algorithmique: Enveloppe convexe. Intro Le principe Exemples B ILAN I Diviser un problème en problèmes de taille nettement plus petite (i.e. divisée par une constante), attention la recombinaison! I Appliquer si possible le Master Theorem pour la complexité I Souvent plus facile à érire en récursif... même si cela peut bien sûr se faire en itératif I Peut être intéressant à paralléliser.