Analyse d’Algorithmes 2001
Ch. 7 - DIVISER POUR RÉGNER 1
CHAPITRE 7
DIVISER POUR RÉGNER
Les numéros de section correspondent à l’ancienne structure du contenu;
les numéros correspondants des sections du livre sont entre parenthèses
les numéros de page de ces transparents sont à droite.
1. Principe général (7.2) 2
2. Détermination du seuil (7.2) 5
3. Recherche binaire (7.3) 11
4. Tri par fusion (7.4.1) 15
5. Tri de Hoare (7.4.2) 17
6. Sélection et recherche de la médiane (7.5) 24
7. Arithmétique des grands entiers (7.1) 33
8. Multiplication matricielle (7.6)
(voir livre)
9. Exponentiation (introduction à la cryptologie) (7.7)
(hors programme)
2 Ch. 7 - DIVISER POUR RÉGNER ©2001
R. Lelouche
1. PRINCIPE GÉNÉRAL
TECHNIQUE DE CONCEPTION D’ALGORITHMES
-Décomposer l’exemplaire à résoudre
en sous-exemplaires plus petits
- Résoudre le même problème
pour chaque sous-exemplaire indépendamment
- Combiner les sous-solutions obtenues
afin de parvenir à la solution de l’exemplaire original
L’intérêt de cette technique repose sur la facilité
avec laquelle on peut résoudre chaque sous-exemplaire
et recombiner les solutions obtenues.
Exemple
Soient:
un algorithme A qui prend un temps
t
A(
n
)
c
n
2,
un algorithme B qui:
- décompose l’exemplaire de taille
n
en 3 sous-exemplaires,
- résout ces 3 sous-exemplaires de taille
n
/2 à l’aide de l’algorithme A,
- combine ces résultats pour fournir la réponse.
t
B(
n
) = 3
t
A(
n
/2) +
t
(
n
)
t
(
n
) est le temps requis pour faire la décomposition des sous-exemplaires
et la recombinaison des solutions partielles {on suppose que
t
(
n
)
d
n
}. Alors:
t
B(
n
)3
c
(
n
+1
2)2 +
d
n
=3
4
c
n
2 + (3
2
c
+
d
)
n
+ 3
4
c
Donc:
t
B(
n
) O(
n
2) est encore vraie
mais B est 25% plus rapide que A lorsque
n
est élevé.
Analyse d’Algorithmes 2001
Ch. 7 - DIVISER POUR RÉGNER 3
1. PRINCIPE GÉNÉRAL
ALGORITHME C
Identique à l’algorithme B sauf que:
1º Les sous-exemplaires sont résolus en appelant
récursivement
l’algorithme C;
2º Si la taille de l’exemplaire à traiter
est inférieure à un certain seuil
n
0
c’est l’algorithme A qui est appelé (au lieu de C).
t
C(
n
) =
t
A(
n
) si
n
n
0
3
t
C(
n
/2) +
t
(
n
) sinon
Analyse
Cette approche donne un résultat
t
C(
n
) O(
n
lg 3)
Note
Le problème propre à cette approche est le suivant:
Choisir n
0
de façon à minimiser la constante cachée...
4 Ch. 7 - DIVISER POUR RÉGNER ©2001
R. Lelouche
1. PRINCIPE GÉNÉRAL
Fonction DPR(x)
{ Retourne la solution y de l’exemplaire x }
Si x est “suffisamment petit” ou “simple” alors
Retourner ADHOC(x)
{ ADHOC est le sous-algorithme de base,
servant à résoudre les petits exemplaires }
sinon {x doit être décomposé}
Décomposer x en sous-exemplaires plus simples
x1, x2, ..., xk.
Pour i 1 jusqu’à k faire yi DPR (xi)
Combiner les yi pour obtenir une solution y de x.
Retourner y.
Fin.
Notes
En général, k ne dépend pas de n.
Conditions pour que la technique soit efficace:
a) sous-algorithme de base efficace;
b) décomposition efficace de x en sous-exemplaires
et combinaison efficace des sous-solutions;
c) décision judicieuse d’utiliser ADHOC;
d) sous-exemplaires de tailles semblables.
Analyse d’Algorithmes 2001
Ch. 7 - DIVISER POUR RÉGNER 5
2. DÉTERMINATION DU SEUIL
Détermination théorique
Exemple précédent
tC(n) =
tA(n) si n n0
3 tC(n/2) + t(n) sinon
Pour déterminer le n0 réduisant le plus possible la valeur de
tC(n), il ne suffit pas de savoir que tA(n) Θ(n2) et t(n) Θ(n).
A) Le choix du seuil
a une influence considérable sur l’efficacité de l’algorithme.
Prenons tA(n) = n2 millisecondes et t(n) = 16n millisecondes.
Considérons un exemplaire de taille 1024. Il prend:
30 minutes avec n0 = 1 (algorithme C)
15 minutes avec n0 = (algorithme A)
8 minutes avec un bon choix de n0
.
Exercice 4.2.2.
- Quelles valeurs de n0 permettent d’obtenir
ce résultat optimal ?
B) En général, le choix du seuil optimal dépend
non seulement de l’algorithme, mais aussi de l’implantation.
6 Ch. 7 - DIVISER POUR RÉGNER ©2001
R. Lelouche
2. DÉTERMINATION DU SEUIL
Problème 4.2.1
On garde tA(n) = n2, t(n) = 16n.
Choisissons un seuil n0 = 2k, pour un k 0 donné.
Temps pour traiter un exemplaire de taille n = 2p, avec p k ?
Analyse
Équation de récurrence (posons tp = tC(2p)) :
tp =
4k si p = k
3 tp–1 + 16 * 2p si p > k
Équation caractéristique: (x–3) (x–2) = 0
Forme de la solution générale : tp = c1 3p + c2 2p.
Les conditions initiales sont les expressions de tp pour p = k
et pour p = k+1. Elles conduisent à
c1 = 2k (2k + 32) 3–k c2 = –32
Solution générale exacte:
tp = 2k 3p–k (32+2k) – 2p+5 millisecondes
Application (problème 4.2.2)
Considérons un exemplaire de taille 1024 = 210 (p = 10). On a pour le seuil 2k:
t(k) = 2k 310–k(32+2k) –215 msec.
On peut essayer de minimiser par rapport à k:
t’(k) = 0 k = lg (–32 log(2/3) / log(4/3))
qui donne k 5,5
Essayons différentes valeurs de k autour de 5.5:
k4567
t(k) 8,78 7,75 7,75 8,67
n0 = 32 (k = 5) ou n0 =64 (k = 6) fait l’affaire.
Note:
Le seuil optimal n’est pas nécessairement unique.
Analyse d’Algorithmes 2001
Ch. 7 - DIVISER POUR RÉGNER 7
2. DÉTERMINATION DU SEUIL
Dans une implantation spécifique
À partir d’une implantation spécifique, on peut déterminer un
seuil
empiriquement
:
2 paramètres: le seuil et la taille d’un exemplaire.
Très coûteux en frais d’ordinateur!
Approche hybride
- Déterminer théoriquement la forme des équations de
récurrence.
- Trouver empiriquement la valeur des constantes
impliquées, pour l’implantation considérée.
- Trouver expérimentalement
n
, de manière telle que les
temps pris par l’algorithme de base et celui “Diviser pour
Régner” avec un appel récursif seulement soient égaux.
Note:
Si tA(n) O(n2), il se peut que
tA= a n2 + bn + c
où a, b, c dépendent de l’implantation.
Lorsque nous voulons déterminer le seuil, le terme bn+c ne
peut être considéré comme négligeable (nous ne sommes
pas dans les conditions asymptotiques).
8 Ch. 7 - DIVISER POUR RÉGNER ©2001
R. Lelouche
2. DÉTERMINATION DU SEUIL
Problème 7.8 (4.2.3 de l’ancien livre)
Soient a, b ∈ ℜ+. Soit s ∈ ℜ+. Soit fs: * * définie par:
fs(x) = { a x2 si x s
3 fs(x
2) + b x sinon
Prouvez par induction mathématique que, si u = 4b
a et v est
un réel positif quelconque, alors fu(x) fv(x) x réel positif.
Preuve
Soit v u = 4b
a.
1er cas:
x min (u, v) fu(x) fv(x).
2me cas:
x > min (u, v).
Posons k = min {i | x
2i min (u, v)}. On va montrer par
induction sur j que: fu(x
2j) fv(x
2j) pour j = k, k–1, ..., 0.
i) j = k
C’est vrai car x
2k min (u, v).
ii) Supposons que c’est vrai pour j = i+1 k, c.-à-d. que:
fu(x
2i+1) fv(x
2i+1)
et montrons que c’est vrai pour j = i (attention: l’induction
fonctionne par j décroissant). Trois cas sont à distinguer,
selon les positions relatives de u et de v par rapport à x
2j.
Analyse d’Algorithmes 2001
Ch. 7 - DIVISER POUR RÉGNER 9
2. DÉTERMINATION DU SEUIL
Preuve du problème 7.8 (suite)
a) x
2
j
u
x/2i > v
fu(x/2i)= a (
x/2i)2 16 b2 /a
fv(x/2i)= 3 f
v(x/2i+1) + b (x/2i)
3 fu(x/2i+1) + b (x/2i)
= 3 a (x/2i+1)2 + b (x/2i)
=(
x/2i) (b + 3ax / (4.2i))
fv(x/2i) – fu(x/2i) (x/2i) (b – ax / (4.2i)) 0
car x/2i u = 4b / a ax / (4.2i) b.
b) x
2
j
> u et x
2
j
> v
fu(x/2i)= 3 f
u(x/2i+1) + b (x/2i)
3 fv(x/2i+1) + b (x/2i)
=f
v(x/2i).
10 Ch. 7 - DIVISER POUR RÉGNER ©2001
R. Lelouche
2. DÉTERMINATION DU SEUIL
Preuve du problème 7.8 (fin)
c) x
2
j
> u et x
2
j
v
f
v
(
x
/2
i
) = a (
x
/2
i
)2
f
u
(
x
/2
i
)= 3
f
u
(
x
/2
i
+1) +
b
(
x
/2
i
)
3
f
v
(
x
/2
i
+1) +
b
(
x
/2
i
)
=3
a
(
x
/2
i
+1)2 +
b
(
x
/2
i
)
=(
x
/2
i
) (
b
+ 3
ax
/ (4.2
i
))
f
v
(
x
/2
i
) –
f
u
(
x
/2
i
) = (
x
/2
i
) (–
b
+
ax
/ (4.2
i
)) 0
car
x
/2
i
>
u
= 4
b
/
a
ax
/ (4.2
i
) >
b
.
Autre méthode
En essayant de résoudre l’équation de récurrence, on obtient:
f
s
(
x
) {
a
x
2 si
x
s
x
1,5lg
x
–lg
s
(2
b
+
as
) – 2
bx
si
x
s
f
u
(
x
) {
a
x
2 si
x
u
x
1,5lg(
ax
/4
b
) (6
b
) – 2
bx
si
x
u
Il s’agit de comparer
f
s
(
x
) à
f
u
(
x
) pour
s
<
u
et pour
s
>
u
.
Remarque importante
La constante
u
a été choisie telle que
a
u
2 = 3
a
(
u
2)2 +
b
u
. Ce problème illustre
la règle selon laquelle le seuil optimal d’un algorithme DPR peut s’estimer par
la taille
n
de l’instance pour laquelle il est indifférent d’appliquer l’algorithme
adhoc de base ou d’effectuer un niveau supplémentaire de récursion.
1 / 31 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 !