¿Qué es un algoritmo?

"Un algoritmo es una receta para hacer pensar a una piedra." — atribuido a varios.

Qué vas a aprender en este capítulo

Antes de escribir tu primer programa, necesitás saber qué es lo que estás escribiendo. Vas a entender por qué la palabra "algoritmo" no es un término elegante para "programa", sino algo más profundo y más antiguo. Vas a aprender a reconocer algoritmos en cosas que ya hacés todos los días, y vas a escribir tu primer pseudocódigo — el lenguaje intermedio entre tu cabeza y la computadora.

1.1 La idea: instrucciones tan precisas que hasta una piedra las puede seguir

💡 Intuición

Imaginate que tu mamá te pide ir a comprar tres pupusas a la pupusería de la esquina. Te dice: "andá, comprá tres pupusas y volvé". Vos entendés perfecto, vas, comprás, volvés.

Ahora imaginate que tenés que darle esa misma orden a un robot que nunca ha ido a una pupusería, no sabe qué es la calle, no sabe qué es el dinero, y solo puede ejecutar instrucciones que sean completamente sin ambigüedad. La instrucción se vuelve algo así:

  1. Salí por la puerta principal.
  2. Caminá 50 metros hacia el norte.
  3. Si llegaste a una esquina, doblá a la derecha.
  4. Caminá 30 metros más.
  5. Si ves un letrero que dice "Pupusería", entrá.
  6. Decí "buenos días, tres pupusas de queso por favor".
  7. Si te las dan, pagá $1.50 y guardá la bolsa.
  8. Volvé por el mismo camino que viniste.
  9. Cuando llegues a la casa, entregá la bolsa.

Eso es un algoritmo: una secuencia de instrucciones tan precisas que no requieren interpretación. Una piedra inteligente las podría seguir paso a paso y llegar al mismo resultado que vos. Una computadora es justamente eso — una piedra eléctrica que sabe seguir instrucciones precisísimas, una a la vez, miles de millones por segundo, sin cansarse y sin equivocarse.

📜 Historia

La palabra "algoritmo" no viene del griego ni del latín — viene del nombre de un matemático persa del siglo IX, Muhammad ibn Mūsā al-Jwārizmī, que vivió en Bagdad. Su nombre, traducido al latín medieval como Algoritmi, terminó usándose para referirse a sus métodos de cálculo con números arábigos. La misma raíz dio origen a "álgebra", del título de su libro Al-jabr.

Así que cada vez que decís "algoritmo", estás diciendo "lo que hacía al-Jwārizmī" — una persona real, hace 1200 años, en Bagdad. La computación no nació en Silicon Valley. Nació en el mundo islámico medieval.

📐 Fundamento

Formalmente, un algoritmo es una secuencia finita de pasos bien definidos que, ejecutados en orden, transforman una entrada en una salida correcta para un problema dado.

Para que algo sea un algoritmo en sentido estricto, debe cumplir cinco propiedades (Knuth, 1968):

  1. Finitud. Termina después de un número finito de pasos. Una "receta" que dice "seguí mezclando" sin condición de parada no es un algoritmo.

  2. Definición precisa. Cada paso está especificado sin ambigüedad. "Mezclá hasta que esté bonito" no es un paso definido — qué es "bonito" depende de quién lo evalúe.

  3. Entrada. Tiene cero o más entradas, tomadas de un conjunto especificado de objetos.

  4. Salida. Produce uno o más resultados, relacionados de manera específica con las entradas.

  5. Efectividad. Cada paso debe ser ejecutable, en principio, en un tiempo finito por un humano con lápiz y papel (o por una máquina). "Adiviná el número correcto" no es efectivo, aunque suene preciso.

Ejemplo formal. Consideremos el problema: dado un entero positivo nn, calcular n!n! (el factorial de nn).

