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 c
tal que el tiempo de ejecución está limitado anteriormente c
, independientemente de la entrada. Por ejemplo, devolver el primer elemento de una matriz de n
enteros 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 c
tal que el tiempo de ejecución está limitado por arriba c * n
, donde n
mide el tamaño de la entrada. Por ejemplo, encontrar el número de ocurrencias de un número entero particular en una matriz de n
nú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.