Lo que he visto en el código de producción fue, desde el punto de vista de la velocidad de ejecución, en realidad no tan malo, la mayoría de las veces. He visto bucles como este:
para (int i = 0; i <someContainer.GetSize (); ++ i)
{
- Si usted es un vendedor, ¿cómo explicaría el mercado API Mashup / Management?
- ¿Por qué el desarrollo iterativo de software produce la mejor experiencia de usuario?
- ¿Qué tipo de computadoras portátiles de trabajo se emiten para aquellos en el puesto de desarrollo de software graduado Bloomberg 2015?
- ¿Qué malos hábitos de programación / arquitectura puede desarrollar un codificador PHP autodidacta?
- Cómo bloquear usuarios que cambian su dirección IP o usan un proxy
// Haz algo con el elemento i
}
donde obtener el tamaño (o la longitud) tenía O (n) complejidad de tiempo de ejecución, lo que efectivamente hace que el código anterior O (n ^ 2). Entonces supongo que mucho código ineficiente tiene que ver con anteponer cadenas o calcular expresiones de cadena, pero como esto a menudo no ocurre en un bucle, no es tan malo.
También el código para analizar cadenas puede ser bastante ineficiente. En el código actual tenemos un bucle y dentro de ese bucle usan IndexOf () para buscar un byte de inicio o detención. Bueno, ¿adivina qué hace IndexOf? Se repite también …
Otra clase de ineficiencias puede ser causada por la falta de conocimiento matemático. Por ejemplo, ¿quién calcula la suma de 1 a 1,000,000,000 agregando un ciclo? Una vez probé con doble inducción que siempre se puede encontrar un polinomio de grado (n + 1) para sumar términos de grado n, entonces para la suma de x ^ 1, x ^ 2, x ^ 3 o x ^ n … para x en algún rango, hay un polinomio de 2º, 3er, 4to,… (n + 1) grado que le da la respuesta de inmediato.
A veces, el código es ineficiente, porque el problema es NP difícil. Hay muchos problemas para los cuales no se conocen mejores algoritmos que buscar en todo el espacio de búsqueda.
A partir de ejemplos de codificación, la famosa implementación ingenua de los números de Fibonacci es un muy buen ejemplo de código muy ineficiente. Por algunas razones, no he visto muchos algoritmos recursivos (excepto el qsort estándar) en el código de producción y, por lo tanto, no este tipo de explosión de ineficiencia. Pero sospecho que en muchas compañías donde tienen sus propios analizadores locales (! = Yacc + lex, o Boost spirit o ANTLR, etc.) de algún tipo u otras formas de recursión, encontrará ejemplos impactantes.