Objetivos Estructura de datos. Definición - cime.cl · 2 7 Bit y Byte que se encuentra en el nivel...

25
1 Estructura de Datos Introducción Mauricio Solar 2008 2 Índice Objetivos Estructura de datos. Definición Datos e información Bit y byte Campos y registros Archivos Arreglos o arrays Abstracción Tipos de datos abstractos (TDA) 3 Objetivos Diferenciar entre bit, byte, campos, registros y archivos. Definir estructuras de datos. Diferenciar declaración, inicialización y acceso a arreglos. Definir y ejemplificar Tipos de Datos Abstractos (TDA). 4 Estructura de datos. Definición Uno de los aspectos mas importantes de la programación es la creación de nuevos tipos de datos que sean apropiados para resolver problemas específicos. “La estructura de datos es una construcción que se puede definir dentro de un lenguaje de programación para almacenar colecciones de datos” (Luis Joyanes) 5 Estructura de datos Todos los algoritmos manipulan datos y éstos deben estar adecuadamente relacionados (estructurados) de manera específica. Ello nos lleva al estudio de una disciplina dentro de la computación que es la Estructura Estructura de de Datos Datos. La estructura es la relación existente entre los elementos de datos. La parte más delicada de la programación, es la eficiente estructuración de datos, ya que esto conlleva a un inteligente nivel de costos en cuanto a espacios de memoria, de almacenamiento, tiempo y ejecución del trabajo. 6 Datos e Información Datos: son cifras o elementos no significativos como tales sino hasta que son procesados y convertidos a una forma útil llamada información. Son la materia prima para obtener información. Información: es el resultado del proceso de los datos.

Transcript of Objetivos Estructura de datos. Definición - cime.cl · 2 7 Bit y Byte que se encuentra en el nivel...

1

Estructura de Datos

Introducción

Mauricio Solar

2008

2

Índice� Objetivos� Estructura de datos. Definición� Datos e información� Bit y byte� Campos y registros� Archivos� Arreglos o arrays� Abstracción� Tipos de datos abstractos (TDA)

3

Objetivos

� Diferenciar entre bit, byte, campos, registros y archivos.

� Definir estructuras de datos.� Diferenciar declaración, inicialización y acceso a arreglos.

� Definir y ejemplificar Tipos de Datos Abstractos (TDA).

4

Estructura de datos. Definición

� Uno de los aspectos mas importantes de la programación es la creación de nuevos tipos de datos que sean apropiados para resolver problemas específicos.

� “La estructura de datos es una construcción que se puede definir dentro de un lenguaje de programación para almacenar colecciones de datos” (Luis Joyanes)

5

Estructura de datos� Todos los algoritmos manipulan datos y éstos deben

estar adecuadamente relacionados (estructurados) de manera específica. Ello nos lleva al estudio de una disciplina dentro de la computación que es la Estructura Estructura de de DatosDatos.

� La estructura es la relación existente entre los elementos de datos. La parte más delicada de la programación, es la eficiente estructuración de datos, ya que esto conlleva a un inteligente nivel de costos en cuanto a espacios de memoria, de almacenamiento, tiempo y ejecución del trabajo.

6

Datos e Información� Datos: son cifras o elementos no significativos como tales sino hasta que son procesados y convertidos a una forma útil llamada información.Son la materia prima para obtener información.

� Información: es el resultado del proceso de los datos.

2

7

Bit y Byte

� Bit: la menor unidad de información con que se pueden representar los datos.

� Byte: la unidad más común de almacenamiento en Computación. Está compuesto de 8 bits.

8

Campos y registros� Campo: la unidad lógica más pequeña que se encuentra en el nivel más bajo de la jerarquía de datos. Campos son los componentes en que se divide un registro.

� Registros: son datos o campos lógicamente relacionados que pueden ser tratados como una unidad.

9

Archivos� Archivo: una colección de registros relacionados entre sí. Es una estructura de datos que consiste en un conjunto de informaciones estructuradas en unidades de acceso denominadas registros.

� Llamado también tablas en el mundo de las bases de datos.

10

Ejemplo

Cédula Nombre Apellido Dirección Sueldo

Rec1 555555 Juan Pérez San José y España 982000

Rec2 666666 Alberto Longo Av Del Agrónomo 156 1025400

11

Arreglos o arrays

� Un arreglo o conjunto de datos ordenados está formado por un número fijo de elementos contiguos y de un mismo tipo. Al tipo se le llama tipo base del arreglo. Los datos individuales se llaman elementos del arreglo.

� Para definir un tipo estructurado arreglo, se debe especificar el tipo base y el número de elementos.

12

Arrays� Declaración

� Tipo_dato nombre_array[ ]� Ej: Cadena meses[ ]

� Inicialización� nombre_array = tipo_dato [tamaño];

� Ej: meses = cadena [12]

� Acceso� Nombre_array[ posición]

� Ej: meses[1] = “Enero”, meses[4] = “Abril”

3

13

Abstracción

� Es el conocimiento que se tiene de una cosa prescindiendo de las demás que están con ella.

� Es la capacidad para encapsular y aislar la información del diseño y ejecución.

� La abstracción localiza y oculta los detalles de un modelo o diseño para generar y manipular objetos.

� Conocemos un objeto viéndolo, sabemos qué es sin necesidad de ver su interior, su implementación o su forma de construcción.

14

Tipos de datos abstractos� TDA: es un tipo de dato definido por el programador. Está

compuesto de datos (estructura de datos propia) y un conjunto de operaciones sobre estos datos.

� Los TDA mezclan estructuras de datos junto a una serie de operaciones de manipulación. Incluyen una interfaz pública, que es lo que verá el usuario, y una implementación (algoritmos de operaciones sobre las estructuras de datos y su representación en un lenguaje de programación), que el usuario no tiene necesariamente que conocer para manipular correctamente los tipos de datos abstractos.

15

TDA

� Un tipo de datos abstracto (TDA) es caracterizado por las siguientes propiedades:

