| I Notion de coût d'un programme | Ces pages sont destinées à avoir en tête quelques principes simples permettant d'évaluer un programme. |
I Notion de coût d'un programme
L'exécution d'un programme a toujours un coût. Il existe deux paramètres essentiels pour mesurer ce coût :
Lorsqu'on fait un programme, il faut donc
Algorithmique et complexité
|
|
I Notion de coût d'un programme
| Pour pouvoir évaluer ces coûts de manière théorique, on définit un modèle abstrait d'ordinateur et on évalue les coûts de ce modèle. Par exemple, dans le cas d'une RAM (Random Acces Machine ), on se donne une suite infinie de cases dans lesquelles on peut stocker un entier arbitrairement grand et un programme, c'est-à-dire une suite finie d'instructions permises :
En pratique, il n'est pas vrai que la mémoire est illimitée. Les nombres stockés en mémoire sont limités. Et les opérations élémentaires n'ont pas toutes le même coût. On ne tient pas non plus compte des opérations qui, relativement aux autres, consomment peu de temps, telles que les tests, les affectations et les incrémentations. Bien que très approximatif et ne tenant pas compte de la place mémoire, ce décompte du nombre d'opérations permet de comparer plusieurs algorithmes et correspond en général assez bien aux mesures que l'on peut faire dans une implémentation spécifique de l'algorithme.
Algorithmique et complexité
|
|
I Notion de coût d'un programme
| La plupart des algorithmes que nous verrons dans la suite sont de type arithmétique et les données sont des entiers, des listes d'entiers. III-5 Coûts d'opérations simples
Algorithmique et complexité
|
|
I Notion de coût d'un programme
|
On mesure la taille des données de type entier comme leur nombre de chiffres
en base 2 :
Exercice
Nombre de chiffres en base \( b \)
Nombre de chiffres en base \( b \)
|
|
I Notion de coût d'un programme
|
On évalue le coût
C(x) pour l'entrée
x,
le coût le pire
pour
n donné qui est le coût
maximal de l'algorithme pour des entrées
x de taille
T(x) inférieure à
n :
Plus généralement, on peut se donner une distribution de probabilité Pr sur et évaluer
|
|
I Notion de coût d'un programme
|
On emploie souvent le mot complexité à la place de
coût. La complexité évalue la difficulté intrinsèque des problèmes : par exemple
Tout algorithme capable de traiter toutes les instances de taille a un coût minimal de T(N) dans le cas le pire. L'algorithmique fournit des résultats positifs du type : L'algorithme Truc traite une instance de taille N en temps . |
|
I Notion de coût d'un programme
|
Dans ce qui suit,
f et
g sont des fonctions d'une variable
x qui est soit
un entier positif, soit un réel,
g est une fonction positive pour
x assez grand,
ExerciceComparer des ordres de grandeur Classer des ordres de grandeur Un algorithme est dit polynomial si son coût est au plus polynomial en la taille des entrées. D'autres termes sont utilisés : sous-linéaire , linéaire , quadratique , exponentielle ...
Exercice
Vocabulaire
Attention de bien définir quelle taille est adaptée au problème. |
III-5 Coûts d'opérations simples
|
I Notion de coût d'un programme
|
Soient
a et
b deux entiers, inférieurs ou égaux à
n.
Le nombre de bits dans la représentation binaire de
n est
Une opération sur des entiers de taille "petite" [par exemple, ayant un chiffre en base B, on parle d'entiers simple précision ] est appelée opération élémentaire. La taille d'un entier est donc mesurée en général par lg(n). III-5-1 Opérations élémentaires |
III-5-1 Opérations élémentaires
|
I Notion de coût d'un programme
|
Le nombre d'opérations élémentaires pour des entiers grands
(multi-précision )
pour les quatre opérations
de base nécessaires avec des algorithmes classiques
(ceux que vous utilisez pour faire une opération à la main)
est résumé dans le tableau suivant :
Algorithmique et complexité
|
III-5-2 Coût de l'algorithme d'Euclide
|
I Notion de coût d'un programme
|
Algorithmique et complexité
|
III-5-3 Calcul modulaire modulo n
|
I Notion de coût d'un programme
|
Algorithmique et complexité
|
|
I Notion de coût d'un programme
|
On a un problème avec une solution "simple"
algosimple(x) pour des
entrées
x de taille petite.
Pour
x de taille grande, on le décompose en plus petites entrées
x1,
...,
xr, de taille plus petite. Par exemple, on décompose le problème
en deux avec des tailles moitié. On fait alors tourner le programme
algo (x) sur
ces entrées. Eventuellement, pour pouvoir décomposer le problème et le recomposer,
on a d'autres petites choses à faire
dont le coût est en
f(x).
Diviser pour régnerInput: x Output: algo( x ) si x est petit ou simple alors retourner alogsimple(x) Décomposer x en sous-entrées x1, ..., xt pour i = 1 à t faire recombiner les yi en une solution y pour x retourner y Si le coût du programme est C(x), on a donc
Lemme Soit
une fonction vérifiant
C(x) = 0 pour
x < 1 et
pour certains
a > 0,
b > 1 et
c réels et pour
. Une
borne supérieure pour
C(x) lorsque
est
|
III-7 Pratiquement, que faire ?
|
I Notion de coût d'un programme
|
Voici deux exemples :
Racine carrée entière d'un entier nInput: n un entier positif Output: la racine carrée par défaut d'un entier n ; ; tant que faire ; retourner racine
Recherche du plus petit élément d'une liste en O(n)Input: une liste x de longueur n Output: la position du plus petit élément de la liste x pour i = 1 à n faire si x[i] < x[k] alors retourner k
|
|
I Notion de coût d'un programme
| Exercice
Dans
cet exercice
,
vous sont présentés des algorithmes. Vous devez donner leur ordre de complexité.
Prenez le temps de les comprendre en même temps. Faites attention à ce qu'est la
taille dans chacun des problèmes donnés.
|
|
I Notion de coût d'un programme
|
Algorithmique et complexité
|
|
I Notion de coût d'un programme
|
On fait 5000 additions de nombres dont la taille (longueur en base 2)
est
3000 + 5000i pour i = 1 à 30. Le calcul est fait avec le logiciel GP/Pari.
|
|
I Notion de coût d'un programme
|
tic
for i=1:nb
a+b;
end
elapsed_time = toc ;
On fait 10000 additions de nombres dont la taille (longueur en base 2) est 30000 + 50000i pour i = 1 à 30. Le calcul est fait avec le logiciel Octave |
IV-3 Multiplication dans Pari/GP
|
I Notion de coût d'un programme
|
On fait 5000 multiplications de nombres dont la taille (logarithme en base 2) est 0 + 1000i pour i = 1 à 30. Le calcul est fait avec le logiciel GP/Pari. Les graphes tracés sont les courbes d'équation
|
IV-4 Multiplication dans Octave
|
I Notion de coût d'un programme
| On fait 3000 multiplications de nombres dont la taille (longueur en base 2) est 10000 + 5000i pour i = 1 à 30. Le calcul est fait avec le logiciel Octave
|
Par
|
Version interactive |
Dernière modif. 2012-05-09 21:54:1
| | |
Keywords: complexité,complexity,algorithmique,coût, wims, mathematics, mathematical, math, maths, interactive mathematics, interactive math, interactive maths, mathematic, online, calculator, graphing, exercise, exercice, puzzle, calculus, K-12, algebra, mathématique, interactive, interactive mathematics, interactive mathematical, interactive math, interactive maths, mathematical education, enseignement mathématique, mathematics teaching, teaching mathematics, algebra, geometry, calculus, function, curve, surface, graphing, virtual class, virtual classes, virtual classroom, virtual classrooms, interactive documents, interactive document