Seleccionar página

La esposa del programador le dijo a su esposo: Ve a la tienda y compra una barra de pan. Si tienen huevos, compre una docena.
El esposo regresa con 12 hogazas de pan. ¿Por qué? Porque tenían huevos.

La broma depende de nuestra comprensión intuitiva de lo tonta que es la situación. Obviamente no es lo que el programador debería haber hecho, pero estaba siguiendo un algoritmo. Sumerjámonos en el sorprendentemente práctico mundo de los algoritmos.

Cocinar es un algoritmo.

La mera palabra es suficiente para evocar imágenes de teléfonos inteligentes, aplicaciones, computadoras y matemáticas. Pero todos empleamos algoritmos, todo el tiempo, incluso cuando nuestro dispositivo favorito no está al alcance y no los llamamos algoritmos. Todos los días, los humanos usan algoritmos. Puede argumentar que los animales y tal vez incluso las plantas, hasta cierto punto, también lo hacen. A menudo sentimos que los algoritmos son raros y parecidos a una computadora, pero en realidad no lo son.

Entonces, ¿qué son los algoritmos?

En esencia, un algoritmo es un conjunto de instrucciones. Quiere multiplicar dos números, hay un algoritmo para hacerlo. ¿Quieres hacer una tortilla? Hay un algoritmo para esto: viertes aceite en una sartén, luego lo calientas, luego rompes los huevos, luego pones los huevos en la sartén y luego los sacas cuando están listos. Es una secuencia de instrucciones que seguimos, en esencia, un algoritmo. De hecho, cada receta de cocina es esencialmente un algoritmo.

He aquí un ejemplo aún más simple. Miras por la ventana antes de salir. Si está lloviendo, tomas tu paraguas. Si no, no lo haces. Piense en los algoritmos como una guía paso a paso para resolver un problema.

Entonces, cada vez que sigue un conjunto de instrucciones, esencialmente está pasando por un algoritmo. Tiene que ser inequívoco y tiene que ser preciso. ¿Recuerdas la broma del programador de arriba? Ese algoritmo no estaba muy claro, es por eso que las dos partes entendieron cosas diferentes de él. Una definición informal podría ser un conjunto de reglas que define con precisión una secuencia de operaciones.

Por supuesto, mientras que cocinar puede considerarse vagamente un algoritmo, la palabra generalmente se usa en un contexto diferente, no necesariamente tecnológico, sino simplemente matemático. Puede pensar en los algoritmos, especialmente aquellos que sustentan el software, como matemáticas aplicadas a ciertas tareas. Pero los algoritmos no son algo nuevo.

El origen de los algoritmos.

La palabra algoritmo en sí proviene del nombre del matemático persa Muhammad ibn Musa al-Khwarizmi. Fue un erudito importante, el matemático más leído en Europa a finales de la Edad Media, principalmente a través de uno de sus libros, El álgebra . En el año 825, al-Khwarizmi escribió un tratado en árabe sobre el sistema numérico hindú-árabe, un libro que fue traducido al latín en el siglo XII. El manuscrito comienza con la frase Dixit Algorizmi (así habló Al-Khwarizmi). A muchos les pareció un divertido juego de palabras: Algorizmi era la latinización de su nombre por parte de los traductores, pero algorismo también significaba el sistema numérico decimal.

La palabra se usó por primera vez en inglés en el año 1230 y luego por Chaucer en 1391, y se usó varias veces en el latín medieval tardío. Pero no fue hasta finales del siglo XIX que el algoritmo adquirió el significado que tiene hoy. Pero fue este apellido latinizado de los matemáticos medievales el que se convertiría en sinónimo de las instrucciones ordenadas que ahora llamamos algoritmos.