Algoritmo:

  • Entrada: un entero n0n \geq 0.
  • Paso 1: asignar r1r \leftarrow 1.
  • Paso 2: asignar i1i \leftarrow 1.
  • Paso 3: si i>ni > n, ir al paso 6.
  • Paso 4: asignar rr×ir \leftarrow r \times i.
  • Paso 5: asignar ii+1i \leftarrow i + 1, ir al paso 3.
  • Paso 6: devolver rr.
  • Salida: r=n!r = n!

Verificá que cumple las cinco propiedades:

  • Finitud: termina cuando i>ni > n, lo cual ocurre en a lo más n+1n+1 iteraciones.
  • Definición precisa: cada paso es una operación aritmética concreta o un salto.
  • Entrada: el entero nn.
  • Salida: el valor rr al terminar.
  • Efectividad: sumar y multiplicar enteros es ejecutable con lápiz y papel.

Lo que no es un algoritmo:

  • "Encontrá la verdad sobre el universo" — sin definición precisa, sin garantía de finitud, sin efectividad.
  • "Mezclá los ingredientes hasta que sepa rico" — ambiguo (paso 2 falla).
  • "Calculá π completamente" — no termina (paso 1 falla, π es irracional).
  • "Pensá en un número entre 1 y 100" — sin definición precisa de cómo "pensar".

🛠️ En la práctica

Antes de programar, los algoritmos se diseñan en pseudocódigo — instrucciones en español pero estructuradas como código. No corre en ninguna computadora, pero te obliga a pensar con la precisión que exige la programación.

Pseudocódigo del algoritmo del factorial:

ALGORITMO factorial
ENTRADA: un entero n >= 0
SALIDA: el factorial de n

  r ← 1
  i ← 1
  MIENTRAS i <= n HACER
    r ← r × i
    i ← i + 1
  FIN MIENTRAS
  DEVOLVER r

Esto se traduce casi directo a Python:

def factorial(n):
    r = 1
    i = 1
    while i <= n:
        r = r * i
        i = i + 1
    return r

Hábito que deberías formar desde hoy: antes de tocar el teclado, escribí el pseudocódigo en papel o en un comentario. El 80% de los bugs en programadores principiantes vienen de empezar a teclear sin haber pensado el algoritmo primero.

1.2 Algoritmos en la vida diaria

Hacés algoritmos todos los días sin darte cuenta:

📝 Ejemplo — Hacer un huevo frito

Algoritmo:

ENTRADA: un huevo, sal, aceite, sartén, estufa
SALIDA: un huevo frito

  Encender estufa en fuego medio
  Poner sartén sobre el fuego
  Echar 1 cucharada de aceite en el sartén
  Esperar 30 segundos
  Romper el huevo sobre el sartén
  MIENTRAS la clara esté translúcida HACER
    Esperar 5 segundos
  FIN MIENTRAS
  Echar pizca de sal
  Sacar el huevo del sartén
  Apagar estufa
  DEVOLVER huevo en el plato

Notá que MIENTRAS la clara esté translúcida es un poco ambiguo (¿qué tan translúcida?), pero como humano sabés interpretarlo. Una computadora necesitaría una definición más precisa, como "mientras el color RGB del centro del huevo sea más claro que (240, 240, 200)". Esa precisión es la diferencia entre una receta y un algoritmo computacional.

⚠️ Trampa común

"Algoritmo" no significa "complicado y matemático".

Mucha gente que apenas empieza piensa que un algoritmo tiene que ver con fórmulas raras y matemática avanzada. Falso. Sumar dos números es un algoritmo. Buscar tu nombre en una lista es un algoritmo. Decidir si un número es par es un algoritmo.

Lo que distingue un algoritmo no es la dificultad, sino la precisión. Un algoritmo simple sigue siendo un algoritmo.

1.3 Anatomía de un algoritmo

Un algoritmo es una caja que toma entradas, las procesa siguiendo pasos definidos, y produce salidas.

Tres componentes principales aparecen en casi cualquier algoritmo:

1.3.1 Secuencia

Pasos uno tras otro, en orden:

Paso 1: Encender computadora
Paso 2: Abrir el navegador
Paso 3: Escribir la URL

1.3.2 Decisión

Caminos diferentes según una condición:

