Heaps Mauro Maldonado Abril/2005. Introducción La estructura heap es frecuentemente usada para implementar colas de prioridad. En este tipo de colas,

Slides:



Advertisements
Presentaciones similares
ÍNDICES.
Advertisements

Branch-and-bound Search
ESTRUCTURA DE DATOS Unidad 04 TDA no lineales - Árboles.
Definición Las colas ofrecen dos operaciones fundamentales, que son encolar (al final de la cola) y desencolar (del comienzo de la cola). Al igual que.
IBD Clase 7.
ESTRUCTURA DE DATOS Unidad 04 Árboles BINARIOS.
ESTRUCTURA DE DATOS Unidad 04 Árboles BINARIOS DE BUSQUEDA.
Árboles Grafo que no contiene ciclos, es decir es un grafo también acíclico, pero a su vez es conexo.
Montículos Daniel González Pérez Cristina Sánchez Aragón
ÁRBOLES EN C UNIVERSIDAD “ALONSO DE OJEDA” Facultad de Ingeniería
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
MATEMÁTICAS DISCRETAS.
ÁRBOLES BINARIOS DE BUSQUEDA
Estructura de Datos en memoria secundaria
Algoritmos Aleatorizados
Solución de problemas por búsqueda inteligente
Cont. Arbol Binario de Búsqueda
M.I.A Daniel Alejandro García López
Árboles balanceados AVL
Integrantes: Esteban Jiménez Guesseppe Lozada Mario Rodriguez Gustavo Tenorio Fabio.
ARBOLES PARCIALMENTE ORDENADOS ESTRUCTURAS DE DATOS.
Almacenamiento y Recuperacion de Información TAD_ABB Ana Lilia Laureano Cruces Universidad Autónoma Metroplotiana.
COLAS, IMPLEMENTACIÓN A PARTIR DE LISTAS Y PARA PILAS
Listas circulares.
Ana Lilia Laureano Cruces UAM-A
Ordenamiento topológico
GRAFOS HUGO ARAYA CARRASCO.
Estructura de Datos Lineales
PROGRAMACIÓN PARALELA EN ALGORITMOS SOBRE GRAFOS
Estructuras de Datos MC Beatriz Beltrán Martínez.
Árboles, montículos y grafos Cola de prioridades, montículos
Tópicos I Árboles, montículos y grafos
Ordenamiento, Heapsort y Colas de prioridad
ARBOLES ESTRUCTURAS DE DATOS.
7.  El TDA Diccionario.
Estructura de Datos y Algoritmos
Diseño y análisis de algoritmos
Arboles M.C. José Andrés Vázquez FCC/BUAP
ARBOLES ESTRUCTURAS DE DATOS.
Árboles B M.C. José Andrés Vázquez Flores Estructuras de Datos / Primavera 2014.
Diseño y análisis de algoritmos
Almacenamiento y Recuperacion de Información- Arbol AVL
1 7.1 Búsqueda Externa Los algoritmos vistos hasta ahora son adecuados cuando todos los datos están en memoria principal. Gran volúmen de datos: se recurre.
Árboles Recomendado: 1. Nivelación Funciones
clase 23: Stacks y Queues Problema.
Árboles de Búsqueda Binaria
1 Arboles AVL Introducción Arboles AVL (Adel’son-Vel’skii and Landis.
1 Ordenamiento y estadísticas de orden Agustín J. González ELO 320: Estructura de Datos y Algoritmos.
Análisis y Diseño de Algoritmos
Estructura de Datos M.C. José Andrés Vázquez Flores FCC/BUAP
Algoritmos de Ordenamiento y Complejidad
Unidad 6: Árboles.
Estructura de Datos M.C. J. Andrés V. F. FCC/BUAP
1 Árboles de Búsqueda Binaria Agustín J. González ELO-320: Estructura de Datos y Algoritmos.
INTRODUCCIÓN A JUEGOS (BÚSQUEDA CON ADVERSARIOS)
Arboles B (búsqueda externa)
Heap Fibonacci heap de Fibonacci es una estructura de datos similar a un heap binomial pero con mejor coste amortizado. se utiliza para mejorar el tiempo.
Árboles Binarios de Búsqueda (ABB)
Arboles Binarios.
Árboles Binarios * Recorridos * Tipo
MIA - Grupo 5 Unidad 2.
Árboles Equilibrados Estructuras de Datos MC Beatriz Beltrán Martínez Primavera 2015.

Laboratorio de programación
Matemáticas Discretas MISTI
Arboles Binarios: AVL (Adelson – Velskii - Landis)
Algoritmos voraces Códigos de Huffman. Descripción del problema Tenemos un archivo de entrada. Asumiremos que el archivo está compuesto de bytes (enteros.
Montículos Binarios (Binary Heaps)
Heaps.
Transcripción de la presentación:

Heaps Mauro Maldonado Abril/2005

Introducción La estructura heap es frecuentemente usada para implementar colas de prioridad. En este tipo de colas, el elemento a ser eleminado (borrados) es aquél que tiene mayor (o menor) prioridad. En cualquier momento, un elemento cun una prioridad arbitraria puede ser insertado en la cola. Una estructura de datos que soporta estas dos operaciones es la cola de priporidad máxima (mínima). Se asume que un elemento es una estructura con una miembro dato key además de otros miembros datos. Por otra parte se sabe que cualquier estructura de datos que implemente una cola de prioridad maxima tiene que implementar las operaciones insert y delete.

Definición Un max (min) tree es un árbol en el cual el valor de la llave de cada nodo no es menor (mayor) que la de los valores de las llaves de sus hijos (si tiene alguno). Un max heap es un árbol binario completo que es también un max tree. Por otra parte, un min heap es un árbol binario completo que es también un min tree. De la definición se sabe que la llave del root de un min tree es la menor llave del árbol, mientras que la del root de un max tree es la mayor. Las operaciones básicas de un heap son: Creación de un heap vacío Inserción de un nuevo elemento en la estructura heap. Eliminación del elemento más grande del heap.

Categorías de un heap Existen tres categorías de un heap: max heap, min heap y min-max heap. Un heap tiene las siguientes tres propiedades:  Es completo, esto es, las hojas de un árbol están en a lo máximo dos niveles adyacentes, y las hojas en el último nivel están en la posición leftmost.  Cada nivel en un heap es llenado en orden de izquierda a derecha.  Está parcialmente ordenado, esto es, un valor asignado, llamado key del elemento almacenado en cada nodo (llamado parent), es menor que (mayor que) o igual a las llaves almacenadas en los hijos de los nodos izquierdo y derecho.

Si la llave (key) de cada nodo es mayor que o igual a las llaves de sus hijos, entonces la estructura heap es llamada max heap. Si la llave (key) de cada nodo es menor que o igual a las llaves de sus hijos, entonces la estructura heap es llamada min heap. En una estructura min-max heap, un nivel satisface la propiedad min heap, y el siguiente nivel inferior satisface la propiedad max heap, alternadamente. Un min-max heap es útil para colas de prioridad de doble fin.

Max heap Min heap Min - Max heap Niveles Min Max Min Max Ejemplo de los tres tipos de heap para el mismo conjunto de valores key: A = {33,60,5,15,25,12,45,70,35,7}

Dado un arreglo de n elementos con llaves A = {33,60,5,15,25,12,45,70,35,7} para ser ordenados en orden ascendente usando el algoritmo heap sort, se construye la estructura max heap. 33 a) Insertar 33 en la estructura vacía b) Insertar Reajuste c) Insertar d) Insertar e) Insertar f) Insertar Reajuste Insert