1. Define un tipo de datos.2. Define un conjunto de operaciones que se conoce como interfaz. 3. Las operaciones de la interfaz son la única forma de acceder a los datos del TDA.

Tipo de Dato Abstracto

Datos de la estructuraOperaciones Interfaz

16

Ejemplo de TDA� TAD Punto

� Define datos (propiedades) enteros x e y� Define operaciones (métodos) asignar_valor_a_x,

asignar_valor_a_y, mostrar_valor_x, mostrar_valor_y que actuan sobre los datos.

TAD Punto

Datos x, y

Operaciones: asignar_valores_a_x_e_y

mostrar_valor_x, mostrar_valor_y,

convertir_a_cadena,

dibujar_punto

Operaciones públicas o Interfaz

Tipos de Datos

Proporcionados por los Lenguajes (C, C++, Pascal, etc) para clasificar diversas clases de datos. Ayudan en:

� Prevención y detección de errores� Comprensión y Organización de las ideas acerca de los

datos� Identificación y descripción de las propiedades únicas de

ciertos datos.� Ej: 6+5+”Aire”: Error, se suman tipos disimiles.

Un Tipo de Dato es un conjunto de valores y operaciones asociadas

4

Tipos de datos Primitivos

� Son los mas simples, ATOMICOS.� No se construyen desde otros.� No son descomponibles.� Ej: Entero, flotante, real, carácter, lógico.� Tipo Entero:

� Valores: …–4, –3, –2, –1, 0, 1, 2, 3, 4…� Operaciones: *, +, –, /, ++, – – ….

� Sus formas de representación interna varían de Sistema a Sistema.

Tipos Compuestos y Agregados

� Los TIPOS COMPUESTOS se pueden descomponer en Subcampos.� Ej: Número de Teléfono: CodPais, CodArea, NumeroLocal.

� Los TIPOS AGREGADOS son colecciones de datos del mismo tipo.� Tipos agregados básicos: Arrays, Cadenas y registros.

La Necesidad de las Estructuras de Datos

� Una Estructura de datos es una Organización o Agregación de datos Compuestos y Atómicos� Se crean en tiempo de diseño. � Se pueden anidar entre ellas.� Requieren espacio en memoria para almacenarlas.

� Objetivo: resolver problemas eficientemente.� Eficiente: resuelve el problema dentro de las restricciones

de recursos.� Costo: cantidad de recursos que la solución consume.

Selección de una Estructura

1. Análisis de los Objetivos y Determinación de las Restricciones.

2. Determinar las Operaciones Básicas y sus restricciones

3. Seleccionar/Diseñar una estructura de datos.

4. Implementar la solución.

Abstracción y TADs� El TAD es una Abstracción de la Realidad.� La Abstracción es la supresión de detalles irrelevantes mientras se

enfatiza los significativos.� Ciencia de la computación - Ciencia de la Abstracción

� El TAD define el tipo de dato a utilizar y sus operaciones en términos de Entrada/Salida.� Encapsula: oculta dentro de si los detalles de la Implementación.� Operaciones significativas para manejar los datos del TAD

� Cada operación pueden ser una o mas funciones.

� Ayuda a los programadores a realizar Software confiable y reutilizable.

Partes de un TAD� Especificación: Describe qué hace el TAD,

independiente de cómo lo hace:� Sintaxis: define los formatos de las operaciones y el tipo de

resultados, su nombre, sus parámetros.� Semántica: define para cada operación cual es su posible

salida.

� Implementación� Representación: especifica como se almacena el TAD en

memoria� Algoritmo: especifica los pasos dentro de cada operación

del TAD

5

Algoritmos y Programas� Algoritmo: conjunto de instrucciones ordenadas, que resuelven un

problema especifico.� No son Únicos, por lo que pueden tener diferente Eficiencia.� Se los escribe en Seudo código:

� Es una representación identada, en un idioma base.� No puede ser ejecutado por una computadora.

� Un buen algoritmo debe tener las propiedades de:� Exactitud y Corrección.� Especificar claramente sus entradas y cada instrucción sin ambigüedad.� Etapas bien definidas y finitas.� Descripción de resultado o efecto.� Fácil de entender, codificar y depurar.� Eficiente uso del computador.

� Programas: Es la representación concreta de un Algoritmo (su traducción) codificado en un lenguaje de programación.� Debe ser Verificable y Eficiente

Verificación

� Es la evaluación de la solución y su potencial uso como herramienta.

� Un Algoritmo es Correcto: si se obtiene la respuesta para la cual fue creado.

� Es una prueba Formal de la exactitud de los resultados obtenidos:

� Prueba de Escritorio1. Comienza con la Hipótesis de que las Precondiciones se

cumplen antes de empezar la ejecución.2. Termina con una PostCondición o condiciones que deben

cumplir la Salida.

Eficiencia

� La Eficiencia se obtiene del Análisis de Algoritmos:� Dimensión Temporal: Medida del tiempo empleado.� Dimensión Espacial: Medida de los recursos invertidos.

� Encontrar Algoritmos eficientes puede definir si Existe o no una Solución al Problema.

� El Análisis de Algoritmos se centra en el estudio de los Bucles, del cual en última instancia, dependerán las instrucciones a ser ejecutadas.� No se puede realizar un análisis del número de Instrucciones de

máquina pues son dependientes de las tecnologías (RISC, CISC, VLIS).

Eficiencia = F(n)siendo n la cantidad de elementos a ser procesados

Eficiencia (Ordenes de Magnitud)

� Bucles Lineales: � E = F(n)= n

� Bucles logarítmicos: avance i*=a� E = F(n)= Log2 n� E = F(n)= Loga n

� Bucles Anidados: para “y” bucles de “n” iteraciones c/u� E = F(n)= n1*n2*…..ny= ny

� Recursividad: se invoca “K” veces a si mismo con un lote inicial “n”� E = F(n)= kn

i=0Mientras i<n

Códigoi++

Fin M

i=1Mientras i<n

Códigoi*=2

Fin M

Medición de la Eficiencia

