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

Slides:



Advertisements
Presentaciones similares
Método de ordenación por inserción
Advertisements

5. Estructuras no lineales estáticas y dinámicas
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
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.
Oscar Bedoya. Edificio 331, 2º piso, E.I.S.C. Estructuras de datos y algoritmos.
ÁRBOLES DE EXPRESION.
ARBOLES PARCIALMENTE ORDENADOS ESTRUCTURAS DE DATOS.
Arboles (Trees) Arboles Arboles binarios Recorridos de árboles
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.
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
1 Algoritmos Elementales de Grafos Agustín J. González ELO-320: Estructura de Datos Y Algoritmos 1er.Sem
Á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
Heaps Mauro Maldonado Abril/2005. Introducción La estructura heap es frecuentemente usada para implementar colas de prioridad. En este tipo de colas,
ARBOLES ESTRUCTURAS DE DATOS.
7.  El TDA Diccionario.
Single-Source Shortest Paths “Camino más corto desde/hacia una fuente”
Vectors (Vectores) Agustin J. González ELO329. Contenidos Qué es un vector? Declaración de Objetos Vectores Inserción y eliminación de items Uso de sub-índices.
Estructura de Datos y Algoritmos
Clase 10: Estructuras de datos y 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..
Á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 Otros algoritmos de ordenación. 2 Método de ordenación por inserción Se divide la tabla en dos subtablas: - la subtabla de la izquierda está ordenada.
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.
Minimum Spanning Tree (Árbol de Expansión Mínima)
Unidad 6: Árboles.
1 Extensión de un Estructura de Datos Agustín J. González ELO-320: Estructura de Datos y Algoritmos.
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.
Árboles Equilibrados Estructuras de Datos MC Beatriz Beltrán Martínez Primavera 2015.
Algoritmos y estructura de datos en I.O. Arboles Generales.
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.
Lenguaje de Programación II Prof. Rafael Montenegro B. Carrera: T.S.U en Informática Periodo: 2014-I.
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 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; Estadísticas de orden en árboles de búsqueda binaria Size=N+M+1 element N nodosM nodos

4 Obtención de un elemento dada una posición de orden ¿Qué nodo contiene el i-ésimo elemento? TREE_NODE * OS_Select(TREE_NODE * x, int i) { int r; /* r contiene el número de nodos del sub-árbol izquierdo más el nodo central*/ if (x == NULL) return NULL; if (x->left == NULL) r = 1; else r = x->left->size +1; 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 ¿Qué ranking le corresponde al nodo x? int OS_Rank(TREE_NODE * T, TREE_NODE * x) { int r; /* r contiene el número de nodos del sub-árbol izquierdo más el nodo central*/ 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. 2002*/ 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; }

z 1) z 2) z 3) z 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. Modificación del Algoritmo de Eliminación para mantener información sobre el tamaño Consideremos cuales son los casos:

8 z 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; }