01 estructura datos - javier8a.com · 2019-01-31 · tabla hash 0,01826 0,01649 0,00119 0,00058...

28
Estructura de Datos Joaquín F Sánchez [email protected] Programa de Ingeniería de Software Facultad de Ingeniería Universidad Manuela Beltrán Sede Bogotá- Cajica

Upload: others

Post on 08-Jul-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 01 Estructura datos - Javier8a.com · 2019-01-31 · Tabla Hash 0,01826 0,01649 0,00119 0,00058 Árbol binario 0,06077 0,04424 0,00977 0,00675 Arreglo ordenado 4,87678 3,79290 0,00734

Estructura de DatosJoaquín F Sánchez

[email protected]

Programa de Ingeniería de SoftwareFacultad de Ingeniería

Universidad Manuela BeltránSede Bogotá- Cajica

Page 2: 01 Estructura datos - Javier8a.com · 2019-01-31 · Tabla Hash 0,01826 0,01649 0,00119 0,00058 Árbol binario 0,06077 0,04424 0,00977 0,00675 Arreglo ordenado 4,87678 3,79290 0,00734

Introducción a estructuras de datosIntroducción MotivaciónConceptos

Page 3: 01 Estructura datos - Javier8a.com · 2019-01-31 · Tabla Hash 0,01826 0,01649 0,00119 0,00058 Árbol binario 0,06077 0,04424 0,00977 0,00675 Arreglo ordenado 4,87678 3,79290 0,00734

IntroduccionIntroducción a las estructuras de datosMotivación Conceptos

“ I will, in fact, claim that the difference between abad programmer and a good one is whether

he considers his code or his data structures more important. Bad programmers worry about the code.

Good programmers worry about data structuresand their relationships. ”

Linus Torvalds (creador de Linux)

“ Algorithms + Data Structures = Programs. ” Niklaus Wirth

http://en.wikipedia.org/wiki/Niklaus_Wirth

Estructuras de Datos Introducción 3

http://en.wikipedia.org/wiki/Linus_Torvalds

Page 4: 01 Estructura datos - Javier8a.com · 2019-01-31 · Tabla Hash 0,01826 0,01649 0,00119 0,00058 Árbol binario 0,06077 0,04424 0,00977 0,00675 Arreglo ordenado 4,87678 3,79290 0,00734

¿Por qué son importantes las estructuras de datos?

Un ingeniero de sistemas y computación / ingenieromecatrónico / electrónico debe ser capaz de resolverproblemas del mundo real mediante el desarrollo desoftware.

Para ello, debe seleccionar apropiadamente lasestructuras de datos a utilizar, garantizando que esténdiseñadas a la medida del problema.

Estructuras de Datos Introducción 4

Introducción a las estructuras de datosMotivación Conceptos

Page 5: 01 Estructura datos - Javier8a.com · 2019-01-31 · Tabla Hash 0,01826 0,01649 0,00119 0,00058 Árbol binario 0,06077 0,04424 0,00977 0,00675 Arreglo ordenado 4,87678 3,79290 0,00734

¿Por qué son importantes las estructuras de datos?

Una de las principales razones por la que las estructuras dedatos son importantes es muy simple: tiempo.

Antes de saber siquiera ¿qué es una estructura de datos?,veamos un ejemplo…

Estructuras de Datos Introducción 5

Introducción a las estructuras de datosMotivación Conceptos

Page 6: 01 Estructura datos - Javier8a.com · 2019-01-31 · Tabla Hash 0,01826 0,01649 0,00119 0,00058 Árbol binario 0,06077 0,04424 0,00977 0,00675 Arreglo ordenado 4,87678 3,79290 0,00734

Ejemplo:

Supongamos que tenemos un programa que realiza losiguiente:

• Crear 5 contenedores de información diferentes.

• Insertar 100.000 elementos en cada contenedor, específicamentelos números pares entre 0 y 200.000.

• Realizar 50.000 búsquedas (enteros 0-50.000).

• Eliminar 20.000 elementos (enteros 0-20.000).

Estructuras de Datos Introducción 6

Introducción a las estructuras de datosMotivación Conceptos

Page 7: 01 Estructura datos - Javier8a.com · 2019-01-31 · Tabla Hash 0,01826 0,01649 0,00119 0,00058 Árbol binario 0,06077 0,04424 0,00977 0,00675 Arreglo ordenado 4,87678 3,79290 0,00734

