Вы находитесь на странице: 1из 8

Algoritmos y Estructuras de Datos

Unidad I Introduccin a los Algoritmos y Estructuras de Datos

UNIDAD 1 Introduccin a los Algoritmos y Estructuras de Datos 1.1 Definicin de Algoritmo Algoritmo se define como un conjunto de instrucciones que la computadora debe seguir para resolver un problema. La palabra algoritmo se deriva de la traduccin al latn del nombre Muhammad Musa Alkhawarizmi, un matemtico y astrnomo rabe que en el siglo IX escribi un tratado sobre manipulacin de nmeros y ecuaciones. 1.1.1 Caractersticas de los Algoritmos Son independientes del lenguaje de programacina utilizar. Sencillo, los pasos deben ser claros y bien definidos. Precisos, indican claramente el orden de realizacin paso a paso. Definidos, cada vez que se ejecutan con las mismas entradas se obtiene el mismo resultado. Finitos, tienen un nmero de pasos finito.

1.2 Modelo de Cascada para el desarrollo de Sistemas La resolucin de un problema con una computadora conduce a la escritura de un programa y a su ejecucin en la misma. Aunque el proceso de disear programas es un proceso creativo, los pasos a seguir se establecen en varios modelos para el desarrollo de sistemas uno de ellos es el modelo de cascada. Este se define como el proceso que se sigue para disear, construir, entregar y hacer 1 evolucionar el software, desde la concepcin de una idea hasta la entrega y el retiro del sistema . Anlisis del Problema Paso 1: Anlisis del problema. Esta fase requiere una clara definicin, donde se contemple exactamente lo que debe hacer el programa y el resultado o solucin deseada.. Para poder definir bien un problema es conveniente responder a las preguntas: Qu cantidad y tipo de datos de entrada se requieren?, Qu cantidad y tipo de salidas se desean? Qu mtodo(s) produce(n) la salida deseada? Paso 2. Diseo del Algoritmo. En esta etapa se define cmo hace el programa la tarea solicitada, es decir, se define el algoritmo. Paso 3. Codificacin. Se traduce el algoritmo en un lenguaje de programacin apropiado. Paso 4. Compilacin y Ejecucin. El proceso de compilacin consiste en pasar el programa de cdigo fuente a un cdigo ejecutable. La ejecucin es correr el programa generado en el proceso de compilacin. Paso 5. Depuracin. Se ejecuta el programa con datos de prueba para detectar y corregir errores en tiempo de ejecucin. Paso 6. Documentacin. Interna: Comentarios dentro del programa. Externa: Manuales del programador, del usuario, de instalacin, etc. Paso 7. Entrega y Mantenimiento
1 http://www.biblioteca.co.cr/pdf/unidad12-4.pdf

Diseo del algoritmo

Codificacin

Compilacin y Ejecucin

Depuracin

Documentacin

Entrega y Mantenimiento

Ing. Alma Leticia Palacios Guerrero

pg. 1 de 8

Algoritmos y Estructuras de Datos

Unidad I Introduccin a los Algoritmos y Estructuras de Datos

1.3 Estrategias para la solucin de problemas Cuando se trata de resolver un problema, pueden presentarse varias estrategias para solucionarlo . Las tcnicas o estrategias ms comunes son: Estrategias de solucin directa Algoritmos de Solucin Forzada: Un algoritmo de este tipo resuelve el problema de la forma mas simple, obvia o directa. Como resultado es posible que el algoritmo haga mas trabajo que una solucim ms sofisticada. Por otra parte, las soluciones forzadas son ms fciles de implementar y por eso algunas veces resultan ms eficientes. Algoritmos Codiciosos: Se caracterizan las decisiones que toman se basan en que la busqueda del menor costo en esa parte del problema, pero no toman en cuenta el resto de la solucin y en ocasiones no generan soluciones ptimas.
2

Estrategias de Vuelta Atrs Un algoritmo de vuelta atrs, sistemticamente considera todos los posibles resultados para cada decisin. En este sentido, los algoritmos vuelta atrs son como las soluciones forzadas. Sin embargo, los algoritmos vuelta atrs se distinguen por la forma en que exploran todas las posibles soluciones; en ocasiones estos algoritmos encuentrar que una bsqueda exhaustiva es innecesaria y por lo tanto pueden tener una mejor ejecucin.