SI el saldo en la cuenta es mayor que el monto a pagar ENTONCES
  Pagar
SI NO
  Avisar al usuario que no hay fondos
FIN SI

1.3.3 Repetición

Hacer algo varias veces:

PARA cada estudiante en la lista HACER
  Imprimir su nombre
FIN PARA

Toda la programación que vas a hacer en tu carrera, no importa qué tan compleja, se construye combinando estas tres ideas. Eso lo descubrió el matemático italiano Corrado Böhm en 1966, en un teorema fundamental llamado teorema de Böhm-Jacopini: cualquier programa computable puede expresarse usando solo secuencia, decisión y repetición. Solo eso.

1.4 Proyecto: pseudocódigo del primer paso

🏗️ Avance del proyecto — Pupusería La Esquina

Vamos a construir, capítulo a capítulo, el sistema de la Pupusería La Esquina. En este capítulo no escribimos código todavía — escribimos el pseudocódigo del primer programa: mostrar el menú al cliente.

ALGORITMO mostrar_menu
ENTRADA: ninguna
SALIDA: el menú impreso en pantalla

  Imprimir "Pupusería La Esquina — Menú"
  Imprimir "1. Pupusa de queso ........ $0.50"
  Imprimir "2. Pupusa revuelta ......... $0.60"
  Imprimir "3. Pupusa de chicharrón .... $0.60"
  Imprimir "4. Curtido (extra) ......... $0.25"
  Imprimir "5. Refresco de tamarindo ... $1.00"

En el próximo capítulo lo traducimos a Python y lo ejecutamos.

1.5 Resumen visual

Las cinco propiedades de Knuth: finitud, definición precisa, entrada, salida, efectividad.

Concepto Una línea para recordar
Algoritmo Secuencia finita de pasos precisos que transforma entrada en salida.
Pseudocódigo Algoritmo escrito en español estructurado, no en un lenguaje concreto.
Las 5 propiedades de Knuth Finitud, precisión, entrada, salida, efectividad.
Las 3 estructuras básicas Secuencia, decisión, repetición (Böhm-Jacopini).

1.6 Ejercicios

✏️ Ejercicio 1.1 — ¿Es esto un algoritmo?

Para cada uno de los siguientes, decidí si es un algoritmo válido y justificá tu respuesta usando las cinco propiedades de Knuth.

a. "Mezclá flor de pinto con agua hasta lograr la consistencia perfecta." b. "Para sumar dos números enteros, escribí los números uno arriba del otro alineando las unidades, sumá columna por columna de derecha a izquierda llevando la decena cuando supere 9, y escribí el resultado." c. "Pensá en un número, multiplicalo por 2, sumale 10, dividilo entre 2, restale el número original. El resultado es 5." d. "Adiviná la contraseña."

✏️ Ejercicio 1.2 — Pseudocódigo del cajero

Escribí el pseudocódigo del algoritmo que sigue un cajero del Banco Cuscatlán para entregar dinero a un cliente que llega a retirar:

  1. Recibe la tarjeta y el monto a retirar.
  2. Verifica que el saldo sea suficiente.
  3. Si es, entrega el dinero, descuenta del saldo, e imprime comprobante.
  4. Si no es, muestra mensaje de error.
  5. Devuelve la tarjeta.

✏️ Ejercicio 1.3 — Tu propia receta

Pensá en algo que sabés hacer bien (preparar una bebida, llegar a un lugar, jugar un juego). Escribí su algoritmo en pseudocódigo. Que tenga al menos:

  • Una entrada explícita.
  • Una salida explícita.
  • Al menos un paso de decisión (SI ... ENTONCES).
  • Al menos un paso de repetición (MIENTRAS o PARA).

Pasá tu pseudocódigo a un compañero. Si lo puede ejecutar mentalmente sin hacerte preguntas, lo escribiste bien. Si te tiene que preguntar algo, ahí está la ambigüedad que falta corregir.

1.7 Para profundizar


Definiciones nuevas en este capítulo: algoritmo, pseudocódigo, entrada, salida, secuencia, decisión, repetición.