Cada respuesta que actualmente responde a esta pregunta le dice que O(1)significa tiempo constante (pase lo que pase con la medición; podría ser tiempo de ejecución, número de operaciones, etc.). Esto no es exacto.
Decir que el tiempo de ejecución es O(1)significa que hay una constante ctal que el tiempo de ejecución está limitado anteriormente c, independientemente de la entrada. Por ejemplo, devolver el primer elemento de una matriz de nenteros es O(1):
int firstElement(int *a, int n) {
return a[0];
}
Pero esta función O(1)también es :
int identity(int i) {
if(i == 0) {
sleep(60 * 60 * 24 * 365);
}
return i;
}
El tiempo de ejecución aquí está limitado por 1 año, pero la mayoría de las veces el tiempo de ejecución es del orden de nanosegundos.
Decir que el tiempo de ejecución es O(n)significa que hay una constante ctal que el tiempo de ejecución está limitado por arriba c * n, donde nmide el tamaño de la entrada. Por ejemplo, encontrar el número de ocurrencias de un número entero particular en una matriz de nnúmeros enteros sin clasificar mediante el siguiente algoritmo es 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;
}
Esto se debe a que tenemos que recorrer la matriz inspeccionando cada elemento de uno en uno.