� Una buena estimación de la Eficiencia debe ser independiente de aspectos de implementación (la plataforma y el Lenguaje con que se codificará) pero debe reflejar sus diferencias:� Se usa el Orden de Magnitud de la Eficiencia del Tiempo y de los Recursos.

� Se lo complementa con la Tasa de crecimiento del programa para evaluar su comportamiento a Futuro.

Medición de la Eficiencia

� ¿Cómo comparar la Eficiencia Real de 2 Algoritmos?� Programándolos, implementándolos y midiendo para el mismo Lote de Prueba: el tiempo de ejecución y los recursos utilizados.

� Suele ser caro, y una vez realizado no suele ser sencillo volver atrás y corregir.

6

Análisis de Rendimiento

� Mediante la complejidad en el Tiempo y en el Espacio� Complejidad en el Tiempo: cantidad de tiempo necesario para la

ejecución� Complejidad en el Espacio: cantidad de memoria necesaria para

la ejecución

� Tiempo de Ejecución: dependerá del programa y de su entrada (carga de trabajo).� El tiempo medio suele ser mas realista. Para usarlo todos los

tipos de entradas son equiprobables.� El Tiempo Máximo depende de la Carga Máxima: y no siempre

se puede establecer con claridad o es estadísticamente variable

Tiempo de Ejecución� El tiempo total para una Función se puede determinar por el tiempo requerido para cada instrucción, multiplicadas por las veces que se ejecutan.� i=0 t1

� Mientras i<n t2� i++ t3

� Fin Mientras t4

� T(n)= t1+n*t2+n*t3+t4= n(t2+t3)+t1+t4� Eficiencia F(n)=n

Complejidad espacial� Cantidad de memoria para alcanzar la solución.

� Dependerá del lenguaje elegido.

� En el ejemplo las variables “i, n” variables positivas y enteras.� En lenguaje C, siendo Char, usa 1 bytes c/u

� Memoria = 2bytes

� En Lenguaje Pascal, usando Char o Integer, usará 2 bytes cada Uno.

� Memoria = 4bytes.

� El Algoritmo implementado en Lenguaje C tiene menor complejidad Espacial.

i=0Mientras i<n

Códigoi++

Fin Mientras

Trabajos Prácticos

COMO MINIMO, REALIZAR:� De la Bibliografía

� Del Capitulo 1: Ejercicios: 1.1, 1.2, 1.3, 1.4, 1.5, 1.6,1.8, 1.9, 1.12, 1.13, 1.15

� Del Capitulo 2: Ejercicios: 2.5, 2.7, 2.8

Intersección Intersección

AB AC AD

7

Intersección

AB AC AD

BA BC BD

Intersección

AB AC AD

BA BC BD

DA DB DC

Intersección

AB AC AD

BA BC BD

DA DB DC

EA EB EC ED

Intersección

AB AC AD

BA BC BD

DA DB DC

EA EB EC ED

Intersección

AB AC AD

BA BC BD

DA DB DC

EA EB EC ED

Intersección

AB AC AD

BA BC BD

DA DB DC

EA EB EC ED

8

Intersección

AB AC AD

BA BC BD

DA DB DC

EA EB EC ED

Intersección

AB AC AD

BA BC BD

DA DB DC

EA EB EC ED

Intersección

AB AC AD

BA BC BD

DA DB DC

EA EB EC ED

Intersección

AB AC AD

BA BC BD

DA DB DC

EA EB EC ED

Intersección

AB AC AD

BA BC BD

DA DB DC

EA EB EC ED

Intersección

AB AC AD

BA BC BD

DA DB DC

EA EB EC ED

9

Intersección

AB AC AD

BA BC BD

DA DB DC

EA EB EC ED

Intersección

AB AC AD

BA BC BD

DA DB DC

EA EB EC ED

Intersección

AB AC AD

BA BC BD

DA DB DC

EA EB EC ED

Intersección

AB AC AD

BA BC BD

DA DB DC

EA EB EC ED

Intersección

AB AC AD

BA BC BD

DA DB DC

EA EB EC ED

Intersección

AB AC AD

BA BC BD

DA DB DC

EA EB EC ED

10

Intersección

AB AC AD

BA BC BD

DA DB DC

EA EB EC ED

Intersección

AB AC AD

BA BC BD

DA DB DC

EA EB EC ED

Intersección

AB AC AD

BA BC BD

DA DB DC

EA EB EC ED

AB AC AD BA BC BD DA DB DC EA EB EC ED

AB

AC

AD

BA

BC

BD

DA

DB

DC

EA

EB

EC

ED

Intersección

AB AC AD

BA BC BD

DA DB DC

EA EB EC ED

AB AC AD BA BC BD DA DB DC EA EB EC ED

AB 1 1 1 1

AC 1 1 1 1 1

AD 1 1 1

BA

BC 1 1 1

BD 1 1 1 1 1

DA 1 1 1 1 1

DB 1 1 1

DC

EA 1 1 1

EB 1 1 1 1 1

EC 1 1 1 1

ED

Intersección

AB AC AD

BA BC BD

DA DB DC

EA EB EC ED

1.- Seleccionar vértice sin colorear y pintarlo de un color.

2.- Recorrer lista de vértices sin colorear. Para cada vértice sin colorear, determinar si ya posee una arista para cualquier vértice coloreado (pintado del mismo color). Si no existen aristas, pintar vértice con el mismo color.

Intersección

AB AC AD

BA BC BD

DA DB DC

EA EB EC ED

1.- Seleccionar vértice sin colorear y pintarlo de un color.

2.- Recorrer lista de vértices sin colorear. Para cada vértice sin colorear, determinar si ya posee una arista para cualquier vértice coloreado (pintado del mismo color). Si no existen aristas, pintar vértice con el mismo color.

11

Intersección

AB AC AD

BA BC BD

DA DB DC

EA EB EC ED

1.- Seleccionar vértice sin colorear y pintarlo de un color.

