1 Extensión de un Estructura de Datos Agustín J. González ELO-320: Estructura de Datos y Algoritmos.

Slides:



Advertisements
Presentaciones similares
5. Estructuras no lineales estáticas y dinámicas
Advertisements

ESTRUCTURA DE DATOS Unidad 04 Árboles BINARIOS.
ESTRUCTURA DE DATOS Unidad 04 Árboles BINARIOS DE BUSQUEDA.
GRAFOS ESTRUCTURAS DE DATOS.
ÁRBOLES EN C UNIVERSIDAD “ALONSO DE OJEDA” Facultad de Ingeniería
Unidad 5 Listas Enlazadas Bibliografía: Algoritmos y Estructuras de datos de Aguilar y Martinez. Unidad 9 Autor: Ing Rolando Simon Titiosky.
Listas enlazadas c++ Prof. Franklin Cedeño.
Estructuras de datos y algoritmos
1 Extensión de un Estructura de Datos Agustín J. González ELO-320: Estructura de Datos y Algoritmos.
Programación y Estructuras de Datos
Operaciones sobre un árbol
Árboles binarios. Algoritmos básicos
Tratamiento de listas en Java
Tema 4 Árboles. Árbol sobre matriz.
ESTRUCTURAS DE DATOS AVANZADAS
Cont. Arbol Binario de Búsqueda
Árboles balanceados AVL
Programación II Colas Igor Santos Grueiro.
Unidad 3 Punteros.
Oscar Bedoya. Edificio 331, 2º piso, E.I.S.C. Estructuras de datos y algoritmos.
ÁRBOLES DE EXPRESION.
Cont. Arbol Binario de Búsqueda (2). Sobre los recorridos Las versiones recursivas de los recorridos son costosas debido a la gran cantidad de llamadas.
Diplomado en Informática Aplicada
Almacenamiento y Recuperacion de Información TAD_ABB Ana Lilia Laureano Cruces Universidad Autónoma Metroplotiana.
Estructuras dinámicas de datos, TAD Lista, parte 2
Igor Santos Grueiro. De este tipo de pilas NO vamos a hablar.
Arboles Binarios de expresiones
ÁRBOLES BINARIOS DE BÚSQUEDA
C++ LISTAS C++ 11/04/2017 Ing. Edgar Ruiz Lizama.
Estructuras de Datos MC Beatriz Beltrán Martínez.
Ordenamiento, Heapsort y Colas de prioridad
ARBOLES ESTRUCTURAS DE DATOS.
7.  El TDA Diccionario.
Single-Source Shortest Paths “Camino más corto desde/hacia una fuente”
Estructura de Datos y Algoritmos
Estructuras de Datos Arreglos.
Estructura de Datos En C++
Árboles binarios de búsqueda
Arboles M.C. José Andrés Vázquez FCC/BUAP
Métodos de Búsqueda Informada. Búsqueda de la mejor Ruta En esta sección no sólo nos interesa encontrar una posible ruta, sino obtener aquella ruta que.
ARBOLES ESTRUCTURAS DE DATOS.
1 Estructuras de Datos Elementales:stacks (pilas), queues (colas), linked lists (listas enlazadas), y rooted trees (árboles con raíz) Agustín J. González.

