Cómo hacer que los algoritmos sean eficientes

¿No estás seguro de que estás haciendo la pregunta correcta? Si tengo un libro sobre algoritmos y decido implementar uno en el código, podría hacer la pregunta: “¿cómo puede mi implementación de un algoritmo ser más eficiente?” Sospecho que eso es lo que estás preguntando?

Me gusta la respuesta de Rajora. Puede trabajar para mejorar la velocidad, y puede mejorar el uso de los recursos, es decir, usar menos RAM, etc. Hoy en día, incluso en dispositivos portátiles, la RAM es un problema menor que la velocidad, pero solo lo digo.

No sé si tiene acceso a un generador de perfiles, si lo usa, será de gran ayuda. Personalmente, me gusta el registro, y me aseguro de incluir marcas de tiempo (en milisegundos) con cada registro.

Acelerar el código es un esfuerzo muy interesante. Si está trabajando en un algoritmo, supongo que solo está trabajando en un método, no en algo más complejo.

  • Crearía todos los objetos fuera del ciclo, es una operación lenta.
  • Buscaría formas de salir de un círculo cada vez que puedas. Es mejor hacer un bucle 3 veces en lugar de continuar, incluso cuando conoce la respuesta, ¿quizás otras 10k veces?
  • Usaría enumeraciones enteras siempre que sea posible, en lugar de hacer comparaciones de cadenas.
  • Solo pasaría por el código para verificar que el código hace lo que tu mente piensa que hace

¡Buena suerte!

No hay bala mágica. Muchos algoritmos funcionan más lentamente de lo necesario porque los datos no están organizados tan bien como podrían estar. Algunos corren más lento porque simplemente hacen un trabajo irrelevante. Algunos tienen otras razones.

A menos que sepa por qué el algoritmo en cuestión es ineficiente, no puede encontrar los cuellos de botella para mejorarlos. Esa es una de las razones por las que el análisis es tan importante.

Sin embargo, generalmente es mejor comenzar con los datos, ya sea indexación o reorganización total.

  1. Al mejorar su complejidad temporal
  2. Al mejorar su complejidad espacial

Cuanto menor sea el tiempo que tome su algoritmo para obtener resultados para valores mayores, menor será la complejidad del tiempo y lo mismo se aplica también a la complejidad del espacio.

Cómo

  • Use una estructura de datos eficiente de acuerdo con la declaración del problema
  • Hacer uso de tablas hash
  • Hacer uso de técnicas de memorización
  • Usa programación dinámica
  • Evitar la recursividad
  • Evite el cálculo repetitivo de resultados para subproblemas, en lugar de almacenarlos en la tabla una vez calculados
  • Usar operaciones bit a bit
  • Opere a nivel de bit en lugar de a nivel de byte para ahorrar espacio siempre que sea posible