2.- Recorrer lista de vértices sin colorear. Para cada vértice sin colorear, determinar si ya posee una arista para cualquier vértice coloreado (pintado del mismo color). Si no existen aristas, pintar vértice con el mismo color.

Intersección

AB AC AD

BA BC BD

DA DB DC

EA EB EC ED

1.- Seleccionar vértice sin colorear y pintarlo de un color.

2.- Recorrer lista de vértices sin colorear. Para cada vértice sin colorear, determinar si ya posee una arista para cualquier vértice coloreado (pintado del mismo color). Si no existen aristas, pintar vértice con el mismo color.

Intersección

AB AC AD

BA BC BD

DA DB DC

EA EB EC ED

1.- Seleccionar vértice sin colorear y pintarlo de un color.

2.- Recorrer lista de vértices sin colorear. Para cada vértice sin colorear, determinar si ya posee una arista para cualquier vértice coloreado (pintado del mismo color). Si no existen aristas, pintar vértice con el mismo color.

Intersección

AB AC AD

BA BC BD

DA DB DC

EA EB EC ED

1.- Seleccionar vértice sin colorear y pintarlo de un color.

2.- Recorrer lista de vértices sin colorear. Para cada vértice sin colorear, determinar si ya posee una arista para cualquier vértice coloreado (pintado del mismo color). Si no existen aristas, pintar vértice con el mismo color.

Intersección

AB AC AD

BA BC BD

DA DB DC

EA EB EC ED

1.- Seleccionar vértice sin colorear y pintarlo de un color.

2.- Recorrer lista de vértices sin colorear. Para cada vértice sin colorear, determinar si ya posee una arista para cualquier vértice coloreado (pintado del mismo color). Si no existen aristas, pintar vértice con el mismo color.

Intersección

AB AC AD

BA BC BD

DA DB DC

EA EB EC ED

1.- Seleccionar vértice sin colorear y pintarlo de un color.

2.- Recorrer lista de vértices sin colorear. Para cada vértice sin colorear, determinar si ya posee una arista para cualquier vértice coloreado (pintado del mismo color). Si no existen aristas, pintar vértice con el mismo color.

12

Intersección

AB AC AD

BA BC BD

DA DB DC

EA EB EC ED

1.- Seleccionar vértice sin colorear y pintarlo de un color.

2.- Recorrer lista de vértices sin colorear. Para cada vértice sin colorear, determinar si ya posee una arista para cualquier vértice coloreado (pintado del mismo color). Si no existen aristas, pintar vértice con el mismo color.

Intersección

AB AC AD

BA BC BD

DA DB DC

EA EB EC ED

1.- Seleccionar vértice sin colorear y pintarlo de un color.

2.- Recorrer lista de vértices sin colorear. Para cada vértice sin colorear, determinar si ya posee una arista para cualquier vértice coloreado (pintado del mismo color). Si no existen aristas, pintar vértice con el mismo color.

Intersección

AB AC AD

BA BC BD

DA DB DC

EA EB EC ED

1.- Seleccionar vértice sin colorear y pintarlo de un color.

2.- Recorrer lista de vértices sin colorear. Para cada vértice sin colorear, determinar si ya posee una arista para cualquier vértice coloreado (pintado del mismo color). Si no existen aristas, pintar vértice con el mismo color.

Intersección

AB AC AD

BA BC BD

DA DB DC

EA EB EC ED

1.- Seleccionar vértice sin colorear y pintarlo de un color.

2.- Recorrer lista de vértices sin colorear. Para cada vértice sin colorear, determinar si ya posee una arista para cualquier vértice coloreado (pintado del mismo color). Si no existen aristas, pintar vértice con el mismo color.

Intersección

AB AC AD

BA BC BD

DA DB DC

EA EB EC ED

1.- Seleccionar vértice sin colorear y pintarlo de un color.

2.- Recorrer lista de vértices sin colorear. Para cada vértice sin colorear, determinar si ya posee una arista para cualquier vértice coloreado (pintado del mismo color). Si no existen aristas, pintar vértice con el mismo color.

Intersección

AB AC AD

BA BC BD

DA DB DC

EA EB EC ED

1.- Seleccionar vértice sin colorear y pintarlo de un color.

2.- Recorrer lista de vértices sin colorear. Para cada vértice sin colorear, determinar si ya posee una arista para cualquier vértice coloreado (pintado del mismo color). Si no existen aristas, pintar vértice con el mismo color.

13

Intersección

AB AC AD

BA BC BD

DA DB DC

EA EB EC ED

1.- Seleccionar vértice sin colorear y pintarlo de un color.

2.- Recorrer lista de vértices sin colorear. Para cada vértice sin colorear, determinar si ya posee una arista para cualquier vértice coloreado (pintado del mismo color). Si no existen aristas, pintar vértice con el mismo color.

Intersección

AB AC AD

BA BC BD

DA DB DC

EA EB EC ED

1.- Seleccionar vértice sin colorear y pintarlo de un color.

2.- Recorrer lista de vértices sin colorear. Para cada vértice sin colorear, determinar si ya posee una arista para cualquier vértice coloreado (pintado del mismo color). Si no existen aristas, pintar vértice con el mismo color.

Intersección

AB AC AD

BA BC BD

DA DB DC

EA EB EC ED

1.- Seleccionar vértice sin colorear y pintarlo de un color.

2.- Recorrer lista de vértices sin colorear. Para cada vértice sin colorear, determinar si ya posee una arista para cualquier vértice coloreado (pintado del mismo color). Si no existen aristas, pintar vértice con el mismo color.

Intersección

AB AC AD

BA BC BD

DA DB DC

EA EB EC ED

1.- Seleccionar vértice sin colorear y pintarlo de un color.

2.- Recorrer lista de vértices sin colorear. Para cada vértice sin colorear, determinar si ya posee una arista para cualquier vértice coloreado (pintado del mismo color). Si no existen aristas, pintar vértice con el mismo color.

Intersección

AB AC AD

BA BC BD

DA DB DC

EA EB EC ED

1.- Seleccionar vértice sin colorear y pintarlo de un color.

