b'\n_START_ARTICLE_\nAlgoritmo\n_START_PARAGRAPH_\nEn matem\xc3\xa1ticas, l\xc3\xb3gica, ciencias de la computaci\xc3\xb3n y disciplinas relacionadas, un algoritmo (del lat\xc3\xadn, dixit algorithmus y este del griego arithmos, que significa \xc2\xabn\xc3\xbamero\xc2\xbb, quiz\xc3\xa1 tambi\xc3\xa9n con influencia del nombre del matem\xc3\xa1tico persa Al-Juarismi)\xe2\x80\x8b es un conjunto de instrucciones o reglas definidas y no-ambiguas, ordenadas y finitas que permite, t\xc3\xadpicamente, solucionar un problema, realizar un c\xc3\xb3mputo, procesar datos y llevar a cabo otras tareas o actividades.\xe2\x80\x8b Dados un estado inicial y una entrada, siguiendo los pasos sucesivos se llega a un estado final y se obtiene una soluci\xc3\xb3n. Los algoritmos son el objeto de estudio de la algoritmia.\xe2\x80\x8b_NEWLINE_En la vida cotidiana, se emplean algoritmos frecuentemente para resolver problemas. Algunos ejemplos son los manuales de usuario, que muestran algoritmos para usar un aparato, o las instrucciones que recibe un trabajador de su patr\xc3\xb3n. Algunos ejemplos en matem\xc3\xa1tica son el algoritmo de multiplicaci\xc3\xb3n, para calcular el producto, el algoritmo de la divisi\xc3\xb3n para calcular el cociente de dos n\xc3\xbameros, el algoritmo de Euclides para obtener el m\xc3\xa1ximo com\xc3\xban divisor de dos enteros positivos, o el m\xc3\xa9todo de Gauss para resolver un sistema de ecuaciones lineales._NEWLINE_En t\xc3\xa9rminos de programaci\xc3\xb3n, un algoritmo es una secuencia de pasos l\xc3\xb3gicos que permiten solucionar un problema._NEWLINE_Los derechos de autor otorgan al propietario el derecho exclusivo sobre el uso de la obra, con algunas excepciones. Cuando alguien crea una obra original fija en un medio tangible, autom\xc3\xa1ticamente se convierte en el propietario de los derechos de autor de dicha obra.\n_START_SECTION_\nDiagrama de flujo\n_START_PARAGRAPH_\nLos diagramas de flujo son descripciones gr\xc3\xa1ficas de algoritmos; usan s\xc3\xadmbolos conectados con flechas para indicar la secuencia de instrucciones y est\xc3\xa1n regidos por ISO._NEWLINE_Los diagramas de flujo son usados para representar algoritmos peque\xc3\xb1os, ya que abarcan mucho espacio y su construcci\xc3\xb3n es laboriosa. Por su facilidad de lectura son usados como introducci\xc3\xb3n a los algoritmos, descripci\xc3\xb3n de un lenguaje y descripci\xc3\xb3n de procesos a personas ajenas a la computaci\xc3\xb3n.\n_START_SECTION_\nPseudoc\xc3\xb3digo\n_START_PARAGRAPH_\nEl pseudoc\xc3\xb3digo (falso lenguaje, el prefijo pseudo significa falso) es una descripci\xc3\xb3n de alto nivel de un algoritmo que emplea una mezcla de lenguaje natural con algunas convenciones sint\xc3\xa1cticas propias de lenguajes de programaci\xc3\xb3n, como asignaciones, ciclos y condicionales, aunque no est\xc3\xa1 regido por ning\xc3\xban est\xc3\xa1ndar. _NEWLINE_El pseudoc\xc3\xb3digo est\xc3\xa1 pensado para facilitar a las personas el entendimiento de un algoritmo, y por lo tanto puede omitir detalles irrelevantes que son necesarios en una implementaci\xc3\xb3n. Programadores diferentes suelen utilizar convenciones distintas, que pueden estar basadas en la sintaxis de lenguajes de programaci\xc3\xb3n concretos. Sin embargo, el pseudoc\xc3\xb3digo, en general, es comprensible sin necesidad de conocer o utilizar un entorno de programaci\xc3\xb3n espec\xc3\xadfico, y es a la vez suficientemente estructurado para que su implementaci\xc3\xb3n se pueda hacer directamente a partir de \xc3\xa9l._NEWLINE_As\xc3\xad el pseudoc\xc3\xb3digo cumple con las funciones antes mencionadas para representar algo abstracto los protocolos son los lenguajes para la programaci\xc3\xb3n. Busque fuentes m\xc3\xa1s precisas para tener mayor comprensi\xc3\xb3n del tema.\n_START_SECTION_\nSistemas formales\n_START_PARAGRAPH_\nLa teor\xc3\xada de aut\xc3\xb3matas y la teor\xc3\xada de funciones recursivas proveen modelos matem\xc3\xa1ticos que formalizan el concepto de algoritmo. Los modelos m\xc3\xa1s comunes son la m\xc3\xa1quina de Turing, m\xc3\xa1quina de registro y funciones \xce\xbc-recursivas. Estos modelos son tan precisos como un lenguaje m\xc3\xa1quina, careciendo de expresiones coloquiales o ambig\xc3\xbcedad, sin embargo se mantienen independientes de cualquier computadora y de cualquier implementaci\xc3\xb3n.\n_START_SECTION_\nImplementaci\xc3\xb3n\n_START_PARAGRAPH_\nMuchos algoritmos son ideados para implementarse en un programa. Sin embargo, los algoritmos pueden ser implementados en otros medios, como una red neuronal, un circuito el\xc3\xa9ctrico o un aparato mec\xc3\xa1nico y el\xc3\xa9ctrico. Algunos algoritmos inclusive se dise\xc3\xb1an especialmente para implementarse usando l\xc3\xa1piz y papel. El algoritmo de multiplicaci\xc3\xb3n tradicional, el algoritmo de Euclides, la criba de Erat\xc3\xb3stenes y muchas formas de resolver la ra\xc3\xadz cuadrada son solo algunos ejemplos.\n_START_SECTION_\nAlgoritmos como funciones\n_START_PARAGRAPH_\nUn algoritmo se puede concebir como una funci\xc3\xb3n que transforma los datos de un problema (entrada) en los datos de una soluci\xc3\xb3n (salida). Mas a\xc3\xban, los datos se pueden representar a su vez como secuencias de bits, y en general, de s\xc3\xadmbolos cualesquiera.\xe2\x80\x8b\xe2\x80\x8b\xe2\x80\x8b Como cada secuencia de bits representa a un n\xc3\xbamero natural (v\xc3\xa9ase Sistema binario), entonces los algoritmos son en esencia funciones de los n\xc3\xbameros naturales en los n\xc3\xbameros naturales que s\xc3\xad se pueden calcular. Es decir que todo algoritmo calcula una funci\xc3\xb3n  donde cada n\xc3\xbamero natural es la codificaci\xc3\xb3n de un problema o de una soluci\xc3\xb3n._NEWLINE_En ocasiones los algoritmos son susceptibles de nunca terminar, por ejemplo, cuando entran a un bucle infinito. Cuando esto ocurre, el algoritmo nunca devuelve ning\xc3\xban valor de salida, y podemos decir que la funci\xc3\xb3n queda indefinida para ese valor de entrada. Por esta raz\xc3\xb3n se considera que los algoritmos son funciones parciales, es decir, no necesariamente definidas en todo su dominio de definici\xc3\xb3n._NEWLINE_Cuando una funci\xc3\xb3n puede ser calculada por medios algor\xc3\xadtmicos, sin importar la cantidad de memoria que ocupe o el tiempo que se tarde, se dice que dicha funci\xc3\xb3n es computable. No todas las funciones entre secuencias datos son computables. El problema de la parada es un ejemplo.\n_START_SECTION_\nAn\xc3\xa1lisis de algoritmos\n_START_PARAGRAPH_\nComo medida de la eficiencia de un algoritmo, se suelen estudiar los recursos (memoria y tiempo) que consume el algoritmo. El an\xc3\xa1lisis de algoritmos se ha desarrollado para obtener valores que de alguna forma indiquen (o especifiquen) la evoluci\xc3\xb3n del gasto de tiempo y memoria en funci\xc3\xb3n del tama\xc3\xb1o de los valores de entrada._NEWLINE_El an\xc3\xa1lisis y estudio de los algoritmos es una disciplina de las ciencias de la computaci\xc3\xb3n y, en la mayor\xc3\xada de los casos, su estudio es completamente abstracto sin usar ning\xc3\xban tipo de lenguaje de programaci\xc3\xb3n ni cualquier otra implementaci\xc3\xb3n; por eso, en ese sentido, comparte las caracter\xc3\xadsticas de las disciplinas matem\xc3\xa1ticas. As\xc3\xad, el an\xc3\xa1lisis de los algoritmos se centra en los principios b\xc3\xa1sicos del algoritmo, no en los de la implementaci\xc3\xb3n particular. Una forma de plasmar (o algunas veces "codificar") un algoritmo es escribirlo en pseudoc\xc3\xb3digo o utilizar un lenguaje muy simple tal como Lexico, cuyos c\xc3\xb3digos pueden estar en el idioma del programador._NEWLINE_Algunos escritores restringen la definici\xc3\xb3n de algoritmo a procedimientos que deben acabar en alg\xc3\xban momento, mientras que otros consideran procedimientos que podr\xc3\xadan ejecutarse eternamente sin pararse, suponiendo el caso en el que existiera alg\xc3\xban dispositivo f\xc3\xadsico que fuera capaz de funcionar eternamente. En este \xc3\xbaltimo caso, la finalizaci\xc3\xb3n con \xc3\xa9xito del algoritmo no se podr\xc3\xada definir como la terminaci\xc3\xb3n de este con una salida satisfactoria, sino que el \xc3\xa9xito estar\xc3\xada definido en funci\xc3\xb3n de las secuencias de salidas dadas durante un periodo de vida de la ejecuci\xc3\xb3n del algoritmo. Por ejemplo, un algoritmo que verifica que hay m\xc3\xa1s ceros que unos en una secuencia binaria infinita debe ejecutarse siempre para que pueda devolver un valor \xc3\xbatil. Si se implementa correctamente, el valor devuelto por el algoritmo ser\xc3\xa1 v\xc3\xa1lido, hasta que eval\xc3\xbae el siguiente d\xc3\xadgito binario. De esta forma, mientras eval\xc3\xbaa la siguiente secuencia podr\xc3\xa1n leerse dos tipos de se\xc3\xb1ales: una se\xc3\xb1al positiva (en el caso de que el n\xc3\xbamero de ceros sea mayor que el de unos) y una negativa en caso contrario. Finalmente, la salida de este algoritmo se define como la devoluci\xc3\xb3n de valores exclusivamente positivos si hay m\xc3\xa1s ceros que unos en la secuencia y, en cualquier otro caso, devolver\xc3\xa1 una mezcla de se\xc3\xb1ales positivas y negativas.\n_START_SECTION_\nEjemplo de algoritmo\n_START_PARAGRAPH_\nEl problema consiste en encontrar el m\xc3\xa1ximo de un conjunto de n\xc3\xbameros. Para un ejemplo m\xc3\xa1s complejo v\xc3\xa9ase Algoritmo de Euclides.\n_START_SECTION_\nDescripci\xc3\xb3n de alto nivel\n_START_PARAGRAPH_\nDado un conjunto finito  de n\xc3\xbameros, se tiene el problema de encontrar el n\xc3\xbamero m\xc3\xa1s grande. Sin p\xc3\xa9rdida de generalidad se puede asumir que dicho conjunto no es vac\xc3\xado y que sus elementos est\xc3\xa1n numerados como ._NEWLINE_Es decir, dado un conjunto  se pide encontrar  tal que  para todo elemento  que pertenece al conjunto ._NEWLINE_Para encontrar el elemento m\xc3\xa1ximo, se asume que el primer elemento () es el m\xc3\xa1ximo; luego, se recorre el conjunto y se compara cada valor con el valor del m\xc3\xa1ximo n\xc3\xbamero encontrado hasta ese momento. En el caso que un elemento sea mayor que el m\xc3\xa1ximo, se asigna su valor al m\xc3\xa1ximo. Cuando se termina de recorrer la lista, el m\xc3\xa1ximo n\xc3\xbamero que se ha encontrado es el m\xc3\xa1ximo de todo el conjunto.\n_START_SECTION_\nImplementaci\xc3\xb3n\n_START_PARAGRAPH_\nEn lenguaje C++:_NEWLINE_int max(int c[], int n){_NEWLINE_   int i, m = c[0];_NEWLINE_   for (i = 1; i < n; i++)_NEWLINE_      if (c[i] > m) m = c[i];_NEWLINE_   return m;}'