Contenedores de información:

• Arreglo

• Arreglo ordenado

• Lista enlazada

Estructuras de Datos Introducción 7

Introducción a las estructuras de datosMotivación Conceptos

• Árbol binario

• Tabla Hash

Page 8: 01 Estructura datos - Javier8a.com · 2019-01-31 · Tabla Hash 0,01826 0,01649 0,00119 0,00058 Árbol binario 0,06077 0,04424 0,00977 0,00675 Arreglo ordenado 4,87678 3,79290 0,00734

Resultados

Procesador: 2.4GHz AMD Opteron 6278 Compilador: clang++

Flags: -O3 (fast)

Nota: estas estructuras no están optimizadas; las librerías estándar de C++ contienenversiones optimizadas que podrían comportarse de forma diferente.

Estructuras de Datos Introducción 8

Contenedor(Estructura)

Tiempo total (s)

Arreglo 9,80517

Lista enlazada 23,38263

Tabla Hash 0,01826

Árbol binario 0,06077

Arreglo ordenado 4,87678

Factor 537×

Factor1280×

Introducción a las estructuras de datosMotivación Conceptos

Page 9: 01 Estructura datos - Javier8a.com · 2019-01-31 · Tabla Hash 0,01826 0,01649 0,00119 0,00058 Árbol binario 0,06077 0,04424 0,00977 0,00675 Arreglo ordenado 4,87678 3,79290 0,00734

Resultados

¿Por qué tantas diferencias?

Estructuras de Datos Introducción 9

Contenedor(Estructura)

Tiempo total (s)

Insertar(s)

Buscar(s)

Eliminar(s)

Arreglo 9,80517 0,00171 6,97600 2,82746Lista enlazada 23,38263 0,00719 13,70261 9,67283Tabla Hash 0,01826 0,01649 0,00119 0,00058Árbol binario 0,06077 0,04424 0,00977 0,00675Arreglo ordenado 4,87678 3,79290 0,00734 1,07653

Introducción a las estructuras de datosMotivación Conceptos

Page 10: 01 Estructura datos - Javier8a.com · 2019-01-31 · Tabla Hash 0,01826 0,01649 0,00119 0,00058 Árbol binario 0,06077 0,04424 0,00977 0,00675 Arreglo ordenado 4,87678 3,79290 0,00734

Resultados

• Algunas estructuras almacenan mayor cantidad deinformación simplemente por su diseño.→ A nivel de hardware, la memoria está organizada como si

fuera un solo arreglo gigante.Estructuras de Datos Introducción 10

Contenedor(Estructura)

Tiempo total (s)

Insertar(s)

Buscar(s)

Eliminar(s)

Arreglo 9,80517 0,00171 6,97600 2,82746Lista enlazada 23,38263 0,00719 13,70261 9,67283Tabla Hash 0,01826 0,01649 0,00119 0,00058Árbol binario 0,06077 0,04424 0,00977 0,00675Arreglo ordenado 4,87678 3,79290 0,00734 1,07653

Introducción a las estructuras de datosMotivación Conceptos

Page 11: 01 Estructura datos - Javier8a.com · 2019-01-31 · Tabla Hash 0,01826 0,01649 0,00119 0,00058 Árbol binario 0,06077 0,04424 0,00977 0,00675 Arreglo ordenado 4,87678 3,79290 0,00734

Resultados

• Manipular las estructuras toma tiempo.→ Para conseguir la estructura de los datos de la forma que

queremos, necesitamos hacerlo nosotros mismos.

Estructuras de Datos Introducción 11

Contenedor(Estructura)

Tiempo total (s)

Insertar(s)

Buscar(s)

Eliminar(s)

Arreglo 9,80517 0,00171 6,97600 2,82746Lista enlazada 23,38263 0,00719 13,70261 9,67283Tabla Hash 0,01826 0,01649 0,00119 0,00058Árbol binario 0,06077 0,04424 0,00977 0,00675Arreglo ordenado 4,87678 3,79290 0,00734 1,07653

Introducción a las estructuras de datosMotivación Conceptos

Page 12: 01 Estructura datos - Javier8a.com · 2019-01-31 · Tabla Hash 0,01826 0,01649 0,00119 0,00058 Árbol binario 0,06077 0,04424 0,00977 0,00675 Arreglo ordenado 4,87678 3,79290 0,00734

