El algoritmo representa, en la sociedad digital actual, uno de los conceptos fundamentales. El término tiene orígenes antiguos, que se remontan al siglo IX d.C., y hoy se utiliza típicamente para describir los procesos de cálculo realizados por las computadoras y las inteligencias artificiales.
Aquí te mostramos qué representa un algoritmo, sus características fundamentales y los elementos que lo distinguen de los más conocidos programas.
¿Por Qué se Llama Algoritmo?
El término algoritmo proviene de la transcripción al latín del nombre del matemático persa que vivió en el siglo IX d.C. El matemático al-Khwarizmi está considerado como el primer autor que hizo referencia al concepto de algoritmo tal y como lo conocemos hoy, dentro de sus escritos, presentando las primeras soluciones sistemáticas de ecuaciones lineales y cuadráticas.
En el siglo XII, de hecho, sus textos matemáticos fueron traducidos al latín, introduciendo el sistema numérico decimal en Occidente. Más concretamente, el término «algoritmo» deriva del algorismo, es decir, de la técnica de cálculo aritmético con números indo-arábigos desarrollada por al-Khwārizmī. Tanto «algoritmo» como «algorismo» derivan de las formas latinizadas del nombre de al-Khwārizmī, algoritmi y algorismi, respectivamente.
Las obras más influyentes de Al-Khwārizmī en el campo de la aritmética son el texto kitāb al-ḥisāb al-hindī (‘Libro del cálculo indio’), y un texto más elemental, kitab al-jam’ wa’l-tafriq al-ḥisāb al-hindī (‘Suma y resta en la aritmética india’). Dentro de estas obras se describían algunos algoritmos basados en números decimales que podían ejecutarse sobre un tablero de polvo llamado takht en árabe (latín: tabula), un tablero cubierto por una fina capa de polvo o arena utilizada para los cálculos, sobre la que las figuras podían escribirse con un estilo y borrarse y sustituirse fácilmente cuando fuera necesario.
Los algoritmos de Al-Khwarizmi se utilizaron durante casi tres siglos, hasta que fueron sustituidos por los algoritmos de Al-Uqlidisi, que podían ejecutarse con papel y pluma, y que fueron sustituyendo gradualmente los anteriores métodos de cálculo latinos basados en el uso del ábaco.
La creación del primer algoritmo informático, en cambio, se atribuye a la matemática británica Ada Lovelace en la primera mitad del siglo XIX, para el cálculo de los números de Bernoulli.
¿Qué es un Algoritmo y Cómo Funciona?
En primer lugar, es necesario definir qué se entiende por el término genérico «algoritmo». Como se anticipó anteriormente, el término surgió en la Edad Media para indicar los procedimientos de cálculo numérico que se basaban en el uso de los números árabes. Con los años, y con la llegada de las computadoras capaces de realizar complejas operaciones de cálculo matemático, el término llegó a definir cualquier esquema o procedimiento matemático de cálculo, que presente una serie de características y esté estructurado en fases.
En lógica matemática, el algoritmo define además:
Cualquier procedimiento «efectivo» de cálculo de una función o de decisión de un conjunto (o predicado), es decir, cualquier procedimiento que permita, con un número finito de pasos ejecutados según un conjunto finito de reglas explícitas, obtener el valor de la función para un argumento dado, o decidir si un individuo dado pertenece al conjunto (o satisface el predicado).
Aunque se refiere principalmente al mundo matemático, la definición de algoritmo abarca, en términos generales, una sucesión de instrucciones, pasos y operaciones que se ejecutan en secuencia sobre un conjunto de datos (entrada) para obtener un resultado determinado (salida).
En general, el algoritmo funciona según una secuencia: las instrucciones se colocan en orden, una tras otra, y se ejecutan en el orden exacto en que fueron introducidas originalmente. Dentro de la secuencia, como en el diagrama de flujo, también se pueden prever reglas operativas condicionales, que indican al ejecutor (normalmente una máquina) cómo comportarse según la circunstancia en la que se encuentre y qué decisiones tomar. Típicamente, las instrucciones del algoritmo se expresan en lenguaje natural, ya que deben ser comprendidas por la persona que va a ejecutarlo; en el caso de que lo ejecute una máquina, las instrucciones se traducirán a un lenguaje comprensible para la misma (el llamado lenguaje de programación).
¿Cuáles son las Características de un Algoritmo?
Aunque existen diferentes tipos de algoritmos, es posible identificar algunas características comunes que permiten clasificar una secuencia de operaciones como un algoritmo propiamente dicho. Estas características fueron definidas en la década de 1960 por Donald Knuth, de la Universidad de Stanford, y sirven para garantizar que la secuencia de operaciones pueda llegar realmente a su fin y ser comprendida:
- Finito: un algoritmo no puede ser infinito, sino que debe estar compuesto por un número determinado y finito de operaciones.
- Definido e inequívoco: cada operación de la secuencia debe estar rigurosamente definida, y no debe presentar ambigüedades, para que pueda ser interpretada de forma directa e inequívoca por su ejecutor (ya sea una máquina o un humano).
- Entrada: debe tener un número finito de datos de entrada.
- Efectividad: el algoritmo debe generar un resultado único.
- Terminación: la ejecución del esquema algorítmico debe tener lugar en un tiempo finito y razonable.
- General: debe dar la misma solución para todas las preguntas que pertenezcan a la misma clase.
Entre los algoritmos que mejor reflejan las características descritas se encuentra el propuesto por Turing en su máquina, que todavía se utiliza hoy en día como modelo para definir si una serie de operaciones pueden llevarse a cabo con la ayuda de una máquina automática.
Ejemplos de Algoritmos
Hemos definido un algoritmo como, en términos generales, una secuencia de operaciones destinada a resolver un problema.
Ejemplos clásicos de algoritmos matemáticos son:
- El algoritmo de Euclides para calcular el máximo común divisor (MCD) a partir de dos números naturales enteros.
- El algoritmo para resolver ecuaciones de primer grado.
- El algoritmo adoptado por Google para determinar qué sitio mostrar primero entre los resultados de búsqueda.
Los algoritmos no matemáticos pueden ser, en cambio, también las instrucciones de montaje de muebles o las indicaciones para llegar a un lugar determinado.
Dependiendo de su función, los algoritmos pueden agruparse en categorías. Entre los más conocidos y sencillos se encuentran los llamados algoritmos iterativos, que consisten en una secuencia de acciones que se repiten hasta alcanzar el resultado, según un proceso estructurado como un ciclo finito.
Un algoritmo recursivo, en cambio, es un algoritmo cuya ejecución implica la simplificación o subdivisión progresiva del conjunto de datos introducidos como entrada, y la aplicación del algoritmo sobre dichos conjuntos de datos simplificados. Se trata de algoritmos especialmente utilizados para la ejecución de tareas repetitivas y la resolución de problemas no demasiado complejos.
Entre los más difundidos se encuentran los conocidos algoritmos de búsqueda, que permiten encontrar uno o varios elementos determinados que se correspondan con las consultas, las características introducidas por el usuario. El conjunto de elementos dentro del cual realizar la búsqueda se caracteriza típicamente por una clave (es decir, los valores que identifican un elemento del conjunto) y por un grupo de los llamados datos satélite (datos que no se utilizan en la búsqueda). La clave puede ser única para todo un grupo de elementos, o múltiple, en el caso de que pueda ser compartida por varios elementos diferentes. En el caso de que la clave sea múltiple, será necesario especificar, para permitir que el algoritmo llegue a una solución, si se le debe hacer devolver el primer elemento con una clave determinada, el último elemento, un elemento aleatorio del conjunto, o el conjunto completo de datos que presente esa clave.
Si el conjunto de datos no está ordenado, en informática se utiliza la llamada búsqueda secuencial (o lineal): en este caso, el algoritmo comprueba los elementos del conjunto en secuencia, deteniéndose cuando recupera un elemento que coincide con los criterios de búsqueda. Dado que el conjunto, como se ha dicho, no está ordenado, el algoritmo debe comprobar necesariamente todos los elementos. La búsqueda lineal es el algoritmo de búsqueda más sencillo, y puede implementarse fácilmente en los lenguajes de programación más comunes, como C, Java y Python.
¿Cuál es la Diferencia entre Algoritmos y Programas?
A la luz de lo expuesto hasta ahora, se puede comprender cómo el término algoritmo se utiliza para definir un conjunto genérico y abstracto de instrucciones para la resolución de problemas de naturaleza heterogénea, no necesariamente formalizados o formalizables mediante el lenguaje matemático.
Con el término programa, en cambio, se identifica específicamente un código que puede ser ejecutado por una máquina: en pocas palabras, el programa representa una especie del género algoritmo, una conversión y traducción del mismo a un lenguaje (como se ha anticipado, el llamado lenguaje de programación) que sea comprensible para la máquina y le permita ejecutar las instrucciones, generar una salida a partir de una entrada. El lenguaje de programación, de hecho, se basa exclusivamente en principios lógicos, y sigue reglas gramaticales y sintácticas definidas. Los lenguajes de programación más comunes son C, Java, PhP, Python, etc.
Por lo tanto, no es posible definir con el término programa un problema que no pueda ser objeto de una formalización mediante un lenguaje matemático.
En informática, sin embargo, el término algoritmo también se utiliza para referirse a un procedimiento que puede resolver problemas computacionales, generando una salida a partir de una entrada.
Es posible sintetizar las siguientes fases de paso del algoritmo simple al programa:
- Análisis: fase de definición de un algoritmo o de una serie de algoritmos capaces de realizar una tarea determinada.
- Diseño: el algoritmo así definido se transcribe a un lenguaje que pueda ser comprendido por la máquina.
- Programación: el programa así representado se codifica y se introduce en la memoria de la máquina.
- Pruebas: se evalúan las funcionalidades del programa con respecto a las especificaciones deseadas, y el mismo es utilizado por diferentes sujetos para identificar si existen fallos de funcionamiento.
- Mantenimiento: con el tiempo, el programa se modifica para corregir posibles defectos, adaptarlo a diferentes plataformas, implementar nuevas funciones, etc.