¿Por qué es difícil estimar el tiempo de ejecución exacto de un algoritmo?

Complejidad.

Solía ​​ser factible.

Si compra una computadora doméstica Commodore 64 vieja y escribe un programa en lenguaje máquina, entonces, para cada instrucción, se documenta exactamente cuántos ciclos de reloj requerirá. Con un recuento cuidadoso, es posible que pueda calcular exactamente cuántos ciclos de reloj requerirá todo su programa y predecir el tiempo total de ejecución hasta el microsegundo.

Aun así, esto significaba que tenía que calcular exactamente qué secuencia de instrucciones debía procesar el programa, lo cual es difícil de hacer si el programa es complicado.

Entonces fue difícil, pero factible.

Sin embargo, lo mismo ya no es factible por muchas razones diferentes, todo lo cual hizo que la relación entre su programa y el número de ciclos de reloj utilizados para ejecutarlo sea menos transparente.

  • El mismo programa se ejecuta en muchas combinaciones diferentes de componentes de hardware ahora. Su computadora contiene uno de una multitud de procesadores, placas base, conjuntos de chips y DRAM, cada uno con diferentes características de rendimiento.
  • La gente ya no programa directamente en lenguaje máquina; Se utiliza un compilador para traducir su programa al lenguaje de máquina. Exactamente cómo lo hace es complicado, y hay muchos compiladores diferentes disponibles, cada uno de los cuales produce un código diferente.
  • La arquitectura de la memoria se ha vuelto mucho más sofisticada. En el pasado, buscar un valor en la memoria de la computadora siempre tomaba la misma cantidad de tiempo. Ahora, el acceso secuencial es mucho más rápido que el acceso aleatorio; además, los valores se almacenan en caché, de modo que usar el mismo valor la segunda vez es mucho más rápido que la primera vez. Para empeorar las cosas, no hay un caché sino una jerarquía completa, ¡y tampoco es lo mismo en todo el hardware!

Entonces, algo que ya era difícil, pero factible, ya no se puede hacer realista, especialmente si sus conclusiones tienen que ser válidas no solo para una máquina en particular, sino para cualquier PC.

Como resultado, las personas han recurrido a probar el rendimiento del programa en la práctica.

Dicho esto, los buenos programadores a menudo todavía tienen un presentimiento decente sobre la eficiencia de un programa, basado en el análisis teórico de los algoritmos involucrados combinados con la experiencia práctica.

Es la palabra “exacto” lo que hace que este problema sea particularmente difícil. La forma más fácil de encontrar el tiempo de ejecución de un programa con una entrada específica es ejecutarlo y medirlo. Para lograr el mismo resultado mediante análisis, se requerirá una ejecución en seco del programa. Una ejecución en seco del programa básicamente hace lo que hace la computadora paso a paso y eso obviamente es mucho trabajo. Tenga en cuenta que incluso ejecutar un programa con la misma entrada dará diferentes tiempos para diferentes ejecuciones, esto se debe a los efectos del sistema (programación, paginación, uso de caché, etc.), por lo que incluso este no será un tiempo “exacto”.

En general, el análisis algorítmico está más relacionado con el peor de los casos y la complejidad del tiempo promedio del caso. Estos son más fáciles de determinar por análisis de complejidad.

Además, estas tareas generalmente no pueden ser completamente automáticas debido al teorema de Rice “todas las propiedades semánticas no triviales de los programas son indecidibles”.

No estoy en desacuerdo con las otras respuestas, pero puedo pensar en razones:

# 1 ¿Cómo estima la calidad de su compilador?

# 2 Las diferentes computadoras funcionan a diferentes velocidades, e incluso la misma computadora probablemente esté ejecutando muchas otras tareas que varían de un minuto a otro.

# 3 Los algoritmos tardan más o menos según el problema que se resuelva o los datos que se ingresaron para que se compute.

# 4 Es difícil de estimar porque es más fácil ejecutarlo y ver cuánto tiempo lleva.

“¿Por qué es difícil estimar el tiempo de ejecución exacto de un algoritmo?”

En general, no lo es. Hay toda una rama de la informática dedicada a esto: análisis de algoritmos. Por lo general, comienzas a tomar cursos sobre esto como licenciado superior de CS de la división superior.

Algunos algoritmos pueden ser difíciles de analizar porque tienen muchos puntos de decisión que los envían por diferentes caminos y es difícil adivinar qué camino sin saber mucho sobre los datos de entrada. Pero, en general, estimar el tiempo de ejecución solo es difícil si no sabe cómo hacerlo.

Probablemente si. La razón es que los estudios de posgrado se basan principalmente en la investigación. Encontrar al profesor adecuado en estas escuelas de Ivy ayudará de muchas maneras: primero asegurándose de que esté interesado en tener estudiantes y acordando un área de investigación común. Si todo saliera bien, eso aumentaría sus posibilidades de entrar.

More Interesting

Mis ubicaciones están por venir, así que he estado implementando estructuras de datos y algoritmos en Python, pero llegué a saber que muchas empresas no tienen Python instalado en sus estaciones de trabajo. ¿Es verdad? Y si es así, ¿estaría bien cambiar de Python a Java, que no recuerdo mucho?

Cómo mejorar mi solución Java para el problema 'nodo de hoja izquierda más profundo en un árbol binario'

¿Cuáles son las aplicaciones prácticas e industriales de los algoritmos de búsqueda / recorrido de gráficos BFS y DFS?

Dado un conjunto entero tal que cada elemento ocurre 3 veces, excepto un elemento, que ocurre solo una vez, ¿cómo encuentro ese único elemento en el espacio O (1) y en la complejidad del tiempo O (n)?

¿Por qué sigo olvidando cómo funciona el algoritmo djikstra?

¿Qué es una cadena de Markov?

¿Cuál es su opinión sobre Interview Cake para resolver algoritmos?

¿Cuáles son las aplicaciones del algoritmo de la Torre de Hanoi?

Cómo encontrar la complejidad del tiempo en: T (n) = n * (T (n-1) + O (n))

Cómo resolver la línea de problemas SPOJ usando DP con máscaras de bits

Cómo determinar si un algoritmo informático es complejo o no

¿Es posible que el modelo de espacio vectorial que utilizamos para entrenar algoritmos de aprendizaje automático sea inadecuado para la representación del aprendizaje humano?

¿Cómo funciona el algoritmo de acortador de URL?

¿Cuál es la operación que tiene la constante más pequeña?

¿Qué es la inserción táctica?