Toutes les réponses actuelles à cette question vous disent que la O(1)
signifie un temps constant (quelle que soit sa mesure ; il peut s'agir du temps d'exécution, du nombre d'opérations, etc.) Ce n'est pas exact.
Dire que le temps d'exécution est O(1)
signifie qu'il y a une constante c
de telle sorte que le temps d'exécution est borné au-dessus par c
indépendant de l'entrée. Par exemple, le retour du premier élément d'un tableau de n
entiers est O(1)
:
int firstElement(int *a, int n) {
return a[0];
}
Mais cette fonction est O(1)
aussi :
int identity(int i) {
if(i == 0) {
sleep(60 * 60 * 24 * 365);
}
return i;
}
Le temps d'exécution est ici limité à un an, mais la plupart du temps, il est de l'ordre de quelques nanosecondes.
Dire que le temps d'exécution est O(n)
signifie qu'il y a une constante c
de telle sorte que le temps d'exécution est borné au-dessus par c * n
, donde n
mesure la taille de l'entrée. Par exemple, trouver le nombre d'occurrences d'un entier particulier dans un tableau non trié de n
entiers par l'algorithme suivant est O(n)
:
int count(int *a, int n, int item) {
int c = 0;
for(int i = 0; i < n; i++) {
if(a[i] == item) c++;
}
return c;
}
Cela est dû au fait que nous devons itérer dans le tableau en inspectant chaque élément un par un.