El concepto de algoritmo.
Informalmente, un algoritmo es un conjunto de pasos que define cómo hay que realizar una tarea.
Por ejemplo, existen algoritmos para cocinar (recetas), para encontrar el camino en una ciudad desconocida (direcciones), para hacer funcionar una lavadora (instrucciones que normalmente pueden en el manual), para tocar música (expresadas mediante partituras) y para realizar trucos de magia.
Por ejemplo:
Para que una máquina como una computadora pueda llevar a cabo una tarea, es preciso diseñar y representar un algoritmo de realización de dicha tarea y en una forma que sea compatible con la máquina.
A la representación de un algoritmo se la denomina programa.
Por comodidad de los seres humanos, los programas informáticos suelen imprimirse en papel o visualizarse en las pantallas de las computadoras. Sin embargo, para comodidad de las máquinas, los programas se codifican de una manera compatible con la tecnología a partir de la cual esté construida la máquina.
El proceso de desarrollo de un programa, de codificarlo en un formato compatible con la máquina y de introducirlo en una máquina se denomina programación.
Los programas y los algoritmos que representan se denominan colectivamente software, por contraste con la propia máquina que se conoce con el nombre de hardware.
El estudio de los algoritmos comenzó siendo un tema del campo de las matemáticas. De hecho, la búsqueda de algoritmos fue una actividad de gran importancia para los matemáticos mucho antes del desarrollo de las computadoras actuales.
El objetivo era determinar un único conjunto de instrucciones que describiera cómo resolver todos los problemas de un tipo concreto.
Uno de los ejemplos mejor conocidos de estas investigaciones pioneras es el algoritmo de división para el cálculo del cociente de dos números de varios dígitos.
Otro ejemplo es el algoritmo de Euclides descubierto por este matemático de la antigua Grecia que permite determinar el máximo común divisor de dos números enteros positivos.
Una vez que se ha encontrado un algoritmo para llevar a cabo una determinada tarea, la realización de esta ya no requiere comprender los principios en los que el algoritmo está basado. En lugar de ello, la realización de la tarea se reduce al proceso de seguir simplemente las instrucciones proporcionadas. (Podemos emplear el algoritmo de división para calcular un cociente o el algoritmo de Euclides para hallar el máximo común divisor sin necesidad de entender por qué funciona el algoritmo.)
En cierto sentido, la inteligencia requerida para resolver ese problema está codificada dentro del algoritmo.
Es esta capacidad de capturar y transmitir inteligencia (o al menos un comportamiento inteligente) por medio de algoritmos lo que nos permite construir máquinas que lleven a cabo tareas de utilidad.
En consecuencia, el nivel de inteligencia mostrado por las máquinas está limitado por la inteligencia que podamos transmitir mediante algoritmos. Solo podemos construir una máquina para llevar a cabo una tarea si existe un algoritmo que permita realizar esa tarea. A su vez, si no existe ningún algoritmo para resolver un problema, entonces la solución de ese problema cae fuera de la capacidad de las máquinas disponibles.
La identificación de las limitaciones de las capacidades algorítmicas terminó convirtiéndose en uno de los temas de las matemáticas en la década de 1930 con la publicación del teorema de incompletitud de Kurt Gödel.
Este teorema afirma, en esencia, que en cualquier teoría matemática que abarque nuestro sistema aritmético tradicional, hay enunciados cuya verdad o falsedad no puede establecerse por medios algorítmicos.
Por decirlo en pocas palabras, cualquier estudio completo de nuestro sistema aritmético, cae fuera de las capacidades de las actividades algorítmicas.
El enunciado de este hecho removió los cimientos de las matemáticas y el estudio de las capacidades algorítmicas que se inició a partir de ahí fue el comienzo del campo que hoy día conocemos como Ciencias de la computación.
De hecho, es el estudio de los algoritmos lo que forma la base fundamental de estas ciencias.