No, realmente no. No descubrimos un algoritmo 2 veces más rápido para un problema determinado cada 2 años. (Supongo que se refería a una reafirmación de la ley de Moore sobre la capacidad del hardware, no la cantidad de transistores en un chip).
El rendimiento de los algoritmos en la literatura generalmente se mide en términos de complejidad asintótica de todos modos, por lo que decir que un algoritmo es 2 veces más rápido no tiene ningún sentido, porque debe especificar qué tamaño de entrada es 2 veces más rápido. Si un nuevo algoritmo tiene un mejor tiempo de ejecución asintótico que uno anterior, en algunas entradas puede ser más lento, en otras puede ser 2 veces más rápido y en otras 100 veces más rápido. La ley de Moore tendría que definirse de alguna otra manera para incluso tener sentido para los algoritmos.
La Ley de Moore tiene sentido para el hardware solo porque las operaciones que son O (1) en el hardware realmente no cambian.
- ¿Qué harías? ¿Cuál hubiera sido tu estrategia si hubieras tenido la oportunidad de volver a comenzar la programación de aprendizaje?
- ¿Cuál es la solución a este décimo problema polinómico de clase?
- ¿Es posible la generación de números aleatorios verdaderos?
- ¿Cómo debo hacer uso de sitios como HackerEarth y GeeksforGeeks si tengo habilidades de algoritmos por debajo del promedio?
- ¿Cuál: Estructura de datos y pensamiento algorítmico con Python (Narasimha Karumanchi) o Estructuras de datos y algoritmos en Python (Michael T. Goodrich)?
Además, en términos de software práctico que está escrito, existe lo que se conoce como “el gran contrapeso de la ley de Moore”, que dice más o menos “el software se vuelve más lento a medida que el hardware se acelera”. Recuerde cuándo podría ejecutar un sistema operativo en 64 MB de ¿memoria? ¿O cuándo podría caber uno en un disquete? A medida que evolucionan las capacidades de hardware, las personas crean software más complejo que requiere más recursos. Para construir ese software más complejo, las personas usan más abstracciones y herramientas de alto nivel. Estas herramientas suelen ser bastante generales, lo que significa que su rendimiento podría no estar optimizado para el caso de uso específico. El rendimiento de la máquina se cambia por el rendimiento del ingeniero de software (productividad) y también por las mejores prácticas de ingeniería, como la modularidad y la capacidad de prueba, que son necesarias para garantizar que este software cada vez más complejo realmente funcione y pueda ser mantenido y ampliado de manera competente.