Documente Academic
Documente Profesional
Documente Cultură
1 Denicin formal
La lmpara
no funciona
Est
enchufada?
No
En general, no existe ningn consenso denitivo en cuanto a la denicin formal de algoritmo. Muchos autores
los sealan como listas de instrucciones para resolver un
clculo o un problema abstracto, es decir, que un nmero
nito de pasos convierten los datos de un problema (entrada) en una solucin (salida).[1][2][3][4][5][6] Sin embargo cabe notar que algunos algoritmos no necesariamente
tienen que terminar o resolver un problema en particular.
Por ejemplo, una versin modicada de la criba de Eratstenes que nunca termine de calcular nmeros primos
no deja de ser un algoritmo.[7]
Enchufarla
Foco
quemado?
Reemplazar
el foco
No
Comprar
nueva lmpara
Los diagramas de ujo sirven para representar algoritmos de
manera grca.
En matemticas, lgica, ciencias de la computacin y disciplinas relacionadas, un algoritmo (del griego y latn,
dixit algorithmus y este a su vez del matemtico persa AlJuarismi[1] ) es un conjunto prescrito de instrucciones o
reglas bien denidas, ordenadas y nitas que permite realizar una actividad mediante pasos sucesivos que no generen dudas a quien deba realizar dicha actividad.[2] Dados
un estado inicial y una entrada, siguiendo los pasos sucesivos se llega a un estado nal y se obtiene una solucin. Los
algoritmos son el objeto de estudio de la algoritmia.[1]
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
por parte de su patrn. Algunos ejemplos en matemtica
son el algoritmo de multiplicacin, para calcular el producto, el algoritmo de la divisin para calcular el cociente de dos nmeros, el algoritmo de Euclides para obtener
el mximo comn divisor de dos enteros positivos, o el
mtodo de Gauss para resolver un sistema de ecuaciones
lineales.
Exploracin acotada. La transicin de un estado al siguiente queda completamente determinada por una descripcin ja y nita; es decir, entre cada estado y el siguiente solamente
se puede tomar en cuenta una cantidad ja y
limitada de trminos del estado actual.
1
En resumen, un algoritmo es cualquier cosa que funcione paso a paso, donde cada paso se pueda describir sin
ambigedad y sin hacer referencia a una computadora en
particular, y adems tiene un lmite jo en cuanto a la
cantidad de datos que se pueden leer/escribir en un solo paso. Esta amplia denicin abarca tanto a algoritmos
prcticos como aquellos que solo funcionan en teora, por
ejemplo el mtodo de Newton y la eliminacin de GaussJordan funcionan, al menos en principio, con nmeros de
precisin innita; sin embargo no es posible programar la
precisin innita en una computadora, y no por ello dejan
de ser algoritmos.[10] En particular es posible considerar
una cuarta propiedad que puede ser usada para validar la
tesis de Church-Turing de que toda funcin calculable se
puede programar en una mquina de Turing (o equivalentemente, en un lenguaje de programacin sucientemente
general):[10]
Aritmetizabilidad. Solamente operaciones
innegablemente calculables estn disponibles
en el paso inicial.
Los algoritmos pueden ser expresados de muchas maneras, incluyendo al lenguaje natural, pseudocdigo,
diagramas de ujo y lenguajes de programacin entre
otros. Las descripciones en lenguaje natural tienden a ser
ambiguas y extensas. El usar pseudocdigo y diagramas
de ujo evita muchas ambigedades del lenguaje natural.
Dichas expresiones son formas ms estructuradas para representar algoritmos; no obstante, se mantienen independientes de un lenguaje de programacin especco.
Los diagramas de ujo son usados para representar algoritmos pequeos, ya que abarcan mucho espacio y su
construccin es laboriosa. Por su facilidad de lectura son
La descripcin de un algoritmo usualmente se hace en tres usados como introduccin a los algoritmos, descripcin
niveles:
de un lenguaje y descripcin de procesos a personas ajenas a la computacin.
1. Descripcin de alto nivel. Se establece el problema, se selecciona un modelo matemtico y se explica el algoritmo de manera verbal, posiblemente con 2.2 Pseudocdigo
ilustraciones y omitiendo detalles.
El pseudocdigo (falso lenguaje, el prejo pseudo signica falso) es una descripcin de alto nivel de un algoritmo
2. Descripcin formal. Se usa pseudocdigo para desque emplea una mezcla de lenguaje natural con algunas
cribir la secuencia de pasos que encuentran la soluconvenciones sintcticas propias de lenguajes de progracin.
macin, como asignaciones, ciclos y condicionales, aunque no est regido por ningn estndar. Es utilizado para
3. Implementacin. Se muestra el algoritmo expresa- describir algoritmos en libros y publicaciones cientcas,
do en un lenguaje de programacin especco o al- y como producto intermedio durante el desarrollo de un
gn objeto capaz de llevar a cabo instrucciones.
algoritmo, como los diagramas de ujo, aunque presentan
una ventaja importante sobre estos, y es que los algoritTambin es posible incluir un teorema que demuestre que mos descritos en pseudocdigo requieren menos espacio
el algoritmo es correcto, un anlisis de complejidad o am- para representar instrucciones complejas.
bos.
2.6
Estructuras secuenciales
nas el entendimiento de un algoritmo, y por lo tanto puede omitir detalles irrelevantes que son necesarios en una
implementacin. Programadores diferentes suelen utilizar convenciones distintas, que pueden estar basadas en la
sintaxis de lenguajes de programacin concretos. Sin embargo, el pseudocdigo, en general, es comprensible sin
necesidad de conocer o utilizar un entorno de programacin especco, y es a la vez sucientemente estructurado
para que su implementacin se pueda hacer directamente
a partir de l.
As el pseudocdigo cumple con las funciones antes mencionadas para representar algo abstracto los protocolos
son los lenguajes para la programacin. Busque fuentes
ms precisas para tener mayor comprensin del tema.
2.3
Sistemas formales
2.4
Implementacin
VASE TAMBIN
5 Ejemplo de algoritmo
Cuando una funcin puede ser calculada por medios algortmicos, sin importar la cantidad de memoria que ocupe o el tiempo que se tarde, se dice que dicha funcin
es computable. No todas las funciones entre secuencias
datos son computables. El problema de la parada es un
ejemplo.
El problema consiste en encontrar el mximo de un conjunto de nmeros. Para un ejemplo ms complejo vase
Algoritmo de Euclides.
Anlisis de algoritmos
Para encontrar el elemento mximo, se asume que el primer elemento ( c0 ) es el mximo; luego, se recorre el
conjunto y se compara cada valor con el valor del mximo nmero encontrado hasta ese momento. En el caso
El anlisis y estudio de los algoritmos es una disciplina de que un elemento sea mayor que el mximo, se asigna su
las ciencias de la computacin y, en la mayora de los ca- valor al mximo. Cuando se termina de recorrer la lista,
sos, su estudio es completamente abstracto sin usar nin- el mximo nmero que se ha encontrado es el mximo de
gn tipo de lenguaje de programacin ni cualquier otra todo el conjunto.
implementacin; por eso, en ese sentido, comparte las caractersticas de las disciplinas matemticas. As, el anlisis de los algoritmos se centra en los principios bsicos 5.2 Descripcin formal
del algoritmo, no en los de la implementacin particular.
Una forma de plasmar (o algunas veces codicar) un El algoritmo puede ser escrito de una manera ms formal
algoritmo es escribirlo en pseudocdigo o utilizar un len- en el siguiente pseudocdigo:
guaje muy simple tal como Lexico, cuyos cdigos pueden
Sobre la notacin:
estar en el idioma del programador.
Algunos escritores restringen la denicin de algoritmo
a procedimientos que deben acabar en algn momento,
mientras que otros consideran procedimientos que podran ejecutarse eternamente sin pararse, suponiendo el
caso en el que existiera algn dispositivo fsico que fuera capaz de funcionar eternamente. En este ltimo caso,
la nalizacin con xito del algoritmo no se podra denir como la terminacin de este con una salida satisfactoria, sino que el xito estara denido en funcin de las
secuencias de salidas dadas durante un periodo de vida
de la ejecucin del algoritmo. Por ejemplo, un algoritmo
que verica que hay ms ceros que unos en una secuencia
binaria innita debe ejecutarse siempre para que pueda
devolver un valor til. Si se implementa correctamente,
el valor devuelto por el algoritmo ser vlido, hasta que
evale el siguiente dgito binario. De esta forma, mientras evala la siguiente secuencia podrn leerse dos tipos
de seales: una seal positiva (en el caso de que el nmero de ceros sea mayor que el de unos) y una negativa
en caso contrario. Finalmente, la salida de este algoritmo
se dene como la devolucin de valores exclusivamente
positivos si hay ms ceros que unos en la secuencia y, en
cualquier otro caso, devolver una mezcla de seales positivas y negativas.
5.3 Implementacin
En lenguaje C++:
int max(int c[], int n) { int i, m = c[0]; for (i = 1; i < n;
i++) if (c[i] > m) m = c[i]; return m; }
6 Vase tambin
6.1 Tipos de algoritmos segn su funcin
Algoritmo de ordenamiento
Algoritmo de bsqueda
6.4
6.2
Disciplinas relacionadas
Algoritmos voraces (greedy): seleccionan los elementos ms prometedores del conjunto de candidatos hasta encontrar una solucin. En la mayora de
los casos la solucin no es ptima.
Algoritmos paralelos: permiten la divisin de un
problema en subproblemas de forma que se puedan
ejecutar de forma simultnea en varios procesadores.
Algoritmos probabilsticos: algunos de los pasos de
este tipo de algoritmos estn en funcin de valores
pseudoaleatorios.
Algoritmos determinsticos: el comportamiento del
algoritmo es lineal: cada paso del algoritmo tiene
nicamente un paso sucesor y otro antecesor.
Algoritmos no determinsticos: el comportamiento
del algoritmo tiene forma de rbol y a cada paso del
algoritmo puede bifurcarse a cualquier nmero de
pasos inmediatamente posteriores, adems todas las
ramas se ejecutan simultneamente.
Divide y vencers: dividen el problema en subconjuntos disjuntos obteniendo una solucin de cada
uno de ellos para despus unirlas, logrando as la solucin al problema completo.
Metaheursticas: encuentran soluciones aproximadas (no ptimas) a problemas basndose en un conocimiento anterior (a veces llamado experiencia) de
los mismos.
Programacin dinmica: intenta resolver problemas
disminuyendo su coste computacional aumentando
el coste espacial.
Ramicacin y acotacin: se basa en la construccin
de las soluciones al problema mediante un rbol implcito que se recorre de forma controlada encontrando las mejores soluciones.
Vuelta atrs (backtracking): se construye el espacio de soluciones del problema en un rbol que se
examina completamente, almacenando las soluciones menos costosas.
6.3
Temas relacionados
7 Referencias
[1] Brassard, Gilles; Bratley, Paul (1997). Fundamentos
de Algoritmia. Madrid: PRENTICE HALL. ISBN 8489660-00-X.
[2] Real Academia Espaola. Diccionario de la lengua espaola "Conjunto ordenado y nito de operaciones que permite hallar la solucin de un problema."
[3] Cormen, Thomas; Leiserson, Charles; Rivest, Ronald;
Stein, Cliord (2009). Introduction to algorithms. Cambridge, Massachusetts: The MIT Press. ISBN 978-0-26253305-8.
[4] Ralph P. Grimaldi (1998). Propiedades de los nmeros
enteros: Induccin matemtica. Matemticas Discreta y
Combinatoria. Mxico: Addison Wesley Longman de Mxico. ISBN 968-444-324-2.
[5] Johnsonbaugh, Richard (2005). Introduccin a la teora
de nmeros. Matemticas Discretas. Mxico: PEARSON
EDUCACIN. ISBN 970-26-0637-3.
[6] Carl Reynolds & Paul Tymann (2008). Schaums Outline of Principles of Computer Science. McGraw-Hill. ISBN
978-0-07-146051-4.
[7] Gurevich, Yuri (2000). Sequential Abstract State Machines capture Sequential Algorithms. ACM Transactions
on Computational Logic 1 (1). ISSN 1529-3785, 77-111.
[8] John E. Savage (1987). The Complexity of Computing.
Krieger Publishing Co. ISBN 089874833X.
[9] Sipser, Michael (2005). Introduction to the Theory of
Computation (2 edicin). Course Technology. ISBN 9780534950972.
[10] Nachum Dershowitz & Yuri Gurevich (2008). A natural axiomatization of computability and proof of
Churchs Thesis. Bulletin of Symbolic Logic 14 (3). ISSN
10798986, 299-350.
[11] Kelley, Dean (1995). Teora de Autmatas y Lenguajes
Formales. Prentice Hall. ISBN 0-13-497777-7.
Bibliografa
Aho, A. The Design and Analysis of Computer Algorithms
Cormen, T. H., Leiserson, C. E., Rivest, R. L. y
Stein, C. Introduction to Algorithms (2nd ed.)
Brassard, G. y P. Bratley. Fundamentos de Algoritmia, (ISBN 848966000X)
Knuth, D. E. The Art of Computer Programming,
[quien fue tambin, el creador del TeX]
Mamber, U. Introduction to Algorithms. A Creative
Approach
Sedgewick, R. Algorithms in C (3r ed) (tambin existen versiones en C++ y Java)
Enlaces externos
Wikilibros
ENLACES EXTERNOS
10
10.1
10.2
Imgenes
Archivo:AlgoritmoRaiz.png Fuente: https://upload.wikimedia.org/wikipedia/commons/2/26/AlgoritmoRaiz.png Licencia: CC-BY-SA3.0 Colaboradores: Trabajo propio, hecho con OpenOce.org Draw Artista original: Kn
Archivo:EsquemticaAlgoritmo1.svg
Fuente:
https://upload.wikimedia.org/wikipedia/commons/a/a3/Esquem%C3%
A1ticaAlgoritmo1.svg Licencia: GFDL Colaboradores: Trabajo propio Artista original: Kn
Archivo:LampFlowchart-es.svg Fuente: https://upload.wikimedia.org/wikipedia/commons/b/bd/LampFlowchart-es.svg Licencia: CC
BY-SA 3.0 Colaboradores:
LampFlowchart.svg Artista original: LampFlowchart.svg: svg by Booyabazooka
Archivo:Wikibooks-logo.svg Fuente: https://upload.wikimedia.org/wikipedia/commons/f/fa/Wikibooks-logo.svg Licencia: CC BY-SA
3.0 Colaboradores: Trabajo propio Artista original: User:Bastique, User:Ramac et al.
Archivo:Wiktionary-logo-es.png Fuente: https://upload.wikimedia.org/wikipedia/commons/0/06/Wiktionary-logo-es.png Licencia: CC
BY-SA 3.0 Colaboradores: originally uploaded there by author, self-made by author Artista original: es:Usuario:Pybalo
10.3