Heaps.

Slides:



Advertisements
Presentaciones similares
Branch-and-bound Search
Advertisements

ESTRUCTURA DE DATOS Unidad 04 TDA no lineales - Árboles.
IBD Clase 7.
Á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 BINARIOS DE BUSQUEDA
Integrantes: Esteban Jiménez Guesseppe Lozada Mario Rodriguez Gustavo Tenorio Fabio.
Almacenamiento y Recuperacion de Información TAD_ABB Ana Lilia Laureano Cruces Universidad Autónoma Metroplotiana.
Extracto del material disponible en Estrategias para la recolección de basura (Garbage Collection.
Ana Lilia Laureano Cruces UAM-A
ÁRBOLES BINARIOS DE BÚSQUEDA
Árboles, montículos y grafos Cola de prioridades, montículos
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,
ESTRUCTURAS DE DATOS I Conocer, comprender y analizar algunos de los principales tipos de estructuras de datos.
ARBOLES ESTRUCTURAS DE DATOS.
Integridad Referencial 1. Integridad referencial 2.
Arboles M.C. José Andrés Vázquez FCC/BUAP
ARBOLES ESTRUCTURAS DE DATOS.
Árboles.
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 Binarios Estructuras de Datos.
Dr. Eric Jeltsch F. Ingenieria en Computacion, ULS(DAA_2004) 1 Fibonacci Heap(HF) H min marcado Para conocer en detalle.
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.
Minimum Spanning Tree (Árbol de Expansión Mínima)
Minimum Spanning Tree (Árbol de Expansión Mínima)
Arboles B (búsqueda externa)
1 B-Trees y AVL Trees. 2 AVL Trees: Topicos Balance en los Trees Chequear el Balance Insertar Single y Doble Rotaciones.
SIT IN YOUR ASSIGNED SEATS! LOG ON. GO TO POWERPOINT. WAIT QUIETLY. DO NOT DO ANYTHING ELSE!!!
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.
Arboles Binarios.
A YUDANTÍA 5: A RBOLES Carlos Pulgar R. Mail: Página Ayudantía:
Estructura de Datos..
7.  El TDA Diccionario.
Árboles Equilibrados Estructuras de Datos MC Beatriz Beltrán Martínez Primavera 2015.
Unidad 8 Árboles B Bibliografía: “Algoritmos y Estructuras de datos” de Aguilar y Martinez. Unidad 16 Autor: Ing Rolando Simon Titiosky.
BÚSQUEDA DE SOLUCIONES Soluciones no Informadas (cont.) Dra. Myriam Hernández A.
Universidad Autónoma del Estado de México
7.  El TDA Diccionario.
Tema 3 Árboles. Conceptos Generales. Curso 2014/2015 ETSISI UPM.
Montículos Binarios (Binary Heaps)
Árboles Binarios * Recorridos * Tipo
TAD’s ARBOLES GENERALIZADOS
Clase Lista C++ Estándar
Estructuras de Datos MC Beatriz Beltrán Martínez Primavera 2016
LISTAS..
Listas Dinámicas.
mi(s) my nuestro(s) our nuestra(s) tu(s) your vuestro(s) your (pl.)
Árboles Binario de Búsqueda
Introducción a las estructuras de datos
ÁRBOLES El árbol es una estructura de datos muy importante en informática y en ciencias de la computación. Los árboles son estructuras no lineales,
ÁRBOLES ESTRUCTURA DE DATOS II ING. CARLOS ALBERTO PULLAS.
Árboles (Trees) Árboles Árboles binarios Recorridos de árboles
Árboles Binarios de Búsqueda (ABB)
Arboles M.C. José Andrés Vázquez FCC/BUAP
Curso de Programación Estructurada
TEMAS *Arboles Binarios *listas Abiertas y Cerradas - Inserción - Recorrido - Eliminación *Pilas - Concepto - Inserción - Recorrido -
UNIDAD 8 Agregar al Inicio
UNIDAD 3 LISTAS LISTAS CIRCULARES Integrantes: Galmiche Vera Orlando Mandujano González Ramón Enrique Salvador Magaña Kelyn Osmara.
Arboles. Árboles ¿Qué son? Son Estructuras de datos “No lineales”” ¿Para que se utilizan? Representar Fórmulas Algebraicas Organizar Objetos Inteligencia.
ÁRBOLES DE EXPRESION. Un árbol de expresión sirve para evaluar expresiones del tipo: (a+b)*c/d Para que un árbol represente una expresión se deben tomar.
Árboles Binarios Estructuras de Datos.
Minimum Spanning Tree (Árbol de Expansión Mínima)
Á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.
Departamento de Ingeniería de Sistemas e Industrial
Implementación de algoritmo para juegos. Algoritmo Minimax  El algoritmo de minimax en simples palabras consiste en la elección del mejor movimiento.
M.C. José Andrés Vázquez Flores
Transcripción de la presentación:

Heaps

Alternativamente, Maximum. resumen Heaps Binary heaps (worst case) Binomial Heaps Fibonnacci Heaps (amortized) Insert log n 1 Minimum Delete-Min Union n Delete Decrease-Key Alternativamente, Maximum.

Binary Heap Heaps binary tree completo Min-heap ordenado. Todos los niveles estan llenos salvo el último, llenado por niveles es decir de izq. a der. Min-heap ordenado. Hijos mayores que o iguales a sus padres. Raiz = min 6 14 78 18 81 77 91 45 53 47 64 84 99 83 Height = log2 n.

Binary Heaps Heaps Use array: no necesita explicitamente punteros. Padre(i) = i/2 izq(i) = 2i der(i) = 2i + 1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 78 18 81 77 91 45 53 47 64 84 99 83 parent and children formula require only simple bit twiddling operations

Binomial Tree Heaps Bk-1 B0 Bk B4 B3 not binary tree B2 B1 B0

Binomial Tree: Propiedad 1 Heaps Binomial tree Bk: #nodos = 2k. Altura(Height) = k. grado raiz = k. borrando raiz, se obtienen binomial tree Bk-1, …, B0. B1 Bk Bk+1 B2 B0 B4 B3 B2 B1 B0

Binomial Tree: Propiedad 2 Heaps Bk posee nodos de depth i. depth 0 depth 1 depth 2 depth 3 depth 4 B4

Binomial Heap Heaps Sucesión de binomial trees que satisfacen la propiedad binomial heap: Todo tree es min-heap ordenado 0 o 1 binomial tree de orden k Vuillemin, 1978. B4 B0 B1 55 45 32 30 24 23 22 50 48 31 17 44 8 29 10 6 37 3 18 sequence -> ordered

Binomial Heap: Propiedad Heaps Binomial heap de n nodos: Min key = raiz de B0, B1, …, o Bk. Contiene binomial tree Bi ssi bi = 1. donde bn…b2b1b0 es una representación binaria de n. #trees ≤ log2 n + 1 Height  log2 n B4 B0 B1 55 45 32 30 24 23 22 50 48 31 17 44 8 29 10 6 37 3 18 n = 19 # trees = 3 height = 4 binario = 10011

Binomial Heap: Implementacion Heaps Cada nodo tiene 3 punteros – padre, 1st hijo, sig_hermano. Raiz en una lista simplemente enlazada – desde el más pequeño hasta el más grande. Implementacion: potencia de a 2 Heap 29 6 37 3 18 48 31 50 10 44 17 heap Padre hijo hermano 50 48 31 17 44 10 6 37 3 18 29 Binomial Heap coding with a variable number of links per node would be more painful

Binomial Heap: Implementacion Heaps coding with a variable number of links per node would be more painful

Binomial Heap: Implementacion Heaps coding with a variable number of links per node would be more painful

Binomial Heap: Implementacion Heaps coding with a variable number of links per node would be more painful

Binomial Heap: Operaciones Heaps coding with a variable number of links per node would be more painful

Binomial Heap: Union – caso especial Heaps Es fácil si todos son k- binomial trees ordenados Escoger la clave más pequeña como nueva raíz. Raíz Conectadas 6 8 29 10 44 30 23 22 48 31 17 45 32 24 50 55 H' H''

Binomial Heap: Union – caso General Heaps 6 3 18 8 29 10 44 37 30 23 22 48 31 17 15 7 12 45 32 24 50 28 33 25 + 55 41 1 + Analogia: 19 + 7 = 26 amusing to consider "multiplying" binomial heaps or other arithmetic ops. Any uses??? tiempo  #trees: O(log n).

Binomial Heap: Union – Ejemplo Heaps 6 3 18 8 29 10 44 37 30 23 22 48 31 17 15 7 12 45 32 24 50 28 33 25 + 55 41

Heaps 12 18 6 3 18 8 29 10 44 37 30 23 22 48 31 17 15 7 12 45 32 24 50 28 33 25 + 55 41

Heaps 3 12 7 37 18 25 6 3 18 8 29 10 44 37 30 23 22 48 31 17 15 7 12 45 32 24 50 28 33 25 + 55 41 12 18

Heaps 3 3 12 15 7 37 7 37 18 28 33 25 25 41 6 3 18 8 29 10 44 37 30 23 22 48 31 17 15 7 12 45 32 24 50 28 33 25 + 55 41 12 18

Heaps 3 3 12 15 7 37 7 37 18 28 33 25 25 41 6 3 18 8 29 10 44 37 30 23 22 48 31 17 15 7 12 45 32 24 50 28 33 25 + 55 41 3 12 15 7 37 18 28 33 25 41

Heaps 3 3 12 15 7 37 7 37 18 28 33 25 25 41 6 3 18 8 29 10 44 37 30 23 22 48 31 17 15 7 12 45 32 24 50 28 33 25 + 55 41 6 3 12 8 29 10 44 15 7 37 18 30 23 22 48 31 17 28 33 25 45 32 24 50 41 55

Binomial Heap: Delete Min Heaps Hallar en la raíz min key de H, y borrarlo. H'  hijos de la clave borrda. H  Union(H', H) Cada etapa O(log n). H’ 3 6 18 8 29 10 44 37 H 30 23 22 48 31 17 45 32 24 50 55

