Unidad 1 AED

8
Algoritmos y Estructuras de Datos Unidad I Introducción a los Algoritmos y Estructuras de Datos Ing. Alma Leticia Palacios Guerrero pág. 1 de 8 UNIDAD 1 Introducción a los Algoritmos y Estructuras de Datos 1.1 Definición 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 traducción al latín del nombre Muhammad Musa Al- khawarizmi, un matemático y astrónomo árabe que en el siglo IX escribió un tratado sobre manipulación de números y ecuaciones. 1.1.1 Características de los Algoritmos Son independientes del lenguaje de programacióna utilizar. Sencillo, los pasos deben ser claros y bien definidos. Precisos, indican claramente el orden de realización paso a paso. Definidos, cada vez que se ejecutan con las mismas entradas se obtiene el mismo resultado. Finitos, tienen un número de pasos finito. 1.2 Modelo de Cascada para el desarrollo de Sistemas La resolución de un problema con una computadora conduce a la escritura de un programa y a su ejecución en la misma. Aunque el proceso de diseñar 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 diseñar, construir, entregar y hacer evolucionar el software, desde la concepción de una idea hasta la entrega y el retiro del sistema 1 . Paso 1: Análisis del problema. Esta fase requiere una clara definición, donde se contemple exactamente lo que debe hacer el programa y el resultado o solución 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é método(s) produce(n) la salida deseada? Paso 2. Diseño del Algoritmo. En esta etapa se define cómo hace el programa la tarea solicitada, es decir, se define el algoritmo. Paso 3. Codificación. Se traduce el algoritmo en un lenguaje de programación apropiado. Paso 4. Compilación y Ejecución. El proceso de compilación consiste en pasar el programa de código fuente a un código ejecutable. La ejecución es “correr” el programa generado en el proceso de compilación. Paso 5. Depuración. Se ejecuta el programa con datos de prueba para detectar y corregir errores en tiempo de ejecución. Paso 6. Documentación. Interna: Comentarios dentro del programa. Externa: Manuales del programador, del usuario, de instalación, etc. Paso 7. Entrega y Mantenimiento 1 http://www.biblioteca.co.cr/pdf/unidad12-4.pdf Codificación Análisis del Problema Diseño del algoritmo Documentación Depuración Compilación y Ejecución Entrega y Mantenimiento

description

unidad_1__introduccion_a_los_algoritmos_y_estructura de datos. Documentos de la docente Leticia Palacios

Transcript of Unidad 1 AED

Page 1: Unidad 1 AED

Algoritmos y Estructuras de Datos Unidad I Introducción a los Algoritmos y Estructuras de Datos

Ing. Alma Leticia Palacios Guerrero pág. 1 de 8

UNIDAD 1 Introducción a los Algoritmos y Estructuras de Datos

1.1 Definición 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 traducción al latín del nombre Muhammad Musa Al-khawarizmi, un matemático y astrónomo árabe que en el siglo IX escribió un tratado sobre manipulación de números y ecuaciones. 1.1.1 Características de los Algoritmos

• Son independientes del lenguaje de programacióna utilizar.

• Sencillo, los pasos deben ser claros y bien definidos.

• Precisos, indican claramente el orden de realización paso a paso.

• Definidos, cada vez que se ejecutan con las mismas entradas se obtiene el mismo resultado.

• Finitos, tienen un número de pasos finito. 1.2 Modelo de Cascada para el desarrollo de Sistemas La resolución de un problema con una computadora conduce a la escritura de un programa y a su ejecución en la misma. Aunque el proceso de diseñar 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 diseñar, construir, entregar y hacer evolucionar el software, desde la concepción de una idea hasta la entrega y el retiro del sistema

1.

Paso 1: Análisis del problema. Esta fase requiere una clara definición, donde se contemple exactamente lo que debe hacer el programa y el resultado o solución 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é método(s) produce(n) la salida deseada? Paso 2. Diseño del Algoritmo. En esta etapa se define cómo hace el programa la tarea solicitada, es decir, se define el algoritmo. Paso 3. Codificación. Se traduce el algoritmo en un lenguaje de programación apropiado. Paso 4. Compilación y Ejecución. El proceso de compilación consiste en pasar el programa de código fuente a un código ejecutable. La ejecución es “correr” el programa generado en el proceso de compilación. Paso 5. Depuración. Se ejecuta el programa con datos de prueba para detectar y corregir errores en tiempo de ejecución. Paso 6. Documentación. Interna: Comentarios dentro del programa. Externa: Manuales del programador, del usuario, de instalación, etc. Paso 7. Entrega y Mantenimiento 1 http://www.biblioteca.co.cr/pdf/unidad12-4.pdf