2.- Recorrer lista de vértices sin colorear. Para cada vértice sin colorear, determinar si ya posee una arista para cualquier vértice coloreado (pintado del mismo color). Si no existen aristas, pintar vértice con el mismo color.

Intersección

AB AC AD

BA BC BD

DA DB DC

EA EB EC ED

1.- Seleccionar vértice sin colorear y pintarlo de un color.

2.- Recorrer lista de vértices sin colorear. Para cada vértice sin colorear, determinar si ya posee una arista para cualquier vértice coloreado (pintado del mismo color). Si no existen aristas, pintar vértice con el mismo color.

14

Intersección

AB AC AD

BA BC BD

DA DB DC

EA EB EC ED

1.- Seleccionar vértice sin colorear y pintarlo de un color.

2.- Recorrer lista de vértices sin colorear. Para cada vértice sin colorear, determinar si ya posee una arista para cualquier vértice coloreado (pintado del mismo color). Si no existen aristas, pintar vértice con el mismo color.

Intersección

AB AC AD

BA BC BD

DA DB DC

EA EB EC ED

1.- Seleccionar vértice sin colorear y pintarlo de un color.

2.- Recorrer lista de vértices sin colorear. Para cada vértice sin colorear, determinar si ya posee una arista para cualquier vértice coloreado (pintado del mismo color). Si no existen aristas, pintar vértice con el mismo color.

Intersección

AB AC AD

BA BC BD

DA DB DC

EA EB EC ED

1.- Seleccionar vértice sin colorear y pintarlo de un color.

2.- Recorrer lista de vértices sin colorear. Para cada vértice sin colorear, determinar si ya posee una arista para cualquier vértice coloreado (pintado del mismo color). Si no existen aristas, pintar vértice con el mismo color.

Intersección

AB AC AD

BA BC BD

DA DB DC

EA EB EC ED

1.- Seleccionar vértice sin colorear y pintarlo de un color.

2.- Recorrer lista de vértices sin colorear. Para cada vértice sin colorear, determinar si ya posee una arista para cualquier vértice coloreado (pintado del mismo color). Si no existen aristas, pintar vértice con el mismo color.

Intersección

AB AC AD

BA BC BD

DA DB DC

EA EB EC ED

1.- Seleccionar vértice sin colorear y pintarlo de un color.

2.- Recorrer lista de vértices sin colorear. Para cada vértice sin colorear, determinar si ya posee una arista para cualquier vértice coloreado (pintado del mismo color). Si no existen aristas, pintar vértice con el mismo color.

Intersección

AB AC AD

BA BC BD

DA DB DC

EA EB EC ED

1.- Seleccionar vértice sin colorear y pintarlo de un color.

2.- Recorrer lista de vértices sin colorear. Para cada vértice sin colorear, determinar si ya posee una arista para cualquier vértice coloreado (pintado del mismo color). Si no existen aristas, pintar vértice con el mismo color.

15

Intersección

AB AC AD

BA BC BD

DA DB DC

EA EB EC ED

1.- Seleccionar vértice sin colorear y pintarlo de un color.

2.- Recorrer lista de vértices sin colorear. Para cada vértice sin colorear, determinar si ya posee una arista para cualquier vértice coloreado (pintado del mismo color). Si no existen aristas, pintar vértice con el mismo color.

Intersección

AB AC AD

BA BC BD

DA DB DC

EA EB EC ED

1.- Seleccionar vértice sin colorear y pintarlo de un color.

2.- Recorrer lista de vértices sin colorear. Para cada vértice sin colorear, determinar si ya posee una arista para cualquier vértice coloreado (pintado del mismo color). Si no existen aristas, pintar vértice con el mismo color.

Intersección

AB AC AD

BA BC BD

DA DB DC

EA EB EC ED

1.- Seleccionar vértice sin colorear y pintarlo de un color.

2.- Recorrer lista de vértices sin colorear. Para cada vértice sin colorear, determinar si ya posee una arista para cualquier vértice coloreado (pintado del mismo color). Si no existen aristas, pintar vértice con el mismo color.

Intersección

AB AC AD

BA BC BD

DA DB DC

EA EB EC ED

1.- Seleccionar vértice sin colorear y pintarlo de un color.

2.- Recorrer lista de vértices sin colorear. Para cada vértice sin colorear, determinar si ya posee una arista para cualquier vértice coloreado (pintado del mismo color). Si no existen aristas, pintar vértice con el mismo color.

Intersección

AB AC AD

BA BC BD

DA DB DC

EA EB EC ED

1.- Seleccionar vértice sin colorear y pintarlo de un color.

2.- Recorrer lista de vértices sin colorear. Para cada vértice sin colorear, determinar si ya posee una arista para cualquier vértice coloreado (pintado del mismo color). Si no existen aristas, pintar vértice con el mismo color.

Intersección

AB AC AD

BA BC BD

DA DB DC

EA EB EC ED

1.- Seleccionar vértice sin colorear y pintarlo de un color.

2.- Recorrer lista de vértices sin colorear. Para cada vértice sin colorear, determinar si ya posee una arista para cualquier vértice coloreado (pintado del mismo color). Si no existen aristas, pintar vértice con el mismo color.

16

Intersección

AB AC AD

BA BC BD

DA DB DC

EA EB EC ED

1.- Seleccionar vértice sin colorear y pintarlo de un color.

2.- Recorrer lista de vértices sin colorear. Para cada vértice sin colorear, determinar si ya posee una arista para cualquier vértice coloreado (pintado del mismo color). Si no existen aristas, pintar vértice con el mismo color.

Intersección

AB AC AD

BA BC BD

DA DB DC

EA EB EC ED

Solución con Algoritmo Ávido:

Color Turnos

ROJO: AB, AC, AD, BA, DC, ED

AZUL: BC, BD, EA

AMARILLO: DA, DB

VERDE: EB, EC

Intersección

Solución con Algoritmo Ávido:

Color Turnos

ROJO: AB, AC, AD, BA, DC, ED

