Algoritmos Ancestrales: Qué nos Enseñan las Fracciones Egipcias sobre la Computación
Algoritmos Ancestrales: Lo que las Fracciones Egipcias nos Enseñan sobre la Programación
Cada vez que escribes una función recursiva o implementas un algoritmo greedy, estás siguiendo los pasos de matemáticos que vivieron hace miles de años. Las fracciones egipcias —expresiones matemáticas que usan únicamente reciprocales de números enteros— representan uno de los algoritmos documentados más antiguos de la historia humana, y son mucho más sofisticadas de lo que parecen a primera vista.
El Problema que Resolvieron los Egipcios
Las fracciones modernas nos parecen naturales: 3/7, 5/12, 17/23. Pero esta notación no se popularizó en Europa hasta el siglo XVIII. Antes de eso, si necesitabas expresar una fracción, debías descomponerla en una suma de fracciones unitarias —es decir, fracciones con 1 en el numerador.
Los egipcios enfrentaban un desafío práctico: ¿cómo dividir 7 panes entre 8 personas de forma justa? La respuesta no era simplemente escribir 7/8. En cambio, expresaban el resultado como una suma de fracciones unitarias distintas: 1/2 + 1/4 + 1/8.
Este enfoque aparentemente simple requería un pensamiento matemático sofisticado y creó lo que hoy conocemos como el algoritmo de fracciones egipcias.
El Algoritmo Greedy, al Estilo Antiguo
Aquí es donde la cosa se pone interesante para nosotros los desarrolladores. El método que usaban los egipcios para convertir cualquier fracción en una egipcia es esencialmente un algoritmo greedy —seleccionar la fracción unitaria más grande posible, restarla, y repetir.
Tomemos 4/23. El algoritmo pregunta: ¿cuál es el entero más pequeño mayor que 23/4? Ese número es 6. Entonces empezamos con 1/6, lo restamos de 4/23, obtenemos 1/138, y listo: 4/23 = 1/6 + 1/138.
Este enfoque funciona siempre —un teorema matemático demostrado en 1880, aunque los europeos conocían la técnica desde Fibonacci en el siglo XII.
Por Qué Esto Importa a los Desarrolladores Modernos
A primera vista, parece historia antigua sin relevancia actual. Pero mira lo que está pasando en ese algoritmo:
- Descomposición recursiva — Dividir un problema complejo en subproblemas más simples
- Selección greedy — Tomar la decisión óptima local en cada paso
- Prueba de terminación — El residuo siempre se reduce, garantizando que el proceso termina
Estos conceptos son la base del pensamiento algorítmico moderno. Cuando escribes una función recursiva, estás aplicando la misma estructura lógica que usaban aquellos matemáticos ancestrales.
El Vacío Histórico
Hay una historia incómoda que vale la pena reconocer. El método de fracciones egipcias precede a las matemáticas griegas por milenios. Sin embargo, cuando los matemáticos europeos "redescubrieron" el Papiro de Rhind en el siglo XIX, frecuentemente atribuyeron la técnica a académicos griegos en lugar de reconocer sus verdaderos orígenes en el antiguo Egipto.
Este patrón —donde las contribuciones de civilizaciones africanas y no europeas se minimizan o borran de la historia matemática— persiste en cómo enseñamos y discutimos la ciencia de la computación hoy.
Misterios Matemáticos
Un rompecabezas fascinante involucra lo que algunos estudiosos llaman el "triplete egipcio": 13, 17 y 173. Cuando se interpreta como 3 + 1/13 + 1/17 + 1/173, esta expresión aproxima π con cuatro decimales —más preciso que el valor egipcio comúnmente citado de 3.16.
Si esto fue intencional o una coincidencia sigue siendo debatido entre los historiadores de las matemáticas.
Del Pasado al Presente
Las fracciones egipcias se conectan con las fracciones continuas, un tema que aún se estudia en ciencia de la computación y teoría de números. El enfoque del algoritmo greedy tiene aplicaciones modernas en problemas de asignación de recursos, programación y optimización.
Así que la próxima vez que estés depurando una función recursiva o explicando por qué funciona un enfoque greedy, recuerda: estás participando en una tradición matemática que se remonta casi 4,000 años.
A veces los algoritmos más antiguos siguen siendo los mejores algoritmos.