Codificación

Análisis del Problema

Diseño del algoritmo

Documentación

Depuración

Compilación y Ejecución

Entrega y Mantenimiento

Page 2: Unidad 1 AED

Algoritmos y Estructuras de Datos Unidad I Introducción a los Algoritmos y Estructuras de Datos

Ing. Alma Leticia Palacios Guerrero pág. 2 de 8

1.3 Estrategias para la solución de problemas Cuando se trata de resolver un problema, pueden presentarse varias estrategias para solucionarlo

2. Las

técnicas o estrategias más comunes son: Estrategias de solución directa

• Algoritmos de Solución 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 solucióm más sofisticada. Por otra parte, las soluciones forzadas son más fáciles de implementar y por eso algunas veces resultan más 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 solución y en ocasiones no generan soluciones óptimas.

Estrategias de Vuelta Atrás

• Un algoritmo de vuelta atrás, sistemáticamente considera todos los posibles resultados para cada decisión. En este sentido, los algoritmos vuelta atrás son como las soluciones forzadas. Sin embargo, los algoritmos vuelta atrás se distinguen por la forma en que exploran todas las posibles soluciones; en ocasiones estos algoritmos encuentrar que una búsqueda exhaustiva es innecesaria y por lo tanto pueden tener una mejor ejecución.

Estrategias arriba-abajo

• Algoritmos divide y vencerás. Para resolver un problema, este se subdivide en uno o más 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 solución general del problema completo.

Estrategias abajo-arriba

• Programación Dinámica: Para resolver un problema se resuelven una serie de subproblemas. La serie de subproblemas es planeada cuidadosamente de tal forma que cada solución subsecuente se obtiene mediante la combinación de las soluciones de uno o más subproblemas que ya han sido resueltos. Todos las soluciones intermedias se mantienen en una tabla para evitar la duplicidad de esfuerzos.

Estrategias Probabilísticas:

• En los algoritmos probabilísticos existe un elemento de aleatoridad en la forma en que el algoritmo soluciona el problema, se dice que estos métodos son el último recurso debido a que se usan cuando no hay otra técnica conocida que se pueda aplicar. Los métodos probabilísticos se usan cuando el espacio de soluciones es tan grande que una búsqueda exhaustiva no seria factible.

Page 3: Unidad 1 AED

Algoritmos y Estructuras de Datos Unidad I Introducción a los Algoritmos y Estructuras de Datos

Ing. Alma Leticia Palacios Guerrero pág. 3 de 8

1.4 Definición de Estructura de Datos. En el desarrollo de programas, existe una fase previa a la escritura del programa, esta es el diseño del algoritmo que conducirá a la solución del problema, en esta fase también deberá considerarse la estructura de datos que se va a utilizar. El término estructura de datos se refiere a la forma en que la información esta organizada dentro de un programa. La correcta organización de datos puede conducir a algoritmos más simples y más eficientes. Estructura de datos: Conjunto de variables agrupadas y organizadas de cierta forma para representar un comportamiento. 1.4.1 Clasificación de las estructuras de datos Las estructuras de datos según su tamaño en memoria, se clasifican en: Estructuras de datos estáticas: Son aquellas cuyo tamaño en memoria es fijo, por ejemplo, los arreglos. Estructuras de datos dinámicas: Son las estructuras que permiten variar su tamaño en memoria de acuerdo a las necesidades del ambiente, por ejemplo, listas enlazadas. 1.3.1 Abstracción Desde el desarrollo de la informática los programadores han luchado con el problema de la complejidad inherente al software, una de las herramientas utilizadas para resolverlo es la abstracción. Esta se puede definir como la consideración aislada de las cualidades esenciales de un objeto. En otro términos la abstracción es la capacidad para encapsular y aislar la información del diseño y ejecución. 1.4. Tipo Abstracto de Datos (TAD) Un tipo abstracto de datos es un modelo (estructura) con un número 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 Abstracción Al inicio de la informática los programadores introducían la información y datos a través de interruptores, los mnemónicos eran abstracciones diseñadas para ayudar a recordar secuencias de bits, luego, esto mnemónicos se agruparon en macroinstrucciones pasando así al siguiente nivel de abstracción: los lenguajes de alto nivel. Los inicios de la abstracción 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 más tipos de datos y que permitian al programador crear construcciones (arreglos, registros). Con el tiempo aparecieron otros lenguajes de programación con mayor nivel de abstracción que permitieron al programador la creación de estructuras de datos. Hacia 1974, John Guttag propone el concepto de tipo abstracto de datos, el cual constituye el máximo nivel de abstracción.

