Cours CACA Chap1
Cours CACA Chap1
Cours CACA Chap1
Exemples
- Calcul de puissance :
Entrée : deux entiers naturels a,n
Sortie : an
- Algorithme de tri :
Entrée : un tableau de n entiers tab = [a0, a1,……., an-1]
Sortie : un tableau de n entiers tab = [b0, b1,…., bn-1] t..q.. b0 <= b1 <=….. <= bn-1
3. Analyse d’algorithme
Analyser un algorithme est une opération qui consiste à prévoir les ressources nécessaires
(mémoire, temps de calcul) au programme qui implémente cet algorithme.
Pour pouvoir analyser un algorithme, il faut avoir un modèle de la technologie qui sera
employé. En algorithmique, les algorithmes sont analysés selon les calculs dans un modèle
générique de machine à accès aléatoires (RAM=Random Access Machine), à processeur
unique. L’Analyse des algorithmes est équivalente à l’étude de la complexité des
algorithmes.
1
Conception, Analyse et Complexité des algorithmique Chapitre 1
L’objectif est d’évaluer le temps de calcul de A pour P pour pouvoir comparer A avec un
autre algorithme A’. L'évaluation dépend de la taille du problème, elle doit être
indépendante de l’environnement (machine utilisée .système, compilateur, . . .)
La complexité d'un algorithme ou l'évaluation du temps de calcul d'un algorithme est une
mesure de coût exprimée en fonction de la taille n des données :
T(n)=nombre d'opérations élémentaires
Remarque : En analyse de complexité, on étudie souvent le pire des cas ce qui donne une
borne supérieure de la complexité de l'algorithme.
Evaluation de T(n)
- Séquence (sommes des coûts)
( )
{ ⇒ ( ) ( ) ( ) ( )
( )
2
Conception, Analyse et Complexité des algorithmique Chapitre 1
( ) ( )
{ ( ) ⇒ ( ) ( ( ) ( ))
5. Notation asymptotique
En pratique une analyse précise d'un algorithme même dans le pire des cas est presque
impossible (sauf pour un algorithme simple). La solution est d'établir une approximation
asymptotique du temps de calcul de l'algorithme. Ainsi, on compare l'efficacité
asymptotique des algorithmes.
( ) ( ) ( )
Ceci revient à dire que T(n) est égale à f(n) à un facteur constant près.
Pour indiquer que T(n) (f(n)), on écrit T(n) = (f(n))
( ) ( )
3
Conception, Analyse et Complexité des algorithmique Chapitre 1
Ceci revient à dire que T(n) est inférieure à f(n) à une constante près et pour n assez grand.
Pour indiquer que T(n) O (f(n)), on écrit T(n) = O (f(n)).
( ) ( )
Ceci revient à dire que T(n) est supérieure à f(n) à une constante près et pour n assez grand.
Pour indiquer que T(n) (f(n)), on écrit T(n) = (f(n)).
6. Classes de complexité
Un algorithme A résout un problème P en temps O(f(n)) si pour toute instance de taille n,
l'algorithme retourne une solution correcte avec un coût O(f(n)).
La nature de la fonction f(n) définie la classe de complexité ou le niveau de complexité de
l'algorithme A.
Lors de l'analyse de complexité, on essaie de se ramener aux classes suivantes :
On peut établir une hiérarchie entre les classes de complexité du plus petit au plus grand :
O(1) O(log(n)) O(n) O(nlog(n)) O(n2) O(nk) O(an) , avec k > 2, a > 1
4
Conception, Analyse et Complexité des algorithmique Chapitre 1
Exemples
- Quelques fonctions
T(n) = n3 + 2 n2 + 4 n + 2 = O(n3) (si n ≥ 1 alors f(n) ≤ 8 × n3)
T(n) = n log n + 12 n + 888 = O(n log n)
T(n) = 1000 n10 − n7 + 12 n4 + 2n/1000 = O(2n)
- Permutation
fonction permutation (S, i, j)
tmp S[i],
S[i] S[j],
S[j] tmp,
renvoyer S
coût total T(n) = 4 = O(1)
- Recherche séquentielle
fonction recherche (x, S, n)
i 1,
tant que ((i < n) et (S[i] ≠ x)) faire
i i + 1,
renvoyer (S[i] = x)