Estrategias arriba-abajo Algoritmos divide y vencers. Para resolver un problema, este se subdivide en uno o ms subproblemas cada uno de los cuales es similar al problema dado. Cada uno de los subproblemas se soluciona en forma independiente y al final las soluciones de todos los subproblemas se combinan para obtener la solucin general del problema completo.

Estrategias abajo-arriba Programacin Dinmica: Para resolver un problema se resuelven una serie de subproblemas. La serie de subproblemas es planeada cuidadosamente de tal forma que cada solucin subsecuente se obtiene mediante la combinacin de las soluciones de uno o ms subproblemas que ya han sido resueltos. Todos las soluciones intermedias se mantienen en una tabla para evitar la duplicidad de esfuerzos.

Estrategias Probabilsticas: En los algoritmos probabilsticos existe un elemento de aleatoridad en la forma en que el algoritmo soluciona el problema, se dice que estos mtodos son el ltimo recurso debido a que se usan cuando no hay otra tcnica conocida que se pueda aplicar. Los mtodos probabilsticos se usan cuando el espacio de soluciones es tan grande que una bsqueda exhaustiva no seria factible.

Ing. Alma Leticia Palacios Guerrero

pg. 2 de 8

Algoritmos y Estructuras de Datos

Unidad I Introduccin a los Algoritmos y Estructuras de Datos

1.4 Definicin de Estructura de Datos. En el desarrollo de programas, existe una fase previa a la escritura del programa, esta es el diseo del algoritmo que conducir a la solucin del problema, en esta fase tambin deber considerarse la estructura de datos que se va a utilizar. El trmino estructura de datos se refiere a la forma en que la informacin esta organizada dentro de un programa. La correcta organizacin de datos puede conducir a algoritmos ms simples y ms eficientes. Estructura de datos: Conjunto de variables agrupadas y organizadas de cierta forma para representar un comportamiento. 1.4.1 Clasificacin de las estructuras de datos Las estructuras de datos segn su tamao en memoria, se clasifican en: Estructuras de datos estticas: Son aquellas cuyo tamao en memoria es fijo, por ejemplo, los arreglos. Estructuras de datos dinmicas: Son las estructuras que permiten variar su tamao en memoria de acuerdo a las necesidades del ambiente, por ejemplo, listas enlazadas. 1.3.1 Abstraccin Desde el desarrollo de la informtica los programadores han luchado con el problema de la complejidad inherente al software, una de las herramientas utilizadas para resolverlo es la abstraccin. Esta se puede definir como la consideracin aislada de las cualidades esenciales de un objeto. En otro trminos la abstraccin es la capacidad para encapsular y aislar la informacin del diseo y ejecucin. 1.4. Tipo Abstracto de Datos (TAD) Un tipo abstracto de datos es un modelo (estructura) con un nmero de operaciones que afectan a ese modelo. Un TAD es un tipo de datos definido por el programador que se puede manipular de un modo similar a los tipos de datos definidos por el sistema.

1.4.1 Desarrollo de la Abstraccin Al inicio de la informtica los programadores introducan la informacin y datos a travs de interruptores, los mnemnicos eran abstracciones diseadas para ayudar a recordar secuencias de bits, luego, esto mnemnicos se agruparon en macroinstrucciones pasando as al siguiente nivel de abstraccin: los lenguajes de alto nivel. Los inicios de la abstraccin se dieron al surgir lenguajes como FORTRAN, COBOL y ALGOL60, los cuales suministraban tipos de datos simples; sin embargo, estos datos no siempre se ajustaban al tipo requerido para resolver el problema y no podian sufrir cambios. Posteriormente surgen lenguajes como Pascal, Simula-67 y ALGOL68 en los que existian ms tipos de datos y que permitian al programador crear construcciones (arreglos, registros). Con el tiempo aparecieron otros lenguajes de programacin con mayor nivel de abstraccin que permitieron al programador la creacin de estructuras de datos. Hacia 1974, John Guttag propone el concepto de tipo abstracto de datos, el cual constituye el mximo nivel de abstraccin.

Ing. Alma Leticia Palacios Guerrero

pg. 3 de 8

Algoritmos y Estructuras de Datos

Unidad I Introduccin a los Algoritmos y Estructuras de Datos

Niveles de Abstraccin Tipos Abstractos de Datos


Nivel 3:Tipos de Datos creados por el programador para resolver un problema especfico

Estructuras de Datos

Tipos de Datos virtuales (en software)

Nivel 1 Tipos de datos proporcionados por un lenguaje de alto nivel.

Tipos de Datos Primitivos

Nivel 0: Los datos tal como son representados en la computadora (bits)