Page 4: Unidad 1 AED

Algoritmos y Estructuras de Datos Unidad I Introducción a los Algoritmos y Estructuras de Datos

Ing. Alma Leticia Palacios Guerrero pág. 4 de 8

Niveles de Abstracción

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 representación de la realidad.

• Mejora la robustez del sistema ya que permite comprobar tipos para evitar errores de tipo en tiempo de ejecución.

• El conocimiento de los objetos permite optimización de tiempo de compilación.

• Separa la implementación de la especificación, permitiendo así modificar y mejorar la implementación sin afectar al interfaz público del tipo abstracto de datos.

1.5 Aplicaciones de los algoritmos y estructuras de datos En una primera impresión, podria considerarse que los algoritmos y estructuras de datos no tienen una aplicación práctica. Sin embargo, su conocimiento y correcta aplicación permiten desarrollar programas con mejor aprovechamiento de los recursos del sistema, más rápidos, 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 computación. Por ejemplo, casi todos los sistemas operativos almacenan los archivos en estructuras que son árboles. Una de las aplicaciones más comunes de los grafos es su implementación para encontrar la distancia más corta entre dos puntos; en la vida diaria los encontramos aplicados en rutas áereas, semáforos, redes de computadoras, rompecabezas, inteligencia artificial, etc. Las listas se aplican en la representación de polinomios, resolución de colisiones (hash).

Tipos Abstractos de Datos

Estructuras de Datos

Tipos de Datos virtuales (en software)

Tipos de Datos Primitivos

Nivel 3:Tipos de Datos creados por el programador para resolver un problema específico

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

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

Page 5: Unidad 1 AED

Algoritmos y Estructuras de Datos Unidad I Introducción a los Algoritmos y Estructuras de Datos

Ing. Alma Leticia Palacios Guerrero pág. 5 de 8

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 ejecución de un programa, también se usan en los compiladores para implementar el analizador sintáctico. Las Colas es la estructura de datos que se usa en algunos sistemas operativos, por ejemplo, UNIX para la administración de procesos y trabajos de impresión.

1.5.2 Aplicaciones de los Algoritmos.

Los algoritmos tienen innumerables aplicaciones, entre estas podemos mencionar algoritmos para la ruta más corta entre dos estaciones del metro, algoritmos para procesamiento de cadenas en analizadores léxicos, algoritmos criptográficos, algoritmos para compresión de datos, algoritmo genéticos, etc.

1.6 Importancia de la investigación de algoritmos De acuerdo a John Bentley, de 1945 a 1985 la velocidad del hardware de supercómputo se incrementó en un factor de 6x10

5 mientras que las mejoras de los algoritmos para problemas, por ejemplo los

cálculos en tres dimensiones han sido reducido en un factor de N4/60. Para N=64 fue cerca de 3x10

5. De

esta forma vemos que las mejoras algorítmicas han tenido tanto impacto en los cálculos científicos como los avances logrados en hardware. En el período 1980-1994 la computadora aumenta su velocidad en un orden de 1.5 cada década, en cambio, los avances logrados en el campo de los algoritmos, permiten la solución de problemas de tamaño 200 y hasta 820 veces mayor, respectivamente el equivalente a 15 y 20 años de avance en el hardware. Desde el punto de vista de la duración de su impacto, los nuevos microprocesadores se vuelven obsoletos en 2 a 4 años, mientras que los avances en los algoritmos permanecen por décadas. 1.7 Comparación entre velocidad de ejecución y eficiencia del algoritmo Suponga que para un cierto problema se han desarrollado los algoritmos A y B, cuyo tiempo de ejecución esta dado por las siguientes funciones: TA(n)=100*n TB=2*n

2 ¿Cuál es más eficiente?

