Me cito a mí mismo...
Cita: Yo creo que el estilo C++ tiene una ventaja inmediata: es mucho más fácil pensar en una solución y esa solución es muy fácil de hacer eficiente, mientras que la solución en estilo C puede no ser difícil de pergeniar, pero es más difícil de hacer eficiente o, por lo menos, se necesita bastante más esfuerzo y reinventar varios paraguas para conseguir una solución equivalente. Mi idea es que para obtener una solución eficiente en C++ no hace falta ser demasiado inteligente, sólo estudiar un poco más.
Y me cito textualmente por dos motivos; el primero es para plantarme en la cara que puse pergeniar, así, con 'ni', y el segundo es para insistir:
- Idear una solución C++ suele ser más fácil que idear una solución C.
- Hacer eficiente (que no es lo mismo que optimizar) una solución C++ es más fácil que hacer eficiente una solución C.
El ejemplo que puse tenía la intención de comparar una primera solución C con una primera solución C++. Y dejando correr el ejemplo, puede verse que mientras que esa primera solución C es de grado O(N log N), su homóloga C++ es de grado O(log N). Entonces, optimizar la primera no sólo es más difícil, sino que lo prudente sería buscarse otra, con lo que se duplica el esfuerzo sólo para llegar al mismo lugar donde nos dejaba la segunda.
Otro tema es el de las optimizaciones, que vienen después de haber elegido los algoritmos y de tener todo funcionando correctamente, y, como su nombre indica, se busca mejorar lo hecho.
Y es en este asunto en donde se ha embarullado eferion.
Cita: ...conseguimos exactamente la misma salida y con una mejora del rendimiento que varía...
No todavía.
Estoy seguro que mi primera versión puede optimizarse, y sí, estoy de acuerdo con que (si ya no es necesaria la comparación con la versión original de estilo C) es mejor separar la generación de datos y la función responsable del cómputo; pero si tu versión anterior trabajaba para no hacer nada, esta otra trabaja para dejar todo como está.