You are on page 1of 3

Universidad Nacional del Santa Facultad de Ingeniera Escuela Acadmico Profesional de Ingeniera de Sistemas e Informtica

1. ALGORTIMOS Qu es un algoritmo? Es la secuencia de pasos (mtodo) que nos permite resolver un problema determinado Adems debe cumplir estas condiciones: Finitud: el algoritmo debe acabar tras un nmero finito de pasos. Es ms, es casi fundamental que sea en un nmero razonable de pasos. Definibilidad: el algoritmo debe definirse de forma prec isa para cada paso, es decir, hay que evitar toda ambigedad al definir cada paso. Puesto que el lenguaje humano es impreciso, los algoritmos se expresan mediante un lenguaje formal, ya sea matemtico o de programacin para un computador. Entrada: el algoritmo tendr cero o ms entradas, es decir, cantidades dadas antes de empezar el algoritmo. Estas cantidades pertenecen adems a conjuntos especificados de objetos. Por ejemplo, pueden ser cadenas de caracteres, enteros, naturales, fraccionarios, etc. Se trata siempre de cantidades representativas del mundo real expresadas de tal forma que sean aptas para su interpretacin por el computador. Salida: el algoritmo tiene una o ms salidas, en relacin con las entradas. Efectividad: se entiende por esto que una persona sea capaz de realizar el algoritmo de modo exacto y sin ayuda de una mquina en un lapso de tiempo finito. A menudo los algoritmos requieren una organizacin bastante compleja de los datos, y es por tanto necesario un estudio previo de las estructuras de datos fundamentales. Dichas estructuras pueden implementarse de diferentes maneras, y es ms, existen algoritmos para implementar dichas estructuras. El uso de estructuras de datos adecuadas pueden hacer trivial el diseo de un algoritmo, o un algoritmo muy complejo puede usar estructuras de datos muy simples. Uno de los algoritmos ms antiguos conocidos es el algoritmo del matemtico griego Euclides. El trmino algoritmo proviene del matemtico Mohammed ibn Musa al-Khowarizmi, matemtico Persa (actual Irn), que vivi aproximadamente entre los aos 780 y 850 d.C. (Siglo IX) El describi la realizacin de operaciones elementales en el sistema de numeracin decimal. De al-Khwarizmi se obtuvo la derivacin algoritmo. Clasificacin de algoritmos Algoritmo determinista: en cada paso del algoritmo se determina de forma nica el siguiente paso. Algoritmo no determinista: deben decidir en cada paso de la ejecucin entre varias alternativas y agotarlas todas antes de encontrar la solucin. Todo algoritmo tiene una serie de caractersticas, entre otras que requiere una serie de recursos, algo que es fundamental considerar a la hora de implementarlos en una mquina. Estos recursos son principalmente: El tiempo: perodo transcurrido entre el inicio y la finalizacin del algoritmo. La memoria: la cantidad (la medida vara segn la mquina) que necesita el algoritmo para su ejecucin. Obviamente, la capacidad y el diseo de la mquina pueden afectar al diseo del algoritmo. En general, la mayora de los problemas tienen un parmetro de entrada que es el nmero de datos que hay que tratar, esto es: N. La cantidad de recursos del algoritmo es tratada como una funcin de N. De esta manera puede establecerse un tiempo de ejecucin del algoritmo que suele ser proporcional a una de las siguientes funciones:

Algoritmos y Estructuras de Datos 2006-2

Ing. Hugo Caselli Gismondi

Universidad Nacional del Santa Facultad de Ingeniera Escuela Acadmico Profesional de Ingeniera de Sistemas e Informtica

