He visto que este término "O (1) tiempo de acceso" solía significar "rápidamente", pero no entiendo lo que significa. El otro término que veo con él en el mismo contexto es "O (n) tiempo de acceso". ¿Podría alguien explicar de manera simple lo que significan estos términos?
Ver también
Respuestas:
Vas a querer leer sobre el orden de complejidad.
http://en.wikipedia.org/wiki/Big_O_notation
En resumen, O (1) significa que lleva un tiempo constante, como 14 nanosegundos, o tres minutos, sin importar la cantidad de datos en el conjunto.
O (n) significa que lleva una cantidad de tiempo lineal con el tamaño del conjunto, por lo que un conjunto dos veces mayor tomará el doble de tiempo. Probablemente no quieras poner un millón de objetos en uno de estos.
fuente
int main() { int n; cin >> n; if(n == 0) { sleep(60 * 60 * 24 * 365); } cout << n; }
isO(1)
.En esencia, significa que lleva la misma cantidad de tiempo buscar un valor en su colección, ya sea que tenga una pequeña cantidad de artículos en su colección o muchos (dentro de las limitaciones de su hardware)
O (n) significaría que el tiempo que lleva buscar un artículo es proporcional al número de artículos de la colección.
Ejemplos típicos de estos son los arreglos, a los que se puede acceder directamente, independientemente de su tamaño, y las listas vinculadas, que se deben recorrer en orden desde el principio para acceder a un elemento determinado.
La otra operación generalmente discutida es insertar. Una colección puede ser O (1) para acceder pero O (n) para insertar. De hecho, una matriz tiene exactamente este comportamiento, porque para insertar un elemento en el medio, tendría que mover cada elemento a la derecha copiándolo en la siguiente ranura.
fuente
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 constantec
tal que el tiempo de ejecución está limitado anteriormentec
, independientemente de la entrada. Por ejemplo, devolver el primer elemento de una matriz den
enteros esO(1)
:Pero esta función
O(1)
también es :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 constantec
tal que el tiempo de ejecución está limitado por arribac * n
, donden
mide el tamaño de la entrada. Por ejemplo, encontrar el número de ocurrencias de un número entero particular en una matriz den
números enteros sin clasificar mediante el siguiente algoritmo esO(n)
:Esto se debe a que tenemos que recorrer la matriz inspeccionando cada elemento de uno en uno.
fuente
O (1) significa que el tiempo para acceder a algo es independiente del número de elementos en la colección.
O (N) significaría que el tiempo para acceder a un artículo es proporcional al número (N) de artículos en la colección.
fuente
O (1) no significa necesariamente "rápidamente". Significa que el tiempo que lleva es constante y no se basa en el tamaño de la entrada a la función. Constante puede ser rápido o lento. O (n) significa que el tiempo que tarda la función cambiará en proporción directa al tamaño de la entrada a la función, denotada por n. Una vez más, podría ser rápido o lento, pero será más lento a medida que aumente el tamaño de n.
fuente
Se llama notación Big O y describe el tiempo de búsqueda de varios algoritmos.
O (1) significa que el peor tiempo de ejecución es constante. Para la mayoría de las situaciones, significa que en realidad no necesita buscar en la colección, puede encontrar lo que está buscando de inmediato.
fuente
O(1)
ejecutar siempre al mismo tiempo independientemente del conjunto de datos n. Un ejemplo de O (1) sería una ArrayList accediendo a su elemento con índice.O(n)
También conocido como orden lineal, el rendimiento crecerá linealmente y en proporción directa al tamaño de los datos de entrada. Un ejemplo de O (n) sería una inserción y eliminación de ArrayList en una posición aleatoria. Como cada inserción / eliminación posterior en una posición aleatoria hará que los elementos en ArrayList se deslicen a la izquierda a la derecha de su matriz interna para mantener su estructura lineal, sin mencionar la creación de una nueva matriz y la copia de elementos de la anterior. a una nueva matriz que ocupa un tiempo de procesamiento costoso, por lo tanto, perjudica el rendimiento.fuente
La "notación Big O" es una forma de expresar la velocidad de los algoritmos.
n
es la cantidad de datos con los que trabaja el algoritmo.O(1)
significa que, sin importar cuántos datos, se ejecutarán en tiempo constante.O(n)
significa que es proporcional a la cantidad de datos.fuente
Básicamente, O (1) significa que su tiempo de cálculo es constante, mientras que O (n) significa que dependerá linealmente del tamaño de la entrada, es decir, el bucle a través de una matriz tiene O (n), solo bucle, porque depende del número de elementos, al calcular el máximo entre números ordinarios tiene O (1).
Wikipedia también podría ayudar: http://en.wikipedia.org/wiki/Computational_complexity_theory
fuente
La forma más fácil de diferenciar O (1) y O (n) es comparar la matriz y la lista.
Para la matriz, si tiene el valor de índice correcto, puede acceder a los datos al instante. (Si no conoce el índice y tiene que recorrer la matriz, ya no será O (1))
Para la lista, siempre debe recorrerlo si conoce el índice o no.
fuente
Aquí hay una analogía simple; Imagine que está descargando películas en línea, con O (1), si tarda 5 minutos en descargar una película, aún le tomará el mismo tiempo descargar 20 películas. Por lo tanto, no importa cuántas películas esté descargando, tomarán el mismo tiempo (5 minutos), ya sea una o 20 películas. Un ejemplo normal de esta analogía es cuando vas a una biblioteca de películas, ya sea que estés tomando una película o 5, simplemente las elegirás de una vez. De ahí pasar el mismo tiempo.
Sin embargo, con O (n), si toma 5 minutos descargar una película, tomará aproximadamente 50 minutos descargar 10 películas. Por lo tanto, el tiempo no es constante o de alguna manera es proporcional al número de películas que está descargando.
fuente
Significa que el tiempo de acceso es constante. Ya sea que esté accediendo desde 100 o 100,000 registros, el tiempo de recuperación será el mismo.
Por el contrario, el tiempo de acceso O (n) indicaría que el tiempo de recuperación es directamente proporcional a la cantidad de registros a los que accede.
fuente
Significa que el acceso lleva un tiempo constante, es decir, no depende del tamaño del conjunto de datos. O (n) significa que el acceso dependerá del tamaño del conjunto de datos linealmente.
La O también se conoce como big-O.
fuente
Introducción a los algoritmos: segunda edición de Cormen, Leiserson, Rivest y Stein dice en la página 44 que
Si un algoritmo se ejecuta en tiempo O (1), significa que asintóticamente no depende de ninguna variable, lo que significa que existe al menos una constante positiva que cuando se multiplica por uno es mayor que la complejidad asintótica (~ tiempo de ejecución) de la función para valores de n por encima de cierta cantidad. Técnicamente, es el tiempo O (n ^ 0).
fuente
O (1) significa acceso aleatorio. En cualquier memoria de acceso aleatorio, el tiempo necesario para acceder a cualquier elemento en cualquier ubicación es el mismo. Aquí el tiempo puede ser cualquier número entero, pero lo único que debe recordar es el tiempo necesario para recuperar el elemento en (n-1) la enésima o enésima ubicación será la misma (es decir, constante).
Mientras que O (n) depende del tamaño de n.
fuente
Según mi perspectiva,
O (1) significa que el tiempo para ejecutar una operación o instrucción a la vez es uno, en el análisis de complejidad de tiempo del algoritmo para el mejor de los casos.
fuente