Hablando en términos generales, la complejidad del tiempo es una forma de resumir cómo crece el número de operaciones o el tiempo de ejecución de un algoritmo a medida que aumenta el tamaño de entrada.
Como la mayoría de las cosas en la vida, un cóctel puede ayudarnos a entender.
EN)
Cuando llegas a la fiesta, tienes que estrechar la mano de todos (hacer una operación en cada elemento). A medida que Naumenta el número de asistentes , el tiempo / trabajo que le llevará estrechar la mano de todos aumenta a medida que O(N).
¿Por qué O(N)y no cN?
Existe una variación en la cantidad de tiempo que se necesita para estrechar la mano de las personas. Podría promediar esto y capturarlo de manera constante c. Pero la operación fundamental aquí, estrechar la mano de todos, siempre sería proporcional O(N), sin importar lo que cfuera. Al debatir si deberíamos ir a una fiesta de cócteles, a menudo estamos más interesados en el hecho de que tendremos que conocer a todos que en los detalles minuciosos de cómo son esas reuniones.
O (N ^ 2)
El anfitrión del cóctel quiere que juegues un juego tonto donde todos se encuentran con todos los demás. Por lo tanto, debe conocer a N-1otras personas y, debido a que la siguiente persona ya lo ha conocido, debe conocer a otras N-2personas, y así sucesivamente. La suma de esta serie es x^2/2+x/2. A medida que crece el número de asistentes, el x^2término se hace grande rápidamente , por lo que simplemente dejamos todo lo demás.
O (N ^ 3)
Debe conocer a todos los demás y, durante cada reunión, debe hablar sobre todos los demás en la sala.
O (1)
El anfitrión quiere anunciar algo. Beben una copa de vino y hablan en voz alta. Todos los oyen. Resulta que no importa cuántos asistentes haya, esta operación siempre toma la misma cantidad de tiempo.
O (log N)
El anfitrión ha colocado a todos en la mesa en orden alfabético. ¿Donde esta Dan? Usted razona que debe estar en algún lugar entre Adam y Mandy (¡ciertamente no entre Mandy y Zach!). Dado eso, ¿está entre George y Mandy? No. Debe estar entre Adam y Fred, y entre Cindy y Fred. Y así sucesivamente ... podemos localizar eficientemente a Dan mirando la mitad del conjunto y luego la mitad de ese conjunto. Finalmente, nos fijamos en los individuos O (log_2 N) .
O (N log N)
Puede encontrar dónde sentarse en la mesa utilizando el algoritmo anterior. Si un gran número de personas se acercara a la mesa, una a la vez, y todas hicieran esto, eso llevaría tiempo O (N log N) . Esto resulta ser cuánto tiempo lleva ordenar una colección de artículos cuando deben compararse.
Mejor / peor caso
Llegas a la fiesta y necesitas encontrar a Iñigo: ¿cuánto tiempo te llevará? Depende de cuando llegues. Si todo el mundo está dando vueltas, has tocado el peor de los casos: tomará O(N)tiempo. Sin embargo, si todos están sentados a la mesa, solo tomará O(log N)tiempo. O tal vez pueda aprovechar el poder de gritos de copa de vino del anfitrión y solo tomará O(1)tiempo.
Suponiendo que el anfitrión no esté disponible, podemos decir que el algoritmo de búsqueda de Íñigo tiene un límite inferior O(log N)y un límite superior O(N), según el estado de la fiesta cuando llegue.
Espacio y comunicación
Se pueden aplicar las mismas ideas para comprender cómo los algoritmos usan el espacio o la comunicación.
Knuth ha escrito un buen artículo sobre el anterior titulado "La complejidad de las canciones" .
Teorema 2: existen canciones arbitrariamente largas de complejidad O (1).
PRUEBA: (debido a Casey y la Sunshine Band). Considere las canciones Sk definidas por (15), pero con
V_k = 'That's the way,' U 'I like it, ' U
U = 'uh huh,' 'uh huh'
para todos los k.