¿Podemos aceptar que cuanto más rápido se ejecute un programa, mejor? Bueno.
Ahora, hipotéticamente, supongamos que su empleador tiene un servidor que realiza 10 operaciones por segundo. Supongamos también que el servidor le cuesta a su empresa $ 1 / segundo para ejecutarse. Usted, el ingeniero de software, tiene la tarea de escribir un programa simple para ordenar, digamos, 10’000 enteros.
Digamos que usa el tipo burbuja. La complejidad de tiempo de [math] O (n ^ 2) [/ math] hace que el proceso de clasificación tome 100′000′000 operaciones, lo que se traduce en más de 115 días de tiempo de servidor y $ 10′000′000 para su empleador.
- Cómo calcular la suma de subconjuntos individuales de todos los subconjuntos en un rango dado de manera eficiente
- ¿Debo usar kits de herramientas como scikit-learn para comenzar con el aprendizaje automático?
- ¿Podría hacerlo sin espacio adicional y en tiempo de ejecución O (n)?
- ¿Cuáles serían las mejores entradas para un algoritmo de red neuronal que intenta predecir el mercado de valores?
- Programación competitiva: ¿Se pueden resolver todos los problemas de Fenwick Tree con Segment Tree?
También puedes usar la clasificación rápida. La complejidad del tiempo es [matemática] O (n log n) [/ matemática], que a su vez se traduce en ~ 132877 operaciones y 1 día y 12 horas de tiempo de servidor. Eso es $ 9.8 millones más barato, sin tener en cuenta los ahorros de tener resultados antes.
Ni siquiera hemos comenzado a hablar sobre otras características de los datos de entrada, como si están parcialmente ordenados. Simplemente el conocimiento de algoritmos puede hacer una gran diferencia en tiempo y costo de un programa. Según se informa, la desaceleración de 1 segundo en los tiempos de carga de páginas para Amazon le costaría a la compañía $ 1.6 mil millones en ventas por año [1].
Leí en alguna parte que es mucho más fácil hacer que la computadora sea más rápida utilizando estructuras de datos y algoritmos adecuados, que actualizar el hardware para que sea más rápido .
Ahí va la razón por la que necesita un conocimiento sólido de las estructuras de datos y algoritmos antes de poder obtener un trabajo de desarrollo de software.
Notas al pie
[1] Cómo un segundo podría costarle a Amazon $ 1.6 mil millones en ventas