Estructuras de datos Solemne 2

Documentos relacionados
Estructuras de datos Solemne 2

Segundo parcial de Programación 2

Programación II Arboles Binarios(AB)

Árboles. Árboles. Árboles binarios de búsqueda. Árboles. Inserción en un árbol. Árbol binario de búsqueda

Ejercicio 2 Considere la representación para Lista de Naturales y Árbol Binario de Naturales de la Figura 1.

Eduardo Mosqueira Rey Bertha Guijarro Berdiñas Mariano Cabrero Canosa

DEFINICION. Ing. M.Sc. Fulbia Torres Asignatura: Estructuras de Datos Barquisimeto 2006

ARBOLES BINARIOS ORDENADOS. REPRESENTACIÓN Y OPERACIONES

Estructuras de Datos Clase 4 Pilas y colas

Estructuras de Datos. 14 de junio de Apellidos

Instituto de Computación. Facultad de Ingeniería. Universidad de la República Examen de Programación 2 03 de Agosto de 2006 Generalidades:

Estructuras Enlazadas AyED UTN-BA

324 MR Versión 1 Prueba Integral 1/3 Semana 10 Lapso

Lista Simple con Puntero al Principio y Puntero al Final

Estructura de datos y de la información Boletín de problemas - Tema 10

IMPLEMENTACIÓN DE PILAS CON LISTAS EN C++

UNIDAD 8 Tipos de datos dinámicos: Punteros Asignación dinámica de memoria. Uso de punteros. Inicialización y asignación de punteros.

Programación II Árboles binarios de búsqueda (ABB)

Estructura de Datos. Árboles Binarios de Búsqueda ABB. Primer Semestre, 2010

Estructuras de Datos Dinámicas: Listas

Estructuras de datos en memoria principal

Definición de árbol. Árboles

UNIDAD 8 Tipos de datos dinámicos: Punteros Asignación dinámica de memoria. Uso de punteros. Inicialización y asignación de punteros.

Solución práctico 6 Tipos Abstractos de Datos Lista, Pila y Cola

Estructuras de Datos Clase 7 Listas e Iteradores (segunda parte)

Estructuras de Datos Clase 14 Árboles binarios de búsqueda

Algoritmos y Estructuras de Datos: Introducción a la Recursión de Programas. Guillermo Román Díez

UNIVERSIDAD AUTONOMA DEL ESTADO DE MEXICO CENTRO UNIVERSITARIO UAEM ATLACOMULCO ESTRUCTURAS DE DATOS ING. GREGORIO GARCIA ESTRADA INTEGRANTES:

Estructura de Datos. Temario Unidad VI. Árboles Árboles Binarios

Temario. Tema 5. Estructuras de Datos no Lineales. 5.1 Árboles Binarios 5.2 Árboles n-arios

Tecnólogo Informático- Estructuras de Datos y Algoritmos- 2009

Tema 8. Listas. José M. Badía, Begoña Martínez, Antonio Morales y José M. Sanchiz

EDA. Tema 8 Colas de Prioridad: Heaps

Programación de sistemas Pilas y Colas

PRÁCTICA No. 13 ÁRBOL BINARIO DE BÚSQUEDA

Estructuras de datos en memoria principal

Árbol ABB equilibrado. Lección: Árboles. Algorítmica II (Tema 4) Lenguajes y Sistemas Informáticos, Universidad Pablo de Olavide 1/ 58

Programación Estructuras Arborescentes

ÁRBOL BINARIO. T der. Árbol binario homogéneo es aquel cuyos nodos tienen grado 0 ó 2(no hay ninguno de grado 1).

UNIDAD 8 Tipos de datos dinámicos: Punteros Asignación dinámica de memoria. Uso de punteros. Inicialización y asignación de punteros.

ÁRBOLES BINARIOS DE BÚSQUEDA (ABB)

Biblioteca de templates. template <typename T> void eliminar(t arr[], int& len, int pos);