Árboles AVL cont..
Árboles Recomendado: 1. Nivelación Funciones
Árboles1UVM Árboles. 2UVM Árboles3UVM 6.1 Objetivos El estudiante manejará el tad Arbol, sobre memoria dinámica.
Árboles Binarios Estructuras de Datos.
1 Algoritmos Avaros (Greedy Algorithms) Agustín J. González ELO-320: Estructura de Datos y Algoritmos 1er. Sem
Árboles de Búsqueda Binaria
1 Ordenamiento y estadísticas de orden Agustín J. González ELO 320: Estructura de Datos y Algoritmos.
Listas Ligadas Simples. Definíción I  Es, en sencillas palabras. un grupo de datos organizados secuencialmente, pero a diferencia de los arreglos, la.
1 Ordenamiento en tiempo lineal y Estadísticas de orden Agustín J. González ELO320: Estructura de Datos y Algoritmos 1er. Sem 2002.
Unidad 4: LISTAS.
1 Tablas HASH Agustín J. González ELO320: Estructura de Datos y Algoritmos.
1 Single-Source Shortest Paths “Camino más corto desde/hacia una fuente” Agustín J. González ELO320: Estructura de Datos y Algoritmos 1.er. Sem
Minimum Spanning Tree (Árbol de Expansión Mínima)
Unidad 6: Árboles.
1 Árboles de Búsqueda Binaria Agustín J. González ELO-320: Estructura de Datos y Algoritmos.
1 Estructuras de Datos Elementales:stacks (pilas), queues (colas), linked lists (listas enlazadas), y rooted trees (árboles con raíz) Agustín J. González.
Minimum Spanning Tree (Árbol de Expansión Mínima)
Árboles Binarios de Búsqueda (ABB)
R ECORRIDO DE ÁRBOLES BINARIOS POR AMPLITUD O POR NIVELES Elaborado por: Luis Alberto Fonseca Esquivel Eduardo Acosta Casillas.
Arboles Binarios.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Caso.
Algoritmos y estructura de datos en I.O. Arboles Generales.
M.C. Meliza Contreras González
Listas Dinámicas.
1 ListaUna Lista se define como una serie de N elementos E 1, E 2,..., E N, ordenados de manera consecutiva, es decir, el elemento E k (que se denomina.
Árboles Binarios Estructuras de Datos.
Árboles Binarios Estructuras de Datos. Las estructuras dinámicas son las en la ejecución varia el número de elementos y uso de memoria a lo largo del.
Transcripción de la presentación:

1 Extensión de un Estructura de Datos Agustín J. González ELO-320: Estructura de Datos y Algoritmos

2 Introducción Hay algunas situaciones de ingeniería que no requieren más que las estructuras que hemos visto; sin embargo, hay muchas otras que requieren un poco más de creatividad. Sólo en casos muy raros la solución irá por una estructura totalmente nueva. Para la gran mayoría de los casos, es suficiente extender levemente una estructura ya conocida. Extender una estructura de datos no es directo. Se requiere: –Escoger la estructura de datos base –Determinar la información adicional a incorporar –Verificar que la información adicional puede ser mantenida por las operaciones de la estructura básica. –Desarrollar las nuevas operaciones. Veremos la extensión de los árboles de búsqueda binaria para obtener las estadísticas de orden (¿Cuál es el i-ésimo?) y para determinar el orden que le corresponde a un elemento (¿Qué orden tiene x?).

3 Estadísticas de orden en árboles de búsqueda binaria Ya vimos una solución que toma tiempo O(n). Ahora veremos otra con tiempo O(lg n). La idea es agregar un campo a cada nodo. Éste contiene el tamaño del árbol incluyéndose. La estructura es ahora: typedef struct arbol_tag { struct arbol_tag p; struct arbol_tag left; struct arbol_tab right; int size; elementType element; } TREE_NODE;

4 Obtención de un elemento dada una posición de orden TREE_NODE * OS_Select(TREE_NODE * x, int i) { int r; if (x == NULL) return NULL; if (x->left == NULL) r = 1; else r = x->left->size +1; /* r contiene el número de nodos del sub-árbol izquierdo más el nodo central*/ if (i == r) return x; else if (i left, i); else return OS_Select(x->right, i-r); }

5 Obtención de la posición de orden dado un elemento int OS_Rank(TREE_NODE * T, TREE_NODE * x) { int r; TREE_NODE *y; if (x->left == NULL) r = 1; else r = x->left->size + 1; y = x; while (y != T) { if ( y == y -> p->right ) /*r = r+y->p->left->size +1; por tarea de Sebastián Álvarez */ r = r+y->p->size - y->size; y = y->p; } return r; } El próximo paso es estudiar cómo debemos modificar las operaciones de inserción y eliminación para mantener la información de tamaño cuando el conjunto dinámico varía.

6 Modificación del Algoritmo de Inserción para mantener información sobre el tamaño Suponemos inicialmente que z->left = z->right = NULL. Void Tree_Insert( TREE_NODE ** pT, TREE_NODE * z) { TREE_NODE *y, *x; y=NULL; x = *pT; while (x != NULL) { /* buscamos quien debe ser su padre */ y = x; x->size++; if ( z->element element) x = x->left; else x= x->right; } z->size=1; z->p = y; if (y == NULL) /* se trata del primer nodo */ *pT = z; else if (z->element element) y->left = z; else y->right = z; }

7 Modificación del Algoritmo de Eliminación para mantener información sobre el tamaño Consideremos cuales son los casos: z 1) z 2) z z 3) y Caso 2: idem caso 1. Caso 3: idem caso 1 pero desde nodo y hasta la raíz. Conclusión: en todos los casos recorrer desde y hasta la raíz disminuyendo en uno el tamaño. Caso 1: debemos actualizar los nodos desde z hasta la raíz.

8 Modificación del Algoritmo de Eliminación para mantener información sobre el tamaño TREE_NODE * Tree-Delete(TREE_NODE **pT, TREE_NODE * z) { TREE_NODE * x, *y; if (z->left == NULL || z->right == NULL) y = z; /* caso 1 y 2 */ else y = Tree_Successor(z); /* caso 3 */ /* hasta aquí y es un nodo con menos de dos hijos y debe ser extraído del árbol*/ if (y->left != NULL) x = y->left; else x = y->right; if (x != NULL) x->p = y->p; if (y->p == NULL) /* estoy eliminado el último nodo */ *pT = x; else if (y == y->p->left) /* y es hijo izquierdo */ y->p->left = x; else y->p->right = x; if (y !=z) /* Caso 3 */ z->element = y->element; x = y->p; while (x !=NULL) { x->size--; x = x->p;. } return y; } z