Aunque la palabra no se usó de manera rutinaria, el concepto se usó durante mucho tiempo. Varios algoritmos notables datan de la antigüedad. El tamiz de Eratóstenes, utilizado para detectar números primos, es un buen ejemplo. Funciona así:

  1. Cree una lista de enteros consecutivos desde 2 hasta el número que desea analizar. Llamemos a esto n : (2, 3, 4, , n ).
  2. Comienza desde 2 el número primo más pequeño.
  3. El número 2 es un número primo. Táchalo como un número primo y luego elimina todos los múltiplos de 2 de tu lista (2, 4, 6, 8, etc.).
  4. Pase al siguiente número de su lista: 3. Márquelo como primo y luego elimine todos sus múltiplos de su lista (3, 6, 9, 12, etc. aunque el 6 y el 12 ya deberían estar eliminados porque son múltiplos de dos).
  5. Haga esto hasta llegar a n . Ahora tiene una lista de todos los números primos hasta n.

Puedes ser un poco inteligente y refinar el algoritmo aún más. No necesita ir hasta n con los números, solo necesita ir a n . También puede omitir algunos números en el paso 3 y comenzar desde el cuadrado del número con el que está tamizando (para obtener explicaciones más detalladas sobre por qué esto funciona, consulte la página de Wikipedia).

El Tamiz de Eratóstenes todavía se enseña hoy en día como una forma simple pero efectiva de encontrar números primos manualmente. Otro algoritmo antiguo todavía en uso es el algoritmo de Euclides, para calcular el máximo común divisor de dos números enteros, descrito en el año 300 a.

Entonces, aunque los algoritmos no se habían formalizado completamente, todavía estaban en uso durante mucho tiempo. Sin embargo, en los tiempos modernos, los algoritmos han tendido a convertirse en sinónimo de computación.

Algoritmos informáticos

Las computadoras son un invento relativamente reciente, lo creas o no. Pero han cambiado el mundo de muchas maneras, y también han cambiado la forma en que vemos ciertas palabras como algoritmos . Hoy en día, cuando la gente dice algoritmo, casi siempre significa algo para que una computadora lo ejecute. Estrictamente hablando, este no tiene por qué ser el caso, pero así es como la mayoría de la gente usa la palabra.

Los algoritmos pueden variar de simples a muy complejos. Tomemos como ejemplo el famoso algoritmo Google PageRank. Cada vez que busca algo en Google, un enjambre de parámetros determina qué resultados aparecen primero. No es solo cuán informativa es la página en sí, sino cuánta autoridad tiene el sitio web, qué tan informado es el autor de la página, sus hábitos de navegación, etc., es la salsa secreta que hace que Google, bueno, Google.

Pero tomemos un algoritmo más simple, con el que ya estamos familiarizados: el tamiz de Eratóstenes. Hemos visto cómo lo atravesaría un humano, pero ¿cómo lo haría una computadora?

El primer algoritmo informático, publicado por Ada Lovelace.

Para un ser humano, pasar por números del 1 al 100 con el tamiz podría llevar unos minutos. Para un humano pasar por 10.000 podría llevar todo el día, y hay mucho margen de error. Pero una computadora podría hacerlo en unos pocos segundos, o incluso menos. Veamos este algoritmo a través de algo llamado pseudocódigo . El pseudocódigo es un lenguaje artificial e informal que ayuda a los programadores a desarrollar algoritmos. Su herramienta de diseño algorítmico esencialmente basada en texto.

En pseudocódigo, el algoritmo se vería así:

 algoritmo Criba de Eratóstenes es entrada: un entero n > 1. salida: todos los números primos desde 2 hasta n . Sea A una matriz de valores booleanos, indexados por enteros s 2 an , inicialmente todos establecidos en true . para i = 2, 3, 4, ..., sin exceder n do si A [ i ] es cierto para j = i 2 , i 2 + i , i 2 +2 i , i 2 +3 i , ... , sin exceder n do A [ j ] := false devuelve todos los i tales que A [ i ] es verdadero .

Por supuesto, el pseudocódigo es una versión simplificada de pensar en algoritmos. Para comunicarlo a una computadora, necesitarías algo llamado lenguaje de programación. Dado que existen múltiples tipos de lenguajes de programación, esto podría terminar pareciendo algo diferente ya que los lenguajes de programación son diferentes, pero la esencia es la misma, el algoritmo es el mismo.

