¿QUÉ SON LOS ALGORITMOS?

Un algoritmo es un conjunto finito de instrucciones precisas que realizan una tarea,

la cual, dado un estado inicial, culminará por arrojar un estado final reconocible.

Esta definición asume que la ejecución del algoritmo concluye en algún momento,

dejando fuera los procedimientos que ejecutan permanentemente sin detenerse. Para

incluir a éstos en la definición, algunos autores prefieren obviar la condición de que

la ejecución concluya, con lo cual basta con que un procedimiento sea una secuencia

de pasos que puede ser ejecutada por una entidad para que se lo considere algoritmo.

En el caso que no haya un estado final reconocible, el éxito del algoritmo no

puede definirse como la culminación del proceso con un resultado significativo.

En cambio, se requiere una definición de éxito que contemple secuencias ilimitadas

de resultados, por ejemplo, un sistema de compresión/descompresión de

datos en tiempo real (como los utilizados en el manejo de voz sobre IP); en este

caso, el algoritmo no define por sí mismo la finalización del proceso, debiendo

seguir su funcionamiento mientras haya datos para procesar. El éxito del algoritmo

estará dado por el hecho de que los datos, una vez descomprimidos, sean

iguales que antes de comprimirse.

El concepto de algoritmo se ilustra frecuentemente comparándolo con una receta:

al igual que las recetas, los algoritmos habitualmente están formados por secuencias

de instrucciones que probablemente se repiten (iteran) o que requieren decisiones

(comparaciones lógicas) hasta que completan su tarea. Un algoritmo puede no ser

correcto, con lo cual, por más que sus pasos se lleven a cabo correctamente, el estado

final no será el esperado.

Normalmente, cuando un algoritmo está asociado con el procesamiento de información,

se leen datos de una fuente o dispositivo de entrada, se procesan y se emiten por

un dispositivo de salida, o bien se almacenan para su uso posterior. Los datos almacenados

se consideran parte del estado interno de la entidad que ejecuta el algoritmo.

Dado que un algoritmo es una lista precisa de pasos, el orden de ejecución será casi

siempre crítico para su funcionamiento. En general, se asume que las instrucciones

se enumeran explícitamente, y deben ejecutarse “desde arriba hacia abajo”, lo

cual se establece más formalmente según el concepto de flujo de control.

Esta forma de “pensar” el algoritmo asume las premisas del paradigma de programación

imperativa. Dicho paradigma es el más común, e intenta describir las tareas

en términos “mecánicos” y discretos. Los paradigmas de la programación funcional

y de la programación lógica describen el concepto de algoritmo en una forma ligeramente

diferente (en el Capítulo 2 se detallan los distintos tipos de paradigmas).

Hasta aquí hemos dado una definición ciertamente informal del concepto de algoritmo.

Para definirlo en forma matemáticamente precisa, Alan Mathison Turing

–famoso matemático inglés (1912-1954), cuyas contribuciones en el campo de la

matemática y de la teoría de la computación le han valido ser considerado uno de

los padres de la computación digital– ideó un dispositivo imaginario al que denominó

máquina de computación lógica (LCM, Logical Computing Machine), pero

que ha recibido en su honor el nombre de máquina de Turing. Lo que confiere a

este supuesto dispositivo su extraordinaria importancia es que es capaz de resolver

cualquier problema matemático, a condición de que el mismo haya sido reducido

a un algoritmo. Por este motivo, se considera que algoritmo es cualquier conjunto

de operaciones que pueda ser ejecutado por la máquina de Turing (o, lo que es lo

mismo, por un sistema Turing completo, tal como se explica más adelante).

La máquina de Turing

Una máquina de Turing es un autómata que se mueve sobre una secuencia lineal de

datos. En cada instante, la máquina puede leer un único dato de la secuencia (generalmente

un carácter) y realizar ciertas acciones en base a una tabla que tiene en cuenta

su estado actual (interno) y el último dato leído. Entre las acciones que puede realizar,

está la posibilidad de escribir nuevos datos en la secuencia, recorrer la secuencia en ambos

sentidos y cambiar de estado dentro de un conjunto finito de estados posibles.

Un sistema Turing completo es aquel que puede simular el comportamiento de

una máquina de Turing. Dejando de lado las limitaciones impuestas por la capacidad

de almacenamiento o la memoria, las computadoras actuales y los lenguajes de

programación de propósito general definen sistemas Turing completos.

Independientemente de su forma concreta, cualquier dispositivo que se comporte

como un sistema Turing completo puede en principio ejecutar cualquier cálculo

que realice cualquier computadora; lógicamente, esta afirmación no considera la

posible dificultad de escribir el programa correspondiente o el tiempo que pueda requerir

realizar el cálculo en cuestión.

Podemos consultar la sección de Servicios al lector para conocer los sitios en donde

obtener más información acerca de los sistemas Turing completos.