Montículos Binarios (Binary Heaps)

Slides:



Advertisements
Presentaciones similares
ESTRUCTURA DE DATOS Unidad 04 TDA no lineales - Árboles.
Advertisements

IBD Clase 7.
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.
ÁRBOLES BINARIOS DE BUSQUEDA
Tema 4 Árboles. Conceptos Generales..
Cont. Arbol Binario de Búsqueda
Árboles balanceados AVL
Ana Lilia Laureano Cruces UAM-A
Árboles.
Estructuras de Datos MC Beatriz Beltrán Martínez.
Á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,
Estructura de Datos y Algoritmos
Diseño y análisis de algoritmos
ARBOLES ESTRUCTURAS DE DATOS.
Árboles B M.C. José Andrés Vázquez Flores Estructuras de Datos / Primavera 2014.
Árboles.
Árboles Recomendado: 1. Nivelación Funciones
1 Ordenamiento y estadísticas de orden Agustín J. González ELO 320: Estructura de Datos y Algoritmos.
Estructura de Datos M.C. José Andrés Vázquez Flores FCC/BUAP
Estructura de Datos M.C. J. Andrés V. F. FCC/BUAP
Árboles Binarios de Búsqueda (ABB)
Arboles Binarios.
A YUDANTÍA 5: A RBOLES Carlos Pulgar R. Mail: Página Ayudantía:
Árboles Binarios * Recorridos * Tipo
Árboles Equilibrados Estructuras de Datos MC Beatriz Beltrán Martínez Primavera 2015.
M.C. Meliza Contreras González
Presentado por: Yuli Dominguez. Portal Educa Panamá. Sistema de numeración.
Búsqueda binaria Integrantes: Humberto Raíz Walter Gómez Isabel Hernández.
L ISTAS ENLAZADAS M.IA. Daniel Alejandro García López.
Búsqueda Binaria Castillo Soria Luis Fernando Méndez Tinajero Armando Pérez Ramos Susana.
1 Ordenación, Clasificación Introducción Algoritmos Complejidad.
Funciones Racionales.
Universidad Autónoma del Estado de México
Tema 3 Árboles. Conceptos Generales. Curso 2014/2015 ETSISI UPM.
Árboles Binarios * Recorridos * Tipo
TAD’s ARBOLES GENERALIZADOS
Tema 4 Árboles Prof. Oscar Adolfo Vallejos.
Estructuras de Datos MC Beatriz Beltrán Martínez Primavera 2016
Listas enlazadas particulares
Heaps.
Listas Dinámicas.
Introducción a las estructuras de datos
Búsqueda por profundidad iterativa
PILAS Una pila es una estructura de datos o lista de elementos, a la cual se le puede insertar o eliminar su contenido sólo por uno de sus extremos, llamado.
ÁRBOLES ESTRUCTURA DE DATOS II ING. CARLOS ALBERTO PULLAS.
Clase Función cuadrática cuadrática. Función cuadrática Definición Es de la forma: f(x) = ax 2 + bx + c Ejemplos: y su representación gráfica corresponde.
Árboles (Trees) Árboles Árboles binarios Recorridos de árboles
Árboles Binarios de Búsqueda (ABB)
GRAFOS ESTRUCTURAS DE DATOS.
Estructura de Datos M.C. J. Andrés V. F. FCC/BUAP
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 -
EL TDA COLA Estructuras de Datos.
Listas ligadas Dra. María de Lourdes López García
Estructuras de Datos MC Beatriz Beltrán Martínez Primavera 2018
Colas ESTRUCTURA DE DATOS. Colas Definición. Es una lista lineal de elementos en la que las operaciones de insertar y eliminar se realizan en diferentes.
Algoritmos de ordenamiento
Estructura de Datos M.C. José Andrés Vázquez Flores FCC/BUAP Árboles AVL Objetivos:  Entender la importancia que tiene el balanceo en un ABB.  Describir.
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.
COLAS O LINEA DE ESPERA EN C# SHARP. ¿QUE ES UNA COLA O LINEA DE ESPERA?  Es una estructura de datos que almacena elemento en una lista y permite acceder.
Á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.
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
2° Medio Unidad: Función cuadrática y Ecuación de segundo grado.
Transcripción de la presentación:

Montículos Binarios (Binary Heaps) En este punto vamos a: - definir un montículo de mínimos - ver ejemplos - operaciones sobre montículos: Head/Cabecera Dequeue/Borrado/Desencolado Enqueue/Insertar/Encolar

Definición Un heap o montículo es una estructura de datos similar a un árbol binario de búsqueda pero ordenado de distinta forma por prioridades y además se representa siempre como un árbol binario completo representado como un arreglo.

Definición Un montículo es un árbol binario completo tal que puede : Estar vacío El valor de la prioridad en la raíz es mayor, (menor) o igual que la prioridad de cualquiera de sus hijos Ambos subárboles son montículos o heap 60 50 40 30 20 10 … 1 2 3 4 5 6 7 8 9 max

Definición Un árbol binario no vacio es un montículo de mínimos si: la clave asociada con la raíz es menor o igual a la asociada con los sub-árboles ambos sub-arboles son montículos de mínimos

A partir de la definición: un nodo simple es un montículo de mínimos todas las claves en el sub-árbol son mayores que la raíz

Propiedades del heap Debe cumplir dos propiedades: un árbol binario completamente lleno, con la posible excepción del nivel más bajo, el cual se rellena de izquierda a derecha. Estos árboles se denominan árboles binarios completos. Todo nodo debe ser mayor que todos sus descendientes. Por lo tanto, el maximo estará en la raíz y su búsqueda y eliminación se podrá realizar rápidamente.

Características Todos los heaps son árboles binarios. No son necesariamente ABBs. El árbol está completamente balanceado excepto el último nivel, que debe estar lleno de izquierda a derecha. Para un elemento del heap en la posición k, sus hijos deberán estar en las posiciones 2k y 2k+1 del heap. Un HEAP puede representarse en un arreglo. Toda lista ordenada es un heap.

Ejemplo El siguiente es un montículo de mínimos:

Ejemplo Para visualizar las propiedades coloreamos los nodos:

Ejemplo Observaciones: el árbol de la izquierda tiene tanto el elemento más pequeño (7) como el mayor (89) no existen relaciones entre items con prioridad similar

Head Obtener el elemento más pequeño: retornar la raíz En nuestro ejemplo, el mínimo elemento es 3

Dequeue (Desencolado/Borrado) Para eliminar el mínimo elemento simplemente se promueve el nodo del sub-árbol que tiene el menor valor Luego, se aplica recursión hacia abajo del árbol que ha promovido el valor más pequeño

Dequeue (Desencolado/Borrado) Usando nuestro ejemplo, eliminamos 3:

Dequeue (Desencolado/Borrado) Promovemos 7 (el menor de 7 y 12) a la raíz:

Dequeue (Desencolado/Borrado) En el sub-árbol de la izquierda, promovemos el 9:

Dequeue (Desencolado/Borrado) Recursivamente, promovemos el 19:

Dequeue (Desencolado/Borrado) Finalmente , 55 es el nodo hoja, entonces lo promovemos y liberamos el nodo

Dequeue (Desencolado/Borrado) Repitiendo esta operación otra vez, podemos remover 7:

Dequeue (Desencolado/Borrado) Si removemos 9, ahora la promoción debe hacerse desde el sub-árbol de la derecha:

Enqueue (Encolado/Inserción) La inserción en un montículo puede hacerse ya bien: en la raíz (insertar el mayor elemento en uno de los sub-árboles) en una hoja (mover hacia arriba si es más pequeño que el padre) Nosotros utilizaremos el segundo enfoque

Enqueue (Encolado/Inserción) En el heap anterior insertaremos 17 Seleccionamos un nodo arbitrario para insertar un nuevo nodo hoja:

Enqueue (Encolado/Inserción) El nodo 17 es menor que el nodo 32, entonces, los intercambiamos

Enqueue (Encolado/Inserción) El nodo 17 es menor que el 31, entonces, los intercambiamos

Enqueue (Encolado/Inserción) El nodo 17 es menor que el nodo 19, entonces, los intercambiamos