Árboles. Cursos Propedéuticos Dr. René Cumplido M. en C. Luis Rodríguez Flores

Estructuras de Datos

LISTAS ENLAZADAS FUNDAMENTOS TEORICOS

ARBOLES ARBOLES BINARIOS ORDENADOS. REPRESENTACIÓN Y OPERACIONES

Versión Iterativa de recuperar en un. Soluciones Ejercicios Tema 11. protected NodoABB<E> recuperarmax(nodoabb<e> n) { while (n.der!= null) n = n.

INGENIERIA DE SISTEMAS 19 ESTRUCTURAS DE DATOS (Listas simples) ARBOLES

Introducción: una simple colección

CLASE 10 - ESTRUCTURAS DE DATOS DINÁMICAS

2. Con una lista ordenada, aunque la localización y eliminación es rápida el problema es en la inserción de datos pues puede ser del orden de O(n).

Programación de sistemas Árboles

NIVEL 15: ESTRUCTURAS RECURSIVAS BINARIAS

UNIVERSIDAD AUTONOMA DE MADRID ESCUELA POLITÉCNICA SUPERIOR ESTRUCTURAS DE DATOS Y ALGORITMOS

Estructuras de Datos Clase 4 Pilas y colas

Implementación de conjuntos sobre ABB en C++

Estructuras de Datos Clase 6 Listas e Iteradores (primera parte)

Descubrir los árboles como paradigma de los tipos Recursivos de Datos

A) PREORDEN B) INORDEN C) POSTORDEN D) NIVELES

Programación de Sistemas GIT, GISC, GISA, GITT

PROGRAMA EDUCATIVO INFORMATICA ADMINISTRATIVA

Un elemento de cualquier clase llamada Info; Un puntero a un nuevo nodo llamado sig; De tal forma una unión de nodos hace que tengamos una lista:

Cursos Propedéuticos 2015

Programación 2 Práctico 9 - TADs Árbol Binario de Búsqueda, Árbol Finitario y Árbol n-ario

Examen de Programación 2 Diciembre de 2012

ESTRUCTURA DE DATOS Y ALGORITMOS Titulación: Ingeniero Técnico en Informática de Gestión Curso: 2º Nombre y apellidos: Nota:

Tema 9. Algoritmos sobre listas. Programación Programación - Tema 9: Algoritmos sobre listas

Universidad Autónoma del Estado de México 2016, Año del 60 Aniversario de la Universidad Autónoma del Estado de México

Tema 6. Gestión dinámica de memoria

ESTRUCTURA DE DATOS Y ALGORITMOS Titulación: Ingeniero Técnico en Informática de Gestión Curso: 2º

6. Listas Generalizadas

ESTRUCTURA DE DATOS Y ALGORITMOS Titulación: Ingeniero Técnico en Informática de Gestión Curso: 2º Nombre y apellidos: Nota:

Tema 10: Árbol binario de búsqueda

La máxima distancia entre dos nodos de un árbol está dada por alguna de las 3 siguientes: La máxima distancia entre dos nodos del subárbol izquierdo.

Estructura de Datos. Listas Enlazadas

Titulación: Ingeniero Técnico en Informática de Gestión Curso: 2º Nombre y apellidos: Nota:

1. Árbol Binario de Búsqueda: Las clases Java NodoABB y ABB. 1. Definición y representación en Java 2. Operaciones y su coste estimado

Titulación: Ingeniero Técnico en Informática de Gestión Curso: 2º. Leonardo DaVinci. Piccasso La Tempestad. Mona Lisa

Clase adicional 9. Listas enlazadas. Temas. Listas enlazadas Árboles Problemas de la clase adicional Ejercicios de diseño

Algoritmos y Estructuras de Datos Iteradores. Guillermo Román Díez

Estructura de datos Colas

Indexación con lista enlazada

Introducción a la computación. Carlos Lopez Pombo

Implementación de las Clases Pila, Cola, Lista y Arbol

TEMA 3. Árboles. Objetivos. Contenidos. Bibliografía. Básica