Reajuste g) Insertar 45 Reajuste h) Insertar Al final, el elemento con la llave más alta quedará como el root de la estructura max heap.

i) Insertar 35 j) Insert Reajuste

Para construir el max heap se comienza poniendo la primera llave key en el nodo root, se añade despues los siguientes dos nodos como los hijos izquierdo y derecho del nodo root, se añade los siguientes cuatro elementos de A como los hijos de segundo nivel (de izquierda a derecha y manteniendo la propiedad max heap), se continúa el proceso hasta que se insertan todos los elementos de A. Todo los nodos en el nivel más bajo son hojas. El algoritmo para construir un max heap de un arreglo A de n elementos y ordenarlo con cada hijo menor que o igual a su padre es el siguiente: Paso 1. Se comienza con A[0] como el nodo root de la estructura heap. Paso 2. Ahora se comienza a añadir el hijo izquierdo del root. Paso 3. Si el último elemento de A es alcanzado, exit; de otra manera hacer Paso 4. Paso 4. Comparar cada llave de cada hijo con la de su padre. Si la llave del hijo es mayor, hacer (a) hasta (c): (a) intercambiar (swap) el padre y el hijo, (b) mover hacia arriba el padre y su padre, (c) regresar a paso 3. Paso 5. Moverse hacia el siguiente hijo y regresar al paso 3.

Eliminar Cuando se necesita eliminar un elemento de la estructura max heap se toma de la raíz root del heap. Por ejemplo, al eliminar la raíz root del siguiente ejemplo (a) resulta que se elimina entonces el elemento 21 (b). Ya que el heap resultante tiene solamente cinco elementos, el árbol binario necesita ser reestructurado para que corresponda a un árbol binario completo con cinco elementos. Para hacer esto, se elimina el elemento en la posición 6 (en este caso el elemento 2). Ahora tenemos la estructura correcta (c), pero la raíz root está vacante y el elemento 2 no está en el heap. Eleminar elemento a) b) c)

Si se inserta entonces el elemento 2 en la raíz, el árbol binario resultante no es un max heap. El elemento en la raíz debe ser el mayor de los dos y los elementos de los hijos izquierdo y derecho de la raíz root. Este elemento es el 20. Se mueve entonces a la raíz, y se crea entonces una vacante en la posición 3. Ya que esta posición no tiene hijos, el 2 puede ser insertado aquí (d) b) c) d)

Supongamos ahora que se desea realizar otra eliminación (a). El elementos a borrar ahora es el 20 (b). Siguiento el borrado, el heap tiene ahora la estructura (c). Para llegar a esta estructura el 10 es removido de la posición 5. Éste no puede ser insertado en la raíz ya que no es el máximo. El 15 es el máximo y lo movemos a la raíz (d), podríamos poner entonces el 10 en la posición 2; pero no podríamos ya que éste (el elemento 10) es menor que el 14 debajo de éste. Así que movemos hacia arriba el 14 (e) y el 10 es insertado en la posición 4 (f) a) b) c) d) e) f)

Bibliografía E. Horowitz, S. Sahni y D. Mehta. Fundamentals of Data Structures in C++. Freeman, EUA, S. Sengupta, C. Korobkin. C++, Object-Oriented Data Structures. Springer-Verlag, EUA, 1994.