1.4.1 Diferencia entre Estructura de Datos y Tipo Abstracto de Datos. En los lenguajes como Pascal y C, es posible crear una estructura y funciones para realizar operaciones sobre dicha estructura, pero no es posible asociar la estructura y las funciones como una unidad, o sea no es posible asociarlos como un TAD. Dependiendo del lenguaje en que el TAD se est implementando recibe un nombre diferente, por ejemplo, en Java y C++ a un TAD se le conoce como clase mientras que en Pascal es una unidad y en ADA es un paquete.

1.4.2. Ventajas de los TAD Mejora la representacin de la realidad. Mejora la robustez del sistema ya que permite comprobar tipos para evitar errores de tipo en tiempo de ejecucin. El conocimiento de los objetos permite optimizacin de tiempo de compilacin. Separa la implementacin de la especificacin, permitiendo as modificar y mejorar la implementacin sin afectar al interfaz pblico del tipo abstracto de datos.

1.5 Aplicaciones de los algoritmos y estructuras de datos En una primera impresin, podria considerarse que los algoritmos y estructuras de datos no tienen una aplicacin prctica. Sin embargo, su conocimiento y correcta aplicacin permiten desarrollar programas con mejor aprovechamiento de los recursos del sistema, ms rpidos, eficientes, robustos y con una mayor tolerancia a errores. 1.5.1 Aplicaciones de las Estructuras de datos

Los rboles son una estructura de datos fundamental en computacin. Por ejemplo, casi todos los sistemas operativos almacenan los archivos en estructuras que son rboles. Una de las aplicaciones ms comunes de los grafos es su implementacin para encontrar la distancia ms corta entre dos puntos; en la vida diaria los encontramos aplicados en rutas ereas, semforos, redes de computadoras, rompecabezas, inteligencia artificial, etc. Las listas se aplican en la representacin de polinomios, resolucin de colisiones (hash).

Ing. Alma Leticia Palacios Guerrero

pg. 4 de 8

Algoritmos y Estructuras de Datos

Unidad I Introduccin a los Algoritmos y Estructuras de Datos

Las pilas, este tipo de estructura se emplea en forma interna en la computadora para almacenar el estado de los registros cuando se ejecuta un brinco en la ejecucin de un programa, tambin se usan en los compiladores para implementar el analizador sintctico. Las Colas es la estructura de datos que se usa en algunos sistemas operativos, por ejemplo, UNIX para la administracin de procesos y trabajos de impresin.

1.5.2

Aplicaciones de los Algoritmos.

Los algoritmos tienen innumerables aplicaciones, entre estas podemos mencionar algoritmos para la ruta ms corta entre dos estaciones del metro, algoritmos para procesamiento de cadenas en analizadores lxicos, algoritmos criptogrficos, algoritmos para compresin de datos, algoritmo genticos, etc. 1.6 Importancia de la investigacin de algoritmos De acuerdo a John Bentley, de 1945 a 1985 la velocidad del hardware de supercmputo se increment 5 en un factor de 6x10 mientras que las mejoras de los algoritmos para problemas, por ejemplo los 4 5 clculos en tres dimensiones han sido reducido en un factor de N /60. Para N=64 fue cerca de 3x10 . De esta forma vemos que las mejoras algortmicas han tenido tanto impacto en los clculos cientficos como los avances logrados en hardware. En el perodo 1980-1994 la computadora aumenta su velocidad en un orden de 1.5 cada dcada, en cambio, los avances logrados en el campo de los algoritmos, permiten la solucin de problemas de tamao 200 y hasta 820 veces mayor, respectivamente el equivalente a 15 y 20 aos de avance en el hardware. Desde el punto de vista de la duracin de su impacto, los nuevos microprocesadores se vuelven obsoletos en 2 a 4 aos, mientras que los avances en los algoritmos permanecen por dcadas.

1.7 Comparacin entre velocidad de ejecucin y eficiencia del algoritmo Suponga que para un cierto problema se han desarrollado los algoritmos A y B, cuyo tiempo de ejecucin esta dado por las siguientes funciones: TA(n)=100*n 2 TB=2*n

Cul es ms eficiente?

Si n<100 B, es ms eficiente Si n>=50 A es mucho ms eficiente. n=10 TA(n)=100*n 1000 TB(n)=2*n 2000 Factor B/A 0.2 n=50 5000 5000 1 n=100 10000 20000 2 n=1000 100 000 500 000 5

Tabla 1.1