Binomial Heap: Decrease Key Heaps Asumir que se da un puntero al nodo. Cambiar la clave. Mientras x < padre, swap. O(log N) –  depth del nodo x  log2 n . 3 6 18 8 29 10 44 37 Bk has height k and 2k nodes 30 23 22 48 31 17 x 32 24 50 55

Binomial Heap: Delete Heaps Decrease key de x a -. Delete min. Cada etapa O(log N).

Binomial Heap: Insert Heaps H'  MakeHeap(x) H  Union(H', H) O(log N) 3 6 18 x 8 29 10 44 37 30 23 22 48 31 17 H H' 45 32 24 50 55

Binomial Heap: Secuencia de Inserciones Insertando 1 item puede tomar tiempo (log n). n = .......0  1 etapa. n = ......01  2 etapa. n = .....011  3 etapa. n = ....0111  4 etapa. n = 11...111  log2 n etapas. Insertar una secuencia de n items toma tiempo O(n)! (n/2)(1) + (n/4)(2) + (n/8)(3) + …  2n 50 48 31 17 44 29 10 3 37 6 x

Resumen de Resultados Heaps Binary heaps (worst case) Binomial Heaps Fibonnacci Heaps (amortized) Insert log n 1 Minimum Delete-Min Union n Delete Decrease-Key