Tema 7. Colas. José M. Badía, Begoña Martínez, Antonio Morales y José M. Badía. {badia, bmartine,

Estructura de Datos L I S T A

Implementación de las Clases Pila, Cola, Lista y Arbol

Capitulo V Listas Enlazadas

1.2.4 Listas enlazadas

Algorítmica y Complejidad. Tema 3 Ordenación.

Examen de Estructuras de Datos y Algoritmos (Ingeniería Informática)

Estructuras de Datos Clase 20 Árboles de búsqueda

Universidad Autónoma de Madrid Escuela Politécnica Superior

Estructuras de Datos y Algoritmos TDA LISTA

Árboles binarios. Franco Guidi Polanco Escuela de Ingeniería Industrial Pontificia Universidad Católica de Valparaíso, Chile

Multiplicación de matrices simétricas

ELO320 Estructuras de Datos y Algoritmos. Listas. Tomás Arredondo Vidal

Programación de sistemas

Programación II Tema 5. Árboles binarios

Transcripción:

Estructuras de datos Solemne 2 Profesores: Luis Bastías, Rodrigo Paredes, Iván Zuñiga Ayudantes: Patricia Albornoz, Francisco Claude, Hans Ulloa Sin apuntes, 1:30 horas P1. Move-To-Front Lists Utilizando listas dinámicas simples, implemente el TDA Move-to-Front List. Las operaciones del TDA Move-to-Front List son las siguientes: a. (2 puntos) Insert(x): inserta el elemento x al comienzo de la lista. b. (2 puntos) Delete(x): borra al elemento x de la lista (si es que está). c. (2 puntos) Find(x): busca el elemento x en la lista. Si la búsqueda es exitosa mueve el elemento al comienzo de la lista. Nota: si x es el primer elemento no cambia de posición. Respuesta Utilizando listas con un nodo cabeza ficticia head. Pseudocodigo a la C++. void Insert (Elem x) 1. head sig = new Nodo(x, head sig) Nodo *Prev (Elem x) 1. Nodo *aux = head 2. While aux sig!= null Do 3. If aux sig info == x Then Return aux // lo encontré 4. Else aux = aux sig 5. Return null // x no está en la lista 1

void Delete (Elem x) 1. Nodo *auxp = Prev(x) // auxp apunta al anterior de x 2. If auxp == null Then Return // x no está en la lista, nada que hacer 3. Nodo *aux = auxp sig // aux apunta al nodo que contiene x 4. auxp sig = aux sig // descuelgo nodo x 5. delete(aux) // libero la memoria del nodo x boolean Find (Elem x) 1. Nodo *auxp = Prev(x) // auxp apunta al anterior de x 2. If auxp == null Then Return false // x no está en la lista, nada que hacer 3. If auxp == head Then Return true // x está al comienzo de la lista, fin 4. Nodo *aux = auxp sig // aux apunta al nodo que contiene x 5. auxp sig = aux sig 6. aux sig = head sig 7. head sig = aux 8. Return true Soluciones alternativas de Delete y Find sin prev. boolean *Delete (Elem x) 1. If head sig == null Then Return false // lista vacia, nada que hacer 2. Nodo *aux = head 3. While aux sig!= null Do 4. If aux sig info == x Then // lo encontré 5. Nodo *aux2 = aux sig // aux2 apunta al nodo que contiene x 6. aux sig = aux2 sig // descuelgo al nodo x 7. delete(aux2) // libero la memoria del nodo x 8. Return true 9. Else aux = aux sig 10. Return false // x no está en la lista boolean Find (Elem x) 1. If head sig == null Then Return false // lista vacia, nada que hacer 2. If head sig info == x Then 3. Return true // x está al comienzo de la lista, fin 2

4. Nodo *aux = head 5. While aux sig!= null Do 6. If aux sig info == x Then // lo encontré 7. Nodo *aux2 = aux sig // aux2 apunta a x 8. aux sig = aux2 sig, aux2 sig = head sig, head sig = aux 9. Return true 10. Else aux = aux sig 11. Return false // x no está en la lista P2. Colas Dobles Implemente el TDA Cola Doble (CD) utilizando listas de doble enlace. Las operaciones de la cola doble son: a. (1 punto) Insert(x): inserta x al comienzo de la CD. b. (1 punto) Push(x): inserta x al final de la CD. c. (1 punto) Head(): retorna el valor del primer elemento de la CD. d. (1 punto) Tail(): retorna el valor del ultimo elemento de la CD. e. (1 punto) Extract(): extrae el primer elemento de la CD. f. (1 punto) Pop(): extrae el ultimo elemento de la CD. Por simpleza, vamos a usar listas doble enlace con head y tail. Nodos con {inf o, sig, prev}. void Insert (Elem x) 1. head sig = new Nodo(x, head sig, head) 2. head sig sig prev = head sig void Push (Elem x) 1. tail prev = new Nodo(x, tail, tail prev) 2. tail prev prev sig = tail prev 3

Item Head () 1. If head sig = tail Then Return null// lista vacia, nada que hacer 2. Else Return head sig info Item Tail () 1. If head sig = tail Then Return null// lista vacia, nada que hacer 2. Else Return tail prev inf o void Extract () 1. If head sig = tail Then Return // lista vacia, nada que hacer 2. Nodo aux = head sig // guardo un puntero al primer elemento 3. head sig = aux sig 4. head sig prev = head 5. delete(aux) void Pop () 1. If head sig = tail Then Return // lista vacia, nada que hacer 2. Nodo aux = tail prev // guardo un puntero al ultimo elemento 3. tail prev = aux prev 4. tail prev sig = tail 5. delete(aux) P3. Treesort Considere que tiene una colección de n numeros, con elementos repetidos. Considere que en total son c clases de distintos números. Por ejemplo, en la colección {1 5 2 4 6 1 3 2 3 6 4 2 1 6 3}, se tienen 15 números y hay 6 clases distintas. a. (4.5 puntos) Proponga un algoritmo que permita ordenar la colección de números utilizando un árbol de búsqueda binaria en tiempo O(n log c) en promedio. b. (1.5 puntos) Justifique el costo. 4

Respuesta Parte a. Vamos a usar un ABB en que los nodos tienen los campos {Item info, int rep, Nodo izq, Nodo der}. Los nodos están ordenados según info, que para estos efectos, sin perder generalidad, vamos a suponer que son enteros. Lo importante acá va a ser modificar el método de inserción en un ABB. Esto es, cuando insertamos un elemento, si es nuevo lo marcamos con una repetición, pero si es antiguo, le incrementamos el contador. Entonces, primero viene el método de inserción, y luego el que ordena los elementos en con el árbol. ABB *Insert (ABB *raiz, Item x) // version recursiva 1. If raiz == null Then raiz = new Nodo(x,1,null,null) 2. Else If raiz info == x Then raiz rep = raiz rep + 1 3. Else If raiz info > x Then raiz izq = Insert(raiz izq, x) 4. Else raiz der = Insert(raiz der, x) 5. Return raiz ABB *Insert (ABB *raiz, Item x) // version no recursiva 1. If raiz = null Then Return raiz = new Nodo(x,1,null,null) 2. aux = raiz 3. While aux!= null Do 4. If aux info == x Then aux rep = aux rep + 1, Return 5. Else If aux info > x Then aux = aux izq 6. Else aux = aux der 7. aux = new Nodo(x,1,null,null) void Ordena (Lista l) 1. ABB a 2. For i = 0...l.lenght()-1 Do 3. a = Insert(a, l[i]) Parte b. El costo del algoritmo es O(n logc) en promedio por lo siguiente. Como el ABB tiene c nodos, uno por cada clase, cada inserción tiene costo O(log c) en promedio. Se realizan n inserciones en este ABB luego el costo total es O(n log c) en promedio. 5