Diviser pour Régner Divide and Conquer - ACT - fil

publicité
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.
Téléchargement