Fibonacci Heaps: estructura Conjunto de min-heap de trees ordenados. 7 23 30 17 35 26 46 24 H 39 41 18 52 3 44 min Algunos nodos “marcados”. set -> unordered

Fibonacci Heaps: Implementacion Cada nodo tiene 4 punteros: padre, 1st hijo, sigui & previo hermano. hermanos son punteros en forma circular, lista doubly-linked Raiz en circular, lista doubly-linked. La union es rapida. Posee punteros a min (una raiz). Rapidamente encuentra min. 7 23 30 17 35 26 46 24 H 39 41 18 52 3 44 min

Fibonacci Heaps: funcion potencial Claves cuantitativas: degree(x) = grado del nodo x. mark(x) = esta el nodo x marcado? t(H) = # trees. m(H) = # nodos marcado. (H) = t(H) + 2m(H) t(H) = ? m(H) = ? (H) = ? 5 3 11 7 23 30 17 35 26 46 24 H 39 41 18 52 3 44 min

Fibonacci Heaps: Insertar Crea un nuevo singleton tree. Agrega a la izq del puntero min. Actualiza puntero min. Actual costo = O(1). Cambio en potencial = ? 1 (H) = t(H) + 2m(H) Costo Amortizado = O(1)+1 = O(1). 21 7 23 30 17 35 26 46 24 H 39 41 18 52 3 44 min

