2. ESTRUCTURAS DE DATOS
Objetivo
Conocer los fundamentos de las estructuras de datos y
algoritmos que permitan optimizar el rendimiento de
una aplicación por computadora.
3. ESTRUCTURAS DE DATOS
Competencias Previas
Conocimiento básico de algún LP (alto nivel)
Manejo de conceptos básicos de la materia Matemáticas
para Computadoras
Nociones sobre los fundamentos de la POO
4. ESTRUCTURAS DE DATOS
Contenido
Análisis de Algoritmos
• Comprender el concepto de complejidad de los algoritmos y su aplicación en la
selección de los mismos
Manejo de Memoria
• Comprender los mecanismos subyacentes para el manejo de memoria en la
computadora
Estructuras Lineales Estáticas y Dinámicas
• Conocer las características fundamentales de las estructuras de datos lineales y su
impleementación en un lenguaje de programación
Recursividad
Comprender el concepto de recursividad, su implementación en un LP así como
sus ventajas y desventajas
5. ESTRUCTURAS DE DATOS
Contenido
Estructuras no Lineales Estaticas y Dinámicas
• Conocerá las características de diferentes estructuras de datos no lineales y su
implementación en un LP
Ordenación Interna
• Organizar un conjunto de datos y elegir el método de ordenación interna más
conveniente según el problema
Ordenación Externa
• Organizar un conjunto de datos almacenados en dispositivos de almacenamiento
externo
Métodos de Búsqueda
• Comprender las características de los diferentes métodos de búsqueda para
recuperar datos almacenados y su implementación en un LP
6. ESTRUCTURAS DE DATOS
Criterios de Evaluación
Exámen escrito
• 70%
Asistencia, puntualidad, conducta en clase
• 10%
Tareas, prácticas y otras actividades
• 20%
CONDUCTA EN CLASE:
• Evitar el pronunciamiento de malas palabras u obscenidades
• No fumar, no asistir en estado de ebriedad
• Apagar el celular
• Fomentar el respeto y cortesía entre maestro-alumno, alumno-alumno
9. ANÁLISIS DE ALGORITMOS
Pasos para escribir un programa de computadora
Formulación/
Especificación
10. ANÁLISIS DE ALGORITMOS
Pasos para escribir un programa de computadora
Formulación/ Diseño de la
Especificación solución
11. ANÁLISIS DE ALGORITMOS
Pasos para escribir un programa de computadora
Formulación/ Diseño de la Implantación
Especificación solución
12. ANÁLISIS DE ALGORITMOS
Pasos para escribir un programa de computadora
Formulación/ Diseño de la Implantación
Especificación solución
Prueba/
Documentación
13. ANÁLISIS DE ALGORITMOS
Problemas imposibles de formular mediante
computadoras
Crear una receta digna Cómo preservar la paz
de un gastrónomo mundial
14. ANÁLISIS DE ALGORITMOS
Es posible recurrir a cualquier rama de las
matemáticas o de las ciencias para obtener un
modelo de ciertos problemas
Problemas Numéricos Problemas de Procesamiento de Texto
Sistemas de Ecuaciones Lineales Compilación
Sistemas de Ecuaciones Diferenciales Recuperación de Información
15. ANÁLISIS DE ALGORITMOS
¿Qué es un Algoritmo?
Cuando se cuenta con un modelo matemático
adecuado del problema, es necesario encontrar
una solución en forma de algoritmo
CARACTERÍSTICAS DE UN algoritmo
Secuencia finita de instrucciones (precisas)
Ejecución con una cantidad finita de esfuerzo y tiempo
16. ANÁLISIS DE ALGORITMOS
Proceso de solución de problemas
Modelo TDAs / Estructuras de
Matemático/ Programa en Datos / Programa
Algoritmo pseudolenguaje en un LP (Java)
Informal
17. ANÁLISIS DE ALGORITMOS
Tipos de Datos Abstractos (TDAs)
Los procedimientos generalizan el concepto de
operador (suma de matrices)
Encapsulan partes de un algoritmo (leer entradas y
verificar su validez)
18. ANÁLISIS DE ALGORITMOS
Tipos de Datos Abstractos (TDAs)
Piense un TDA como un modelo matemático con
operaciones definidas en ese modelo
Conjuntos de números enteros (unión, intersección y diferencia)
Considere un TDA llamado lista con las
operaciones siguientes:
Vaciar la lista
Obtener el primer miembro de la lista y devolver nulo si la lista está vacía
Obtener el siguiente miembro de la lista y devolver nulo si no hay miembro
siguiente, y por último
Insertar un entero en la lista
19. ANÁLISIS DE ALGORITMOS
Tipos de Datos Abstractos (TDAs)
Existen muchas estructuras de datos que se pueden utilizar
para implantar eficientemente una lista. Así pasamos de:
Vaciar la lista
Obtener el primer miembro de la lista y devolver nulo si la lista está vacía
Obtener el siguiente miembro de la lista y devolver nulo si no hay miembro
siguiente, y por último
Insertar un entero en la lista
a las siguientes operaciones
ANULA( milista )
w:= PRIMERO( milista)
w:= SIGUIENTE( milista)
INSERTA( elemento, milista)
20. ANÁLISIS DE ALGORITMOS
Euclídes
• Matemático y Geómetra griego
• Vivió alrededor del año 300 a.C.
• Padre de la geometría
• Su obra, Los Elementos es una de las
obras científicas más conocidas del
mundo
22. ANÁLISIS DE ALGORITMOS
Un TDA de nombre CONJUNTO
Algunas operaciones:
ANULA(A) - Vacia el conjunto A (es decir, asigna a A el conjunto vacío)
UNION(A,B,C) - Toma dos argumentos A y B (cuyos valores son conjuntos) y
hace que el conjunto C adquiera el valor de la unión de los conjuntos A y B
TAMAÑO(A) - Toma un argumento A, cuyo valor es un conjunto, y devuelve un
objeto de tipo entero cuyo valor es el número de elementos de A
La implantación de un TDA es la traducción en
proposiciones de un LP, de la declaración que define una
variable como perteneciente a ese tipo, además de un
procedimiento en ese lenguaje por cada operación del
TDA
23. ANÁLISIS DE ALGORITMOS
Tipos de Datos, Estructuras de Datos y
TDAs
En un LP, el tipo de dato de una variable es el conjunto de
valores que esta puede tomar. V.gr. una variable de tipo
booleano puede tomar los valores falso o verdadero pero
ningún otro.
Los algoritmos se diseñan en función de los TDAs.
Para representar el modelo matemático de un TDA se
utilizan las estructuras de datos que son conjuntos de
variables, quizá de tipos distintos, conectadas entre sí de
distintas formas.
24. ANÁLISIS DE ALGORITMOS
Tiempo de Ejecución de un Programa
Cuando se resuelve un problema, con frecuencia hay necesidad
de elegir entre varios algoritmos. ¿Cómo se debe elegir?. Hay
dos objetivos
1. Que el algoritmo sea fácil de entender, codificar y depurar
2. Que el algoritmo use eficientemente los recursos del computador, y especialmente,
que se ejecute con rapidez
En la construcción de un sistema complejo, a menudo es
deseable implantar un prototipo sencillo en el cual se puedan
efectuar simulaciones y mediciones antes de dedicarse al
diseño definitivo
25. ANÁLISIS DE ALGORITMOS
Medición del Tiempo de Ejecución de un Programa
El tiempo de ejecución de un programa depende de factores
como:
1. Los datos de entrada al programa
2. La calidad del código generado por el compilador utilizado para crear el
programa objeto
3. La naturalez y rapidez de las instrucciones de máquina empleadas en la
ejecución del programa, y
4. La complejidad de tiempo del algoritmo base del programa
El hecho de que el tiempo de ejecución dependa de la entrada
o su “tamaño”, indica que el tiempo de ejecución de un
programa debe definirse como una función de la entrada. V.gr.
el proceso conocido como clasificación u ordenacion.
26. ANÁLISIS DE ALGORITMOS
Medición del Tiempo de Ejecución de un Programa
2,1,3,1,5,8 Ordenación 1,1,2,3,5,8
TAMAÑO DE LA ENTRADA TIEMPO DE EJECUCIÓN
n t(n) SALIDA
Las unidades t(n) se dejan sin especificar pero se puede
considerar a t(n) como el número de instrucciones
ejecutadas en un computador idealizado
27. ANÁLISIS DE ALGORITMOS
Tamaño del Problema: n
La mayoría de los problemas a resolver tienen un tamaño natural
(en general, la cantidad de datos a procesar), al que se
denominará n y en función del cual se tratará de describir los
recursos utilizados (con frecuencia la cantidad de tiempo utilizado)
Ejemplo:
1. Ordenar n números
2. Dados los enteros a y b, a<=b, sumar los enteros comprendidos entre ellos:
n=b-a+1
3. Calcular el producto interno de dos vectores de tamaño n
4. Realizar una consulta a una tabla de n registros
28. ANÁLISIS DE ALGORITMOS
Tiempo de ejecución
En función del tamaño En función de
de los datos de entrada diferentes entradas
T(n) del mismo tamaño
Ejemplo: si se tiene un algoritmo que Ejemplo: si se necesitan
Ordena un conjunto de n datos Ordenar N=10 000 datos
Con un algoritmo
¿Cuánto tiempo tarda su ejecución ¿Cuánto tiempo tarda su ejecución
Si se ordenan Si los datos
N=10 datos Están ordenados
N=100 datos Están inversamente ordenados
N=1000 datos Están desordenados?
N=10 000 datos?
29. ANÁLISIS DE ALGORITMOS
Tiempo de ejecución
En función del tamaño En función de
de los datos de entrada diferentes entradas
T(n) del mismo tamaño
También llamada
Complejidad de Tiempo Se debe estudiar
el comportamiento
Se debe estudiar de T(n)
el comportamiento en el peor,
de T(n) mejor y
a medida que n crece Comportamiento límite caso medio
de la
Complejidad de tiempo
Cuando n crece
Se debe estudiar
la complejidad asintótica Complejidad asintótica
del tiempo de ejecución T(n)
30. ANÁLISIS DE ALGORITMOS
Tiempo de ejecución
Se debe estudiar Se debe estudiar
la complejidad asintótica el comportamiento de T(n)
del tiempo de ejecución T(n) en el peor, mejor y
caso medio
Se utiliza la Notación Asintótica, representada por “O grande”
“O grande” sirve para expresar la cota superior asintótica de una función
31. ANÁLISIS DE ALGORITMOS
Notación Asintótica
Definición de la “o mayúscula”
DEFINICIÓN:
Sean t(n) y f(n) dos funciones arbitrarias tales que t(n), f(n):Z+->R
+ entonces
t(n) = O(f(n)) (se lee t(n) es O grande de f(n) )
si existen constantes positivas c y n0 tales que
t(n) <= cf(n) para toda n>=n0
33. ANÁLISIS DE ALGORITMOS
Definición de la “o mayúscula”
EJEMPLO #1
Probar que t(n) = 3n+2 es O(n). Hay que encontrar enteros
positivos c, n0 tales que
3n+2<= cn, n>=n0
Entonces tenemos que:
3n=3n, n>=0
3n+2 <= 3n+2n, n>=1
t(n)<=5n, n>=1
c n0
34. ANÁLISIS DE ALGORITMOS
Definición de la “o mayúscula”
EJEMPLO #2
Probar que t(n) = 100n+6 es O(n). Hay que encontrar
enteros positivos c, n0 tales que
100n+6<= cn, n>=n0
36. ANÁLISIS DE ALGORITMOS
Definición de la “o mayúscula”
EJEMPLO #3
Probar que t(n) = (n+1)2 es O(n2). Hay que encontrar
enteros positivos c, n0 tales que
(n+1)2<= cn2, n>=n0
37. ANÁLISIS DE ALGORITMOS
Definición de la “o mayúscula”
EJEMPLO #3
Probar que t(n) = (n+1)2 es O(n2). Hay que encontrar
enteros positivos c, n0 tales que
(n+1)2<= cn2, n>=n0
Para esto sabemos que:
(n+1)2=n2+2n+1
n2=n2, n>=0
n2 +2n <= n2 +2n2 , n>=0
n2 +2n +1 <= n2 +2n2 +n2, n>=1
t(n)<=4n2, n>=1
c n0
38. ANÁLISIS DE ALGORITMOS
Definición de la “o mayúscula”
EJEMPLO #4
Probar que t(n) = 3n3 + 2n2 es O(n3).
Entonces hay que probar que existen enteros positivos c, n0
tales que
3n3 + 2n2 <= cn3, n>=n0
Para esto sabemos que:
3n3 = 3n3, n>=0
3n3 +2n2<= 3n3 +2n3, n>=0
3n3 +2n2 <= 5n3 , n>=0
t(n) <= 5n3 , n>=0
c n0
39. ANÁLISIS DE ALGORITMOS
Definición de la “o mayúscula”
EJEMPLO #5
Probar que t(n) = n2 es O(2n). Hay que n n2 2n
encontrar enteros positivos c, n0 tales que 0 0 1
n2<= c2n, n>=n0
Para esto, hay que notar que 2n no tiene 1 1 2 c=1, n>=4
forma polinomial, por lo que procedemos 2 4 4
como sigue: 3 9 8
Suponer c=1, es decir, n2<= 1· 2n , por lo
n0
4 16 16
tanto para calcular n0, se hace la siguiente
tabla 5 25 32
6 36 64
n2<=1·2n
40. ANÁLISIS DE ALGORITMOS
Definición de la “o mayúscula”
EJEMPLO #6
Probar que t(n) = 6· 2n+n2 es O(2n). Hay que encontrar
enteros positivos c, n0 tales que
6· 2n + n2<= c2n, n>=n0
41. ANÁLISIS DE ALGORITMOS
Gráfica del Ejemplo #1
t(n)=3n+2 f(n)=5n
40
30
tiempo
20
10
0
1 2 3 4 5 6 7 8
n
42. ANÁLISIS DE ALGORITMOS
Grafique las funciones t(n) de los ejemplos #3, #4 y #5
y demuestre que tienen como cota superior f(n)