Tiempo de ejecucin constante. Significa que la mayora de las instrucciones se ejecutan una vez o muy pocas. N: Tiempo de ejecucin lineal. Un caso en el que N valga 40, tardar el doble que otro en que N valga 20. U ejemplo sera un algoritmo que lee N nmeros n enteros y devuelve la media aritmtica. N2: Tiempo de ejecucin cuadrtico. Suele ser habitual cuando se tratan pares de elementos de datos, como por ejemplo un bucle anidado doble. Si N se duplica, el tiempo de ejecucin aumenta cuatro veces. El peor caso de entrada del algoritmo Quick Sort se ejecuta en este tiempo. logN: Tiempo de ejecucin logartmico. Se puede considerar como una gran constante. La base del logaritmo (en informtica la ms comn es la base 2) cambia la constante, pero no demasiado. El programa es ms lento cuanto ms crezca N, pero es inapreciable, pues logN no se duplica hasta que N llegue a N2. NlogN: El tiempo de ejecucin es NlogN. Es comn encontrarlo en algoritmos como Quick Sort y otros del estilo divide y vencers. Si N se duplica, el tiempo de ejecucin es ligeramente mayor del doble. N3: Tiempo de ejecucin cbico. Como ejemplo se puede dar el de un bucle anidado triple. Si N se duplica, el tiempo de ejecucin se multiplica por ocho. 2N: Tiempo de ejecucin exponencial. No suelen ser muy tiles en la prctica por el elevadsimo tiempo de ejecucin. El problema de la mochila resuelto por un algoritmo de fuerza bruta -simple vuelta atrs- es un ejemplo. Si N se duplica, el tiempo de ejecucin se eleva al cuadrado. Algoritmos polinomiales: aquellos que son proporcionales a Nk . Son en general factibles. Algoritmos exponenciales: aquellos que son proporcionales a kN . En general son infactibles salvo un tamao de entrada muy reducido. Notacin O-grande En general, el tiempo de ejecucin es proporcional, esto es, multiplica por una constante a alguno de los tiempos de ejecucin anteriormente propuestos, adems de la suma de algunos trminos ms pequeos. As, un algoritmo cuyo tiempo de 2 ejecucin sea T = 3N2 + 6N se puede considerar proporcional a N . En este caso 2 2 se dira que el algoritmo es del orden de N , y se escribe O(N ) Los grafos definidos por matriz de adyacencia ocupan un espacio O(N2), siendo N el nmero de vrtices de ste. La notacin O-grande ignora los factores constantes, es decir, ignora si se hace una mejor o peor implementacin del algoritmo, adems de ser independiente de los datos de entrada del algoritmo. Es decir, la utilidad de aplicar esta notacin a un algoritmo es encontrar un lmite superior del tiempo de ejecucin, es decir, el peor caso. A veces ocurre que no hay que prestar demasiada atencin a esto. Conviene diferenciar entre el peor caso y el esperado. Por ejemplo, el tiempo de ejecucin del algoritmo Quick Sort es de O(N2). Sin embargo, en la prctica este caso no se da casi nunca y la mayora de los casos son proporcionales a NlogN. Es por ello que se utiliza esta ltima expresin para este mtodo de ordenacin. Una definicin rigurosa de esta notacin es la siguiente: Una funcin g(N) pertenece a O(f(N)) si y slo si existen las constantes c 0 y N0 tales que: |g(N)| <= |c 0f(N)| , para todo N >= N0.
Algoritmos y Estructuras de Datos 2006-2 Ing. Hugo Caselli Gismondi

Universidad Nacional del Santa Facultad de Ingeniera Escuela Acadmico Profesional de Ingeniera de Sistemas e Informtica

Clasificacin de problemas Los problemas matemticos se pueden dividir en primera instancia en dos grupos: Problemas indecidibles: aquellos que no se pueden resolver mediante un algoritmo. Problemas decidibles: aquellos que cuentan al menos con un algoritmo para su cmputo. Sin embargo, que un problema sea decidible no implica que se pueda encontrar su solucin, pues muchos problemas que disponen de algoritmos para su resolucin son inabordables para un computador por el elevado nmero de operaciones que hay que realizar para resolverlos. Esto permite separar los problemas decidibles en dos: Intratables: aquellos para los que no es factible obtener su solucin. Tratables: aquellos para los que existe al menos un algoritmo capaz de resolverlo en un tiempo razonable. Los problemas pueden clasificarse tambin atendiendo a su complejidad. Aquellos problemas para los que se conoce un algoritmo polinmico que los resuelve se denominan clase P. Los algoritmos que los resuelven son deterministas. Para otros problemas, sus mejores algoritmos conocidos son no deterministas. Esta clase de problemas se denomina clase NP. Por tanto, los problemas de la clase P son un subconjunto de los de la clase NP, pues slo cuentan con una alternativa en cada paso. 2. ESTRUCTURAS DE DATOS Es una coleccin de datos que pueden ser caracterizados por su organizacin y las operaciones que se definen de ella. Lo que se pretende con las estructuras de datos es facilitar un esquema lgico para manipular los datos en funcin del problema que haya que tratar y el algoritmo para resolverlo. En algunos casos la dificultad para resolver un problema radica en escoger la estructura de datos adecuada. Y, en general, la eleccin del algoritmo y de las estructuras de datos que manipular estar muy relacionada. Segn su comportamiento durante la ejecucin del programa distinguimos estructuras de datos: Estticas: su tamao en memoria es fijo. Ejemplo: arrays, conjuntos, cadenas. Dinmicas: su tamao en memoria es variable. Ejemplo: listas (Pilas, colas), listas enlazadas con punteros, rboles, grafos, etc. A su vez este tipo de estructura se subdivide en Lineales.- son aquellas estructuras donde los datos se almacenan en zonas contiguas (sucesivas o adyacentes), una detrs de otras. Ejemplo: Listas enlazadas, Pilas, Colas. No lineales.- Aqu cada elemento puede tener diferentes siguientes elementos, se introduce el concepto de bifurcacin, ya no hay linealidad. Ejemplo: rboles, grafos. Las estructuras de datos que trataremos aqu son los arrays, las pilas y las colas, los rboles, los grafos y algunas variantes de estas estructuras. 3. TIPOS ABSTRACTOS DE DATOS a. Abstraccin La abstraccin es la separacin de las propiedades esenciales de aquellas que no lo son. Para resolver un problema real usualmente identificamos las caractersticas ms relevantes del problema y a partir de ellas construimos una abstraccin -un modelo- del problema, que sea manejable y nos permita obtener una solucin. En el contexto del diseo de programas tambin podemos utilizar la abstraccin. Esto significa especificar la funcionalidad del programa en

Algoritmos y Estructuras de Datos 2006-2

Ing. Hugo Caselli Gismondi

You might also like