edubun
Español

Qué es un algoritmo

El método para hallar el máximo común divisor del Libro VII de los Elementos de Euclides, escrito hace unos 2300 años, sigue funcionando hoy en las computadoras.

Un método que siempre funciona

Supón que necesitas el mayor número que divide a la vez a 1071 y a 462. Podrías probar todos los números de 462 hacia abajo hasta 1 y parar en el primero que divida a los dos. Funciona, pero puede llevar cientos de intentos. Hay un camino más corto. Divide 1071 entre 462 y quédate con el residuo, 147. Ahora divide 462 entre 147 y quédate con el residuo, 21. Divide 147 entre 21: el residuo es 0, así que la respuesta es 21. Tres divisiones en lugar de varios cientos.

Ese camino más corto es un algoritmo: una lista finita de pasos precisos que toma una entrada y produce la salida correcta. Este es el algoritmo de Euclides para el máximo común divisor, y aparece en el Libro VII de los Elementos, escrito hacia el 300 a. C. Euclides lo describió restando longitudes una y otra vez en lugar de dividir, pero la idea es la misma, y la versión con residuos es la que usan hoy los programas.

function gcd(a, b) {
  while (b !== 0) {
    const r = a % b;   // residuo
    a = b;
    b = r;
  }
  return a;
}
console.log(gcd(1071, 462)); // 21

Qué convierte una lista de pasos en un algoritmo

Libros de texto como el de Cormen, Leiserson, Rivest y Stein describen un algoritmo como un procedimiento bien definido que convierte una entrada en una salida. En esa descripción caben tres cosas, y cada una importa cuando escribes código.

  • Preciso. Cada paso significa una sola cosa. "Divide a entre b y quédate con el residuo" es preciso; "haz los números más pequeños de alguna manera" no lo es.
  • Finito. Tiene que terminar. En el algoritmo de Euclides el residuo siempre es menor que el número entre el que dividiste, así que se achica en cada vuelta y tiene que llegar a 0.
  • Correcto. Para toda entrada permitida, la salida es la respuesta correcta, no solo para los ejemplos que probaste.

Una receta de cocina se suele dar como ejemplo cotidiano, y es un buen ejemplo: los ingredientes son la entrada, el platillo es la salida y los pasos van en orden. La diferencia está en cuánto completa quien la lee. Un cocinero decide qué significa "una pizca". Una computadora no decide nada, y por eso los algoritmos para computadoras se escriben con cada paso explicado.

El mismo problema, distintos algoritmos

Un problema suele tener muchos algoritmos correctos, y pueden diferir muchísimo en cuánto trabajo hacen. Para el máximo común divisor de 1071 y 462, probar todos los números desde 462 hacia abajo necesita 442 intentos antes de llegar a 21, mientras que el método de Euclides necesita 3 divisiones. Los dos son correctos. Solo uno es rápido. Buena parte de este curso trata de esa segunda pregunta: una vez que un método es correcto, ¿cuántos pasos lleva, y cómo crece ese número cuando la entrada se hace más grande?

Para responderla, los informáticos cuentan pasos básicos (una comparación, un intercambio, una división) en lugar de segundos. Los segundos dependen de la máquina. Un conteo de pasos depende solo del algoritmo y de la entrada, así que permite comparar dos métodos con justicia. El laboratorio de abajo cuenta las comparaciones por ti mientras ordena una fila de barras. Prueba el mismo orden inicial con dos métodos distintos y observa los contadores.

Cargando

Arrastra para girar. Desplaza o pellizca para acercar.

Ordenamiento por selección y ordenamiento por inserción sobre los mismos ocho valores. Los contadores muestran cuántas comparaciones e intercambios necesita cada uno.

Entradas, salidas y los pasos intermedios

Antes de escribir un algoritmo, anota exactamente qué entra y qué debe salir. Para el máximo común divisor: la entrada son dos números enteros positivos, y la salida es un número entero que divide a los dos, sin que ningún número mayor haga lo mismo. Esa descripción te dice cómo comprobar el resultado, y a menudo da pistas sobre los pasos. También deja ver los casos límite: ¿y si uno de los números es 0? (El bucle de arriba devuelve el otro número, que es la respuesta correcta). ¿Y si los dos números son iguales? Pensar en los casos límite antes de ejecutar el código atrapa muchos errores.

ContextoLa palabra algoritmo viene del nombre de una persona. Muhammad ibn Musa al-Juarismi trabajó en Bagdad en el siglo IX y escribió un libro sobre cómo calcular con las cifras indias del 0 al 9. Su traducción latina empieza con las palabras "Dixit algorizmi", que significan "dijo al-Juarismi", y suele llamarse "Algoritmi de numero Indorum". Las formas latinas de su nombre, algorizmi y algoritmi, se convirtieron en la palabra para un método de cálculo paso a paso. Su libro sobre la resolución de ecuaciones nos dio otra palabra: álgebra. Mucho después, en 1843, Ada Lovelace publicó unas notas sobre la Máquina Analítica de Charles Babbage, que nunca se construyó; la última de ellas, la Nota G, explica paso a paso cómo podría calcular la máquina los números de Bernoulli.
  • Hacia el 300 a. C.: Elementos de Euclides, Libro VII: el método del máximo común divisor.
  • Siglo IX (9): Al-Juarismi, en Bagdad, escribe sobre las cifras indias; su nombre latino da origen a la palabra algoritmo.
  • 1843: La Nota G de Ada Lovelace: los pasos para que la Máquina Analítica calcule los números de Bernoulli.
  • 1945: John von Neumann propone el ordenamiento por mezcla.
  • 1959: Tony Hoare idea el quicksort en Moscú (publicado en 1961).
