Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Ir a la navegaci�n
Ir a la b�squeda
�ndice
1
Definici�n
2
Medios de expresi�n de un algoritmo
2.1
Diagrama de flujo
2.2
Pseudoc�digo
2.3
Sistemas formales
2.4
Implementaci�n
2.5
Variables
2.6
Estructuras secuenciales
3
Algoritmos como funciones
4
An�lisis de algoritmos
5
Ejemplo de algoritmo
5.1
Descripci�n de alto nivel
5.2
Descripci�n formal
5.3
Implementaci�n
6
V�ase tambi�n
6.1
Tipos de algoritmos seg�n su funci�n
6.2
T�cnicas de dise�o de algoritmos
6.3
Temas relacionados
6.4
Disciplinas relacionadas
7
Referencias
8
Bibliograf�a
9
Enlaces externos
Definici�n[editar]
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 c�lculo o un problema abstracto, es decir, que un n�mero finito de pasos
convierten los datos de un problema (entrada) en una soluci�n (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 versi�n modificada de la
criba de Erat�stenes que nunca termine de calcular n�meros primos no deja de ser un
algoritmo.7?
A lo largo de la historia varios autores han tratado de definir formalmente a los
algoritmos utilizando modelos matem�ticos. Esto fue realizado por Alonzo Church en
1936 con el concepto de "calculabilidad efectiva" basada en su c�lculo lambda y por
Alan Turing bas�ndose en la m�quina de Turing. Los dos enfoques son equivalentes,
en el sentido en que se pueden resolver exactamente los mismos problemas con ambos
enfoques.8?9? Sin embargo, estos modelos est�n sujetos a un tipo particular de
datos como son n�meros, s�mbolos o gr�ficas mientras que, en general, los
algoritmos funcionan sobre una vasta cantidad de estructuras de datos.3?1? En
general, la parte com�n en todas las definiciones se puede resumir en las
siguientes tres propiedades siempre y cuando no consideremos algoritmos
paralelos:7?
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 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.10? 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):10?
Aritmetizabilidad. Solamente operaciones innegablemente calculables est�n
disponibles en el paso inicial.
Medios de expresi�n de un algoritmo[editar]
Los algoritmos pueden ser expresados de muchas maneras, incluyendo al lenguaje
natural, pseudoc�digo, diagramas de flujo y 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[editar]
Ejemplo:
...
i:=1;
read(n);
while i < n do begin
(* cuerpo del bucle *)
i := i + 1
end;
...
Estructuras secuenciales[editar]
La estructura secuencial es aquella en la que una acci�n sigue a otra en secuencia.
Las operaciones se suceden de tal modo que la salida de una es la entrada de la
siguiente y as� sucesivamente hasta el fin del proceso. La asignaci�n de esto
consiste, en el paso de valores o resultados a una zona de la memoria. Dicha zona
ser� reconocida con el nombre de la variable que recibe el valor. La asignaci�n se
puede clasificar de la siguiente forma:
Simples: Consiste en pasar un valor constante a una variable (a ? 15)
Contador: Consiste en usarla como un verificador del n�mero de veces que se realiza
un proceso (a ? a + 1)
Acumulador: Consiste en usarla como un sumador en un proceso (a ? a + b)
De trabajo: Donde puede recibir el resultado de una operaci�n matem�tica que
involucre muchas variables (a ? c + b*1/2).
Un ejemplo de estructura secuencial, como obtener el �rea de un tri�ngulo:
Inicio
...
float b, h, a;
printf("Diga la base");
scanf("%f", &b);
printf("Diga la altura");
scanf("%f", &h);
a = (b*h)/2;
printf("El �rea del tri�ngulo es %f", a)
...
Fin
Algoritmos como funciones[editar]
Art�culo principal: Teor�a de la computabilidad
para
i {\displaystyle i}
?
1 {\displaystyle 1}
hasta
n {\displaystyle n}
hacer
si
c i > m {\displaystyle c_{i}>m}
entonces
m {\displaystyle m}
?
c i {\displaystyle c_{i}}
devolver
m {\displaystyle m}
Sobre la notaci�n:
"?" representa una asignaci�n:
m {\displaystyle m}
?
x {\displaystyle x}
significa que la variable
m {\displaystyle m}
toma el valor de
x {\displaystyle x}
;
"devolver" termina el algoritmo y devuelve el valor a su derecha (en este caso, el
m�ximo de
C {\displaystyle C}
).
Implementaci�n[editar]
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;
}
V�ase tambi�n[editar]
Tipos de algoritmos seg�n su funci�n[editar]
Algoritmo de ordenamiento
Algoritmo de b�squeda
T�cnicas de dise�o de algoritmos[editar]
Algoritmos voraces (greedy): seleccionan los elementos m�s prometedores del
conjunto de candidatos hasta encontrar una soluci�n. En la mayor�a de los casos la
soluci�n no es �ptima.
Algoritmos paralelos: permiten la divisi�n de un problema en subproblemas de forma
que se puedan ejecutar de forma simult�nea en varios procesadores.
Algoritmos probabil�sticos: algunos de los pasos de este tipo de algoritmos est�n
en funci�n de valores pseudoaleatorios.
Algoritmos determin�sticos: el comportamiento del algoritmo es lineal: cada paso
del algoritmo tiene �nicamente un paso sucesor y otro antecesor.
Algoritmos no determin�sticos: el comportamiento del algoritmo tiene forma de �rbol
y a cada paso del algoritmo puede bifurcarse a cualquier n�mero de pasos
inmediatamente posteriores, adem�s todas las ramas se ejecutan simult�neamente.
Divide y vencer�s: dividen el problema en subconjuntos disjuntos obteniendo una
soluci�n de cada uno de ellos para despu�s unirlas, logrando as� la soluci�n al
problema completo.
Metaheur�sticas: encuentran soluciones aproximadas (no �ptimas) a problemas
bas�ndose en un conocimiento anterior (a veces llamado experiencia) de los mismos.
Programaci�n din�mica: intenta resolver problemas disminuyendo su coste
computacional aumentando el coste espacial.
Ramificaci�n y acotaci�n: se basa en la construcci�n de las soluciones al problema
mediante un �rbol impl�cito que se recorre de forma controlada encontrando las
mejores soluciones.
Vuelta atr�s (backtracking): se construye el espacio de soluciones del problema en
un �rbol que se examina completamente, almacenando las soluciones menos costosas.
Temas relacionados[editar]
Cota inferior asint�tica
Cota ajustada asint�tica
Complejidad computacional
Diagramas de flujo
Diagrama Nassi-Shneiderman
M�quina de Turing
Disciplinas relacionadas[editar]
Ciencias de la Computaci�n
An�lisis de algoritmos
Complejidad computacional
Inform�tica
Inteligencia artificial
Investigaci�n operativa
Matem�ticas
Programaci�n
Referencias[editar]
?
Saltar a:
a b c d e Brassard, Gilles; Bratley, Paul (1997). Fundamentos de Algoritmia.
Madrid: PRENTICE HALL. ISBN 84-89660-00-X.
?
Saltar a:
a b Real Academia Espa�ola. Diccionario de la lengua espa�ola "Conjunto ordenado y
finito de operaciones que permite hallar la soluci�n de un problema."
?
Saltar a:
a b Cormen, Thomas; Leiserson, Charles; Rivest, Ronald; Stein, Clifford (2009).
Introduction to algorithms. Cambridge, Massachusetts: The MIT Press. ISBN 978-0-
262-53305-8.
? Ralph P. Grimaldi (1998). �Propiedades de los n�meros enteros: Inducci�n
matem�tica�. Matem�ticas Discreta y Combinatoria. M�xico: Addison Wesley Longman de
M�xico. ISBN 968-444-324-2.
? Johnsonbaugh, Richard (2005). �Introducci�n a la teor�a de n�meros�. Matem�ticas
Discretas. M�xico: PEARSON EDUCACI�N. ISBN 970-26-0637-3.
? Carl Reynolds & Paul Tymann (2008). Schaum's Outline of Principles of Computer
Science. McGraw-Hill. ISBN 978-0-07-146051-4.
?
Saltar a:
a b Gurevich, Yuri (2000). �Sequential Abstract State Machines capture Sequential
Algorithms�. ACM Transactions on Computational Logic 1 (1): 77-111. ISSN 1529-3785.
? John E. Savage (1987). The Complexity of Computing. Krieger Publishing Co. ISBN
089874833X.
?
Saltar a:
a b Sipser, Michael (2005). Introduction to the Theory of Computation (2 edici�n).
Course Technology. ISBN 978-0534950972. Archivado desde el original el 15 de junio
de 2006.
?
Saltar a:
a b Nachum Dershowitz & Yuri Gurevich (2008). �A natural axiomatization of
computability and proof of Church's Thesis�. Bulletin of Symbolic Logic 14 (3):
299-350. ISSN 1079-8986.
? Kelley, Dean (1995). Teor�a de Aut�matas y Lenguajes Formales. Prentice Hall.
ISBN 0-13-497777-7. Archivado desde el original el 14 de noviembre de 2012.
Consultado el 23 de noviembre de 2009.
Bibliograf�a[editar]
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 tambi�n, el creador del
TeX]
Mamber, U. Introduction to Algorithms. A Creative Approach
Sedgewick, R. Algorithms in C (3r ed) (tambi�n existen versiones en C++ y Java)