Algoritmos

Introducción

Sabías que hay algo presente en casi todo lo que nos rodea, desde la publicación que nos sale apenas entramos a Instagram hasta el despliegue de los paneles solares de la estación espacial internacional.

Ese “algo” son los algoritmos: instrucciones precisas que permiten que máquinas, programas e incluso procesos cotidianos funcionen de manera ordenada.

Desarrollo

¿Qué son los algoritmos?

Según el diccionario de la lengua española un algoritmo es un conjunto ordenado y finito de operaciones que permite hallar la solución de un problema.

En otras palabras, se utilizan para resolver tareas específicas en una serie fija de pasos que se ejecutan en secuencia o convierten valores de entrada en valores de salida.

Los algoritmos son independientes de un lenguaje específico por lo que no solo los encontramos en las matemáticas y en la informática, también a nuestro alrededor: desde las luces de un semáforo hasta cuando llamamos al ascensor. Podemos decir que un algoritmo es una forma estructurada de representar cómo resolvemos un problema, expresada en pasos claros y ordenados.

Entender qué son y cómo funcionan es clave para entender el mundo que nos rodea.

Características elementales de un algoritmo

Los algoritmos cumplen con unas características elementales con las que se espera que cuenten para su implementación, estas brindan fiabilidad a la hora de sus aplicaciones, y dividen los buenos algoritmos de los malos.

  • Eficacia Cada paso de la secuencia de un algoritmo debe ser eficaz, es decir, para obtener un resultado cada paso debe tener un sentido y ser adecuado para su fin.
  • Ejecutabilidad Las acciones y los pasos individuales deben ser realizables.
  • Finitud El objetivo de un algoritmo es convertir los datos de entrada en datos de salida. Esto solo es posible si el proceso es finito.
  • Entrada Debe requerir cero o más datos de entrada.
  • Salida Debe producir al menos un resultado o salida.
  • Determinismo Las mismas entradas en las mismas condiciones deben conducir a los mismos resultados. Solo así los algoritmos pueden garantizar que una aplicación y la solución de un problema funcionen de forma confiable.

Características de un buen algoritmo

Pueden haber varios algoritmos que resuelvan el mismo problema, pero si tenemos criterio vamos a querer implementar aquellos algoritmos que resuelvan el problema de una forma más óptima. Los factores que vamos a tener en cuenta a la hora de elegir un buen algoritmo son:

  • Eficacia Debe resolver el problema planteado.
  • Eficiencia Que resuelva el problema de la forma más rápida y económica (tiempo y espacio)
  • Generalidad Que pueda servir para una clase amplia de problemas, no solo un caso particular.

Ejemplos de Algoritmos

Algoritmo de Google

Cuando escribimos una palabra en el buscador tan solo en una fracción de segundo nos muestra resultados de búsqueda.

Esto se debe al algoritmo del motor de búsqueda de Google, que ordena los resultados en función de ciertos parámetros como la relevancia, palabras clave, la estructura de los enlaces entre otros.

Preparar el mate

Preparar el mate ilustra el principio básico de un algoritmo. Los elementos e ingredientes pueden entenderse como entradas que conducen al resultado en una secuencia específica y fija de acciones.

Desde poner la pava a calentar el agua hasta la ultima instancia en que lo tomamos.

Transformada rápida de Fourier (FFT)

Es un algoritmo eficiente utilizado en el procesamiento de señales y de gran importancia en una amplia variedad de aplicaciones como las comunicaciones (Wi-fi), medicina, música entre muchas otras.

Cómo se usan los algoritmos en computación

En computación, los algoritmos son el elemento esencial de un programa: describen paso a paso qué debe hacer una computadora para resolver un problema.

Su funcionamiento se puede entender a través de un ciclo básico:

entrada → procesamiento → salida.

Es decir, reciben datos, los transforman mediante una serie de instrucciones y producen un resultado.

Para llevar un algoritmo a la práctica primero se representa a través de un diagrama (Diagrama de flujo) lo que nos permite entender su lógica sin depender de un lenguaje de programación concreto.

