Académique Documents
Professionnel Documents
Culture Documents
Données
Wurtz Jean-Marie
1
Références bibliographiques Implémentation d'un algorithme
• "Algorithms in Java"; Robert Sedgewick & Michael • Ecriture en Java : mais peut-être implémenté dans
Shildlowsky; Third edition, Parts 1-4 : Fundamentals, data n'importe quel autre langage
structures, sorting & searching; Addison-Wesley.
• "Algorithms in Java"; Third edition, Part 5 : Graph • Un algorithme fait parti d'un gros programme
algorithm; Robert Sedgewick & Michael Shildlowsky; – utilisation de structure de données abstraites
Addison-Wesley. – peuvent être substituées
• "Data Structure and Algorithm"; Alfred V. Aho, John E. • Dès le début : connaître les performances d'un
Hopcroft, Jeffrey D. Ullman; Addison-Wesley. algorithme
• "Algorithmique du texte"; Maxime Crochemore,
Christophe Hancart, Thierry Lecroq; Vuibert. • Tout le système en dépend (recherche, tri, …)
2
Temps d'exécution Analyse empirique (3)
10-6 s pour une instruction
int i, j, k, count=0; • Nécessite l'implémentation d'une première version
d'un algorithme !!!
for (i=0; i < N; i++) • Nature des données à tester
for (j=0; j < N; j++) – données typiques
– données aléatoires
for (k=0; k < N; k++) – données extrêmes
count++; • Attention à la comparaison
– soin accordé à l'implémentation
Temps pour N= 10, 100, 1000, 100000 ou 1 million – différences entre ordinateurs, compilateurs, systèmes
d'exploitation, ….
10-3s 1s 1000s 1 an 10 siècles
3
Outil mathématique Analyse mathématique
• L'analyse mathématique d'un algorithme peut-être
• Mesure générale des performances d'un complexe
algorithme • Une spécialité en informatique
• Comparer 2 algorithmes pour la même • Paramètres hors de portée du programmeur Java :
tâche – temps d'exécution d'une instruction (MV/compilateur)
• Prédire la performance dans un nouvel – ressources partagées
environnement – dépendance des données en entrée
– certains algorithmes sont tout simplement complexes et
il n'y a pas de résultat mathématique pour les décrire
4
Les entrés testées par l'algorithme Les fonctions d'accroissement
• Plusieurs cas sont envisagés:
– le cas moyen : fiction mathématique • La plupart des algorithmes ont un paramètre N qui les
caractérise :
– le pire des cas : construction qui se produit que
– le nombre d'assurés sociaux
rarement
– le nombre de fichiers
– donnent néanmoins des informations clés – le nombre de caractères
• Exemple : • Une mesure abstraite du problème
– recherche séquentiel d'un nombre dans un tableau • Plusieurs paramètres peuvent exister :
static int search(int a[], int v, int l, int r) { – par exemple M et N (producteurs et consommateurs, usine de
int i; productions et sites de vente)
for (i = l; i <= r; i++) – garder un paramètre fixe en faisant varier l'autre paramètre
if (v == a[i]) return i; • But : exprimer les besoins en fonction de N ( ou M et N)
return -1; par des formules mathématiques
}
Copyright " 'Algorithms in Java'; Robert Sedgewick & Michael Shildlowsky; Third edition, Parts 1-4; Addison-Wesley "
Reproduction ULP Strasbourg. Autorisation CFC - Paris
5
Temps requis pour résoudre de gros Fonctions spéciales
problèmes fonctions noms valeurs types approximation
1 1 1
H N = 1+ + + ... +
2 3 N
1
≈ ln N + γ +
12 N
γ=0,57721, constante d'Euler
Copyright " 'Algorithms in Java'; Robert Sedgewick & Michael Shildlowsky; Third edition, Parts 1-4; Addison-Wesley " Copyright " 'Algorithms in Java'; Robert Sedgewick & Michael Shildlowsky; Third edition, Parts 1-4; Addison-Wesley "
Reproduction ULP Strasbourg. Autorisation CFC - Paris Reproduction ULP Strasbourg. Autorisation CFC - Paris
6
Temps d'exécution de 4 programmes Approximation de « grand-O » :
g(N) = O(f(N)) c*f(N)
f est proportionnelle à g
g(N)
notre fonction
f(N)
approximation N > No
Copyright " 'Data Structure and Algorithm'; Alfred V. Aho, John E. Hopcroft, Jeffrey D. Ullman; Addison-Wesley " Copyright " 'Algorithms in Java'; Robert Sedgewick & Michael Shildlowsky; Third edition, Parts 1-4; Addison-Wesley "
Reproduction ULP Strasbourg. Autorisation CFC - Paris Reproduction ULP Strasbourg. Autorisation CFC - Paris
Approximation Approximation
g(N) g(N)
de la fonction de la fonction
f(N) f(N)
• g(N) proportionnelle à f(N) • g(N) proportionnelle à f(N)
• g(N) croit comme f(N) à g(N) ≤ c * f(N) pour N > No • g(N) croit comme f(N) à g(N) ≤ c * f(N) pour N > No
une constante "c" près une constante "c" près
c*f(N) c*f(N)
No No
Copyright " 'Algorithms in Java'; Robert Sedgewick & Michael Shildlowsky; Third edition, Parts 1-4; Addison-Wesley " Copyright " 'Algorithms in Java'; Robert Sedgewick & Michael Shildlowsky; Third edition, Parts 1-4; Addison-Wesley "
Reproduction ULP Strasbourg. Autorisation CFC - Paris Reproduction ULP Strasbourg. Autorisation CFC - Paris
7
Propriétés de la notation O (1) Propriétés de la notation O (2)
• f est O(g) est transitif :
• Les constantes peuvent être ignorées : si f est O(g) et g est O(h) alors f est O(h)
∀ k > 0, k*f est O( f) • Le produit des bornes supérieures est la borne supérieure
• Les puissances supérieures croissent plus rapidement : du produit :
si f est un polynôme de degré d alors f est O(nd) si f est O(g) et h est O(r) alors f*h est O(g*r)
• Les termes croissant rapidement dominent la somme • Les fonctions exponentielles croissent plus vite que les
si f est O(g), alors f + g est O(g) puissances :
ex: an4 + bn4 est O(n4 ) nk est O( bn ) ∀ b > 1 et k ≥ 0
• Une croissance polynomiale est dictée par la puissance la ex : n20 est O( 1.05n)
plus élevée • Les logarithmes croissent plus lentement que les
nr est O( ns) si 0 ≤ r ≤ s puissances :
logbn est O( nk) ∀ b > 1 et k > 0
ex: log2n est O( n0.5)
Algorithmes polynomiaux et
Propriétés de la notation O (3)
difficiles
• Tous les logarithmes croissent de manière similaire • Algorithme polynomiale
logbn est O(logdn) ∀ b, d > 1
– s'il est O(nd) pour un entier "d" donnée
– les algorithmes polynomiaux sont dits efficaces
• La somme des n premières puissances de r croit comme la
puissance de (r+1) • Ils peuvent être résolus en un temps raisonnable
n
∑k
k =1
r
est O( nr+1 )
• Algorithmes difficiles
– algorithmes pour lesquels il n'y a pas d'algorithme avec
r
n(n + 1)
ex :
∑k =
k =1 2
is Ο( n2 ) un temps polynomiale
8
Coût des instructions Exemple avec O(N)
• Instructions simples : a=b; a+=b; … O(1)
s1; s2; …. ; sk O(1) si k est une constante • T(0)=1
• boucle simple : O(N) • T(1)=4
for(i=1; i <N; i++) inst;
avec inst O(1) donc N*O(1)=O(N) • T(N)=(N+1)2
• double boucle imbriquée : O(N2) • T(N) est O(N2) avec N0=1 et c=4
for(i=1; i <N; i++)
for(j=1; j <N; j++) inst; • T(N) ≤ 4*N2 pour N ≥ N0=1
complexité N*O(N) donc O(N2)
• N0=0 n'est pas possible car T(0)=1 or
• triple boucle imbriquée : O(N3) c*02=0 pour toutes constantes c
Copyright " 'Algorithms in Java'; Robert Sedgewick & Michael Shildlowsky; Third edition, Parts 1-4; Addison-Wesley "
Reproduction ULP Strasbourg. Autorisation CFC - Paris
9
Exercice avec O(N) (3) Exercice avec O(N) (4.1) 1 1 1
H N = 1+ + + ... +
2 3 N
1
≈ ln N + γ +
• montrer que 3N n'est pas O(2N) • Algorithme : 12 N
– Initialisation exécutée 1 fois (temps : a1 ns)
• Supposons qu'il existe 2 constantes c et N0 tel que – une boucle interne parcourue 2N*HN
(temps : a2 ns; avec HN le nombre harmonique)
N ≥ N0 pour lesquelles l'inégalité suivante est
– une section supplémentaire exécutée N fois
vérifiée : 3N ≤ c*2N (temps : a3 ns)
Exercice avec H N = 1+
1 1
+ + ... +
2 3
1
N Exercice avec O(N) (4.3)
O(N) (4.2) ≈ ln N + γ +
1
• l'expression asymptotique du temps total d'exécution :
12 N temps proche de 2a2N*Ln(N) pour des N grands
• Avec la notation O(N) que devient cette estimation ?
a1 + 2a2N*HN + a3*N ns • que se passe-t-il si N double : taille 2N?
• 2a2N*HN + O(N) 2a2 (2 N ) ln(2 N ) + O(2 N ) 2 ln(2 N ) + O(1)
=
• Une forme plus simple qui indique que ce n'est pas la peine 2a2 N ln N + O( N ) ln N + O(1)
de chercher a1 et a3
1
• Temps d'exécution exprimé en notation « grand-O » ? = 2 + O( )
2a2N en facteur ln N
• HN=ln(N) + O(1) on obtient ainsi 2a2N*Ln(N)+ O(N)
• l'expression asymptotique du temps total d'exécution :
• sans connaître a2 on peut prédire que le temps doublera
temps proche de 2a2N*Ln(N) pour des N grands
pour le traitement des données de taille 2N
10
Application : Recherche du Recherche séquentielle : coût?
maximum
• static int search(int a[], int v, int l, int r)
• Recherche séquentielle : {
• int i;
for (i = 1; i <= r; i++)
if (v == v[i]) return i;
l r return -1;
}
static int search(int a[], int v, int l, int r)
{ • Coût moyen
int i; Analyse de l'algorithme? (1 + 2 + 3 + 4 +…+ N) / N = N (N + 1) / 2N = (N + 1)/2
for (i = 1; i <= r; i++)
if (v == v[i]) return i; paramètre clé? • Coût extrême
return -1; N car on parcourt tout le tableau
}
11
11 nombres
Recherche binaire
Recherche binaire (2)
static int search(int a[], int v, int l, int r)
1. Recherche de 5025 {
2. Comparaison à 6504; 1ère while(r>=l) {
moitié int m = (l+r)/2;
3. Comparaison à 4548; 2ème if (v == a[m]) return m;
moitié if (v < a[m]) r = m-1; else l = m+1;
4. …. }
return -1;
} Coût ?
23 nombres recherches infructueuses
recherches avec succès
Copyright " 'Algorithms in Java'; Robert Sedgewick & Michael Shildlowsky; Third edition, Parts 1-4; Addison-Wesley "
Reproduction ULP Strasbourg. Autorisation CFC - Paris
12
Autres notation
Ω( g ) : l'ensemble des fonctions dont la croissance est
similaire à g
∃ N0 ≥ 0, ∃ c 〉 0, ∀ N ≥ N0 f(N) ≥ c*g(N)
13