Si n<100 B, es más eficiente Si n>=50 A es mucho más eficiente.

n=10 n=50 n=100 n=1000

TA(n)=100*n 1000 5000 10000 100 000

TB(n)=2*n² 2000 5000 20000 500 000

Factor B/A 0.2 1 2 5

Tabla 1.1

Page 6: Unidad 1 AED

Algoritmos y Estructuras de Datos Unidad I Introducción a los Algoritmos y Estructuras de Datos

Ing. Alma Leticia Palacios Guerrero pág. 6 de 8

Las siguientes tablas demuestran por qué es mejor tener un algoritmo eficiente que una máquina veloz. Suponga que la primera columna son funciones del tiempo de ejecución de 4 algoritmos diferentes, ejecutados todos en la misma máquina. La segunda y tercer columna muestran la cantidad de elementos que cada algoritmo alcanzaría a procesar en 1000 y 10000 unidades de tiempo.

Tiempo de Ejecución T(n) n para 1000 n para 10000 Factor

unidades de tiempo unidades de tiempo

100n 10 100 10

5n2 14.14213562 44.72135955 3.16227766

n3/2 12.5992105 27.14417617 2.15443469

2n 9.965784285 13.28771238 1.333333333

Tabla 1.2

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

Tiempo de Ejecución T(n) n=16 n=256

log2n 4µs 8µs

n 16µs 256µs

n2 25.6µs 65.5ms

2n 65.5ms 10

63 años

Tabla 1.3

La tabla 1.4 muestra el tiempo que tardaría el algoritmo con tiempo de ejecución T(n)=2

n en una máquina

con una velocidad de 0.001 para diferentes valores de n.

N T(n)= 0.001*2n seg. minutos horas dias años

1 0.002 0.000 0.000 0.000 0.000

10 0.102 0.002 0.000 0.000 0.000

20 1048.576 17.476 0.291 0.012 0.000

30 1073741.824 17895.697 298.262 12.428 0.034

35 34359738.368 572662.306 9544.372 397.682 1.090

40 1099511627.776 18325193.796 305419.897 12725.829 34.865 Tabla 1.4

Ahora ejecutando el mismo algoritmo en una máquina más rápida.

N T(n)= 0.00001*2n Seg minutos horas dias años

1 0.000 0.000 0.000 0.000 0.000

10 0.010 0.000 0.000 0.000 0.000

20 10.486 0.175 0.003 0.000 0.000

30 10737.418 178.957 2.983 0.124 0.000

42 43980465.111 733007.752 12216.796 509.033 1.395

43 87960930.222 1466015.504 24433.592 1018.066 2.789

44 175921860.444 2932031.007 48867.183 2036.133 5.578

45 351843720.888 5864062.015 97734.367 4072.265 11.157 Tabla 1.5

Page 7: Unidad 1 AED

Algoritmos y Estructuras de Datos Unidad I Introducción a los Algoritmos y Estructuras de Datos

Ing. Alma Leticia Palacios Guerrero pág. 7 de 8

Finalmente si se cambia de algoritmo y se ejecuta en una máquina con una velocidad de 0.001.

N T(n)= 0.001*n

3

Seg. minutos horas dias

1 0.001 0.000 0.000 0.000

10 1.000 0.017 0.000 0.000

20 8.000 0.133 0.002 0.000

30 27.000 0.450 0.008 0.000

40 64.000 1.067 0.018 0.001

50 125.000 2.083 0.035 0.001

60 216.000 3.600 0.060 0.003

70 343.000 5.717 0.095 0.004

80 512.000 8.533 0.142 0.006

90 729.000 12.150 0.203 0.008

100 1000.000 16.666 0.277 0.011

Tabla 1.6

n Cray-1 Fortran1 Tandy Corporation

2

3n3nanosegundos 19500000n nanosegundos

10 3µseg 0.2 seg

100 3mseg 2.0 seg

1000 3 seg 20 seg

2500 50 seg 50.0 seg

10000 49 min 3.2 min

1,000,000 95 años 5.4 horas Tabla 1.7

1. Cray Research Inc.

2. Tandy Corporation.

Page 8: Unidad 1 AED

Algoritmos y Estructuras de Datos Unidad I Introducción a los Algoritmos y Estructuras de Datos

Ing. Alma Leticia Palacios Guerrero pág. 8 de 8

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