Cómo obtener una comprensión profunda y exhaustiva de la optimización de algoritmos en C ++

Vamos a dividir su pregunta en dos preguntas secundarias sobre

  • optimizaciones asintóticas (que no dependen del lenguaje de programación, así que imaginemos que no ha escrito “en C ++” en cuestión). Esencialmente se reduce a inventar un nuevo algoritmo que es más rápido que el anterior. Si bien estas “optimizaciones” le permiten acelerar enormemente el programa, dependen en gran medida de su comprensión del dominio problemático de la tarea que está tratando de lograr. Y hay demasiados dominios para comprenderlos todos a menos que desee dedicar toda su vida a ese objetivo. Si puede conformarse con algo menos que “comprensión profunda”, entonces su mejor opción es obtener un título de CS en una universidad decente. Si bien el título de CS no le enseña mucha programación, le brinda una buena visión general de muchos dominios y algoritmos de problemas importantes que se utilizan en ellos, por lo que si / cuando tenga que optimizar el algoritmo es probable que sepa la solución o al menos en qué dirección debe excavar para encontrar uno.
  • Optimización no asintótica. En la mayoría de los casos se reduce a saber con precisión lo que está sucediendo en un nivel de abstracción más bajo y aprovechar ese conocimiento. La única forma de obtener ese conocimiento es aprender a programar el sistema y escribir muchos programas desde cero para tener una idea de lo que aprendió. Después de haber adquirido cierta comprensión de la programación del sistema, la mejor manera de capacitarse para detectar e implementar la optimización no asintótica IMO está participando en concursos de programación y haciendo soluciones que no deberían ser lo suficientemente rápidas para llegar al límite de tiempo, cumplir con el límite de tiempo de todas formas.

Lee y practica.

Comience con OpenMP, MPI, CUDA.

Aprende las bases de la programación paralela. ¿Cómo funciona?. ¿Por qué funciona ?, ¿cuándo usarlo ?, ¿qué puedo hacer en paralelo?

Luego continúe con algoritmos de optimización paralelos. ¿Qué algoritmos existen? ¿Qué mejora ?, ¿cómo se implementan?

Bueno, C ++ se interpone en el camino de la optimización. Cada vez que usa un objeto o clase, invoca cantidades desconocidas de código y algoritmos desconocidos, por lo que hay todo tipo de factores ocultos detrás de escena. Quédate con la vieja C simple, todo está a la vista allí. En un nivel más profundo, ignora el lenguaje y concéntrate en los algoritmos, ahí es donde obtienes las aceleraciones exponenciales.

Para obtener información sobre la optimización de algoritmos, puede leer en “www.geeksforgeeks.org”. Es una de las mejores cosas que encontré.

Además, solo leer no lo ayudaría, así que sea lo que sea que lea, debe intentar implementarlo escribiendo el código por su cuenta y no solo leer el código y dejarlo ir.

También puede consultar alguna plataforma en línea donde puede practicar y encontrar buenos códigos optimizados. Plataformas como hackerrank, hackerearth, codechef.