Enqueue (Encolado/Inserción) El nodo 17 es mayor que el 12, entonces, hemos terminado

Enqueue (Encolado/Inserción) Observación: tanto el sub-árbol de la derecha como el de la izquierda de 19 son mayores que 19, entonces eso nos garantiza que no se tiene que enviar un nuevo nodo abajo Este proceso se llama percolation (infiltrado), esto es, los elementos más livianos (pequeños) se mueven hacia arriba desde abajo del montículo.

Encolado en un árbol completo Si queremos insertar en un árbol completo, sólo se necesita ubicar el nuevo nodo como una hoja en la posición adecuada e infiltrarlo

Encolado en un árbol completo Por ejemplo, insertando 25:

Encolado en un árbol completo Infiltramos 25 arriba hasta su ubicación apropiada El montículo resultante es todavía un árbol completo

Desencolado en un árbol completo Qué pasa cuando se remueve el elemento mínimo? Si nosotros simplemente infiltramos, crearemos un árbol no completo, ej., eliminando 12:

Desencolado en un árbol completo Estrategia alternativa: luego de infiltrar 32 arriba, el último elemento en el árbol binario completo (32) es menor que cualquier sub-árbol, entonces lo copiamos arriba:

Desencolado en un árbol completo El resultado ahora es un árbol completo

Desencolado en un árbol completo Removiendo el siguiente elemento mínimo:

Desencolado en un árbol completo Removiendo el siguiente elemento mínimo:

Desencolado en un árbol completo Removiendo el siguiente elemento mínimo:

Operaciones Insertar / Agregar Eliminar

Agregar Pasos para insertar en un Heap Agregamos el nodo. (de izquierda a derecha) Comparamos son su padre. Si es mayor permutamos hasta llegar a la raíz Repetimos el paso 1 y 2 hasta llenar el nivel. Una vez llenado ese nivel pasamos al siguiente nivel.

Agregar (Ejemplo) => => => Agregamos el 19 Agregamos el 24 14 24 19 Comparamos el 24 > 19 Comparamos el 14 > 24 Agregamos el 30 30 24 24 => => 24 14 19 14 30 14 19 30 19 Comparamos el 30 > 19 Comparamos el 30 > 24

Agregar (Ejemplo) => => Agregamos el 25 Agregamos el 18 30 30 30 24 14 25 14 25 14 19 25 19 24 19 24 18 Comparamos el 25 > 24 Agregamos el 5 Comparamos el 18 > 14 30 30 25 18 => 25 18 19 24 14 19 24 5 14

Eliminar Siempre se elimina la RAIZ Pasos para eliminar Eliminamos la raíz del heap Una vez eliminada remplazamos la raíz con el último nodo del último nivel. Comparamos si los hijos de la nueva raíz son menores Si son menores no se hace ninguna permutación Si son mayores (o uno de ellos) se hace permutación con el hijo mayor. Repetimos los pasos anteriores hasta no tener nodos para eliminar.

Eliminar (Ejemplo) => => => Eliminamos el 30 Comparamos si el 5 > 25 30 5 => 25 24 25 24 19 14 5 18 19 14 18 Comparamos si el 5 > 19 25 25 => => 5 24 24 19 19 14 18 5 14 18

Eliminar ( Ejemplo) => => => Eliminamos el 25 Comparamos si el 24 > 19 Y si el 24 >18 24 25 18 => 18 24 19 19 24 19 5 5 14 14 18 5 14 Comparamos si el 14 > 19 Comparamos si el 14 > 5 Eliminamos el 24 24 19 14 => => 18 18 18 14 19 19 5 5 14 5

Eliminar (Ejemplo) => => => => Eliminamos 19 Comparamos si el 5 > 14 Comparamos si el 14 > 18 19 => 5 => 5 18 14 18 14 18 14 5 Eliminamos 18 18 5 => 18 14 => 5 14 5 14 14 5

Eliminar (Ejemplo) => => Los nodos eliminados fueron: Eliminamos 14 Eliminamos 5 14 => => 5 5 vació 5 Los nodos eliminados fueron: 30 25 24 19 18 14 5