Cada respuesta que responde actualmente a esta pregunta le dice que el O(1)
significa tiempo constante (lo que sea que ocurra con la medición, podría ser el tiempo de ejecución, el 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 por c
, independientemente de la entrada. Por ejemplo, volviendo 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 es O(1)
también:
int identity(int i) {
if(i == 0) {
sleep(60 * 60 * 24 * 365);
}
return i;
}
El tiempo de ejecución aquí está acotado superiormente por 1 año, pero la mayoría de el tiempo en que 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á acotado superiormente por 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 sin clasificar de n
números enteros 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 es porque tenemos que iterar a través de la matriz de la inspección de cada elemento de una en una .
Esto podría ayudar: http://stackoverflow.com/questions/471199/what-is-the-difference-between-n-and-on/471206#471206 –