Algoritmo


En matemáticas y ciencias de la computación , un algoritmo ( / ˈ æ l ɡ ə r ɪ ð əm / ( escuchar )icono de altavoz de audio ) es una secuencia finita de instrucciones bien definidas , típicamente usadas 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 automatizaday otras tareas. Por el contrario, una heurística es un enfoque para la resolución de problemas que puede no estar completamente especificado o puede 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 efectivo , 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] Comenzando desde 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, produciendo finalmente una "salida" [ 8] y terminando en un estado final final. La transición de un estado al siguiente no es necesariamente determinista; algunos algoritmos, conocidos como algoritmos aleatorios , incorporan entradas aleatorias. [9]

El concepto de algoritmo existe desde la antigüedad. Los algoritmos aritméticos , como un algoritmo de división , fueron utilizados por los antiguos matemáticos babilónicos c. 2500 aC y matemáticos egipcios c. 1550 a.C. [10] Más tarde, los matemáticos griegos usaron algoritmos en el 240 a. C. en la criba 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 ) se latinizó como Algoritmi ( persa arabizado الخوارزمی c. 780–850). [13] [14] Muḥammad ibn Mūsā al-Khwārizmī fue un matemático, astrónomo , geógrafo y erudito de 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 es ahora en Uzbekistán. [15] [16] Alrededor de 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 , inglés ' algorism', 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 algoritmo , y el término inglés correspondiente 'algoritmo' se atestigua por primera vez. en el siglo 17; el sentido moderno se introdujo en el siglo XIX. [20]

Las matemáticas indias eran predominantemente algorítmicas. Los algoritmos que son representativos de la tradición matemática india van desde los antiguos Śulbasūtrās hasta los textos medievales de la Escuela de Kerala . [ cita requerida ]

En inglés, la palabra algoritmo se usó 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 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 ubicaciones denominadas A y B. El algoritmo procede mediante restas sucesivas en dos bucles: SI la prueba B ≥ A arroja "sí" o "verdadero" (más precisamente, 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 (lo que significa que el número ba reemplaza al antiguo b). De manera similar, SI A > B, ENTONCES A ← A − B. El proceso termina cuando (el contenido de) B es 0, lo que produce 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 diagramas de flujo de las estructuras canónicas de Böhm-Jacopini : la SECUENCIA (rectángulos que descienden en la página), MIENTRAS-HACER y SI-ENTONCES-SI NO. Las tres estructuras están formadas por el primitivo GOTO condicional ( IF test THEN GOTO step xxx, mostrado como rombo), el GOTO incondicional (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. Nicómaco 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 izquierda; de la cual resto de nuevo 7 (pues 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 uno y el mismo número'". (Heath 1908: 300).
Una expresión gráfica del algoritmo de Euclides para encontrar el máximo común divisor para 1599 y 650.
1599 = 650×2 + 299 650 = 299×2 + 52 299 = 52×5 + 39 52 = 39×1 + 1339 = 13×3 + 0
"Poco elegante" es una traducción de la versión del algoritmo de Knuth con un bucle 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, "Poco elegante" puede calcular el mcd en menos pasos que "Elegante".
Estatua de Alan Turing en Bletchley Park