Ing. Alma Leticia Palacios Guerrero

pg. 5 de 8

Algoritmos y Estructuras de Datos

Unidad I Introduccin a los Algoritmos y Estructuras de Datos

Las siguientes tablas demuestran por qu es mejor tener un algoritmo eficiente que una mquina veloz. Suponga que la primera columna son funciones del tiempo de ejecucin de 4 algoritmos diferentes, ejecutados todos en la misma mquina. La segunda y tercer columna muestran la cantidad de elementos que cada algoritmo alcanzara a procesar en 1000 y 10000 unidades de tiempo.
Tiempo de Ejecucin T(n) n para 1000 n para 10000 Factor

unidades de tiempo unidades de tiempo

100n 5n
3 2

10 14.14213562 12.5992105 9.965784285


Tabla 1.2

100 44.72135955 27.14417617 13.28771238

10 3.16227766 2.15443469 1.333333333

n /2 2
n

En la siguiente tabla suponga que un algoritmo toma exactamente T(n) microsegundos para completar los algoritmos de la primera columna.
Tiempo de Ejecucin T(n) n=16 n=256

log2n n n 2
2 n

4s 16s 25.6s
Tabla 1.3

8s 256s 65.5ms
63

65.5ms 10 aos
n

La tabla 1.4 muestra el tiempo que tardara el algoritmo con tiempo de ejecucin T(n)=2 en una mquina con una velocidad de 0.001 para diferentes valores de n. N T(n)= 0.001*2 seg. 1 0.002 10 0.102 20 1048.576 30 1073741.824 35 34359738.368 40 1099511627.776
n

minutos 0.000 0.002 17.476 17895.697 572662.306 18325193.796


Tabla 1.4

horas 0.000 0.000 0.291 298.262 9544.372 305419.897

dias aos 0.000 0.000 0.000 0.000 0.012 0.000 12.428 0.034 397.682 1.090 12725.829 34.865

Ahora ejecutando el mismo algoritmo en una mquina ms rpida.


N T(n)= 0.00001*2n Seg minutos horas dias aos

1 10 20 30 42 43 44 45

0.000 0.010 10.486 10737.418 43980465.111 87960930.222 175921860.444 351843720.888

0.000 0.000 0.175 178.957 733007.752 1466015.504 2932031.007 5864062.015


Tabla 1.5

0.000 0.000 0.000 0.000 0.003 0.000 2.983 0.124 12216.796 509.033 24433.592 1018.066 48867.183 2036.133 97734.367 4072.265

0.000 0.000 0.000 0.000 1.395 2.789 5.578 11.157

Ing. Alma Leticia Palacios Guerrero

pg. 6 de 8

Algoritmos y Estructuras de Datos

Unidad I Introduccin a los Algoritmos y Estructuras de Datos

Finalmente si se cambia de algoritmo y se ejecuta en una mquina con una velocidad de 0.001.
T(n)= 0.001*n3 Seg. 1 10 20 30 40 50 60 70 80 90 100 0.001 1.000 8.000 27.000 64.000 125.000 216.000 343.000 512.000 729.000 1000.000

minutos 0.000 0.017 0.133 0.450 1.067 2.083 3.600 5.717 8.533 12.150 16.666 Tabla 1.6

horas 0.000 0.000 0.002 0.008 0.018 0.035 0.060 0.095 0.142 0.203 0.277

dias 0.000 0.000 0.000 0.000 0.001 0.001 0.003 0.004 0.006 0.008 0.011

Cray-1 Fortran1

Tandy Corporation2

3n3nanosegundos 19500000n nanosegundos

10 100 1000 2500 10000 1,000,000

3seg 3mseg 3 seg 50 seg 49 min 95 aos


Tabla 1.7

0.2 seg 2.0 seg 20 seg 50.0 seg 3.2 min 5.4 horas

1. Cray Research Inc. 2. Tandy Corporation.

Ing. Alma Leticia Palacios Guerrero

pg. 7 de 8

Algoritmos y Estructuras de Datos

Unidad I Introduccin a los Algoritmos y Estructuras de Datos

Referencias 1.- http://www.biblioteca.co.cr/pdf/unidad12-4.pdf 2.- http://www.brpreiss.com/books/opus5/html/page438.html#SECTION0015200000000000000000 Tabla 1.7 Tomada del libro Programming Pearls por Jon Bentley ed. 2000.

Ing. Alma Leticia Palacios Guerrero

pg. 8 de 8

Вам также может понравиться