1 Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008 Algorithmique et complexité de calcul Avril 2008 Pr. Mohsine Eleuldj Département Génie Informatique Ecole Mohammadia d’Ingénieurs Université Mohammed V – Agdal [email protected]
Oct 26, 2015
1Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Algorithmique et complexité de calcul
Avril 2008
Pr. Mohsine Eleuldj
Département Génie Informatique
Ecole Mohammadia d’Ingénieurs
Université Mohammed V – Agdal
2Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Complexité de calcul
Classification :• Linéaire• Quadratique• Polynomial• NP
• NP-complet
Problème
Algorithme 1
Algorithme 2
Algorithme 3
Indécidable(problème de l’arrêt)
3Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Algorithmique et complexité de calculObjectifs• Étude des techniques de conception et d'analyse des algorithmes.• comparaison et classification des algorithmes.• Ce n’est pas un catalogue d'algorithmes pour la résolution de
problèmes spécifiques.
PlanI PréliminairesII Analyse de l'efficacité des algorithmesIII Diviser pour régnerIV Algorithmes voracesV Programmation dynamiqueVI Transformation du domaineVII Algorithmes probabilistesVIII Préconditionnement
4Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Chapitre I : Préliminaires
Contenu1 Notion d’algorithme
2 Efficacité des algorithmes
3 Nature de l’analyse
4 Pourquoi des algorithmes efficaces
5 Calcul des nombres de Fibonacci
5Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
1 Notion d’algorithme
Origine : le mot "algorithme" est associé au célèbre auteur Perce Abou Jaafar Mohammed Ibn Moussa Al Khawarizmi connu pour son livre "Al Jabr oua El Mokabala" écrit à l'an 825.
Définition : un algorithme est une méthode systématique pour résoudre un problème donné. L'exécution ne doit pas laisser la place à l'interprétation, l’intuition ni la créativité.
Definition : l’Algorithmique est l’étude des techniques de conception et d’analyse des algorithmes
Exemples :• Multiplication des nombres entiers• Division• Calcul du PGCD• Certaines recettes de cuisines
6Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Exemple : multiplication des nombres
Analyse des ressourcesMéthode classique : tables de multiplications + addition
Méthode russe : multiplication par 2 et division par 2 (décalages à droite et à gauche dans une représentation en base 2) + addition
53x 1737153901
53 1726 3413 726 1363 2721 544
901
7Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Représentation des algorithmes
Langue naturelle Pseudo-code Langage deprogrammation
Langue naturelle :ambiguïtéLangage de programmation :complexité de lecture (détails de programmationPseudo-code :description des algorithmes
8Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Algorithme de multiplication russe
fonction russe (A,B)tableauX,YX[1] A, Y[1] B, i 1 initialisation tant que X[i] > 1 faire former les 2 colonnes
X[i + 1] X[i] div 2Y[i + 1] Y[i] * 2i i + 1
P 0 addition des entrées appropriées tant que i > 0 faire
si (X[i] mod 2 = 1) alors P P + Y[i]i i - 1
retourner P
Exercice :Faire la trace pour l'exemplaire (17,53). Modifier cet algorithme pour avoir une seule boucle et en utilisant seulement des variables scalaires.
9Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Autre algorithme de multiplication russe
fonction autre_russe (A,B)entier x,yx A, y B, P 0 initialisationtant que x ≥ 1 faire
si (x mod 2 = 1) alors P P + y ajouter la valeur appropriéex x div 2y y * 2
retourner P
Exercice :Faire la trace pour l'exemplaire (35, 17).
10Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Autre algorithme de multiplication
fonction pas_russe (A,B)tableauX,YX[1] A, Y[1] B, i 1 initialisation tant que X[i] > 1 faire former les 2 colonnes
X[i + 1] X[i] - 1Y[i + 1] Bi i + 1
P 0 additionner les entrées appropriées tant que i > 0 faire
si X[i] > 0 alors P P + Y[i]i i - 1
retourner P
Exercice :Faire la trace pour l'exemplaire (53,17). Ecrire l'algorithme classique de multiplication
11Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Etapes de résolution d’un problème
1 Trouver différents algorithmes (selon ≠méthodes de conception)2 Analyser leur efficacité (en terme de temps, espace mémoire,...)3 Choisir le meilleur algorithme (selon la taille de l'exemplaire, puissance du
matériel, ordre,...)
Problème
Algorithme 1
Algorithme 2
Algorithme 3
12Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
2 Efficacité des algorithmes
Définition : Un exemplaire x est l’entrée d’un algorithme, |x| = taille de l'exemplaire x
Exemples- Tri : |x| est le nombre d'entiers à ordonner- Multiplication : |x| est le nombre de chiffres (ou bits) des facteurs
Approches d’analyse- Empirique : programmation + exécution avec plusieurs exemplaires- Théorique : déterminer la quantité de ressources (temps, mémoire,...) en fonction de la taille des exemplaires
Avantages de l'approche théorique- Indépendance de l'ordinateur et langage de programmation- Gain dans la programmation et l'exécution des algorithmes inefficaces- Taille des exemplaires n'est pas une contrainte
13Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
3 Nature de l’analyse
Efficacité d’un algorithme dépend- taille de l’exemplaire
- espace mémoire
- …
Comparaison des algorithmes selon différentes analyses- meilleur cas (optimiste)
- moyenne
- pire cas (pessimiste)
14Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Tri par insertion
Procédure insert (T[1..n])pour i 2 jusqu'à n faire
x T[i]j i - 1tant que j > 0 et T[j] > x faire
T[j + 1] T[j] j j - 1T[j + 1] x
Exercice :Faire la trace pourT = [3,1,4,0,5], U = [0,3,4,6,9] et V = [9,6,4,3,0]
15Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Trace de insert(T)
4
0
1
2
3
2
0
1
-
j
non
non
oui
oui
oui
non
non
oui
-
j > 0 et T[j] > x
0 1 3 4 555
0 13 4 5
1 0 34 5
1 3 0 45
04
43
1 34 0 5
12
3 1 4 0 5--
Txi
16Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Trace de insert(U) et insert(V)
495
364
243
132
0 3 4 6 9---
Ujxi
3 4 6 0 93
3 40 692
3 0 46 91
6 4 93 01
4 69 3 00
334
0 34 6 90
405
3 46 9 00
4 3 69 01
4 6 3 902
243
6 9 4 3 00
162
9 6 4 3 0---
Vjxi
17Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Tri par sélection
Procédureselect (T[1..n])pour i 1 jusqu'à n-1 faire
minj i, minx T[i]pour j i + 1 jusqu'à n faire
si T[j] < minx alorsminj jminx T[j]
T[minj] T[i]T[i] minx
Exercice :Faire la trace pour T = [3,1,4,0,5], U = [0,3,4,6,9] et V = [9,6,4,3,0]
18Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Trace de select(T)
3 1 4 0 5 ----
4
4
4
4
3
2
2
2
2
4
4
2
2
1
minj
34
0 1 3 4535
4-4
04
0 1 4 3 505
1-2
0 1 3 4 545
4-3
0 1 4 3 515
14
13
13
12
3-1
Tminxji
19Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Trace de select(U) et select(V)
0 3 4 6 9----
4
4
3
3
3
2
2
2
2
1
1
1
1
1
minj
44
0 3 4 6 945
6-4
04
0 3 4 6 905
1-2
0 3 4 6 965
4-3
0 3 4 6 935
34
33
03
02
0-1
Uminxji
9 6 4 3 0----
4
4
3
3
3
4
4
3
2
4
4
3
2
1
minj
44
9 6 4 3 045
6-4
34
0 6 4 3 9 05
6-2
9 6 4 3 065
4-3
0 3 4 6 935
34
43
43
62
9-1
Vminxji
20Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Analyse de insert et select
TraceU : meilleur cas pour insert
V : pire des cas pour insert
V : meilleur cas pour select
U : pire des cas pour select
Conclusionanalyse au pire cas de insert et select
nous allons voir que insert et select sont de l'ordre de n2, où n = |x|
21Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
4 Pourquoi des algorithmes efficaces ?
SuppositionA : un algorithmeM : une machineA’ : un algorithme plus efficace que AM’ : une machine plus puissante que M
Question : A sur M’ ou A’ sur M ?
Autrement sin : taille de l’exemplairet(n) : temps d'exécution de A sur Mt'(n) : temps d'exécution de A sur M't"(n) : temps d'exécution de A’ sur M
Question : t’(n) < t”(n) ou t”(n) < t’(n) ?
22Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Application numérique
t(n) = 10-4 x 2n st'(n) = t(n) x 10-2 = 10-6 x 2n s (M’ 100 plus rapide que M)t"(n) = 10-2 x n3 s (A’ plus efficace que A)
1 année--1500
1 jour--200
20 mn1 année-45
10 mn4 mois1 année38
5 mn3 heures10 jours30
1mn1 s2 mn20
10 s2 ms1/10 s10
t"(n)t'(n)t(n)n
1 jour
1 heure
1 minute
temps de calcul(s)
Taille de l'exemplaire
106
105
104
103
102
10
t(n)
t'(n)
t"(n)
23Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Calcul des nombres de Fibonacci (1/3)
Définitionf0 = 0, f1 = 1
fn = fn-1 + fn-2 pour n ≥ 2
De Moivre
fn = 1/√5 [ Φn - (-Φ)-n ]
où Φ = (1 + √5)/2 le nombre d'or
Cette formule n'est pas pratique pour calculer la valeur exacte de fn
24Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Calcul des nombres de Fibonacci (1/3)
fonction fib1(n)
si n < 2 alors retourner n
sinon retourner fib1(n-1) + fib1(n-2)
fonction fib2(n)
i 1, j 0
pour k 1 jusqu'à n fairej i + j
i j - i
retourner j
25Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Calcul des nombres de Fibonacci (3/3)
fonction fib3(n)i 1, j 0, k 0, h 1tant que n > 0 faire
si n est impair alorst jhj ih + jk + ti ik + t
t h2
h 2kh + tk k2 + tn n div 2
retourner j
Exercice :Faire la trace de fib1, fib2 et fib3 la trace pour n = 5
26Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Exécution de fib1, fib2 et fib3
2 ms3/2 ms1 ms1/2 ms1/2 ms1/2 ms2/5 ms1/3 msfib3
25 mn15 s150 ms3/2 ms3/4 ms1/2 m1/3 ms1/6 msfib2
----21 j2 mn1 s8 msfib1
10810610410250302010n
27Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Chapitre 2 :Analyse de l’efficacité des algorithmes
Contenu1 Notations asymptotiques
2 Analyse des algorithmes itératifs
3 Résolution d’équations de récurrences
4 Analyse des algorithmes récursifs
28Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
1 Notations asymptotiques
Remarque :L'analyse théorique de l'efficacité d'un algorithme se fait à une constante près pour ne pas tenir compte de :
- langage de programmation- compilateur et système d'exploitation- puissance de l’ordinateur
Notation "l'ordre de"Soit f : N ---> R*O(f(n)) = t : N → R* / (∃ c ∈ R+) (∃ n0 ∈ N) (∀ n ≥ n0) [t(n) ≤ c f(n)]
DéfinitionsO(f(n)) est appelé l'ordre de f(n)t(n) ∈ O(f(n)) ⇒ t(n) est dans l'ordre de f(n)t(n) : temps d'exécution d'un algorithme ⇒ algorithme est de l'ordre de f(n)
29Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
t(n) ∈ O(f(n))
temps
n
c f(n)
t(n)
n0
30Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Exercices
a) Quel est l’ordre de l’algorithme qui prend un temps borné supérieurement par :t(n) = 3 s - 18n ms + 27n2 µs
b) Prouver que : f(n) ∈ O(g(n)) et g(n) ∈ O(h(x)) ⇒ f(n) ∈ O(h(n))c) Déduire que g(n) ∈ O(h(n)) ⇒ O(g(n)) ⊂ O(h(n))d) Soient f, g : N → R+, montrer que :
O(f(n) + g(n)) = O(max(f(n) , g(n)))e) Soient f et g: N → R+, prouver que :
limn→∞ f(n) / g(n) = c ∈ R+ ⇒ O(f(n)) = O(g(n))limn→∞ f(n) / g(n) = 0 ⇒ O(f(n)) ⊂ O(g(n))
f) Prouver que : log n ∈ O(√n) et √n ∉ O(log n)g) Soit x ∈ R / 0 < x < 1. Utiliser ⊂ et = pour mettre en rang les ordres des
fonctions suivantes:n log n, n8, n1+x, (1 + x)n, (n2 + 8n + log3n)4 et n2/log n
31Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Réponse (1/3)
Exemple 1 : Soit un algorithme qui prend un temps borné supérieurement par :
t(n) = 3 s - 18n ms + 27n2 µs.
Trouvons une fonction f aussi simple que possible tel que cet algorithme prenne un temps dans l'ordre de f(n).
Prenons c = 27 x 10-6 et n0 = 500/3
Soit n > n0 _ n > 500/3 _ 18n > 3000 _ 18n x 10-3 > 3 _ 3 - 18n x 10-3 < 0
_ 3 - 18n x 10-3 + 27n2 x 10-6 _ 27n2 x 10-6 = cn2.
32Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Réponse (2/3)
Exemple 2 :a) Prouver que :
f(n) O(g(n)) et g(n) O(h(x)) _ f(n) O(h(n))
b) Déduire que g(n) O(h(n)) _ O(g(n)) C O(h(n))
Preuve :f(n) O(g(n)) _ ($ c' R+) ($ n' N) (" n > n') (f(n) _ c'g(n))
g(n) O(h(x)) _ ($ c" R+) ($ n" N) (" n > n") (g(n) _ c"h(n))
Soit c = c'c" et n0 = sup(n',n") alors (" n > n0) f(n) _ c'g(n) _ c'c"h(n) donc f(n) O(h(n)).
Soit f(n) O(g(n)) d'après (a) f(n) O(h(n)) donc f(n) O(h(n)).
Exemple 3 :Soient f, g : N --> R+, montrer que :
O(f(n) + g(n)) = O(max(f(n) , g(n))).
33Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Réponse (3/3)
Applications :n3+ 3n2+ n + 8 O(n3 + (3n2 + n + 8)) = O(max(n3 , 3n2 + n + 8)) = O(n3). Il faut s'assurer que f(n) et g(n) soient positives car sinon on trouvera la contradiction suivante :O(n2) = O(n3 + (n2 - n3)) = O(max(n3 , n2 - n3))) = O(n3).
Montrer que O(n2) _ O(n3).Exercice 1:Soient f et g: N ---> R+. Prouver que :
limn-->_ f(n) / g(n) = l R+ _ O(f(n)) = O(g(n))limn-->_ f(n) / g(n) = 0 _ O(f(n)) C O(g(n))
Exercice 2 :Prouver que log n O( _n) et _n O(log n)Exercice 3 :Soit x R / 0 < x <1. Utiliser C (inclusion) et = pour mettre
en rang les ordres des fonctions suivantes:n log n, n8, n1+x, (1 + x)n, (n2 + 8n + log3n)4 et n2/log n.
34Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Autres notations asymptotiques
Remarque : la notion d'ordre est l'estimation d'une limite supérieure du temps d'exécution d'un algorithme sur un exemplaire de taille donnée. Nous allons estimer une limite inférieure.
Omega def(n)Ω(f(n)) = t : N → R* / (∃ c ∈ R+) (∃ n0 ∈ N) (∀ n ≥ n0) [t(n) ≥ c f(n)]
Exercice :Soient f, g : N → R*, montrer que :f(n) ∈ O(g(n)) ⇒ g(n) ∈ Ω(f(n))
Ordre exact de f(n) Θ(f(n)) = O(f(n)) ∩ Ω(f(n))
35Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
t(n) ∈ Θ(f(n)) = O(f(n)) ∩ Ω(f(n))
temps
n
c1 f(n)
t(n)
n0
c2 f(n)
36Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
2 Analyse des algorithmes itératifs
Soit t(n) : temps d'exécution de l'algorithme pour un exemplaire de taille n
Algorithmes analysés
Calcul de Fibbonacci
Tri par selection
Tri par insersion
Calcul du PGCD
37Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Analyse de fib2
fonction fib2(n)
i ← 1, j ← 0
pour k ← 1 jusqu'à n faire
j ← i + j
i ← j - i
retourner j
t(n) = a + c + d = a + (Σ1 ≤ k ≤ n b) + d = a + bn + d = a’ + bn où a’=a+d
⇒ t(n) ∈ O(n)
a
c
d
b
38Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Analyse de fib3
fonction fib3(n)i ← 1, ...tant que n > 0 faire
...n ← n div 2
retourner j
t(n) = a + c + d = a + bk + d où k est le nombre d'itérationsk = nombre de bits dans la représentation binaire de n ⇒ k = log2 n + 1
⇒ t(n) ∈ O(log n)
a
c
d
b
39Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Analyse de select
Procédureselect (T[1...n])pour i ← 1 jusqu'à n-1 faire
minj ← i, minx ← T[i]pour j ← i+1 jusqu'à n faire
si T[j] < minx alorsminj ← jminx ← T[j]
T[minj] ← T[i]T[i] ←minx
t(n) = Σ1 ≤ i ≤ n-1 [ a + Σi+1 ≤j ≤ n (b) + d ] = (a + d + bn)(n - 1) - bn(n-1)/2
⇒ t(n) ∈ O(n2)
a
e
d
cb
40Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Analyse de l'algorithme d'Euclide
calcul du PGCD de deux nombresfonction Euclide(m,n)
tant que m > 0 fairet <-- n mod mn <-- mm <-- t
retourner n
Montrons tout d'abord que : " n, m / n _ m _ n mod m < n/2Cas 1 : m > n/2 _ 1 _ n/m < 2 _ [n/m] = 1_ n mod m = n - m _ n - n/2 = n/2Cas 2 : m _ n/2 _ n mod m < m
Soit k le nombre d'itérations de la boucle pour l'exemplaire (m,n). Soient mi et ni les valeurs de m et n après la ième itération. On déduit que mk = 0 et le système suivant :
ni = mi-1mi = ni-1 mod mi-1n0 = n et m0 = m
On peut vérifier que ni > mi pour i _ 1. ⇒ mi = ni-1 mod mi-1 < ni-1/2 = mi-2/2
Supposons que k est impair. Soit d tel que k = 2d + 1 alors :mk-1 < mk-3/2 < mk-5/22 < ... < m0/2d
Or mk-1 _ 1 _ m0/2d _ 1 _ d log m > k 2log m+1le cas où k est pair est traité de la même ⇒ t(n) ∈ O(log m).
41Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Analyse de fib1
fonction fib1(n)
si n < 2 alors retourner n
sinon retourner fib1(n-1) + fib1(n-2)
t(n) est la solution du système de récurrence :
t(0) = t(1) = a
t(n) = t(n-1) + t(n-2)
42Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
3 Résolution de récurrencesrécurrence homogène
a0tn + a1tn-1 + .. + aktn-k = 0 (1)
cherchons une solution de la forme tn = xn (équation caractéristique)a0xn + a1xn-1 + .. + akxn-k = 0 (2)
cherchons une solution non nulle ⇒ (2) devient :a0xk + a1xk-1 + .. + ak = 0
supposons que les k racines : r1, r2, ..., rk (réelles ou complexes) sont distinctes alors :
tn = Σ1 ≤ i ≤ k ci(ri)n
où ci (1 ≤ i ≤ k) constantes déterminées par les conditions initiales
43Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Calcul du nombre de Fibonacci
f0 = 0 et f1 = 1 (1)fn = fn-1 + fn-2 (2)
Posons fn = xn, alors (2) devient : xn = xn-1 + xn-2⇒ x2 - x - 1 = 0
∆ = 1 + 4 = 5 ⇒ r1 = (1-√5)/2 et r2 = (1+ √5)/2
⇒ fn = c1 r1n + c2 r2
n
En utilisant les conditions initiales (1) on trouve :c1 + c2 = 0c1r1 + c2r2 = 0 ⇒ c1 = -1/√5 et c2 = 1/√5
⇒ fn = 1/√5 [-((1-√5)/2)n + ((1+√5)/2)n] (Méthode de Moivre)
44Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Analyse de fib1
t(0) = t(1) = a (1)t(n) = t(n - 1) + (n - 2) (2)
D'après le calcul précédent on déduit que :t(n) = c1 r1
n + c2 r2n où r1 = (1 -√5)/2 et r2 = (1 + √5)/2
En utilisant les conditions initiales (1), on trouve le système :c1 + c2 = 0c1r1 + c2r2 = 0
⇒ c1 = -a (1 + √5)/2√5 et c2 = a (1 + 3√5)/2√5
⇒ t(n) ∈ O(c2n) où |c2| > 1 ⇒ algorithme exponentiel
45Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
3 Résolution de récurrencesrécurrences non homogènes
Illustrons ce type de récurrence à l'aide de l'exemple suivant où l’on se ramène à une récurrence homogène
tn - 2tn-1 = 3n (1)En multipliant (1) par 3 et en la considérant pour n+1 on trouve:
3tn - 6tn-1 = 3n+1 (2)tn+1 - 2tn = 3n+1 (3)
En faisant la différence de (2) et (3), on trouve :tn+1 - 5tn + 6n-1 = 0
L'équation caractéristique de cette équation est :x2 - 5x + 6 = 0 ⇔ (x - 2) (x - 3) = 0
⇒ tn = c12n + c23n
En utilisant (1), on trouve que tn = -c12n + 3n+1
46Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
3 Résolution de récurrencesrécurrences non homogènes
Illustrons cette technique à l'aide de l'exemple suivant où nous faisons une transformation de variable :
T(n) = 4T(n/2) + n, n > 1 avec n = 2k (1)Posons tk = T(2k). L'équation (1) devient :
tk = 4tk-1 + 2k
En multipliant par 2 et en considérant l'équation pour n+1, on trouve :2tk = 8tk-1 + 2k+1 (2) tk+1 = 4tk + 2k+1 (3)
(2) – (3) donne : tk+1 - 2tk = 4tk - 8tk-1 ⇔ tk+1 - 6tk + 8tk-1 = 0L'équation caractéristique de cette équation est :
x2 - 6x + 8 = 0 ⇔ (x - 2) (x - 4) = 0 _ donc tk = c12k + c24
k
donc T(n) = c1n + c2n2
En utilisant (1) on trouve que c1= -1 et par conséquent : T(n) = -n + c2n2
47Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Tours de HanoïProblèmeSoint trois aiguilles (1, 2 et 3) et m disques, tous de taille différente. Au départ tous les disques sont placés du plus grand au plus petit dans l’aiguille 1. Comment déplacer les disques à l’aiguille 2 sans jamais mettre de disque par-dessus un disque plus petit dans les aiguilles ?
Exercice1 Comment allez-vous faire pour déplacer 3 disques ?2 Décrire un algorithme de la solution.3 Faire la trace pour m = 3.4 Déterminer le nombre de déplacements en fonction de m.5 Déduire l’efficacité de l’algorithme.6 Estimer le temps si m = 64 et si un déplacement prend 1 seconde.7 Démontrer l’optimalité de l’algorithme.
1 2 3
48Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Trace pour m = 3
1 2 3 1 2 3 1 2 3
1 2 3
1 2 3
1 2 3
1 2 3
1 2 3
1 2 3
49Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Tours de Hanoï
procédure Hanoï (m,i,j)si m > 0 alors
Hanoï (m-1,i,6-i-j)écrire (i,"-->",j)Hanoï (m-1,6-i-j,j)
Soit t(m) le temps d’exécution t(1) = 1t(m) = 2 t(m-1) + 1
1 2 3
50Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Tours de HanoïSoit t(m) : temps d'exécution de l'algorithme sur un exemplaire de taille m.
t(1) = 1t(m) = 2t(m-1) + 1
Calculons t(m)t(m) = 2[ 2 t(m-1) + 1 ] + 1 = 22 t(m-2) + 2 + 1
= 22[ 2 t(m-3) + 1 ] + 2 + 1 = 23 t(m-3) + 22 + 2 + 1= ..........= 2k t(m-k) + 2k-1 + ... + 2 + 1= ..........= 2m-1 t(1) + 2m-2 + ... + 2 + 1 = 2m-1 + 2m-2 + ... + 21 + 20= (2m - 1) / (2 - 1) = 2m - 1
donc t(m) ∈ O(2m).
Exercice : Trouver une version non récursive de la procédure Hanoï. Trouverl'ordre de l'algorithme.
51Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Hanoi(3,1,2)Hanoi(2,1,3)
Hanoi(1,1,2)Hanoi(0,1,3)12Hanoi(0,3,2)
13Hanoi(1,2,3)
Hanoi(0,2,1)23Hanoi(0,1,3)
12Hanoi(2,3,2)
Hanoi(1,3,1)Hanoi(0,3,2)31Hanoi(0,2,1)
32Hanoi(1,1,2)
Hanoi(0,1,3)12Hanoianoi(0,3,2)
Trace à l’aide d’appels récursif
52Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Trace à l’aide d’un arbre
H(3,1,2)
12H(2,1,3) H(2,3,2)
H(1,1,2)
12H(0,1,3) H(0,3,2)
H(1,3,1)
23H(0,2,1) H(0,1,3)
H(1,3,1)
31H(0,3,2) H(0,2,1)
H(1,1,2)
12H(0,1,3) H(0,3,1)
13 32
53Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Chapitre 3 : Diviser-pour-régner
diviser-pour-regner (Divide and conquer) est une technique de conception d'algorithme composée de trois étapes :
- Décomposition de l'exemplaire en sous-exemplaires plus petits,- Résolution des sous-exemplaires et- Combinaison des sous-solutions.
Plan1 Fouille dichotomique2 Multiplication des grands nombres3 Multiplication matricielle4 Exponentiation discrète
54Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Schéma des algorithmes DPR
fonction DPR(x)
si x est suffisamment petit alors retourner ADHOC(x)
décomposer x en sous-exemplaires x1, x2, ..., xk
pour i 1 jusqu'à k faire yi <-- DPR(xi)
combiner les yi pour obtenir une solution y
retourner y
55Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Résolution des récurrences DPR
Théorème :Soient a, b, c ≥ 0 et n = ck. La solution de la récurrence
b pour n = 1
T(n) = aT(n/c) + bn pour n > 1
est :
O(n) si a < c
T(n) ∈ O(n log n) si a = c
O(nlog a) si a > c, où le logarithme en base c
T(n) : temps d'exécution d'un algorithme DPR sur l’exemplaire n
56Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Fouille dichotomique
Problème : localisation de la valeur x dans un tableau T[1..n] trié (dictionnaire ou annuaire téléphonique)
fonction séquentielle (T[1..n],x)pour i 1 jusqu'à n faire
si T[i] > x alors retourner i-1retourner n
fonction dichotomique(T[i..j],x)si i = j alors retourner ik (i+j+1) div 2si x < T[k] alors retourner dichotomique(T[i..k-1],x)sinon retourner dichotomique(T[k..j],x)
Exercice : Montrer que t(n) ∈ O(log n)
57Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Arithmétique des grands entiers
Utilisation : calcul de très grande précision. En 1986, Π est calculé avec 30 millions de chiffres. Ce calcul a nécessité 30 heures de calcul sur un ordinateur Cray-2.
Problème :calcul de u*v avec u et v composés de n=2k chiffres
Solution :Algorithme de multiplication classique ∈ O(n2)Algorithme de multiplication DPR ∈ ?
58Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Multiplication DPR (1/2)
u = 10sw + x
v = 10sy + z où 0 ≤ x, z < 10s et s = n/2
⇒ u*v = 102s wy + 10s(wz + yx) + xz
w x
n
u y z
n/2
v
n/2
59Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Multiplication DPR (2/2)
fonction multA(u,v: grands-entiers) : grand-entiern max(u,v)si n est petit alors
multiplier u et v par l'algorithme classiqueretourner le résultat
sinons n div 2w u div 10s, x u mod 10s
y v div 10s, z v mod 10s
retourner multA(w,y) 102s + (multA(w,z) + multA(y,x)) 10s + multA(x,z).
Exercice :Montrer que t(n) ∈ O(n2)
60Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Amélioration de la multiplication DPR (1/2)
u = 10sw + x
v = 10sy + z où 0 ≤ x, z < 10s et s = n/2
Soient r, p et q tels que :
r = (w + x)(y + z) = wy + wz + xy + xz
p = wy
q = xz
⇒ u * v = 102s wy + 10s(wz + yx) + xz
= 102sp + 10s (r - p - q) + q
61Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Amélioration de la multiplication DPR (2/2)
fonction multB(u,v: grands-entiers) : grand-entiern max(u,v)si n est petit alors
multiplier u et v par l'algorithme classiqueretourner le résultat
sinons n div 2w u div 10s, x u mod 10s
y v div 10s, z v mod 10s
r multB(w+x , y+z)p multB(w,y)q multB(x,z)
retourner 102sp + 10s(r-p-q) + q
Exercice : t(n) ∈ O(n1,59)
62Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Multiplication matricielle DPRSoient A, B deux matrices carrées d'ordre n.
C = AB = (cij) 1≤ i, j ≤ n avec cij = Σ1≤k≤n aikbkj
Algorithme classique de multiplication de matrices appartient à O(n3)Algorithme DPR (Strassen)
Soient A = a11 a12et B =b11 b12a21 a22 b21 b22
Soient m1, m2 m3, m4, m5, m6 m7 tels que :m1 = (a21 + a22 - a11)(b22 - b12 + b11)m2 = a11b11m3 = a12b21m4 = (a11 - a21)(b22 - b12)m5 = (a21 + a22)(b12 - b11)m6 = (a12 - a21 + a11 - a22)b22m7 = a22(b11 + b22 - b12 - b21)
Exercice : Montrer t(n) O(n2,7)
63Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Protocole de cryptage (1976)
Ali et Bahia partagent l’information x = y sans que Fouad puisse la détecter
A / A aléatoireA < p
a = gA mod px = bA mod p
Ali
B / B aléatoireB < p
b = gB mod py = aB mod p
Bahia
Fouad
p grand premierg / 2 ≤ g ≤ p-1
64Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Exponentiation discrète (1/3)
fonction expod1(g,A,p)a 1pour i 1 jusqu'à A faire a a gretourner a mod p
Remarque : xy mod p = ((x mod p) (y mod p)) mod p
fonction expod2(g,A,p)a 1pour i 1 jusqu'à A faire a a g mod pretourner a
Exercice :Analyser et comparer le temps d'exécution de expod1 et expod2 en fonction de A et p. Pour simplifier supposer que g=p/2.
65Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Exponentiation discrète (2/3)
Exemple : calcul de x23
x23 = ((…((x x)x)…)x) ⇒ 22 multiplications
x23 = (((x2)2x)2x)2x ⇒ 7 multiplications
fonction expoditer(x,n)a x, b 1tant que n > 0 faire
si n est impair alorsb a b
a a2
n n div 2retourner b
fonction expodrec(x,n)si n = 0 alors retourner 1si n est impair alors
a expodrec(x,n-1)retourner a x
sinona expodrec(x,n/2)retourner a2
66Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Exponentiation discrète (3/3)
fonction expod3(g,A,p)
si A = 0 alors retourner 1
si A est impair alorsa expod3(g,A-1,p)
retourner a g mod p
sinona expod3(g,A/2,p)
retourner a2 mod p
fonction expod4(g,A,p)a g, b 1tant que A > 0 faire
si A est impair alorsb a b mod p
a a2 mod pA A div 2
retourner b
67Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Exercice
Soit la matrice
a) Montrer que
où fn est le nième nombre de Fibonacci.
b) Déduire un algorithme de type diviser-pour-régner pour le calcul de Fn.
c) comparer cet algorithme avec fib3 en prenant comme matrices intermédiaires :
.
F = [ ]0 11 1
Fn = [ ]fn-1 fnfn fn+1
A = [ ] et B =[ ]i jj i+j
k hh h+k
68Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Retour à l’algorithme fib3
fonction expod4(F,n)A F, B Itant que n > 0 faire
si n est impair alorsB AB
A A2
n n div 2retourner B
fonction expod5(n)k 0, h 1, i 1, j 0tant que n > 0 faire
si n est impair alorst hjj hi + kj + ti ki + t
t h2
h 2hk + tk k2 + tn n div 2
retourner j
69Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Chapitre 4 : Algorithmes voraces
Généralement
assez simples ⇒ rapides
résolution des problèmes d'optimisation
solutions approximatives (heuristique)
Contenu
Schéma général
Remise de monnaie
Plus courts chemins
Remise de monnaie
Coloration d’un graphe
Feux de signalisation
70Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Optimisation de la sélection avec contrainte
20 Kg
15 Kg
8 Kg
10 Kg
Capacité = 40 Kg
Solution vorace = 20 + 15 = 35 < 40
71Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Schéma des algorithmes voraces
fonction vorace (C : ensemble) : ensemble
C est l'ensemble de tous les candidats
S ← ∅ ensemble solution
tant que ¬ solution (S) et C ≠ ∅ faire
x ← l'élément de C qui maximise sélect(x)
C ← C - x
si réalisable (S ∪ x) alors S ← S ∪ x
si solution (S) alors retourner S
sinon retourner pas de solution
72Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Exemple 1 : Remise de monnaie
Problème : remettre la monnaie en donnant le moins de pièces possible.
Solution :
C : ensemble fini de pièces 1, 5, 10, 20, 50 et 100 DH
Solution(S) : total des pièces choisies correspond au montant à rendre
Ensemble réalisable : total des pièces n'excède pas la somme à rendre
fonction de sélection : la plus grande pièce qui reste dans C
Fonction objective : nombre de pièces utilisées dans la solution
Exercice : Décrire un algorithme vorace. Montrer qu’il fournit toujours une solution optimale lorsqu'elle existe
73Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Exemple 1 : Algorithme vorace
fonction Remise_Monnaie (Montant) : tableauC ← 1,5,10,20,50,100S ← 0tant que (Montant > 0) et (C ≠ ∅) faire
x ← maxy/ y ∈ CC ← C - xNP ← Montant div x Nombre de pièces de type xS[x] ← NPMontant ← Montant - NP*x
si (Montant = 0) alors retourner Ssinon retourner pas de solution
Exercice : Montrer l’Optimalité (idée (Ci ≥ 2 Ci+1))
74Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Exemple 1 : qualité de la solution
Soit C ’ = C ∪ 12 = 1, 5, 10, 12, 20, 50, 100
Montant = 16 =12 + 1 + 1 + 1 + 1 (5 pièces)⇒ solution non optimale
= 10 + 5 + 1 (3 pièces) ⇒ est la solution optimale
Soit C" = C’ - 1 = 5, 10, 12, 20, 50, 100
Montant = 15 = 12 + ??? ⇒ pas de solution
= 10 + 5 ⇒ une solution existe
75Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Solution d’un algorithme vorace
Algorithme vorace
Solution optimale
Solution approximativenon optimale
Pas de solutionalors qu’elle existe
76Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Exemple 2 : Plus courts cheminsSoit G = (N,A) un graphe orienté où N = 1,2,..,n ensemble des nœuds et A est l'ensemble d'arcs. A chaque arc est associé une longueur non négative. Essayons de déterminer la longueur du plus court chemin de 1 vers les autres sommets.
L : matrice d'ordre n tel que L[i,j] ≥ 0 si l'arc (i,j) existe et L[i,j] = ∞ s'il n'existe pas.
fonction Dijkstra(L[1..n,1..n]) : tableau [2..n]C ← 2,3,..,npour i ← 2 jusqu'à n faire D[i] ← L[1,i]répéter n-2 fois
v ← l'élément de C qui minimise D[v]C ← C - vpour chaque élément w de C faire
D[w] ← min (D[w] , D[v] + L[v,w])retourner D
77Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Exemple 2 : Trace de l’algorithme
étape v C D
- - 2,3,4,5 [50,30,100,10]
2 5 2,3,4 [50,30,20,10]
2 4 2,3 [40,30,20,10]
3 3 2 [35,30,20,10]
1
2
3 4
5
1050
100
1020
50
5
30
Exercice : Déterminer l’ordre de l’algorithme de Dijkstra. Modifier le afin de trouver le chemin le plus court entre tous les couples de sommets.
78Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Exemple 3 : Minimisation de l'attente
Soient un serveur, n clients et ti : temps de service requis par le client i = 1,2,..,n
minimiser : T = S1 ≤ i ≤ n (temps passé dans le système par le client i)
Exemple : t1 = 4, t2 = 7 , t3 = 3.
ordre T1 2 3 4 + (4 + 7) + (4 + 7 +3) = 291 3 2 4 + (4 + 3) + (4 + 3 + 7) = 252 1 3 7 + (7 + 4) + (7 + 4 + 3) = 322 3 1 7 + (7 + 3) + (7 + 3 + 4) = 333 1 2 3 + (3 + 4) + (3 + 4 + 7) = 24 ← ordre optimal3 2 1 3 + (3 + 7) + (3 + 7 + 4) = 27
Exercice : Montrer que l’algorithme exhaustif ∈ O(n!). Décrire l'algorithme vorace et analyser son efficacité. Démontrer que sa solution est optimale.
79Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Exemple 3 : Algorithme vorace
fonction Ordonnancement (n,t) : tableau
C ← 1,2,3,…,n
pour i=1 à n faire
j ← minti/ i ∈ C
C ← C - j
S[x] ← j
retourner S
Exercice : Quel est l’ordre de l’algorithme ?
80Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Exemple 3 : Optimalité de l’algorithme (1/2)
Soit I = (i1,i2,..,in) une permutation quelconque dans 1,2,..,n.
Soit T(I) le temps total passé dans le système pour les clients i1,i2,..,in.
T(I) = ti1 + (ti1 + ti2) + ... + (ti1 + ti2 + .. tin) = nti1 + (n-1)ti2 + ... + tin
= S1≤k≤n (n - k + 1)tik
Supposons qu'il existe dans I, deux entiers a et b tel que a < b et tia > tib. Inversons l'ordre de ces deux clients et on obtient l'ordre I'.
Ordre de service 1 2 ... a ... b … n
I i1 i2 ... ia ... ib ... In
I' i1 i2 ... ib ... ia ... in
T(I') = (n-a+1)tib + (n-b+1)tia + S1<k<n et k≠a et b (n-k+1)tik
81Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Exemple 3 : Optimalité de l’algorithme (2/2)
T(I) - T(I') = (n-a+1)tia + (n-b+1)tib - (n-a+1)tib - (n-b+1)tia
= (b-a)tia + (a-b)tib = (b-a) (tia - tib)
Comme b - a > 0 et tia - tib > 0, on déduit que :
T(I) - T(I') > 0 et par conséquent T(I) > T(I').
Nous pouvons améliorer tout ordre de service où un client est servi avant un autre nécessitant moins de temps
⇒ optimalité de l’algorithme
82Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Exemple 4 : Coloration d’un graphe
Soit G = (N,A) un graphe non orienté.
Colorer le graphe tels que deux sommets reliés doivent être de couleurs différentes.
L'algorithme vorace :
- Choisir une couleur et un sommet comme point de départ
- Considérer les autres sommets et essayer de les colorer par cette couleur
- Lorsqu'on ne peut plus faire de progrès choisir une nouvelle couleur et un nouveau point de départ non coloré
- Colorer tout ce qui est possible avec cette deuxième couleur
- ainsi de suite.
1 2
3
4
5
83Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Exemple 4 : Coloration d’un graphe
2-coloration 3-coloration
Remarques
Un algorithme basé sur une heuristique vorace permet la possibilité de trouver une "bonne" solution mais pas la certitude
l’algorithme exhaustif qui produit une solution optimale est exponentiel
84Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Exemple 5 : Feux de signalisation
Considérons 5 artères : A, B, C, D et E.
D et E sont des artères à sens uniqueA
B
C
D
E
Changements de direction(13)
AB, AC, AD, BA, BC, BD, DA, DB, DC, EA, EB, EC et ED
AB et EC sont possibles alors que AD et EB peuvent provoquer une collision
Modélisation à l’aide d’un graphe
sommets correspondent aux changements de direction
arêtes joignent les couples de sommets dont les itinéraires se croisent
85Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Exemple 5 : Trace de l’algorithme
4-colorable
AC DA
BD EB
AB AC AD
BA BC BD
DA DB DC
EA EB EC ED
Solution optimale car le sous-graphe composé des sommets AC, DA, BD et EB est un graphe complet de 4 sommets et nécessite par conséquent quatre couleurs.
Les sommets de la même couleur correspondent aux itinéraires sans collision. Les quatre couleurs correspondent aux quatre phases nécessaires du système de signalisation
Graphe complet
86Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Exercices
Exercice 1 :Résoudre le problème de signalisation pour le carrefour suivant :
Exercice 2 :Trouver un algorithme vorace pour résoudre le problème du commis voyageur en supposons que le graphe est complet.
A
B
C
D
87Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Chapitre 5 : Programmation dynamique
diviser-pour-régner : méthode descendante
programmation dynamique : méthode ascendante + utilisation espace mémoire (afin d'éviter de calculer la même chose plus d'une fois)
Contenu
Coefficient du binôme
Principe d’optimalité
Multiplication chaînée de matrices
Plus courts chemins
88Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Exemple 1 : Coefficient du binôme
Coefficient binomial
C(n,k) = C(n-1,k-1) + C(n-1,k) si 0 < k < n
= 1 autrement
fonction C(n,k)
si k=0 ou k=n alors retourner 1
sinon retourner C(n-1 , k-1) + C(n-1 , k)
89Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
)( nk
Exemple 1 : Trace de l’algorithme
Trace pour (5,2) =10
Remarques :beaucoup de valeurs C(i,j) sont calculées plusieurs fois.
Exercice : Montrer que le nombre d'appels récursifs provoqués par C(n,k) est égal à :
2 - 2
C(5,2)
C(4,1) C(4,2)
C(3,2)C(3,1)C(3,1)C(3,0)
C(2,0) C(2,1) C(2,0) C(2,1) C(2,1) C(2,2)
C(1,0)C(1,1) C(1,0)C(1,1)C(1,0)C(1,1)
90Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Exemple 1 : Triangle de Pascal
Exercice : Décrire cet algorithme. Montrer qu’il demande un espace dans O(k) et un temps dans O(nk) si on compte chaque addition à coût unitaire.
Exercice : Parmi les algorithmes du calcul des nombres de Fibonacci, lequel est un algorithme de programme dynamique ?
0 1 2 3 4 5 ... k-1
0
1
2
3
4
5
n-1
n
k
.
.
1
1
1
1
1
1
1
1
1
1
1
1
1
2
3
4
5
C(n-1,k-1)
4
10
3
6
5
C(n-1,k)
C(n,k)
10
91Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Principe d’optimalité
La programmation dynamique est souvent utilisée pour résoudre des problèmes d'optimisation qui satisfont le principe d'optimalité suivant :
Principe d'optimalité : Dans une séquence optimale de décisions ou de choix, chaque sous-séquence doit être optimale.
Exemple : le problème du plus court chemin vérifie le principe d’optimalité
Exercice : Le principe d'optimalité s'applique-t-il au problème du plus long chemin simple entre deux villes ? Un chemin simple va directement de ville en ville sans passer deux fois par la même ville (sans cycle).
92Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Exemple 2 : Multiplication chaînée de matrices
M = M1M2...Mn
Comme la multiplication matricielle est associative
M = (...((M1M2)M3) ... )Mn
= M1(M2(M3(... (Mn-1Mn) ...)))
= ((M1M2)(M3M4) ... )
= ...
Le choix d'une méthode peut influencer sur le temps de calcul.
Exercice : Montrer que le calcul de AB, où A est d'ordre pxq et B est d'ordre qxr, par la méthode directe nécessite pqr multiplications de nombres scalaires.
93Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Exemple 2 : Application
Exemple :Soient quatre matrices A, B, C et D d'ordre (13x5), (5x89), (89,3) et (3, 34) respectivement.
Il y a cinq manières différentes de calculer ABCD :
((AB)C)D qui nécessite 10582 multiplications
(AB)(CD) " " 54201 "
(A(BC))D " " 2856 "
A((BC)D) " " 4055 "
A(B(CD)) " " 26418 "
La méthode la plus efficace est 9,5 fois plus rapide que la plus lente
94Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Exemple 2 : Nombre de Catalan
Soit T(n) : nombre de manières différentes d'insérer des parenthèses dans M
M = (M1M2...Mi) (Mi+1 .. Mn)
Nous avons T(i) manières de mettre les parenthèses dans la partie gauche de Mi et T(n-i) manières de mettre les parenthèses dans la partie droite. Par conséquent
T(n) = S1≤i≤n-1 T(i) T(n-i)
et T(1) = 1
T(n) s'appelle nombre de Catalan.
Exercice :Montrer que T(n) = 1/n
T(n)
1
2
3
4
5
1
2
10
5
14
2
4862
n
)( 2n – 1n – 1
95Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Exemple 2 : Algorithme de programmation dynamique
Soit mij (1 ≤ i ≤ j ≤ n) la solution optimale pour la partie Mi...Mj du produit M.
La solution du problème est m1n.
Supposons que la dimension de Mi est di-1 x di pour i = 1,2,..,n.
Construisons la table mij diagonale par diagonale : la diagonale s contient l'élément mj tel que j-i = s.
Cas 1 : s = 0 ⇒ mij = 0, i = 1,2,..,n
Cas 2 : s = 1 ⇒ mi,i+1 = di-1 di di+1 , i = 1,2,..,n-1
Cas 3 : 1 < s < n ⇒ mi,i+s = min i ≤ k ≤ i+s-1 (mik + mk+1,i+s + di-1dkdi+s)
Le troisième cas représente le fait que pour calculer (Mi Mi+1...Mi+s) on essaye toutes les possibilités(Mi...Mk)(Mk+1...Mi+s) pour en choisir la meilleure.
96Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Exemple 2 : Trace de l’algorithme
Reprenons l'exemple précédent : d = (13,5,89,3,34)
s = 1 : m12 = 5785, m23 = 1335 et m34 = 9078
s = 2 : m13 = min(m11 + m23 + d0d2d3 , m12 + m33 + d0d2d3) = min(1530 , 9256) = 1530
m24 = min(m22 + m34 + d1d2d4 , m23 + m44 + d1d3d4) = min(24208 , 1845) = 1845
s = 3 : m14 = min(m11+ m24+ d0d1d4 , m12+ m34+ d0d2d4 , m13+ m44 + d0d3d4)
= min(4055 , 54201 , 2856) = 2856
j=1 j=2 j=3 j=4
i=1 0 5785 1530 2856
i=1 0 1335 1845
i=3 0 9078
i=4 0
97Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Exercices
Exercice 1 :Ecrire l'algorithme qui calcule m1n. Comment peut-on modifier l'algorithme si l'on veut savoir comment calculer M de façon optimale ?
Exercice 2: Montrer que l’algorithme ∈ θ(n3).
98Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Exemple 3 : Plus courts cheminsSoit G = (N,A) un graphe orienté où N = 1,2,..,n. Soit L une matrice qui donne la longueur de chaque arc. Trouvons le plus court chemin entre chaque paire de sommets.
Le principe de l'optimalité s'applique car si k est un sommet intermédiaire sur le plus court chemin entre i et j alors la portion du trajet de i à k ainsi que celle de k à j doivent aussi être optimales. A l'itération k on trouve un chemin qui ne passe que par 1,2,..,k.
Dk[i,j] = min(Dk-1[i,j], Dk-1[i,k] + Dk-1[k,j])
ProcédureFloyd (L[1 .. n,1 .. n]) : tableau [1 .. n,1 .. n]D ← Lpour k = 1 à h faire
pour i = 1 à n fairepour j = 1 à n faire
D[i,j] ← min(D[i,j] , D[i,k] + D[k,j])retourner D
Exercice :Montrer que t(n) ∈ O(n3)
99Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Exemple 3 : Trace de l’algorithme
D0 = L = et D4 =
1
2 3
415
15
5
30
5 50 5 15
0 5 15 1020 0 10 5 30 35 0 1515 20 5 0
0 5 ∞ ∞50 0 15 5 30 ∞ 0 1515 ∞ 5 0
100Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Chapitre 6 : Transformation du domaine
Soit f : Dt → D une fonction à calculer.
Une transformation consiste en :
- domaine R
- injection F : D → R
- fonction g : Rt → R
tel que : f = F-1 o g o F
Contenu
Multiplication symbolique de deux polynômes
Transformée de Fourrier
Transformée de Fourier inverse
D D
R R
t f
g t
Φ Φ − 1
101Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Exemples de transformation du domaine
Produit de deux nombres positifs
D = ℜ+*, f(u,v) = u*v , R = ℜ et F (u)= ln u et g(x,y) = x+y
Addition en représentation romaine (XVI + CIV)
Changement de coordonnées (cartésiennes/ polaires)
Calcul dans un ordinateur (E/S en décimal et calcul en binaire)
Calcul différentiel (transformée de Laplace).
(u,v) u*v
(ln u,ln v) ln u + ln v
f
g
lne
102Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Multiplication symbolique des polynômes
Soient p(x) = ad-1xd-1 + ad-2x
d-2 + … + a0 et q(x) = bd-1xd-1 + bd-2 x
d-2+ … + b0
On veut calculer r(x) = p(x) q(x)
algorithme classique
∈ O(d2) en comptant les opérations scalaires comme élémentaires.
Transformation du domaine
f : multiplication symbolique
Φ : évaluation en 2d - 1 points ∈ O(d2)
g : multiplication ponctuelle)
F-1 : interpolation
p ( x ) ,q ( x ) r ( x )
p ( x i ) ,q ( x i ) i = 0 ,1 , . . . , 2 d - 2
f
g Φ Φ − 1
r ( x i ) = p ( x i ) q ( x i ) i = 0 ,1 , . . . , 2 d - 2
103Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Exemple de la multiplication de deux polynômes
p(x) = 2x - 1 et q(x) = x - 1
r(x) = p(x)q(x) = (2x – 1)(x – 1) = 2x2 – 3x + 1
p et q peuvent être représentées à l'aide de leur coefficients ou en 2 valeurs
p = (-1,1) et q = (-1,0) ⇒ r = pq = (1,0)
r(x) n’est pas complètement défini
r est de degré 2 ⇒ il doit être défini de façon unique à l'aide de 3 valeurs
p = (-1,1,3) et q = (-1,0,1) ⇒ r = pq = (1,0,3)
par la méthode de Lagrange (ou résolution d’un système linéaire ou ) on trouve :
r (x) = 2x2 – 3x + 1
104Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Transformée de Fourier (discrète)Applications (optique, acoustique, télécommunications, traitement du signal)
Soient n = 2k , k > 0,
w / wn = 1 (racine de l’unité)
Exemples
w = 4, n = 8 et le calcul se fait modulo 257
w = (1+i) /√2, n = 8 et le calcul est en arithmétique complexe
Définition
Soit a = (a0,a1, .. ,an-1) vecteur qui définit pa(x) = an-1xn-1 + .. + a0
Transformée de Fourier de a relativement à w est :
Fw(a) = (pa(1), pa(w),..., pa(wn-1))
Exercice
Calculer Fi(a) et Fi(a) avec a=(1,-1,-5,3) et b=(-2,6,-4,1)
105Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Algorithme pour la Transformée de Fourrier
Supposons n > 1 et posons t = n/2
Soient b = (a0,a2,...,an-2) et c = (a1,a3,...,an-1) tels que :
pa(x) = pb(x2) + x pc(x
2).
En particulier :
pa(wi) = pb(b
i) + wi pc(bi) où b = w2
bt = 1 ⇒ on peut de parler de Fb(b) et Fb(c)
De plus
bt+i= bi ⇒ pa(wt+i) = pb(b
i) + wt+i pc(bi)
comme nous allons voir que wt = -1
⇒ pa(wt+i) = pb(b
i) - wi pc(bi)
106Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Algorithme FFTfonction FFT (a[0...n-1] , w) : tableau [0...n-1]
tableauA[0...n-1] pour recevoir le résultatsi n=1 alors A[0] <-- a [0]sinon t <-- n/2
tableaux b, c, B, C[0...t-1]pour i <-- 0 à t-1 faire b[i] <-- a[2i] , c[i] <-- a[2i+1]
B <-- FFT(b , w2)C <-- FFT(c , w2)b <-- 1
pour i <-- 0 à t-1 faireA[i] <-- B[i] + b C[i]A[t+i] <-- B[i] - b C[i]b <-- bw
retourner A
Exercice 1 :Montrer que FFT ∈ O(n logn).
107Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Trace de FFT
a = (1,-1,-5,3), w=iFFT(a,i)
t=2, b = (1,-5) et c = (-1,3)B=FFT(1,5)
t=1, b=(1) et c=(-5)B=FFT(b,1)=(1)C=FFT(c,1)=(-5)A=(-4,6)
C=FFT(c,-1)t=1, b=(-1) et c=(3)B=FFT(b,1)=(-1)C=FFT(c,1)=(3)A=(2,-4)
A=(-2, 6-4i, -6, 6+4i)
108Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Transformée de Fourrier inverse
Définition : le nombre w est appelé une n-ième racine principale de l'unité si :
i) w ≠ 1 (sauf si n=1)ii) wn = 1iii) S1≤j≤n-1 wjp = 0 pour 1 ≤ p < n
Remarques :
l'inverse de w est wn-1
si p = n/2, la deuxième condition implique :
S1≤j≤n-1 wjn/2 = n/2(1 + wn/2) = 0 ⇒ wn/2 = -1.
Exercice :• Montrer que w-1 est une n-ième racine principale de l'unité.• Soient n et w des puissances positives de 2 et soit m = wn/2 + 1. Prouver que w est une n-ième racine principale de l'unité dans l'arithmétique modulo m. Prouver que n-1 existe, en montrant que n-1 = m - (m-1)/n.
109Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Transformée de Fourrier inverse
Théorème :Soient A la matrice n x m / A = (aij) et aij = wij. Comme w est une n-ième racine principale de l'unité et n-1 existe alors A est inversible, son inverse étant la matrice B / B = (bij) et bij = n-1 w-ij et AB = In où In est la matrice identité.
Une autre formulation de la définition de la transformée de Fourier est :
Fw(a) = a A
Exercice :
Définir A et B pour n = 4.
Corollaire : 0 ≤ i < j < n ⇒ wi ≠ wj.
Cette propriété est essentielle à l'interpolation du polynôme produit
110Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Algorithme FTT inverse
La transformée de Fourier inverse de a relativement à w est :
F-1w(a) = (n-1pa(1) , n-1pa(w
-1) ,...n-1, n-1pa(w-(n-1))
= n-1 Fw-1(a) = n-1 Fwn-1(a).
Exercice 4 :Montrer que F-1w(Fw(a)) = a pour tout vecteur a
fonction FFTinverse (a[0 .. n-1] , w) : tableau[0 .. n-1]tableauF[0 .. n-1]F <-- FFT(a , wn-1)pour i <-- 0 à n-1 faire F[i] <-- n-1F[i]retourner F
FFT inverse ∈ O(n)
Exercice :Faire la trace pour FFTinverse( (-2, 6-4i, -6, 6+4i)
111Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Application à la multiplication symbolique des polynômes
Soient p(x) = as-1xs-1 +...+ a0 et q(x) = bt-1 xt-1 +...+ b0
On veut calculer r(x) = p(x)q(x) de degré d = s + t.
Soient n la plus petite puissance de 2 ≥ d et w une n-ième racine principale de l'unité.
Soient a et b tels que a = (a0,a1,..., as-1,0,...,0) et b = (b0,b1,..., bt-1,0,0,...,0).
Soient A = Fw(a) et B = Fw(b)
A i = p(wi) et Bi = q(wi) , i = 0,1,...,n-1.
Soit C tel que Ci = AiBi = p(wi)q(wi) = r(wi).
⇒ C = Fw(c) correspond aux coefficients de r
D’où
La multiplication symbolique des polynômes ∈ O(d log d)
112Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Trace de l’exemple
p(x) = 3x3 - 5x2 - x + 1 et q(x) = x3 - 4x2 + 6x – 2
On choisit n=8 et on sait que w=4 est une racine principale de l'unité dans l‘arithmétique modulo 257.
Soit a = (1,-1,-5,3,0,0,0,0), b = (-2,6,-4,1,0,0,0,0).
Fw(a) = (255,109,199,29,251,247,70,133)
et Fw(b) = (1,22,82,193,244,103,179,188).
Le produit point par point modulo 257 donne C = (255,85,127,200,78,255,194,75)
Comme F-1w(C) = (-2, 8, 0, -31, 37, -17, 3, 0).
alors :
r(x) = 3x6 - 17x5 + 37x4 - 31x3 + 8x - 2
113Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Chapitre 7 : Algorithmes probabilistes
Caractéristiques
Hasard peut prendre certaines décisions
Différentes exécutions sur le même exemplaire peuvent produire des résultats différents
Conflit avec la définition d’un algorithme
Contenu
Ali Baba et les 40 voleurs
Calcul de ΠIntégration numérique
Test de primalité
Algorithmes génétiques
114Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Exemple 1 : Ali Baba et les 40 voleurs
Hypothèses
Valeur du trésor est T
les voleurs prélèvent chaque nuit un montant x
Une fois sur place Ali Baba peut reconnaître le trésor
4 jours de calcul pour déterminer le lieu exact
Indication de Jouha moyennant 3x
Solutions
S1 = T – (4 + 5)x = T – 9 x
S2 = T – (3 + 5)x = T – 8 x
S3 = T - 5x
=T - 10 x ⇒ espérance = (T - 5 x)/2 + (T – 10 x)/2 = T – 7,5 x
5 jours
5 jours
5 jours
Trésor ?Trésor?
Ali Baba
115Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Exemple 2 : Calcul de Π
k : nombre des points à l’intérieur du cerclen : nombre total de points
S1 = Πr2 : surface du cercle S2 = (2r)2 = 4 r2 : sUrface du carréS1/S2 = Πr2/4r2 = Π/4 ⇒ Π = 4 S1/S2 ≈ 4 k/n
fonction Π (n)k ← 0pour i = 1 à n faire
x ← uniforme(0,1)y ← uniforme(0,1)
si (x2 + y2 <1) alors k ← k + 1retourner 4k/n
2r
r
x
x
xx
xx
x
x
xx
x
x
x
x
116Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Exemple 3 : Intégration numérique
Soit f : [0,1] [0,1] continue
Calculons l’intégrale f(x) entre 0 et 1
fonction intégration1(f,n)
k ← 0
pour i = 1 à n faire
x ← uniforme(O,1)
y ← uniforme(0,1)
si y ≤ f(x) alors k ← k + 1
retourner k/n
117Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Exemple 3 : Intégration numérique
fonction intégration2(f,n)
somme ← 0
pour i = 1 à n faire
x ← uniforme(O,1)
somme ← somme + f(x)
retourner somme/n
Remarque
Algorithme1 et 2 sont intéressants car les algorithmes systématiques ne donnent que des valeurs approximatives
118Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Exemple 4 : Test de primalité
fonction premier(n)
d ← uniforme(2, √n)
retourner d
Remarques
• Cas favorable : n =1 x 2 x 3 x … x (n-1) = n!
• Pire cas : n non premier mais est le produit de deux nombres premiers
• n = 2623 = 43x61 ⇒ fiabilité = 2%
• Plusieurs tests permettent d’augmenter la fiabilité
• Il existe d’autres moyens qui donnent des tests plus précis
119Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Exemple 5 : Algorithmes génétiques
analogies avec les phénomènes biologiques (sélection naturelle de Charles Darwin)
vocabulaire : individus (solutions potentielles), population, gènes (variables), chromosomes, parents, descendants, de reproduction, de croisement, de mutations, etc.
120Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Chapitre 8 : Pré-conditionnement
I : ensemble des exemplaires
J, K ⊂ I tel que i ∈ I, i=<j,k>
i’ est la solution de i
Algorithme A Algorithme Bjj
k
i’
Exemples
Réalisation d’une application = Compilation + exécution
Recherche dans un ensemble = Construction du tas + recherche binaire en O(log n)
Evaluation répétée d’un polynôme = forme pré-conditionnée + évaluation
121Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Evaluation répétée d’un polynôme
J : ensemble des polynômes à une variable de degré nK : ensemble des valeurs que la variable peut prendre
HypothèsesCoefficient entiersÉvaluation pour des valeurs entièresPolynôme unitairesn = 2k – 1Comptage du nombre de multiplications
P(x) = x7 – 5x6 + 4x5 +- 13x4 + 3x3 – 10 x2 + 5 x –17= (x4 + 2)[(x2 + 3)(x – 5) + (x + 2)] + [(x2 –2 – 4)x + (x + 9)]⇒ 5 multiplications et 9 additions
122Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Méthode de pré-conditionnement
Soit p(x) un polynôme unitaire de degré 2k – 1p’(x) = (x2k-1
+ a)(q(x) + r(x))avec a une constante et q et r deux polynômes unitaires de degré 2k-1 -1la même procédure est appliquée récursivement à q et rp’ appelée est la forme pré-conditionnée de p
Exercice : trouver p’ pour x7 + 2x6 – 5x4 + 2x3 – 6x2 + 6x – 32 et x7
Soit M(k) : nombre de multiplications pour évaluer p(x) M’(k) = M(k) – k + 1 Si on ne compte pas les multiplications pour x2, x4, …, x2k-1
M’(k) = 0 si k = 0= 2 M’(k – 1) + 1 si k ≥ 2
⇒ M’(k) = 2k – 1 – 1 ⇒ M(k) = 2k – 1 + k – 2
D’où il suffit de faire : (n-3)/2 + log(n + 1) multiplications
123Algorithmique et complexité de calcul, M. Eleuldj, EMI, Avril 2008
Méthodes d’évaluation d’un polynôme
(n – 3)/2 + log(n + 1)5Pré-conditionnement
n – 16Horner
2n – 212Dynamique
n(n + 1)/2 - 127Directe
En généralNombre de multiplications pour p
Méthode