Chaque réponse répondant actuellement à cette question vous indique que le O(1)
temps constant signifie (quoi qu'il arrive à la mesure; pourrait être le temps d'exécution, le nombre d'opérations, etc.). Ce n'est pas exact.
Dire que le runtime est O(1)
signifie qu'il existe une constante c
telle que le runtime est délimité ci-dessus par c
, indépendamment de l'entrée. Par exemple, renvoyer le premier élément d'un tableau d' n
entiers est O(1)
:
int firstElement(int *a, int n) {
return a[0];
}
Mais cette fonction l'est O(1)
aussi:
int identity(int i) {
if(i == 0) {
sleep(60 * 60 * 24 * 365);
}
return i;
}
Le temps d'exécution ici est limité au-dessus d'un an, mais la plupart du temps, le temps d'exécution est de l'ordre de la nanoseconde.
Dire que le runtime est O(n)
signifie qu'il existe une constante c
telle que le runtime est délimité ci-dessus par c * n
, où n
mesure la taille de l'entrée. Par exemple, trouver le nombre d'occurrences d'un entier particulier dans un tableau non trié d' 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;
}
C'est parce que nous devons parcourir le tableau en inspectant chaque élément un par un.