Resultados

Realizar búsquedas en un arreglo ordenado es rápidoporque sabemos de antemano que hay una serie de“invariantes” que se cumplen.

Estructuras de Datos Introducción 12

Contenedor(Estructura)

Tiempo total (s)

Insertar(s)

Buscar(s)

Eliminar(s)

Arreglo 9,80517 0,00171 6,97600 2,82746

Lista enlazada 23,38263 0,00719 13,70261 9,67283Tabla Hash 0,01826 0,01649 0,00119 0,00058Árbol binario 0,06077 0,04424 0,00977 0,00675

Arreglo ordenado 4,87678 3,79290 0,00734 1,07653

Introducción a las estructuras de datosMotivación Conceptos

Page 13: 01 Estructura datos - Javier8a.com · 2019-01-31 · Tabla Hash 0,01826 0,01649 0,00119 0,00058 Árbol binario 0,06077 0,04424 0,00977 0,00675 Arreglo ordenado 4,87678 3,79290 0,00734

Resultados

Las eliminaciones son lentas en los arreglos porque nosólo se tiene que buscar el valor a eliminar, sino que sedebe ajustar la estructura posteriormente de una formapoco trivial (dependiendo del modelo).

Estructuras de Datos Introducción 13

Contenedor(Estructura)

Tiempo total (s)

Insertar(s)

Buscar(s)

Eliminar(s)

Arreglo 9,80517 0,00171 6,97600 2,82746Lista enlazada 23,38263 0,00719 13,70261 9,67283

Tabla Hash 0,01826 0,01649 0,00119 0,00058Árbol binario 0,06077 0,04424 0,00977 0,00675Arreglo ordenado 4,87678 3,79290 0,00734 1,07653

Introducción a las estructuras de datosMotivación Conceptos

Page 14: 01 Estructura datos - Javier8a.com · 2019-01-31 · Tabla Hash 0,01826 0,01649 0,00119 0,00058 Árbol binario 0,06077 0,04424 0,00977 0,00675 Arreglo ordenado 4,87678 3,79290 0,00734

Resultados

Siempre existen soluciones de compromiso cuando seseleccionan las estructuras, por ejemplo: insertar en unarreglo ordenado es 2000× más lento que en uno noordenado.

Estructuras de Datos Introducción 14

Contenedor(Estructura)

Tiempo total (s)

Insertar(s)

Buscar(s)

Eliminar(s)

Arreglo 9,80517 0,00171 6,97600 2,82746

Lista enlazada 23,38263 0,00719 13,70261 9,67283Tabla Hash 0,01826 0,01649 0,00119 0,00058Árbol binario 0,06077 0,04424 0,00977 0,00675

Arreglo ordenado 4,87678 3,79290 0,00734 1,07653

Introducción a las estructuras de datosMotivación Conceptos

Page 15: 01 Estructura datos - Javier8a.com · 2019-01-31 · Tabla Hash 0,01826 0,01649 0,00119 0,00058 Árbol binario 0,06077 0,04424 0,00977 0,00675 Arreglo ordenado 4,87678 3,79290 0,00734

Resultados

¿Por qué las eliminaciones tardan menos tiempo?• Se hacen 20.000 eliminaciones y 50.000 búsquedas.• Cada que se elimina un elemento, el tamaño del contenedor

disminuye y se facilita el trabajo para la próxima vez.

Estructuras de Datos Introducción 15

Contenedor(Estructura)

Tiempo total (s)

Insertar(s)

Buscar(s)

Eliminar(s)

Arreglo 9,80517 0,00171 6,97600 2,82746Lista enlazada 23,38263 0,00719 13,70261 9,67283Tabla Hash 0,01826 0,01649 0,00119 0,00058Árbol binario 0,06077 0,04424 0,00977 0,00675Arreglo ordenado 4,87678 3,79290 0,00734 1,07653

Introducción a las estructuras de datosMotivación Conceptos

Page 16: 01 Estructura datos - Javier8a.com · 2019-01-31 · Tabla Hash 0,01826 0,01649 0,00119 0,00058 Árbol binario 0,06077 0,04424 0,00977 0,00675 Arreglo ordenado 4,87678 3,79290 0,00734

¿Cuál es la mejor estructura de datos?