Fibonacci Heaps: Union Concatena los heaps. Considera el puntero minimum de los dos minimos min min 23 24 17 7 3 21 H' H'' 30 26 46 18 52 41 35 39 44

Fibonacci Heaps: Union Concatena los heaps. Considera el puntero minimum de los dos minimos. Actual costo = O(1) Cambio en potencial = 0 Costo Amortizado = O(1) (H) = t(H) + 2m(H) min 23 24 17 7 3 21 H' H'' 30 26 46 18 52 41 35 39 44

Fibonacci Heaps: Delete-Min Borra el min, concatena sus hijos en una lista de raices. Consolida los trees, de manera que ninguna raíz tenga el mismo grado, y encontrando un nuevo min. 3 min 7 24 23 17 30 26 46 18 52 41 35 39 44

Fibonacci Heaps: Delete-Min Borra el min, concatena sus hijos en una lista de raices. Consolida los trees, de manera que ninguna raíz tenga el mismo grado, y encontrando un nuevo min. 1 2 3 actual min 7 24 23 17 18 52 41 39 44 30 26 46 35

Fibonacci Heaps: Delete-Min Borra el min, concatena sus hijos en una lista de raices. Consolida los trees, de manera que ninguna raíz tenga el mismo grado, y encontrando un nuevo min. 1 2 3 actual min 7 24 23 17 18 52 41 39 44 30 26 46 35

Fibonacci Heaps: Delete-Min Borra el min, concatena sus hijos en una lista de raices. Consolida los trees, de manera que ninguna raíz tenga el mismo grado, y encontrando un nuevo min. 1 2 3 min 7 24 23 17 18 52 41 39 44 30 26 46 actual 35

Fibonacci Heaps: Delete-Min Borra el min, concatena sus hijos en una lista de raices. Consolida los trees, de manera que ninguna raíz tenga el mismo grado, y encontrando un nuevo min. 1 2 3 min 7 24 23 17 18 52 41 39 44 30 26 46 actual 35 Merge 17 & 23 trees.

Fibonacci Heaps: Delete-Min Borra el min, concatena sus hijos en una lista de raices. Consolida los trees, de manera que ninguna raíz tenga el mismo grado, y encontrando un nuevo min. 1 2 3 actual min 7 24 17 18 52 41 23 39 44 30 26 46 35 Merge 17 & 7 trees.

Fibonacci Heaps: Delete-Min Borra el min, concatena sus hijos en una lista de raices. Consolida los trees, de manera que ninguna raíz tenga el mismo grado, y encontrando un nuevo min. 1 2 3 actual min 24 7 18 52 41 17 30 39 44 26 46 35 23 Merge 7 & 24 trees.

Fibonacci Heaps: Delete-Min Borra el min, concatena sus hijos en una lista de raices. Consolida los trees, de manera que ninguna raíz tenga el mismo grado, y encontrando un nuevo min. 1 2 3 actual min 7 18 52 41 24 17 30 39 44 26 46 23 35

