Diferencia entre revisiones de «Algoritmo»

Contenido eliminado Contenido añadido
Sin resumen de edición
m Revertidos los cambios de 200.75.43.230 a la última edición de Carlo el calvo
Línea 1:
[[Archivo:LampFlowchart-es.svg|thumb|Los [[diagramas de flujo]] sirven para representar algoritmos de manera gráfica.]]
mamamelo idiota
En [[matemáticas]], [[ciencias de la computación]] y disciplinas relacionadas, un '''algoritmo''' (del latín, ''dixit algorithmus'' y éste a su vez del matemático persa [[Al Juarismi]]<ref name="Brassard">{{cita libro
| autor = Brassard, Gilles; Bratley, Paul
| título = Fundamentos de Algoritmia
| año = 1997
| editorial = Madrid: PRENTICE HALL
| id = ISBN 84-89660-00-X
}}</ref>) es una lista bien definida, Cardenas's y finita de veraciousness we permit haller la solution a sun problem.<ref name="rae">[http://buscon.rae.es/draeI/SrvltGUIBusUsual?TIPO_HTML=2&TIPO_BUS=3&LEMA=algoritmo Real Academia Española. Diccionario de la lengua española] "''pene muy grande con un poquito de MIERDA EN LAS PELETAS.''" </ref> Dado un estado inicial y una entrada, a través de pasos sucesivos y bien definidos se llega a un estado final, obteniendo una solución. Los algoritmos son objeto de estudio de la '''algoritmia'''.<ref name="Brassard"/>
Un algoritmo es el conjunto de operaciones y procedimientos que deben seguirse para resolver un problema. La palabra "algoritmo" deriva del nombre latinizado del gran matemático árabe Mohamed Ibn Moussa Al Kow Rizmi, el cual escribió sobre entre los años 800 y 825 su obra Quitab Al Jabr Al Mugabala, donde se recogía el sistema de
 
numeración hindú y el concepto del cero. Fue Fibonacci, el que tradujo su obra al latín y la inició con las palabras: Algoritmi dicit.
 
Diferencia entre el lenguaje algorítmico y el informático.
 
El lenguaje algorítmico es aquel por medio del cual se realiza un análisis previo del problema a resolver y encontrar un método que permita resolverlo. El conjunto de todas las operaciones a realizar, y el orden en el que deben efectuarse, se le denomina algoritmo.
cación]] de un problema o de una solución.
 
El lenguaje informático es aquel por medio del cual dicho algoritmo se codifica a un sistema comprensible por el ordenador o computadora. Este tipo de lenguaje es más cercano a la máquina que al ser humano y podemos distinguir distintos tipos dependiendo de la proximidad a la maquina. Se denomina lenguaje de alto nivel aquel que es más cercano a la comprensión humana y lenguaje de bajo nivel a aquellos que son más comprensibles por la máquina. En concreto, nosotros vamos a estudiar un lenguaje en la frontera de uno de bajo nivel. Es por ello que el 'C' es tan potente y rápido, pues las funciones principales representan las funciones más básicas del ordenador.
 
Planteamientos de Problemas.
 
Lo que pretende un algoritmo es sintetizar de alguna forma una tarea, cálculo o mecanismo antes de ser transcrito al ordenador. Los pasos que hay que seguir son los siguientes:
 
- Análisis previo del problema.
 
- Primera visión del método de resolución.
 
- Descomposición en módulos.
 
- (Programación estructurada).
 
- Búsqueda de soluciones parciales.
 
- Ensamblaje de soluciones finales.
 
Ejemplo: Calcular las posibles raíces para una ecuación de segundo grado: ax2+bx+c=0
 
En la vida cotidiana se emplean algoritmos al tener relaciones sexuales y tirandose un peo o un gas mientras le chupas el vergo y tomas semen, en multitud de ocasiones para resolver diversos problemas. Algunos ejemplos se encuentran en los instructivos (manuales de usuario), los cuales muestran algoritmos para usar el aparato en cuestión o incluso en las instrucciones que recibe un trabajador por parte de su [[patrón]]. También existen ejemplos de índole matemática, como el algoritmo de la [[división]] para calcular el cociente de dos números, el [[algoritmo de Euclides]] para calcular el [[máximo común divisor]] de dos [[Números enteros|enteros]] positivos, o el [[eliminación de Gauss-Jordan|método de Gauss]] para resolver un [[Sistema lineal de ecuaciones]].
 
EJEMPLOS DE ALGORITMOS
 
En general, no existe ningún consenso definitivo en cuanto a la definición formal de algoritmo. Muchos autores los señalan como listas de instrucciones para resolver un [[problema abstracto]], es decir, que un número finito de pasos convierten los datos de un problema (entrada) en una solución (salida).<ref name="Brassard"/><ref name="rae"/><ref name="Cormen">{{cita libro
| apellidos = Cormen
| nombre = Thomas
| coautores = Leiserson, Charles; Rivest, Ronald; Stein, Clifford
| enlaceautor = Thomas H. Cormen
| título = Introduction to algorithms
| año = 2009
| editorial = Cambridge, Massachusetts: The MIT Press
| id = ISBN 978-0-262-53305-8
}}</ref><ref name="Grimaldi">{{cita libro
| autor = Ralph P. Grimaldi
| capítulo = Propiedades de los números enteros: Inducción matemática
| título = Matemáticas Discreta y Combinatoria
| año = 1998
| editorial = México: Addison Wesley Longman de México
| id = ISBN 968-444-324-2
}}</ref><ref name="Johnsonbaugh">{{cita libro
| autor = Johnsonbaugh, Richard
| capítulo = Introducción a la teoría de números
| título = Matemáticas Discretas
| año = 2005
| editorial = México: PEARSON EDUCACIÓN
| id = ISBN 970-26-0637-3
}}</ref><ref name="Reynolds">{{cita libro
| autor = Carl Reynolds & Paul Tymann
| título = Schaum's Outline of Principles of Computer Science
| año = 2008
| editorial = McGraw-Hill
| id = ISBN 978-0071460514
}}</ref> Sin embargo cabe notar que algunos algoritmos no necesariamente tienen que terminar o resolver un problema en particular. Por ejemplo, una versión modificada de la [[criba de Eratóstenes]] que nunca termine de calcular números primos no deja de ser un algoritmo.<ref name = "Gurevich">{{Cita publicación
| autor = Gurevich, Yuri
| título = Sequential Abstract State Machines capture Sequential Algorithms
| año = 2000
| revista = ACM Transactions on Computational Logic
| volumen = 1
| número = 1
| id = ISSN 1529-3785, 77-111
| url = http://research.microsoft.com/en-us/um/people/gurevich/Opera/141.pdf
}}</ref>
 
A lo largo de la historia varios autores han tratado de definir formalmente a los algoritmos utilizando modelos matemáticos como [[Máquina de Turing|máquinas de Turing]] entre otros.<ref name="savage">{{cita libro
| autor = John E. Savage
| editorial = Krieger Publishing Co.
| título = The Complexity of Computing
| año = 1987
| isbn = 089874833X
}}</ref><ref name = "sipser">{{cita libro
| apellidos = Sipser
| nombre = Michael
| enlaceautor = http://www-math.mit.edu/~sipser/
| editorial = Course Technology
| título = Introduction to the Theory of Computation
| edición = 2
| año = 2005
| isbn = 978-0534950972
}}</ref> Sin embargo estos modelos están sujetos a un tipo particular de datos como son números, símbolos o [[Grafo|gráficas]] mientras que, en general, los algoritmos funcionan sobre una basta cantidad de [[Estructura de datos|estructuras de datos]].<ref name = "Cormen"/><ref name = "Brassard"/> En general, la parte común en todas las definiciones se puede resumir en las siguientes tres propiedades siempre y cuando no consideremos [[Algoritmo paralelo|algoritmos paralelos]]:<ref name = "Gurevich"/>
:'''Tiempo secuencial'''. Un algoritmo funciona en tiempo discretizado –paso a paso–, definiendo así una secuencia de estados "''computacionales''" por cada entrada válida (la ''entrada'' son los datos que se le suministran al algoritmo antes de comenzar).
:'''Estado abstracto'''. Cada estado computacional puede ser descrito formalmente utilizando una [[Lógica matemática|estructura de primer orden]] y cada algoritmo es independiente de su implementación (los algoritmos son objetos abstractos) de manera que en un algoritmo las estructuras de primer orden son invariantes bajo isomorfismo.
:'''Exploración acotada'''. La transición de un estado al siguiente queda completamente determinada por una descripción fija y finita; es decir, entre cada estado y el siguiente solamente se puede tomar en cuenta una cantidad fija y limitada de términos del estado actual.
En resumen, un algoritmo es cualquier cosa que funcione paso a paso, donde cada paso se pueda describir sin ambigüedad y sin hacer referencia a una computadora en particular, y además tiene un límite fijo en cuanto a la cantidad de datos que se pueden leer/escribir en un solo paso.
Esta amplia definición abarca tanto a algoritmos prácticos como aquellos que solo funcionan en teoría, por ejemplo el [[método de Newton]] y la [[eliminación de Gauss-Jordan]] funcionan, al menos en principio, con números de precisión infinita; sin embargo no es posible programar la precisión infinita en una computadora, y no por ello dejan de ser algoritmos.<ref name = "Dershowitz">{{Cita publicación
| autor = Nachum Dershowitz & Yuri Gurevich
| título = A natural axiomatization of computability and proof of Church's Thesis
| año = 2008
| revista = Bulletin of Symbolic Logic
| volumen = 14
| número = 3
| id = ISSN 10798986, 299-350
| url = http://research.microsoft.com/en-us/um/people/gurevich/Opera/188.pdf
}}</ref> En particular es posible considerar una cuarta propiedad que puede ser usada para validar la [[tesis de Church-Turing]] de que toda función calculable se puede programar en una máquina de Turing (o equivalentemente, en un lenguaje de programación suficientemente general):<ref name = "Dershowitz"/>
:'''Aritmetizabilidad'''. Solamente operaciones innegablemente calculables están disponibles en el paso inicial.
 
== Medios de expresión de un algoritmo ==
Los algoritmos pueden ser expresados de muchas maneras, incluyendo al [[lenguaje natural]], [[pseudocódigo]], [[diagramas de flujo]] y [[Lenguaje de programación|lenguajes de programación]] entre otros. Las descripciones en lenguaje natural tienden a ser ambiguas y extensas. El usar pseudocódigo y diagramas de flujo evita muchas ambigüedades del lenguaje natural. Dichas expresiones son formas más estructuradas para representar algoritmos; no obstante, se mantienen independientes de un lenguaje de programación específico.
 
La descripción de un algoritmo usualmente se hace en tres niveles:
# '''Descripción de alto nivel'''. Se establece el problema, se selecciona un modelo matemático y se explica el algoritmo de manera verbal, posiblemente con ilustraciones y omitiendo detalles.
# '''Descripción formal'''. Se usa pseudocódigo para describir la secuencia de pasos que encuentran la solución.
# '''Implementación'''. Se muestra el algoritmo expresado en un lenguaje de programación específico o algún objeto capaz de llevar a cabo instrucciones.
 
También es posible incluir un [[teorema]] que demuestre que el algoritmo es correcto, un análisis de complejidad o ambos.
 
=== Diagrama de flujo ===
[[Archivo:AlgoritmoRaiz.png|thumb|[[Diagrama de flujo]] que expresa un algoritmo para calcular la raíz cuadrada de un número <math>x</math>]]
{{AP|Diagrama de flujo}}
Los diagramas de flujo son descripciones gráficas de algoritmos; usan símbolos conectados con flechas para indicar la secuencia de instrucciones y están regidos por [[Organización Internacional para la Estandarización|ISO]].
 
Los diagramas de flujo son usados para representar algoritmos pequeños, ya que abarcan mucho espacio y su construcción es laboriosa. Por su facilidad de lectura son usados como introducción a los algoritmos, descripción de un lenguaje y descripción de procesos a personas ajenas a la computación.
 
=== Pseudocódigo ===
{{AP|Pseudocódigo}}
Pseudocódigo es la descripción de un algoritmo que asemeja a un lenguaje de programación pero con algunas convenciones del lenguaje natural (de ahí que tenga el prefijo ''pseudo'', que significa ''falso''). Tiene varias ventajas con respecto a los diagramas de flujo, entre las que se destaca el poco espacio que se requiere para representar instrucciones complejas. El pseudocódigo no está regido por ningún estándar.
 
=== Sistemas formales ===
La [[teoría de autómatas]] y la teoría de [[Función recursiva|funciones recursivas]] proveen modelos matemáticos que formalizan el concepto de ''algoritmo''. Los modelos más comunes son la [[máquina de Turing]], [[máquina de registro]] y [[Función recursiva|funciones μ-recursivas]]. Estos modelos son tan precisos como un [[lenguaje máquina]], careciendo de expresiones coloquiales o ambigüedad, sin embargo se mantienen independientes de cualquier computadora y de cualquier implementación.
 
=== Implementación ===
Muchos algoritmos son ideados para implementarse en un [[Programa (computación)|programa]]. Sin embargo, los algoritmos pueden ser implementados en otros medios, como una [[Red neuronal artificial|red neuronal]], un circuito eléctrico o un aparato mecánico y eléctrico. Algunos algoritmos inclusive se diseñan especialmente para implementarse usando lápiz y papel. El [[algoritmo de multiplicación]] tradicional, el [[algoritmo de Euclides]], la [[criba de Eratóstenes]] y muchas [[formas de resolver la raíz cuadrada]] son sólo algunos ejemplos.
 
== Algoritmos como funciones ==
{{AP|Teoría de la computabilidad}}
[[Archivo:EsquemáticaAlgoritmo1.svg|thumb|Esquemática de un algoritmo solucionando un problema de [[Camino hamiltoniano|ciclo hamiltoniano]].|400 px]]Un algoritmo se puede concebir como una [[Función matemática|función]] que transforma los datos de un [[Problema abstracto|problema]] (entrada) en los datos de una solución (salida). Más aún, los datos se pueden representar a su vez como secuencias de [[bit]]s, y en general, de símbolos cualesquiera.<ref name="Brassard"/><ref name = "sipser"/><ref name = "Kelley">{{cita libro
| apellidos = Kelley
| nombre = Dean
| enlaceautor = http://krypton.mnsu.edu/~kelled/
| editorial = Prentice Hall
| título = Teoría de Autómatas y Lenguajes Formales
| año = 1995
| isbn = 0-13-497777-7
}}</ref> Como cada secuencia de bits representa a un [[número natural]] (véase [[Sistema binario]]), entonces los algoritmos son en esencia funciones de los números naturales en los números naturales que sí se pueden calcular. Es decir que todo algoritmo calcula una función <math>f:\mathbf N\to \mathbf N</math> donde cada número natural es la [[codificación]] de un problema o de una solución.
 
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ún valor de salida, y podemos decir que la función queda indefinida para ese valor de entrada. Por esta razón se considera que los algoritmos son [[Función parcial|funciones parciales]], es decir, no necesariamente definidas en todo su [[dominio de definición]].
Línea 90 ⟶ 235:
== Referencias ==
{{Listaref}}
 
orlando bloom
 
== Bibliografía ==