AZUL: BC, BD, EA

AMARILLO: DA, DB

VERDE: EB, EC

Intersección

Solución con Algoritmo Ávido:

Color Turnos

ROJO: AB, AC, AD, BA, DC, ED

AZUL: BC, BD, EA

AMARILLO: DA, DB

VERDE: EB, EC

Intersección

Solución con Algoritmo Ávido:

Color Turnos

ROJO: AB, AC, AD, BA, DC, ED

AZUL: BC, BD, EA

AMARILLO: DA, DB

VERDE: EB, EC

Intersección

Solución con Algoritmo Ávido:

Color Turnos

ROJO: AB, AC, AD, BA, DC, ED

AZUL: BC, BD, EA

AMARILLO: DA, DB

VERDE: EB, EC

17

L.F.M. 97

Estructura de DatosTipos Abstractos de Datos (TAD’S)

98

INTRODUCCIÓN

Para poder obtener un programa que resuelva un problema dado, son necesarios varios pasos:

� La formulación y especificación del problema � El diseño de una solución � La implementación � Las pruebas y documentación� Evaluación de la solución

99

¿Como obtener a partir de un problema, un programa que lo resuelva?

� Importante: saber claramente lo que se quiere resolver (especificaciones claras).

� Hay problemas que no tienen definido un modelo claro, que sólo se puede definir experimentando.

� Otros se pueden plantear usando modelos formales: hay un modelamiento que se soporta en una teoría bien definida (matemática, física, ciencias de la computación, etc.)

100

� Una vez conocido el modelo del problema, se intenta resolver basándose en el modelo.

� Esta solución se alcanza mediante la aplicación de un algoritmo.

� Algoritmo: una secuencia finita de instrucciones, cada una de ellas con un significado claro, que tienen que realizarse con una cantidad finita de esfuerzo y en un tiempo finito.

TDA

INSTANCIA-CIONES

ESTRUCTURA DE DATOS

TIPOS DEDATOS

ABSTRACTOS

MODELOMATEMATICO

EJECUCION EN LA

MAQUINA

PROGRAMA EN EL

LENGUAJE

PROGRAMA EN PSEUDO-

CODIGO

ALGORITMOINFORMAL

102

Especificación del problema

Algoritmo

Definición de TDA’s

Programa

18

103

Abstracción - Modelo

� Uno de los objetivos de la computación es resolver problemas.� Normalmente los problemas son confusos y lo primero que se tiene

que hacer es entender el problema para apartar los detalles no esenciales y dejar sólo los que sirven.

� Se debe hacer su propia representación abstracta o modelo del problema. Este proceso se llama abstracción.

Problema

modelos

abstracción

104

Abstracción - Modelo

� El modelo define una perspectiva abstracta del problema.

� El modelo se enfoca sólo en aspectos relacionados con el problema, definiendo sólo las propiedades del problema.

� Estas propiedades incluyen:� los datos que son afectados,� las operaciones que son identificadas por el problema.

105

Tipo de datos (TD)

Concepto� En un lenguaje de programación, el tipo de datos de una

variable (o constante o resultado de una función) está determinado por:� conjunto de valores que dicha variable puede tomar� conjunto de operaciones que se pueden realizar con variables del mencionado tipo (argumentos y/o resultado).

106

Tipo de datos (TD)

Ejemplo:

� El tipo boolean tiene dos valores: {false, true} � Una variable boolean puede tomar sólo uno de esos

valores; � Operaciones booleanas: la negación, la conjunción y la

disyunción cuya representación es: not, and y or respectivamente.

107

Representación en el computador de los datos o

características relevantes de un objeto o de un concepto.

Los datos o características que se consideran relevantes

dependen del contexto en que se aplican.

Estructura de DatosEstructura de DatosEstructura de DatosEstructura de DatosEstructura de DatosEstructura de DatosEstructura de DatosEstructura de Datos

• centro

• radio

• color

datoscírculo

C1

108

Estructura de datos

� Una estructura de datos es una colección de variables organizadas de alguna manera determinada.

� Es una manera de almacenar y organizar datos para facilitar el acceso, modificaciones y poder operar con sus elementos.

� Se construyen mediante agrupamiento de elementos básicos de almacenamiento.� Agrupamientos reciben un nombre que se puede usar para formar otras estructuras.

19

109

Para formar las agrupaciones existen varios mecanismos:

• Arreglo: formado por una secuencia de celdas o estructuras

de tipos iguales. Cada celda de un arreglo se referencia

mediante un índice.

• Registro: formado por una colección de celdas, campos, de

tipos posiblemente distintos. Se pueden agrupar en arreglos.

Estructura de datos

110

Abstracción de Datos - TAD

� Un TDA es un tipo de dato definido por el programadorque se puede manipular de un modo similar a los tipos de datos definidos por el lenguaje,

� Los TDA constituyen una forma de generalización y encapsulamiento de los aspectos más importantes de la información que se debe manejar en la resolución de un problema, sin considerar las cuestiones relativas a la implementación.

111

Abstracción de Datos - TAD

� Un TDA es una generalización de los tipos de datos básicos y de las operaciones primitivas.

TAD = Representación + Operaciones

(estruct. de datos) (métodos)

112

Abstracción de Datos - TAD

Ejemplo:� int vector [10]; declaración del arreglo

vector

insertar

buscar

asignar

sumar

eliminar

113

Formalmente el TDA es una tripleta (D, F, A) con los siguientes

componentes:

• Un conjunto de dominios, D

• Un conjunto de funciones sobre los dominios, F

• Un conjunto de axiomas o propiedades definidas a partir de

las funciones y elementos de los dominios, A

DefiniciónDefinición

114

Abstracción de Datos - TAD

� Un TAD engloba dos clases de abstracciones:

� Abstracciones de datos.

� Abstracciones funcionales.

20

115

Abstracción de Datos - TAD

� Abstracciones de datos

� Aparecen al abstraer el significado de los diferentes tipos de datos significativos que intervienen en el problema.