En este caso, la tabla Hash.En general, depende del problema que se quierasolucionar.

Estructuras de Datos Introducción 16

Contenedor(Estructura)

Tiempo total (s)

Insertar(s)

Buscar(s)

Eliminar(s)

Arreglo 9,80517 0,00171 6,97600 2,82746Lista enlazada 23,38263 0,00719 13,70261 9,67283Tabla Hash 0,01826 0,01649 0,00119 0,00058Árbol binario 0,06077 0,04424 0,00977 0,00675Arreglo ordenado 4,87678 3,79290 0,00734 1,07653

Introducción a las estructuras de datosMotivación Conceptos

Page 17: 01 Estructura datos - Javier8a.com · 2019-01-31 · Tabla Hash 0,01826 0,01649 0,00119 0,00058 Árbol binario 0,06077 0,04424 0,00977 0,00675 Arreglo ordenado 4,87678 3,79290 0,00734

Estructura de datos ideal• Rápida• Elegante• Manejo de memoria eficiente

Distintos niveles de compromiso a explorar:• Tiempo vs. Espacio• Desempeño vs. Elegancia• Generalidad vs. Simplicidad• El desempeño de una operación vs. el de otra.

Estructuras de Datos Introducción 17

Introducción a las estructuras de datosMotivación Conceptos

Page 18: 01 Estructura datos - Javier8a.com · 2019-01-31 · Tabla Hash 0,01826 0,01649 0,00119 0,00058 Árbol binario 0,06077 0,04424 0,00977 0,00675 Arreglo ordenado 4,87678 3,79290 0,00734

Tipos de problemas que podremos resolver

Ejemplo 1: un “diccionario” de datos

Como en el caso anterior, dada una gran cantidad de datos, cómo podemos organizarlos para poder (de forma eficiente):- Insertar un nuevo elemento- Buscar un elemento- Eliminar un elemento

Como vimos, algunas estructuras de datos proporcionan un mejor rendimiento que otras.

Estructuras de Datos Introducción 18

Introducción a las estructuras de datosMotivación Conceptos

Page 19: 01 Estructura datos - Javier8a.com · 2019-01-31 · Tabla Hash 0,01826 0,01649 0,00119 0,00058 Árbol binario 0,06077 0,04424 0,00977 0,00675 Arreglo ordenado 4,87678 3,79290 0,00734

Tipos de problemas que podremos resolver

Ejemplo 2:

Dada una serie de rutas para ir de un lugar a otro en una ciudad, determinar el camino más corto desde A hasta B.

Estructuras de Datos Introducción 19

Introducción a las estructuras de datosMotivación Conceptos

Page 20: 01 Estructura datos - Javier8a.com · 2019-01-31 · Tabla Hash 0,01826 0,01649 0,00119 0,00058 Árbol binario 0,06077 0,04424 0,00977 0,00675 Arreglo ordenado 4,87678 3,79290 0,00734

Conceptos vs. Mecanismos

Estructuras de Datos Introducción 21

AlgoritmoUna secuencia de pasos ordenados para alcanzar un objetivo, que se relaciona con una representación abstracta de los datos.

ProgramaUna secuencia de operaciones en un lenguaje de programación específico, que trabaja con datos reales en forma de números, imágenes, sonido, …

Introducción a las estructuras de datosMotivación Conceptos

Page 21: 01 Estructura datos - Javier8a.com · 2019-01-31 · Tabla Hash 0,01826 0,01649 0,00119 0,00058 Árbol binario 0,06077 0,04424 0,00977 0,00675 Arreglo ordenado 4,87678 3,79290 0,00734

Conceptos vs. Mecanismos

Estructuras de Datos Introducción 22

Tipo de Dato Abstracto Una descripción matemática de un objeto y sus operaciones.

Estructura de datosUna forma específica de representar los datos de un programa, que refleja las decisiones de diseño y los objetivos del programador.

Introducción a las estructuras de datosMotivación Conceptos

Page 22: 01 Estructura datos - Javier8a.com · 2019-01-31 · Tabla Hash 0,01826 0,01649 0,00119 0,00058 Árbol binario 0,06077 0,04424 0,00977 0,00675 Arreglo ordenado 4,87678 3,79290 0,00734

Tipo de dato abstracto (ADT)Es un modelo de una estructura de datos que especifica:- Las características de la colección de datos- Las operaciones que se pueden llevar a cabo en la