Fibonacci Heaps: Delete-Min Borra el min, concatena sus hijos en una lista de raices. Consolida los trees, de manera que ninguna raíz tenga el mismo grado, y encontrando un nuevo min. 1 2 3 min actual 7 18 52 41 24 17 30 39 44 26 46 23 35

Fibonacci Heaps: Delete-Min Borra el min, concatena sus hijos en una lista de raices. Consolida los trees, de manera que ninguna raíz tenga el mismo grado, y encontrando un nuevo min. 1 2 3 min actual 7 18 52 41 24 17 30 39 44 26 46 23 35

Fibonacci Heaps: Delete-Min Borra el min, concatena sus hijos en una lista de raices. Consolida los trees, de manera que ninguna raíz tenga el mismo grado, y encontrando un nuevo min. 1 2 3 min actual 7 18 52 41 24 17 30 39 44 26 46 23 Merge 41 & 18 trees. 35

Fibonacci Heaps: Delete-Min Borra el min, concatena sus hijos en una lista de raices. Consolida los trees, de manera que ninguna raíz tenga el mismo grado, y encontrando un nuevo min. 1 2 3 actual min 7 52 18 24 17 30 41 39 26 46 23 44 35

Fibonacci Heaps: Decrease Key Caso 0: min-heap propiedad no alterada. Decrecer la clave. Cambiar el puntero min si es necesario. min 7 18 38 24 17 23 21 39 41 26 46 45 30 52 Decrece 46 a 45. 35 88 72

Fibonacci Heaps: Decrease Key Caso 1: padre de x no esta marcado. Decrecer la clave. Remover el link a el padre. Marcar el padre. Agregar x’s del tree a la lista de root, actualizando el puntero. min 7 18 38 24 24 17 23 21 39 41 26 45 15 30 52 Decrece 45 a 15. 35 88 72

Fibonacci Heaps: Decrease Key Caso 1: padre de x no esta marcado. Decrecer la clave. Remover el link a el padre. Marcar el padre. Agregar x’s del tree a la lista de root, actualizando el puntero. min 15 7 18 38 72 24 24 17 23 21 39 41 26 30 52 Decrece 45 a 15. 35 88

Fibonacci Heaps: Decrease Key Case 2: padre de x esta marcado. Decrece la clave. Mover el nodo a la lista de raices. Mover el padre a la lista de raices. Si el abuelo no esta marcado, entonces lo marca. Si el abuelo esta marcado, mover a la lista de raices, no marcado y repetir. min 15 7 18 38 72 24 24 17 23 21 39 41 26 30 52 Decrece 35 a 5. 35 5 88

Fibonacci Heaps: Decrease Key Case 2: padre de x esta marcado. Decrece la clave. Mover el nodo a la lista de raices. Mover el padre a la lista de raices. Si el abuelo no esta marcado, entonces lo marca. Si el abuelo esta marcado, mover a la lista de raices, no marcado y repetir. min 15 5 7 18 38 72 24 24 17 23 21 39 41 26 30 52 Decrece 35 a 5. 88

Fibonacci Heaps: Decrease Key Case 2: padre de x esta marcado. Decrece la clave. Mover el nodo a la lista de raices. Mover el padre a la lista de raices. Si el abuelo no esta marcado, entonces lo marca. Si el abuelo esta marcado, mover a la lista de raices, no marcado y repetir. min 15 5 26 7 18 38 72 88 24 24 17 23 21 39 41 Abuelo marcado 30 52 Decrece 35 a 5.

Fibonacci Heaps: Decrease Key Case 2: padre de x esta marcado. Decrece la clave. Mover el nodo a la lista de raices. Mover el padre a la lista de raices. Si el abuelo no esta marcado, entonces lo marca. Si el abuelo esta marcado, mover a la lista de raices, no marcado y repetir. min 15 5 26 24 7 18 38 72 88 17 23 21 39 41 “marcado” = nodo tiene 1 hijo que se mueve a la lista de raices. 30 52 Decrece 35 a 5.