¿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í:
- Salí por la puerta principal.
- Caminá 50 metros hacia el norte.
- Si llegaste a una esquina, doblá a la derecha.
- Caminá 30 metros más.
- Si ves un letrero que dice "Pupusería", entrá.
- Decí "buenos días, tres pupusas de queso por favor".
- Si te las dan, pagá $1.50 y guardá la bolsa.
- Volvé por el mismo camino que viniste.
- 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):
-
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.
-
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.
-
Entrada. Tiene cero o más entradas, tomadas de un conjunto especificado de objetos.
-
Salida. Produce uno o más resultados, relacionados de manera específica con las entradas.
-
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 , calcular (el factorial de ).
Algoritmo:
- Entrada: un entero .
- Paso 1: asignar .
- Paso 2: asignar .
- Paso 3: si , ir al paso 6.
- Paso 4: asignar .
- Paso 5: asignar , ir al paso 3.
- Paso 6: devolver .
- Salida:
Verificá que cumple las cinco propiedades:
- ✅ Finitud: termina cuando , lo cual ocurre en a lo más iteraciones.
- ✅ Definición precisa: cada paso es una operación aritmética concreta o un salto.
- ✅ Entrada: el entero .
- ✅ Salida: el valor 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:
- Hacer pupusas. La receta tiene pasos en orden, una entrada (masa, queso, frijol), una salida (pupusas), y termina cuando se acaba la masa.
- Llegar a UNIMO desde tu casa. Una secuencia de "gira aquí, sigue derecho", entrada (tu posición inicial), salida (estás en UNIMO).
- Decidir qué ropa ponerte. Si llueve, paraguas; si hace calor, camiseta; si vas a la iglesia, formal.
- Pagar la luz en CAESS. Hacé fila → entregá recibo → pagá → recibí comprobante → andate. Cada paso es claro y termina.
📝 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."
Solución
a. No es algoritmo. Falla la propiedad de definición precisa ("consistencia perfecta" es ambiguo) y posiblemente la de finitud (no hay condición clara de parada).
b. Sí es algoritmo. Cumple las cinco: termina (cuando se acaban las columnas), cada paso es claro, tiene entrada (los dos números), salida (la suma), y es efectivo (cualquiera con lápiz y papel lo puede hacer).
c. Sí es algoritmo. Termina, está bien definido, tiene entrada (el número que pensaste), salida (5), y es efectivo. Es además un truco matemático elegante — verificalo con álgebra: .
d. No es algoritmo. Falla la efectividad ("adiviná" no es un paso ejecutable de manera definida) y la finitud (no se sabe cuándo parar).
✏️ 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:
- Recibe la tarjeta y el monto a retirar.
- Verifica que el saldo sea suficiente.
- Si es, entrega el dinero, descuenta del saldo, e imprime comprobante.
- Si no es, muestra mensaje de error.
- Devuelve la tarjeta.
Solución
ALGORITMO retirar_efectivo
ENTRADA: tarjeta, monto
SALIDA: efectivo o mensaje de error, tarjeta devuelta
Recibir tarjeta del cliente
Recibir monto a retirar
saldo ← consultar saldo de la tarjeta
SI saldo >= monto ENTONCES
Entregar monto en efectivo
saldo ← saldo - monto
Actualizar saldo en la cuenta
Imprimir comprobante
SI NO
Mostrar "Fondos insuficientes"
FIN SI
Devolver tarjeta al cliente
Tu solución puede variar en el orden o los nombres — lo importante es que cubra todos los casos y sea precisa.
✏️ 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 (
MIENTRASoPARA).
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
- Libro: Knuth, D. E. (1968). The Art of Computer Programming, Volume 1. Capítulo 1.1 define formalmente "algoritmo". Es el libro de algoritmos.
- Libro accesible: Aho, A. & Ullman, J. (1995). Foundations of Computer Science. Tiene un capítulo introductorio excelente.
- Video: "What is an algorithm?" en el canal de Computerphile en YouTube.
- Próximo capítulo: Mi primer programa, donde instalamos Python y traducimos nuestro pseudocódigo a código real que se ejecuta.
Definiciones nuevas en este capítulo: algoritmo, pseudocódigo, entrada, salida, secuencia, decisión, repetición.