Algoritmo


En matemáticas y ciencias de la computación , un algoritmo ( / ˈ æ l ɡ ə r ɪ ð əm / ( escuchar )Sobre este sonido ) es una secuencia finita de instrucciones bien definidas , que generalmente se usa para resolver una clase de problemas específicos o para realizar un cálculo. [1] Los algoritmos se utilizan como especificaciones para realizar cálculos , procesamiento de datos , razonamiento automatizado , toma de decisiones automatizada y otras tareas. En contraste, una heurísticaes un enfoque para la resolución de problemas que puede no estar completamente especificado o no garantizar resultados correctos u óptimos, especialmente en dominios de problemas donde no hay un resultado correcto u óptimo bien definido. [2]

Como método eficaz , un algoritmo puede expresarse dentro de una cantidad finita de espacio y tiempo, [3] y en un lenguaje formal bien definido [4] para calcular una función . [5] A partir de un estado inicial y una entrada inicial (quizás vacía ), [6] las instrucciones describen un cálculo que, cuando se ejecuta , procede a través de un número finito [7] de estados sucesivos bien definidos, que eventualmente producen una "salida" [ 8] y termina en un estado final final. La transición de un estado al siguiente no es necesariamente determinista.; algunos algoritmos, conocidos como algoritmos aleatorios , incorporan entrada aleatoria. [9]

El concepto de algoritmo existe desde la antigüedad. Los antiguos matemáticos babilónicos utilizaron algoritmos aritméticos , como un algoritmo de división . C. 2500 aC y matemáticos egipcios c. 1550 antes de Cristo. [10] Los matemáticos griegos utilizaron más tarde algoritmos en el 240 a. C. en el tamiz de Eratóstenes para encontrar números primos, y el algoritmo euclidiano para encontrar el máximo común divisor de dos números. [11] Matemáticos árabes como al-Kindi en el siglo IX utilizaron algoritmos criptográficos para descifrar códigos. , basado en análisis de frecuencia . [12]

La palabra algoritmo se deriva del nombre del matemático persa del siglo IX Muḥammad ibn Mūsā al-Khwārizmī , cuya nisba (identificándolo como de Khwarazm ) fue latinizado como Algoritmi ( arabizado persa الخوارزمی c. 780-850). [13] [14]

Muḥammad ibn Mūsā al-Khwārizmī fue un matemático, astrónomo , geógrafo y erudito en la Casa de la Sabiduría en Bagdad , cuyo nombre significa 'el nativo de Khwarazm ', una región que formaba parte del Gran Irán y ahora se encuentra en Uzbekistán . [15] [16] Hacia el año 825, al-Khwarizmi escribió un tratado en árabe sobre el sistema numérico hindú-árabe , que fue traducido al latín durante el siglo XII. El manuscrito comienza con la frase Dixit Algorizmi('Así habló Al-Khwarizmi'), donde "Algorizmi" era la latinización del traductor del nombre de Al-Khwarizmi. [17] Al-Khwarizmi fue el matemático más leído en Europa a finales de la Edad Media, principalmente a través de otro de sus libros, el Álgebra . [18] En latín medieval tardío, algorismus , ' algorism ' en inglés, la corrupción de su nombre, simplemente significaba el "sistema numérico decimal". [19] En el siglo XV, bajo la influencia de la palabra griega ἀριθμός ( arithmos ), 'número' ( cf. 'aritmética'), la palabra latina se modificó a algorítmo, y el término inglés correspondiente 'algoritmo' se atestigua por primera vez en el siglo XVII; el sentido moderno se introdujo en el siglo XIX. [20]

En inglés, se utilizó por primera vez alrededor de 1230 y luego por Chaucer en 1391. El inglés adoptó el término francés, pero no fue hasta finales del siglo XIX que "algoritmo" adquirió el significado que tiene en el inglés moderno. [21]


Diagrama de flujo de un algoritmo ( algoritmo de Euclides ) para calcular el máximo común divisor (MCD) de dos números a y b en lugares denominadas A y B. El algoritmo procede por sustracciones sucesivas en dos bucles: Si la prueba B ≥ produce un "sí" o "verdadero" (más exactamente, el número b en la ubicación B es mayor o igual que el número a en la ubicación A) ENTONCES, el algoritmo especifica B ← B - A (es decir, el número b - a reemplaza al antiguo b). De manera similar, SI A> B, ENTONCES A ← A - B. El proceso termina cuando (el contenido de) B es 0, produciendo el mcd en A. (Algoritmo derivado de Scott 2009: 13; símbolos y estilo de dibujo de Tausworthe 1977) .
Diagrama de Ada Lovelace de la "nota G", el primer algoritmo informático publicado
Algoritmo lógico NAND implementado electrónicamente en el chip 7400
Ejemplos de diagrama de flujo de las estructuras canónicas de Böhm-Jacopini : la SEQUENCE (rectángulos que descienden de la página), el WHILE-DO y el IF-THEN-ELSE. Las tres estructuras están compuestas por el primitivo condicional GOTO ( IF test THEN GOTO step xxx, mostrado como diamante), el incondicional GOTO (rectángulo), varios operadores de asignación (rectángulo) y HALT (rectángulo). El anidamiento de estas estructuras dentro de bloques de asignación da como resultado diagramas complejos (cf. Tausworthe 1977: 100, 114).
El diagrama de ejemplo del algoritmo de Euclides de TL Heath (1908), con más detalles agregados. Euclides no va más allá de una tercera medida y no da ejemplos numéricos. Nicomachus da el ejemplo de 49 y 21: "Resto el menor del mayor; queda 28; luego de nuevo resto de esto el mismo 21 (porque esto es posible); queda 7; resto esto de 21, 14 es a la izquierda; de lo cual de nuevo resto 7 (porque esto es posible); queda 7, pero 7 no se puede restar de 7. " Heath comenta que "La última frase es curiosa, pero su significado es bastante obvio, como también el significado de la frase sobre la terminación 'en el mismo número'" (Heath 1908: 300).
Una expresión gráfica del algoritmo de Euclides para encontrar el máximo común divisor de 1599 y 650.
1599 = 650 × 2 + 299650 = 299 × 2 + 52 299 = 52 × 5 + 39 52 = 39 × 1 + 13 39 = 13 × 3 + 0
"Inelegant" es una traducción de la versión de Knuth del algoritmo con un ciclo de resto basado en restas que reemplaza su uso de la división (o una instrucción de "módulo"). Derivado de Knuth 1973: 2-4. Dependiendo de los dos números, "Inelegant" puede calcular el mcd en menos pasos que "Elegant".
Estatua de Alan Turing en Bletchley Park