� Permiten definir nuevos tipos de datos especificando sus posibles valores y las operaciones que los manipulan.

� Abstracciones funcionales

� Surgen al plantearse de una manera abstracta las operaciones significativas del problema.

� Permiten dar a una aplicación operaciones que no están definidas directamente en el lenguaje en el que se está trabajando.

116

¿Cómo realizar la especificación formal un TDA?

� Definición del tipo: Se debe indicar � el nombre tanto del TDA y del elemento base del mismo y/o otros TDA involucrados en la definición del TDA

� los invariantes de representación.

� Invariante de un TDA (Dominio de la estructura): Es una proposición que expresa el conjunto de valores válidos del TDA. � El invariante permite saber qué elementos pertenecen o no al TDA (opcional).

117

� La especificación de un TDA es la descripción del comportamiento del mismo. Debe formalizarse.� Indica qué hace el TDA.

� Especificar la sintaxis correspondiente a las operaciones propias del TDA, o primitivas del mismo.

¿Cómo realizar la especificación formal un TDA?

118

Tipos de especificaciones formales de un TDA:

1. Axiomática: expresión de la forma de las operaciones, indicando las reglas a seguir para realizar cada operación.

2. Semántica: expresión de la operatoria de las operaciones.� Se especifican las consecuencias de las operaciones para el

TDA. � Se da mediante el lenguaje natural, o mediante especificación

algebraica.� Generalmente con notación funcional, se indica sobre qué

conjunto actúan las operaciones y qué dan como resultado.

119

Descripción de las operaciones

Cada operación relacionada con la estructura se describe con:

� Nombre de la operación.� Descripción breve de su utilidad.� Datos de entrada a la operación� Datos que genera como salida la operación.� Pre-condición: Condición que deberá cumplirse antes de

utilizar la operación para que se realice sin problemas� Post-condición:Condición en que queda el TDA después

de ejecutar la operación.

120

Ejemplo: Especificación Lógica del TDA Cadena

� Elementos:� todos los caracteres alfabéticos (letras mayúsculas y

minúsculas), caracteres numéricos y caracteres especiales.

� Estructura: hay una relación lineal entre los caracteres.

� Dominio: existen entre 0 y 80 caracteres en cada valor del TDA CADENA. � El dominio serán todas aquellas secuencias de caracteres que

cumplan con las reglas.

21

121

� Operaciones:� BORRA_INICIO

� UTILIDAD: Sirve para eliminar el primer carácter de una cadena.

� ENTRADA: Cadena S sobre la que se desea eliminar el primer carácter.

� SALIDA: El carácter más a la izquierda de la cadena S y la cadena S modificada.

� PRECONDICIÓN: La cantidad de caracteres es mayor que cero.

� POSTCONDICIÓN: La cadena S tiene todos los caracteres, menos el primero.

Ejemplo: Especificación Lógica del TDA Cadena

122

� Operaciones: (continuación)� AGREGA_FINAL

� UTILIDAD: Sirve para agregar un carácter al final de una cadena.

� ENTRADA: Cadena S y el carácter L, que se añadirá a la cadena S.

� SALIDA: Cadena S modificada.� PRECONDICIÓN: La cantidad de caracteres en S es menor

que 80.� POSTCONDICIÓN: La cadena S tiene el carácter L que

queda al extremo derecho de la cadena.

Ejemplo: Especificación Lógica del TDA Cadena

123

� Operaciones: (continuación)� VACÍA

� UTILIDAD: Sirve para verificar si una cadena esta vacía o no.

� ENTRADA: Cadena S que se verificará� SALIDA: VERDADERO si la cadena S no tiene caracteres,

FALSO en caso contrario.� PRECONDICIÓN : Ninguna� POSTCONDICIÓN: Ninguna (pues la cadena S no se

modifica).

Ejemplo: Especificación Lógica del TDA Cadena

124

� Operaciones: (continuación)� LLENA

� UTILIDAD: Sirve para verificar si una cadena esta llena o no.

� ENTRADA: cadena S que será verificada.� SALIDA: VERDADERO si la cadena S contiene ya 80

caracteres, FALSO en caso contrario.� PRECONDICIÓN : Ninguna� POSTCONDICIÓN: Ninguna (pues la cadena S no se

modifica).

Ejemplo: Especificación Lógica del TDA Cadena

125

� Operaciones: (continuación)� INVIERTE

� UTILIDAD: Sirve para invertir el orden de los caracteres en una cadena.

� ENTRADA: Cadena S a la que se desea invertir el orden de los caracteres.

� SALIDA: Cadena S modificada.� PRECONDICIÓN: Ninguna� POSTCONDICIÓN: La secuencia de caracteres en la

cadena S se invierte, de forma que el primer carácter

Ejemplo: Especificación Lógica del TDA Cadena

126

TAD’s - Representación

� Es la forma concreta en que se representan los datos en un determinado lenguaje de programación.

� Se debe ocultar la representación de los elementos del tipo de modo que sólo se pueda actuar sobre ellos con las operaciones proporcionadas.� Una vez definido se podrán declarar variables de ese tipo y operar con ellas.

22

127

TAD’s - Implementación

� Es la forma específica en que se expresan las operaciones. � Aquí se considerará la estructura de datos más conveniente. � Está dado por un grupo de instrucciones que serán ejecutadas

por el computador, y se escribe en un lenguaje de programación.

� Cada implementación corresponde a alguna especificación. � Normalmente la implementación del tipo se realiza en un

módulo separado que será enlazado al programa principal.� Los algoritmos más la representación da como resultado una

implementación del TAD.

TAD’s - Aplicación� Editor de archivos secuenciales con cinco operaciones:

� Crear un nuevo archivo,� Insertar,� Reemplazar,� Eliminar,� Avanzar y retroceder, actuando siempre sobre el registro actual.

� Para las especificaciones en lenguaje natural hay que describir el nombre de las operaciones a realizar, junto con las excepciones de estas operaciones.