algoritmoUna lista finita de pasos precisos que convierte una entrada en la salida correcta
entradaLos datos de los que parte un algoritmo
salidaEl resultado que debe producir el algoritmo
correctoDa la salida correcta para toda entrada permitida
finitoSiempre termina después de cierto número de pasos
máximo común divisorEl mayor número entero que divide exactamente a dos números
caso límiteUna entrada poco habitual, como 0, una lista vacía o valores iguales
conteo de pasosCuántas operaciones básicas realiza un algoritmo
  1. Con el algoritmo de Euclides, ¿cuál es el máximo común divisor de 48 y 18?
  2. ¿Cuántas divisiones necesita el algoritmo de Euclides para 1071 y 462?
  3. ¿Cuál de estas no es una propiedad que todo algoritmo deba tener?
    • Termina después de un número finito de pasos
    • Cada paso es preciso
    • Usa una computadora
    • Da la salida correcta para toda entrada permitida
  4. ¿Por qué el algoritmo de Euclides siempre termina?
    • El residuo siempre es menor que el divisor, así que se reduce hasta 0
    • Para después de 10 vueltas
    • Las computadoras detienen los bucles automáticamente
    • Los números crecen hasta coincidir
  5. La palabra algoritmo viene del nombre de
    • Euclides
    • Al-Juarismi
    • Ada Lovelace
    • Alan Turing
  6. ¿Por qué los informáticos cuentan pasos en lugar de medir el tiempo en segundos?
    • Los segundos dependen de la máquina; los conteos de pasos dependen solo del algoritmo y de la entrada
    • Los relojes no son precisos
    • Los pasos siempre son más rápidos
    • Los segundos no se pueden medir en el código
  7. Un método da la respuesta correcta en los cinco ejemplos que probaste. ¿Es correcto?
    • Sí, cinco ejemplos lo demuestran
    • No necesariamente: debe ser correcto para toda entrada permitida
    • Solo si es rápido
    • Solo si usa un bucle
  8. ¿Qué devuelve gcd(35, 0) con el bucle de esta unidad?
  9. ¿En qué año publicó Ada Lovelace sus notas, incluida la Nota G?
    • 1801
    • 1843
    • 1945
    • 1961
  10. Ordena los pasos del algoritmo de Euclides.
Ideas clave
  • Un algoritmo es una lista finita de pasos precisos que va de la entrada a la salida correcta.
  • El algoritmo de Euclides halla el máximo común divisor mediante residuos sucesivos.
  • Un problema puede tener muchos algoritmos correctos con conteos de pasos muy distintos.
  • Anota la entrada, la salida y los casos límite antes de los pasos.
  • La palabra viene del nombre latino de al-Juarismi.
Fuentes de este curso (11)
  • MIT OpenCourseWare 6.006 Introduction to Algorithms, Spring 2020 (Demaine, Ku, Solomon)
  • lecture notes 1 Introduction, 3 Sorting, 9 Breadth-First Search, 10 Depth-First Search (ocw.mit.edu/courses/6-006-introduction-to-algorithms-spring-2020/pages/lecture-notes) and Fall 2011 lecture 13 BFS notes (ocw.mit.edu/courses/6-006-introduction-to-algorithms-fall-2011)
  • Cormen, Leiserson, Rivest, Stein, Introduction to Algorithms (MIT Press)
  • with the CLRS-based Khan Academy algorithms unit by Thomas Cormen and Devin Balkcom of Dartmouth (khanacademy.org/computing/computer-science/algorithms: binary search, selection sort analysis, merge sort, quicksort overview and analysis)
  • MacTutor History of Mathematics, Al-Khwarizmi (mathshistory.st-andrews.ac.uk/Biographies/Al-Khwarizmi: word algorithm from the Latin title Algoritmi de numero Indorum)
  • D. E. Joyce, Euclid's Elements Book VII Propositions 1 and 2 (mathcs.clarku.edu/~djoyce/elements/bookVII)
  • Wolfram MathWorld, Merge Sort (mathworld.wolfram.com/MergeSort.html: proposed by John von Neumann in 1945, after Knuth 1998 p. 159)
  • Stanford CS "Tony Hoare: Quicksort" (cs.stanford.edu/people/eroberts/courses/soco/projects/2008-09/tony-hoare/quicksort.html: devised while a student at Moscow State University for Russian-English machine translation with a tape dictionary, programmed in Algol 60 and published 1961; the year 1959 from the Wikipedia Quicksort article and its cited sources)
  • Bodleian Libraries, Ada Lovelace (blogs.bodleian.ox.ac.uk/adalovelace: 1843 paper, Note G Bernoulli numbers)
  • Fourmilab text of Menabrea's Sketch with Lovelace's notes (fourmilab.ch/babbage/sketch.html)
  • Seven Bridges of Konigsberg (Euler 1736) and Tower of Hanoi (Edouard Lucas, 1883) checked against the Wikipedia articles and their cited sources.

Fecha de consulta: 2026-10-17