¿Por qué es necesario conocer la complejidad temporal de un programa?

Nuestro hijo tuvo este problema ayer con la tarea: la compañía de alquiler A cobra $ 25 por alquilar un auto y $ 0.25 adicionales por milla. La compañía de alquiler B cobra $ 50 sin cargo por milla. ¿De qué compañía de automóviles alquilaría y por qué?

La respuesta realmente corta a esta pregunta (desde la perspectiva de la complejidad) es que usaría la compañía de automóviles B para viajes largos, ya que la complejidad del precio es O (1), mientras que para O es la compañía A.

Reemplace las millas con el número de puntos de datos y el costo con el tiempo, y tendrá su respuesta.

Como Doug McCreary mencionó en su publicación, es difícil y raro encontrar la complejidad de un programa completo. Para los programas, usted determina los puntos críticos: porciones de código que utilizan demasiado tiempo, etc. Luego, para cada uno de los puntos críticos importantes, observa el algoritmo utilizado y ve si puede mejorar la implementación o reemplazar el algoritmo. Con la práctica, el número / intensidad de puntos de acceso en su código disminuirá; siempre tendrá puntos calientes y cuellos de botella.

En realidad, ese es rara vez el caso. Mucho más común es la necesidad de conocer la complejidad temporal de algún algoritmo particular dentro de un programa. La necesidad más común de conocer la complejidad del tiempo es cuando ha desarrollado su programa en un conjunto de datos de prueba pequeño, pero finalmente lo ejecutará en un conjunto de datos en vivo mucho más grande. Entonces, si bien su programa podría completar el conjunto de datos de prueba (n = 1000) en un microsegundo, podría tener problemas con un conjunto de datos en vivo (n = 1000000000). Si tiene un plazo estricto sobre cuándo debe finalizar su programa (por ejemplo, dentro de la vida del universo, o durante su vida o el próximo año), la complejidad del tiempo algorítmico puede ser crucial.