TAD’s - AplicaciónOperaciones:� Archivo_Nuevo (Archivo): Crea un Archivo nuevo sin introducir

ningún registro (número de registros es 0).� Insertar (Archivo, Registro): Inserta un registro después del

registro actual y el nuevo pasa a ser el actual.� Reemplazar (Archivo, Registro): Cambia el registro actual por

el nuevo.� Eliminar (Archivo): Borra el registro actual y una vez eliminado el

actual pasa a ser el siguiente.� Avanzar (Archivo): El registro siguiente pasa a ser el actual.� Retroceder (Archivo): El registro anterior pasa a ser el actual.

130

TAD’s - Ejemplo

� Implementación de las operaciones:

Archivo_Nuevo (Archivo) {

Longitud = 0;

Reg_Actual = 0;

}

131

TAD’s - Ejemplo

Insertar (Archivo, RegNuevo) {for (j = Longitud; j <= RegActual; j--)

Archivo [j+1] = Archivo[j];

Archivo[RegActual+1] = RegNuevo;Longitud ++;RegActual ++;

}

132

TAD’s - Ejemplo

Retroceder (Archivo) {if RegActual != 0

RegActual --;}

23

133

TAD’s - Ejemplo

Eliminar (Archivo) {if RegActual != 0

for( j =Actual; j <= Longitud-1; j++)Archivo[j] = Archivo[j+1];

if RegActual >Longitud RegActual --;

}

134

TAD’s - Ejemplo

Avanzar (Archivo) {if RegActual != Longitud

RegActual ++;}

135

TAD’s - Ejemplo

Reemplazar (Archivo,RegNuevo) {if RegActual != 0

Archivo[RegActual] = RegNuevo;

}

136

el TDA NumeroComplejo

� Definición del tipo� Numero complejo: Conjunto de pares de elementos (a,b) de tipo

entero.

� Operaciones: descripción de cada una de elas� suma :

NumeroComplejo × NumeroComplejo � NumeroComplejo suma((x, y), (u, v)) = (x + u, y + v)

� producto :NumeroComplejo × NumeroComplejo � NumeroComplejoproducto((x, y), ((u, v), = (xu − yv, xv + yu)

� ………

137

el TDA NumeroRacional

� Definición del tipo� Numero racional: Conjunto de pares de elementos (a,b) de tipo

entero, con b ≠ 0.

� Operaciones:� CrearRacional: a, b = (a,b) � División: (a,b) / (c,d) = (a*d , b*c) � Numerador: (a,b) = a � Denominador: (a,b) = b � ValorReal: (a,b) = a/b� Potencia: (a,b)^c = (a^c , b^c)

138

r1 = Crear_Racional (2, 3); r2 = Crear_Racional (5, 7);// s es la suma de r1 y r2

s = Crear_Racional ( Numerador( r1 ) * Denominador ( r2 )+ Numerador ( r2 ) * Denominador ( r1 ),Denominador ( r1 ) * Denominador ( r2 ) );

printf(“ %d / %d “, Numerador ( s ), Denominador ( s ) )

Operación

TAD’s - Ejemplo

24

139

Racional Crear_Racional (Entero n,d) {

Necesita: dos valores enteros, n y d.Produce: el número racional n / d.

Error: si d es cero.

}

ESPECIFICACIÓN

Entero Numerador (Racional r ) {

Necesita: un racional r.Produce: el numerador de r.

}

Entero Denominador (Racional r ) {

Necesita: un racional r.Produce: el denominador de r.

}

140

ImplementaciónImplementación

#define MAX 100

typedef struct Racional {

int num, den;

};

Racional info[MAX]; // arreglo para almacenar los racionales

int ultimo = -1; // para controlar el tamaño del arreglo

1 2 3 4 MAX

num

deninfo

3 8 9

5175

último

Un racional

141

int Crear_Racional (int n, int d, int i) {

if (d == 0) {

printf("\n Error:Division por cero");

getch();

exit(0);

}

else {

info[i].num = n;

info[i].den = d;

ultimo++;

}

return ultimo;

}

ImplementaciónImplementación

142

int Denominador (int r) {

return info[r].den;

}

int Numerador (int r) {

return info[r].num;

}

ImplementaciónImplementación

143

void Imprime_Racional(void) {

int num;

printf("\nIndique la posicion del racional que quiere ver: ");

scanf("%d", &num);

if( num >= ultimo)

printf(“\n Error, fuera de rango”);

else

printf( "\nRacional ingresado es : %d/%d en la posicion %d",

Numerador(num), Denominador(num), num); getch();

}

ImplementaciónImplementación

144

#include <stdio.h>

#include <stdlib.h>

#include <conio.h>

#define MAX 100

typedef struct Racional {

int num, den;

};

Racional info[MAX]; // arreglo donde se almacenaran los

// numeros racionales

int ultimo = -1;

ImplementaciónImplementación

25

145

int main() {

int nume, deno, pos, i, n;

printf("\n Cuantos datos? "); scanf("%d",&n);

if ( n >= ultimo) {

printf(“\n Error, fuera de rango”);

return 1;

}

else

for(i = 0; i < n; i++) {

printf("\nNumerador: "); scanf("%d", &nume);

printf("\nDenominador: "); scanf("%d", &deno);

pos = Crear_Racional(nume, deno, i);

}

Imprime_Racional();

return 0;

}

ImplementaciónImplementación

Material apoyado por apuntes de:

Claudio N. Barúa A., Fac. Politécnica, U. Nacional de Asunción, Py.Aguilar y Martinez: “Algoritmos y Estructuras de datos”.Apuntes de Rolando Simon Titiosky.

147

Bibliografía

� Joyanes A. y Zahonero M. Estructura de datos, algoritmos, abstracción y objetos / Luis Joyanes Aguilar e Ignacio Zahonero Martinez. -- Madrid : McGraw-Hill, 1998. – 858 p.

� Weiss, Mark Allen. Estructura de datos: compatible con Java 2 / Mark Allen Weiss. – Madrid : Addison Wesley, 2000. – 776 p.