2. ¡Bienvenido a Estructuras de Datos!
Introducción y Info de contacto
Programa del Curso
Objetivo del curso
Revisión general
Código de Honestidad
Partida del 1er capitulo
2
3. Mi Información
Patricio Galdames
Horas de Consulta:
Martes 15:30-17:00
Jueves 14:00 - 15:30
Oficina: en la FACE al frente Secretaria Dirección
DSI
Teléfono: (41) 311-1519
E-mail: pgaldames@ubiobio.cl
3
4. Objetivos
4
Dado un problema te pediré que escribas un
programa para resolverlo.
Podemos identificar en el problema:
Los Datos que son requeridos para su solución
Los Métodos requeridos para manipular los datos
Esto es lo que define a un programa!!.
5. Objetivos
Ya sea Java o C, proveen un ambiente para
desarrollar
Estructuras de Datos (maneras de almacenar la
información)
Ejemplo, un arreglo es una estructura de datos
Algoritmos (métodos para manipular la información)
Ejemplo, ‘ordenar’ es un algoritmo
Usaremos C para estudiar estructuras de datos
simples. Ej: Listas enlazadas, colas y pilas.
Usaremos Java para estudiar estructuras de datos
mas avanzadas como: arboles, grafos, heaps.
5
6. Objetivos
Al final del curso, no tan solo deberías ser capaz
de usar alguna estructura de datos para resolver
un problema, sino que escoger aquella que sea la
mas adecuada.
Esto significa escoger:
La mejor forma de ALMACENAR los datos usados
El mejor método para MANIPULAR los datos
Pero…necesitamos definir el significado de la
palabra ‘mejor’!
6
7. Objetivos
7
¿Por qué definir el concepto «mejor» es
importante?
Pensemos sobre lo siguiente:
Una corporación contrata a Luis para que escriba
un programa para ordenar millones de nombres.
¿Cuál enfoque consideras es el mejor? :
Un programa que le toma a Luis escribir/codificar un día y
que ordena los nombres en dos horas
Un programa que le toma Luis cinco días de codificación y
que almacena los nombres en diez segundos
8. Objetivos
Supongamos que no estamos en contra del tiempo….
¡La opción B ciertamente es la preferible!
Un programa que le toma Luis cinco días de codificación y
que almacena los nombres en diez segundos
Lo que vamos a ver una y otra vez en este curso:
Puede haber múltiples soluciones a un problema
Pero llegar a las mejores soluciones a veces
significa:
Dedicar más tiempo y desarrollar la creatividad para escribir
el programa, y
Un programa más largo
8
9. Objetivos
¡La velocidad no es la única variable a
considerar!
Si tienes dos programas A y B, cada uno de ellos
ordena un millón de nombres, pero B consume
diez veces mas memoria que A ...
En igualdad de condiciones, A es la mejor solución
¡Esto puede ser un punto muy crítico también!
Esperemos que esto les de una idea de nuestros
motivos para el curso ...
¡Los mejores programadores son aquellos que desarrollan las
mejores soluciones!
Ellos no se sientan y obtienen la mejor solución en cinco
minutos
9
10. Mito #1
10
Este curso NO es un curso de programación.
Muchas personas vienen a este curso con la
actitud, "esto es sólo un curso avanzado de manejo
de la sintaxis de Java o C".
No lo es.
No pienses que debes conocer C o Java al
detalle para que te vaya bien en el curso.
Te ira bien en el curso, si no tienes miedo de
desafiar tu mente y de probar ideas nuevas.
11. Mito #2
11
Este curso demanda DEMASIADO tiempo.
Las actividades del curso tenderán a consumir
bastantes horas por semana.
¡Esto puede sonar horrible para algunos!
Que no lo sea para ti. :) No dejes las tareas para ultima
hora...
Yo estoy aquí para ayudarles:
Horas de oficina, ya se las definidas o solicitadas
Trato de responder los emails con regularidad, sobre todo si
por temas de compresión de los temas del curso
Laboratorios con profesor ayudante
12. Mito #3
12
Si no se Java o C no podre entender las
estructuras de datos
Las estructuras de datos son independientes del
lenguaje de programación
Te asistiremos en el desarrollo de las tareas de
programación
En el laboratorio, el profesor o el ayudante estará disponible para
preguntas, etc
Pero en este curso, tendrás que estudiar mucho por
tu cuenta.
Sin embargo, ante cualquier duda pregunta!!,
aprovecha las horas de consulta y la bibliografía. :)
13. Prerrequisitos
Al menos uno de los siguientes cursos
Curso de algoritmo y programación
Curso de Programación Orientada a Objetos
Estructuras Discretas
Asumo:
Conocimiento previo de algún lenguaje de
programación
Para explicar los conceptos, usaremos:
Seudocódigo
Java y C
13
14. Libros de consulta
Robert LaFore. Data Structures and Algorithms in Java:
Second Edition. Indianapolis: SAMS Publishing, 2003.
Tenenbaum A. et al., Estructuras de Datos en C, Prentice
Hall, 1999
Espero cubrir aproximadamente un capitulo por semana
Las clases estarán basadas en estos textos
Daremos a menudos ejemplos y lecturas (moodleUBB)
A veces las tareas estarán basadas en estos textos
Hay diversos textos de Estructuras de Datos en
Bibliotecas muy buenos que también tratan los mismos
temas, especialmente aquellos que utilizan C o Java
14
15. Clases
Diapositivas estarán disponibles en moddleubb
Espero estimular la discusión en clases
Es altamente recomendable venir a clases, pero
la asistencia no es requerida
Las diapositivas estarán a propósito incompletas,
las cuales se completaran con el trabajo en pizarra
o discusiones.
15
16. Evaluaciones
2 Certámenes
Controles en ayudantía y cátedras
Tareas (grupos de 2 alumnos)
Código de Honestidad
16
18. Cada Estructura de Datos
Note que hay un total de diez estructuras de datos
que cubriremos:
Arreglos, pilas (stacks), colas (queues), listas enlazadas (linked
lists), arboles binarios (binary trees), arboles AVL (AVL trees), B*
trees (Arboles B*), tablas de hashing, heaps, y grafos
Cada una de ellas es una forma de almacenar un grupo de datos
Para cada uno de ellos veremos:
Su motivación
Sus operaciones
Su eficiencia
Su implementación en C o en Java
18
19. Código de Honestidad
19
Cuando venga el momento de colaborar en las tareas
Es ilegal dar las soluciones
Es ilegal recibirlas y usarlas
Lo mas seguro es no dar tu solución a nadie
Te aliento a que discutas tus ideas, pero NO TUS
RESPUESTAS
Legal:
“Tengo una idea: porque no usamos un arreglo.”
Ilegal:
“Te enviare mi programa. Puedes basarte en el para
escribir el tuyo.”
20. Resumen
20
Soy flexible con:
Las lecturas
Asistencia
Pero seré muy estricto:
Fecha de evaluaciones
Honestidad
En el fondo: ¡Son adultos y futuros profesionales!
Sean honestos y responsables sobre todo con
ustedes mismos!.
21. ¿Estamos listos? Vamos…
En la descripción del curso, he mencionado que
esta clase cubrirá tanto las estructuras de datos y
algoritmos.
Vamos a profundizar un poco más en
exactamente lo que queremos decir ...
Y mostrar algunos ejemplos de cada uno.
21
22. Definición de una Estructura de
Datos
Una estructura de datos es la disposición de los
datos en la memoria de una computadora (o
disco).
Preguntas para reflexionar:
¿Cuáles son algunos ejemplos de estructuras de
datos que ya conocen desde otros cursos?
¿Cómo puede la disposición de los datos en la
memoria afectar el rendimiento?
22
23. Definición de un Algoritmo
Un algoritmo proporciona un conjunto de
instrucciones para la manipulación de datos en
las estructuras.
Preguntas para reflexionar:
¿Cuál es un ejemplo de un algoritmo?
¿Cómo puede el diseño de un algoritmo afectar el
rendimiento? ¿Cómo puede afectar la memoria?
23
24. ¿Estructura de Datos o Algoritmo?
Lista
Ordenar
Búsqueda
Pila
Arreglo
24
25. Almacenamiento de datos del
Mundo Real
Datos del mundo real: datos que describen las
entidades físicas externas al computador.
¿Podemos pensar en algunos ejemplos?
He aquí una pista:
Direcciones y #s de teléfono
Nombres de libros, títulos, números ISBN
25
26. Almacenamiento de datos del
Mundo Real
Digamos que queremos procesar la libreta de
direcciones con un programa computacional,
¿qué debemos tener en cuenta?
El consumo de memoria
Algoritmos (¿cuáles de ellos nos importan?):
26
27. Importante: ¡las Estructuras de Datos
pueden ser ENORMES!
¿Cuáles son algunos ejemplos de escenarios en los que
necesitamos estructuras de datos de gran tamaño?
Sugerencia: ¿Cuál es el sitio web que utiliza una
libreta de direcciones muy grande?
Ahora el problema de la escalabilidad entra en juego.
Supongamos que yo diseño un componente reutilizable
para (es decir) ordenar un arreglo de registros por
apellido. Voy a distribuirlo en la Internet. Me tengo que
preparar para muchas situaciones desde ahora.
27
28. Definiciones
Base de Datos
Nos referiremos a todos los datos que usaremos en un caso
particular. Ejemplo: Libreta de direcciones
El concepto de archivo también lo usaremos en este sentido
Registro
Son las unidades en las cuales la base de datos esta dividida
Campo
Usualmente un registro esta dividido en varios campo y
guarda un dato en particular. Ejemplo: Nombre, numero de
pagina, dirección, teléfono.
Llave (key)
Campo usado para realizar la búsqueda de un registro
28
29. Modelando el Mundo Real
Efectivamente, 'simular' una situación del mundo
real.
Por ejemplo, ¿que podría representar lo
siguiente?:
29
30. Modelando el Mundo Real
¿Podrían ser las rutas de una aerolínea?
Este tipo de estructura se le llama ‘grafo no
dirigido’
Lo estudiaremos!!
30
31. Modelando el Mundo Real
¿Qué tal una 'cola' de datos, donde se pueda insertar
y retirar. El primer elemento en ingresar es el primer
elemento en salir (denominado "FIFO"):
Ejemplo de aplicaciones
Colas en los supermercados
Las colas se utilizan también a la hora de determinar el
tiempo de los semáforos! ¿Cómo? (Piense sobre esto)
31
32. Dilemas de las Estructuras de
Datos
Estos son los costos que típicamente nos
tendremos que preocupar:
Acceso a un fragmento de datos
Búsqueda de un fragmento de datos
Inserción de datos en la estructura
Eliminación de datos de la estructura
La implementación de la estructura
Memoria (en realidad el almacenamiento de los
datos)
Como se pueden imaginar, no hay un costo
universal ...
32
33. Costos generales de las Estructuras
que estudiaremos
Estructura Acceso Búsqueda Inserción Eliminación Impl. Memoria
Arreglo Muy Bajo Alto Med Alto Bajo Bajo
Lista
Enlazada
Alto Alto Bajo Bajo Med Med
Pila Med Alto Med Med Med Med
Cola Med Alto Med Med Med Med
Árbol Bin. Med Bajo Bajo Bajo Alto Alto
Árbol R-N Med Muy Bajo Bajo Bajo Muy
Alto
Alto
Tabla Hash Med Med Bajo Alto Bajo Alto
Heap Med Med Muy Bajo Bajo Alto Alto
Grafo Alto Alto Med Med Med Med
Un importante detalle que deberías darte cuenta: No hay una estructura
de datos "universal"!
33
34. Algoritmos que estudiaremos
Acceso/Inserción/Búsqueda/Eliminación
Ordenamiento. Créanlo o no, hay MUCHAS
maneras de hacerlo!
Recursión
Cuando un método en C o Java se llama a si
mismo
Revisaremos como hacer esto.
34
35. Java
35
Nota: Java es en cierto sentido el lenguaje perfecto
para estudiar estructuras de datos y algoritmos!!!
¿Por que?
Veamos una clase Java … la que esta compuesta
de:
Variables (Datos)
Métodos (Algoritmos)
Una clase puede por lo tanto ser usada para
representar una ________________
Los métodos representan
______________________.
36. ¿Por que entonces partir con C?
La maquina virtual de Java esta escrita en C
La sintaxis de Java se inspiro en la de C
Java restringe la manipulación de punteros
Para reducir la posibilidad de provocar errores en
código
Punteros es un recurso muy poderoso de
programación
Útil para posteriormente comprender tópicos de
gestión de memoria en Arquitectura de
Computadores y Sistemas Operativos.
Mejora eficiencia de procesos
36
37. Resumen
Reglas y Programa del curso
Tipo de Dato Abstracto
Datos
Algoritmos
Lenguaje de programación Java y C
37