Sin embargo, para que el algoritmo se ejecute, debe ser preciso sobre cómo lo escribe. Como dice el viejo refrán, una computadora hace lo que le dices que haga, no lo que tú quieres que haga.

Construyendo un algoritmo

Los algoritmos a menudo funcionan como árboles de decisión, por lo que necesita tres elementos condicionales básicos para construir un algoritmo: si, y, o.

El if es uno de los bloques de construcción fundamentales de todos los algoritmos. Si se cumple una condición A, entonces el algoritmo hace B. Para agregar un poco más de flexibilidad, tiene y y o para satisfacer múltiples condiciones o una de múltiples condiciones. Un else se usa a menudo para decirle al algoritmo qué hacer si la condición no se cumple.

Un árbol de decisiones de atención al cliente. Créditos de la imagen: Dave Gray.

Algunos algoritmos son recurrentes, lo que significa que hacen algo hasta que se cumple (o no se cumple) una condición. Por ejemplo, la criba de Eratóstenes continúa mientras estás en un número del 2 al n .

Hay muchos tipos de algoritmos, y cada campo tiene su propio tipo de algoritmos con sus propias peculiaridades. Cuanto más complejo se vuelve un campo, más complejos suelen volverse los algoritmos. Puede tener algoritmos de clasificación, algoritmos de optimización, algoritmos gráficos y, por supuesto, aprendizaje automático.

Aprendizaje automático

No hace falta decir que la humanidad ha desarrollado algunos algoritmos tremendamente complejos, que se utilizan para múltiples cosas, desde recomendaciones de productos hasta control de tráfico aéreo. Hoy en día, los más complejos utilizan algo llamado aprendizaje automático.

Hemos mencionado antes que cuando un ser humano escribe un algoritmo, debe ser muy preciso. Todo debe ser presentado con un detalle insoportable. Esto funciona en muchas situaciones, pero hay alternativas. En el aprendizaje automático, un ser humano alimenta un programa con datos sin procesar como punto de partida y punto final donde los resultados se organizan de la manera deseada. Luego se le pide al programa que descubra el algoritmo para ir de A a B. Los algoritmos de aprendizaje automático construyen un modelo basado en datos de muestra. Luego, después de este entrenamiento, puede hacer predicciones y decisiones sobre otros tipos de datos. En un algoritmo tradicional, el programador le diría a la computadora cómo hacer una tortilla con huevos. En el aprendizaje automático, alimentaría a una computadora con huevos y una tortilla y le pediría que descubra cómo se hizo la tortilla, y luego podría descubrir cómo hacer otros alimentos.

El aprendizaje automático a menudo se considera parte de la inteligencia artificial, aunque las capacidades y limitaciones del enfoque a menudo se malinterpretan. En términos de enfoque, el aprendizaje automático es muy similar a las estadísticas, aunque su objetivo suele ser distinto.

El aprendizaje automático puede incluso no estar supervisado, sin programadores que supervisen el modelo y el aprendizaje del algoritmo por sí mismo. Un buen ejemplo de esto es el programa de ajedrez MuZero al que ni siquiera se le enseñaron las reglas del ajedrez, simplemente se le dejó jugar con una máquina de alto rendimiento. Después de un tiempo, igualó e incluso superó al motor entrenado.

Por supuesto, cada vez que pensamos en algoritmos más inteligentes, nuestros pensamientos saltan al siguiente salto: la verdadera inteligencia artificial. La verdad es que todavía estábamos muy, muy lejos de cualquier forma de inteligencia artificial real. No está claro si alguna vez se puede hacer. Los programas como MuZero suelen ser muy buenos en una sola tarea, pero no son buenos para adaptarse a situaciones de la vida real. Aún así, se podría argumentar que toda nuestra personalidad es esencialmente un algoritmo grande y complejo, y los algoritmos bioinspirados son una cosa, pero aún estaban muy lejos de ser algo así. Sin embargo, sin duda, a medida que pasa el tiempo y nuestra sociedad se basa cada vez más en la tecnología, los algoritmos también jugarán un papel más importante.

Desde hacer una tortilla hasta construir vida artificial, todo se trata de algoritmos. Será mejor que nos acostumbremos a ellos.

"