Una vez plasmada la lógica del algoritmo se traduce en un lenguaje de programación para que la computadora pueda interpretarlo.

Los algoritmos se aplican a una enorme variedad de tareas:

  • Búsqueda y ordenamiento, como encontrar un elemento en una lista o acomodar datos.
  • Machine learning, donde se usan para clasificar información, predecir comportamientos o reconocer patrones.
  • Criptografía, redes, compresión de datos, gráficos por computadora, y prácticamente cualquier área de la informática.

Existe una rama llamada ingeniería de algoritmos que se dedica a diseñar, probar y mejorar los algoritmos para que sean más eficientes y rápidos. No solo importa el diseño teórico de un algoritmo, también cómo se comporta en la práctica en el caso particular donde se aplica, donde intervienen factores como el hardware y los datos.

Como determino la eficiencia de un algoritmo

Podríamos medir la eficiencia de un algoritmo por su tiempo de ejecución, pero esto no nos da una medida fiel del rendimiento del algoritmo porque hay implicados otros factores como el rendimiento del hardware en donde se está ejecutando.

Dado que medir el tiempo real no es fiable, necesitamos una forma más universal de evaluar su rendimiento.

Análisis asintótico

El análisis asintótico es una herramienta que permite evaluar la eficiencia de un algoritmo cuando el tamaño de los datos crece. En lugar de medir el tiempo exacto de ejecución, estudia cómo aumenta el costo (tiempo o memoria) a medida que la entrada se hace más grande. Esto nos ayuda a comparar algoritmos y elegir el más adecuado para cada problema.

La complejidad temporal analiza cuánto tiempo puede tardar un algoritmo según el tamaño de la entrada, mientras que la complejidad espacial mide cuánta memoria necesita. Para describir este comportamiento se usan notaciones como Big-O, que representan el peor caso, así como el mejor caso y el caso promedio. Pero este tema, es motivo de otro artículo.

Algunos algoritmos se consideran asintóticamente óptimos porque su complejidad no puede mejorarse más allá de factores constantes: son tan eficientes como teóricamente es posible.

Por último, es importante saber que existen los llamados “trade-offs”, lo que significa que un algoritmo es más rápido pero ocupa más memoria, y el caso contrario donde es más lento pero ocupa menos memoria. Es importante elegir un algoritmo en base a el tipo de problema a resolver y el contexto en donde se va a ejecutar.

Porque debemos pensar en algoritmos

Pensar algoritmos nos brinda una serie de beneficios como desarrolladores y profesionales, entre ellos el diseño de algoritmos más eficientes nos ayuda a crear programas más escalables debido a que nuestros desarrollos van a ser capaces de manipular grandes volúmenes de datos economizando al máximo los recursos de tiempo y memoria.

Tener una visión general sobre algoritmos nos ayuda a formar un criterio a la hora de seleccionar uno para resolver un problema en particular teniendo en cuenta cada caso con sus especificidades.

Es una gran herramienta de innovación, muchos avances en inteligencia artificial, criptografía y ciencia de datos dependen de algoritmos.

Nos ayuda a desarrollar un pensamiento computacional: diseñar un algoritmo implica descomponer un problema, pensar en casos, prever errores, y eso es una habilidad altamente valiosa en todo campo de aplicación.

Por último, nos hace más conscientes de cómo impactan los algoritmos en nuestra sociedad, haciéndonos ver que los algoritmos no son imparciales, afectan decisiones, como es el caso del sesgo algorítmico, pero es tema para otro artículo.

Conclusión

Los algoritmos son parte esencial de nuestra vida cotidiana y del funcionamiento del mundo. Comprender cómo funcionan nos permite ser usuarios más conscientes y profesionales más capacitados. Desarrollar un pensamiento algorítmico no solo mejora nuestra capacidad para crear soluciones eficientes, sino que también nos ayuda a entender, analizar y optimizar los procesos que realizamos todos los días.