colección de datos

Estructura de datosImplementan tipos de datos abstractos (ADTs)

Estructuras de Datos Introducción 23

Introducción a las estructuras de datosMotivación Conceptos

Page 23: 01 Estructura datos - Javier8a.com · 2019-01-31 · Tabla Hash 0,01826 0,01649 0,00119 0,00058 Árbol binario 0,06077 0,04424 0,00977 0,00675 Arreglo ordenado 4,87678 3,79290 0,00734

Tipo de dato abstracto (ADT)

• Es abstracto porque no se especifica cómo será

implementado (sólo se especifica)

• Puede tener múltiples implementaciones

• También llamados TDA o TAD en español

• Se definen como cajas negras de entradas y salidas

• Las interfaces en JAVA son una forma de ADTs

• Varían en cuanto a complejidad:

9 Arreglos, listas, pilas, colas, árboles, montículos, tablas hash,

grafos, …

Estructuras de Datos Introducción 24

Introducción a las estructuras de datosMotivación Conceptos

Page 24: 01 Estructura datos - Javier8a.com · 2019-01-31 · Tabla Hash 0,01826 0,01649 0,00119 0,00058 Árbol binario 0,06077 0,04424 0,00977 0,00675 Arreglo ordenado 4,87678 3,79290 0,00734

Ejemplo: ADT Arreglo

• Es posible:o Insertar elementos en el arreglo por el índiceo Leer elementos por el índice

• Normalmente no nos preocupamos por cosas como:o ¿Dónde están los datos en la memoria?o ¿Cómo hace para encontrar el elemento i dentro del arreglo?

Estructuras de Datos Introducción 25

Introducción a las estructuras de datosMotivación Conceptos

Page 25: 01 Estructura datos - Javier8a.com · 2019-01-31 · Tabla Hash 0,01826 0,01649 0,00119 0,00058 Árbol binario 0,06077 0,04424 0,00977 0,00675 Arreglo ordenado 4,87678 3,79290 0,00734

Nuestra dualidad

• Como programadores, es una buena práctica tratar nuestras cajas negras como tal. ¾ Esto facilita el diseño y se obtienen programas más limpios.

• Como ingenieros, debemos entender la teoría detrás de las estructuras de datos.¾ Esto nos ayuda a inventar nuevas estructuras, y a entender

mejor cuando se debe usar que ADT o una implementación específica.

Estructuras de Datos Introducción 26

Introducción a las estructuras de datosMotivación Conceptos

Page 26: 01 Estructura datos - Javier8a.com · 2019-01-31 · Tabla Hash 0,01826 0,01649 0,00119 0,00058 Árbol binario 0,06077 0,04424 0,00977 0,00675 Arreglo ordenado 4,87678 3,79290 0,00734

Especificación de un ADT• Consiste en establecer las propiedades y operaciones

que lo definen• Debe ser:

o Precisa: sólo lo imprescindibleo General: adaptable a diferentes contextoso Legible: que sirva de comunicador entre quien especifica y

quien implementao No ambigua: evita problemas de interpretación

• Definición informal (lenguaje natural) o formal (algebraica)

Estructuras de Datos Introducción 27

Introducción a las estructuras de datosMotivación Conceptos

Page 27: 01 Estructura datos - Javier8a.com · 2019-01-31 · Tabla Hash 0,01826 0,01649 0,00119 0,00058 Árbol binario 0,06077 0,04424 0,00977 0,00675 Arreglo ordenado 4,87678 3,79290 0,00734

Implementación de un ADT• Consiste en determinar una representación para los

valores del tipo y en codificar sus operaciones a partir de esta representación

• Debe ser:• Estructurada: facilita su desarrollo• Eficiente: optimiza el uso de recursos Æ Evaluación de distintas soluciones mediante la complejidad (espacial y temporal)

• Legible: facilita su modificación y mantenimiento

Estructuras de Datos Introducción 28

Introducción a las estructuras de datosMotivación Conceptos

Page 28: 01 Estructura datos - Javier8a.com · 2019-01-31 · Tabla Hash 0,01826 0,01649 0,00119 0,00058 Árbol binario 0,06077 0,04424 0,00977 0,00675 Arreglo ordenado 4,87678 3,79290 0,00734

Preguntas