Intro Le principe Exemples
Diviser pour R´
egner
Divide and Conquer
ACT
Sophie Tison
Universit´
e Lille 1
Master Informatique S1
Intro Le principe Exemples
RETOUR SUR LE DERNIER COURS
Praticable
Par “convention”, un algorithme est dit praticable si il est
polynomial, c.`
a.d. si sa complexit´
e temporelle dans le pire
des cas est polynomiale.
Intro Le principe Exemples
LES LIMITES DE LA CONVENTION
- Si un algorithme est exponentiel dans le pire des
cas, il peut ˆ
etre polynomial en moyenne; si les
pires cas sont exceptionnels, il peut ˆ
etre praticable
...en pratique: certains algos impraticables selon la
d´
efinition ci-dessus sont ... pratiqu´
es tous les jours
(comme le simplexe).
-L’ex´
ecution d’un algorithme dont la complexit´
e
moyenne est de l’ordre de grandeur de n5
microsecondes prendrait 30 ans si n=1000.
Intro Le principe Exemples
MAIS CE NEST PAS UNE SI MAUVAISE CONVENTION
... Mˆ
EME SI ELLE COMMENCE `
Aˆ
ETRE DISCUT´
EE
+ En pratique, il s’av`
ere que la plupart des
algorithmes polynˆ
omiaux ont un comportement
asymptotique ´
equivalent `
a un polynˆ
ome de faible
degr´
e, 2 ou 3.
+ De plus, la classe des algorithmes polynomiaux
a de bonnes propri´
et´
es de clˆ
oture (par exemple,
une ”s´
equence” de deux algorithmes
polynomiaux est polynomiale).
+ Enfin, et surtout, elle est ind´
ependante du
mod`
ele s´
equentiel “classique” choisi: un
algorithme polynˆ
omial pour le mod`
ele des
machines de Turing, le sera pour une RAM et
vice-versa .
Intro Le principe Exemples
ORDRES DE GRANDEUR:EXEMPLES
Exemples de temps d’ex´
ecution en fonction de la taille de la
donn´
ee et de la complexit´
e de l’algorithme, si on suppose
qu’une instruction est de l’ordre de la µs;
T.\C. log n n n log n n22n
10 3µs10µs30µs100µs1000µs
100 7µs100µs700µs1/100s1014 si`
ecles
1000 10µs1000µs1/100s1s astronomique
10000 13µs1/100s1/7s1,7mn astronomique
100000 17µs1/10s2s2,8h astronomique
Intro Le principe Exemples
TROIS PARADIGMES DALGORITHMES
IRappels
IParadigmes d’algorithme
IComplexit´
e des probl`
emes
IAlgorithmique Avanc´
ee
ICalculabilit´
e
Intro Le principe Exemples
PARADIGME?
DILBERT COMICS
Intro Le principe Exemples
TROIS PARADIGMES/SCH´
EMAS DALGORITHMES
ALGORITHMIC DESIGN PATTERN
IDiviser pour r´
egner
IProgrammation Dynamique
IAlgorithmes Gloutons
Intro Le principe Exemples
TROIS PARADIGMES/SCH´
EMAS DALGORITHMES
ALGORITHMIC DESIGN PATTERN
IDiviser pour r´
egner
IProgrammation Dynamique
IAlgorithmes Gloutons
Intro Le principe Exemples
DIVISER POUR R´
EGNER CALCULER: LE PRINCIPE
DIVIDE AND CONQUER / DIVIDE UT REGNES / DIVIDE ET IMPERA
Icas de base: savoir r´
esoudre les ”petits” probl`
emes.
IDiviser le probl`
eme en sous-probl`
emes
IR´
esoudre les sous-probl`
emes par induction
ICombiner les solutions des sous-probl`
emes
Intro Le principe Exemples
DIVISER POUR R´
EGNER: LE SCH ´
EMA
DivReg (Probleme P)
si P est "petit"
CasBase(P);
sinon{
Diviser P en P1, ..Pk;
Combiner_Solution(DivReg(P1),
DivReg(P2),...DivReg(Pk)); }
finsi
Intro Le principe Exemples
Exemples?
Intro Le principe Exemples
UN PREMIER EXEMPLE:RECHERCHE DICHOTOMIQUE
VERSION R´
ECURSIVE
//T tri´
e croissant
//retourne Vrai Ssi x pr´
esent 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); }
}
Intro Le principe Exemples
UN PREMIER EXEMPLE:RECHERCHE DICHOTOMIQUE
CORRECTION?
//T tri´
e croissant
//retourne Vrai Ssi x pr´
esent 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ˆ
et: dgd´
ecroˆ
ıt strictement `
a chaque appel.
Correction: par induction
Intro Le principe Exemples
UN PREMIER EXEMPLE:RECHERCHE DICHOTOMIQUE
VERSION R´
ECURSIVE BIS
//T tri´
e croissant
//retourne Vrai SSi x pr´
esent 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); }
}
Intro Le principe Exemples
RECHERCHE DICHOTOMIQUE
VERSION IT ´
ERATIVE
// T tri´
e croissant
// T.length >=1
// retourne Vrai Ssi n pr´
esent 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);
}
Intro Le principe Exemples
RECHERCHE DICHOTOMIQUE
CORRECTION?
// T tri´
e croissant
// T.length >=1
// retourne Vrai SSi n pr´
esent dans T
boolean dicho(int x) {
int g=0;
int d=T.length-1;
while (g<d) {
// Invariant: T tri´
e
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);
}
Arrˆ
et: dgd´
ecroˆ
ıt strictement.
Intro Le principe Exemples
LA COMPLEXIT ´
E?
VERSION IT ´
ERATIVE
Soit n=T.length.
Ile nombre de boucles est de l’ordre de log n,
Ichaque boucle est en O(1)
Il’algorithme est en O(log n)
Intro Le principe Exemples
LA COMPLEXIT ´
E?
VERSION R ´
ECURSIVE
Soit A(n)est le nombre d’appels r´
ecursifs faits pour un tableau
de taille n.
A(1) = 1, A(n) = 1+A(n/2),
L’algorithme est en O(log n)
Intro Le principe Exemples
Un autre exemple?
1 / 12 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !