27/04/2015Dulce M. Rivero A. Estructura de datos 1 COLAS DE PRIORIDAD Las colas de prioridad son estructuras de datos que resultan ser útiles en muchas.

Slides:



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

ESTRUCTURA DE DATOS Unidad 04 TDA no lineales - Árboles.
IBD Clase 7.
ESTRUCTURA DE DATOS Unidad 04 Árboles BINARIOS DE BUSQUEDA.
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
ÁRBOLES BINARIOS DE BUSQUEDA
Operaciones sobre un árbol
Árboles binarios. Algoritmos básicos
Tema 4 Árboles. Conceptos Generales..
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.
Genericidad Los datos de aplicaciones muy diferentes puede modelarse con frecuencia a partir de tipos de datos cuyas operaciones no dependen del tipo de.
ARBOLES PARCIALMENTE ORDENADOS ESTRUCTURAS DE DATOS.
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.
Tema Nº4.
Estructura de Datos Lineales
ÁRBOLES BINARIOS DE BÚSQUEDA
C++ LISTAS C++ 11/04/2017 Ing. Edgar Ruiz Lizama.
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
PILAS, COLAS, RECURSIVIDAD.
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.
Estructura de Datos y Algoritmos
Diseño y análisis de algoritmos
Árboles binarios de búsqueda
Arboles M.C. José Andrés Vázquez FCC/BUAP
ARBOLES ESTRUCTURAS DE DATOS.
Diseño y análisis de algoritmos
ÁRBOLES BINARIOS DE BÚSQUEDA BALANCEADOS
Estructuras de Datos1 ABB´s balanceados por peso Balance perfecto Para cada nodo, el número de nodos del subárbol izquierdo y el número de nodos del subárbol.
ARBOLES ROJO – NEGROS. INTEGRANTES Bazan Gonzales Jose Antonio García López Carlos Omar.
Árboles.
Árboles Recomendado: 1. Nivelación Funciones
Árboles Binarios Estructuras de Datos.
clase 23: Stacks y Queues Problema.
Árboles de Búsqueda Binaria
Con el objeto de mejorar el rendimiento en la búsqueda surgen los árboles balanceados. La idea central de estos es la de realizar reacomodó o balanceos.
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
TIPOS ABSTRACTOS DE DATOS. 2  Un Tipo Abstracto de Dato (TAD) es un modelo constituido por un conjunto de objetos y una colección de operaciones realizables.
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.
Arboles B (búsqueda externa)
Punteros, referencias Listas enlazadas Arboles
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 M.C. José Andrés Vázquez FCC/BUAP
ARBOLES GENERALIZADOS
Árboles Binarios de Búsqueda (ABB)
Arboles Binarios.
A YUDANTÍA 5: A RBOLES Carlos Pulgar R. Mail: Página Ayudantía:
Árboles Equilibrados Estructuras de Datos MC Beatriz Beltrán Martínez Primavera 2015.

Matemáticas Discretas MISTI
M.C. Meliza Contreras González
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.
Bases de datos II Universidad del Cauca Ing. Wilson Ortega.
Algoritmos voraces Códigos de Huffman. Descripción del problema Tenemos un archivo de entrada. Asumiremos que el archivo está compuesto de bytes (enteros.
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:

27/04/2015Dulce M. Rivero A. Estructura de datos 1 COLAS DE PRIORIDAD Las colas de prioridad son estructuras de datos que resultan ser útiles en muchas aplicaciones informáticas.

27/04/2015Dulce M. Rivero A. Estructura de datos 2 COLAS DE PRIORIDAD Las colas de prioridad son estructuras de datos que resultan ser útiles en muchas aplicaciones informáticas. Es utila pensar en los valores de las claves asociados con los elementos como prioridades. Así, las claves obedecen a un relación de orden total.

27/04/2015Dulce M. Rivero A. Estructura de datos 3 COLAS DE PRIORIDAD Las colas de prioridad son estructuras de datos que resultan ser útiles en muchas aplicaciones informáticas. Es útil pensar en los valores de las claves asociados con los elementos como prioridades. Así, las claves obedecen a un relación de orden total. Ejemplos: Planificación de trabajos en un sistema multiusuario. Simulación de sucesos discretos Desarrollo de códigos de prefijos óptimos

27/04/2015Dulce M. Rivero A. Estructura de datos 4 COLAS DE PRIORIDAD Las operaciones más importantes en un TDA de colas de prioridad se refieren aquellas que permiten repetidamente seleccionar el elemento de la cola de prioridad que tiene como clave el valor máximo (mínimo). Esto conlleva a que una cola de prioridad debe soportar las siguientes operaciones:

27/04/2015Dulce M. Rivero A. Estructura de datos 5 COLAS DE PRIORIDAD Las operaciones más importantes en un TDA de colas de prioridad se refieren aquellas que permiten repetidamente seleccionar el elemento de la cola de prioridad que tiene como clave el valor máximo (mínimo). Esto conlleva a que una cola de prioridad P debe soportar las siguiente operaciones: ColaPrioridad(T) Insertar(P,x): añade el elemento x a la cola de prioridad

27/04/2015Dulce M. Rivero A. Estructura de datos 6 COLAS DE PRIORIDAD Las operaciones más importantes en un TDA de colas de prioridad se refieren aquellas que permiten repetidamente seleccionar el elemento de la cola de prioridad que tiene como clave el valor mínimo (máximo). Esto conlleva a que una cola de prioridad P debe soportar las siguiente operaciones: ColaPrioridad(T) Insertar(P,x): añade el elemento x a la cola de prioridad EncontrarMin(P): Devuelve el elemento de P con la priridad con menor valor.

27/04/2015Dulce M. Rivero A. Estructura de datos 7 COLAS DE PRIORIDAD Las operaciones más importantes en un TDA de colas de prioridad se refieren aquellas que permiten repetidamente seleccionar el elemento de la cola de prioridad que tiene como clave el valor mínimo (máximo). Esto conlleva a que una cola de prioridad P debe soportar las siguiente operaciones: ColaPrioridad(T) Insertar(P,x): añade el elemento x a la cola de prioridad EncontrarMin(P): Devuelve el elemento de P con la priridad con menor valor. EliminarMin(P): Quite y devuelve el elemento con la priridad con menor valor.

27/04/2015Dulce M. Rivero A. Estructura de datos 8 Implementaciones de un TDA de Cola de Prioridad Arboles equilibrados (AVL, ROJO y NEGRO) Permite las operaciones en O(log n). Se mantiene la propiedad de ABB sin nesecidad. Se añade costo adicional por las operaciones de equilibrio sin necesidad. COLAS DE PRIORIDAD

27/04/2015Dulce M. Rivero A. Estructura de datos 9 Implementaciones de un TDA de Cola de Prioridad Arboles equilibrados (AVL, ROJO y NEGRO) Permite las operaciones en O(log n). Se mantiene la propiedad de ABB sin nesecidad. Se añade costo adicional por las operaciones de equilibrio sin necesidad. Montículos Binarios Montículos-d COLAS DE PRIORIDAD

27/04/2015Dulce M. Rivero A. Estructura de datos 10 Implementaciones de un TDA de Colad de Prioridad Arboles equilibrados (AVL, ROJO y NEGRO) Permite las operaciones en O(log n). Se mantiene la propiedad de ABB sin nesecidad. Se añade costo adicional por las operaciones de equilibrio sin necesidad. Montículos Binarios, Montículos-d Montículos a la izquierda COLAS DE PRIORIDAD

27/04/2015Dulce M. Rivero A. Estructura de datos 11 Implementaciones de un TDA de Colad de Prioridad Arboles equilibrados (AVL, ROJO y NEGRO) Permite las operaciones en O(log n). Se mantiene la propiedad de ABB sin nesecidad. Se añade costo adicional por las operaciones de equilibrio sin necesidad. Montículos Binarios, Montículos-d Montículos a la izquierda Montículos oblicuos. ( Estructura amortizada) COLAS DE PRIORIDAD

27/04/2015Dulce M. Rivero A. Estructura de datos 12 Implementaciones de un TDA de Colad de Prioridad Arboles equilibrados (AVL, ROJO y NEGRO) Permite las operaciones en O(log n). Se mantiene la propiedad de ABB sin nesecidad. Se añade costo adicional por las operaciones de equilibrio sin necesidad. Montículos Binarios Montículos a la izquierda Montículos oblicuos. ( Estructura amortizada) Colas binomiales, colas binomiales perezosas, colas Fibonacci COLAS DE PRIORIDAD

27/04/2015Dulce M. Rivero A. Estructura de datos 13 MONTÍCULOS BINARIOS Es una estructura de datos simple que da soporte eficiente al TDA de colas de prioridad. Un montículo binario (o simplemente montículo o heap) es un árbol binario semicompleto en el que el valor de la clave almacenada en cualquier nodo es menor o igual que los valores claves de sus hijos

27/04/2015Dulce M. Rivero A. Estructura de datos 14 MONTÍCULOS BINARIOS Propiedad de ordenamiento parcial: la clave almacenada en cualquier nodo es menor o igual que los valores claves de sus hijos. Un Monticúlo binario entonces debe satisfacer dos propiedades

27/04/2015Dulce M. Rivero A. Estructura de datos 15 MONTÍCULOS BINARIOS Propiedad de ordenamiento parcial: la clave almacenada en cualquier nodo es menor o igual que los valores claves de sus hijos. Propiedad de la forma: árbol binario semicompleto Nodos hojas, sin huecos

27/04/2015Dulce M. Rivero A. Estructura de datos 16 MONTÍCULOS BINARIOS Propiedad de ordenamiento parcial: la clave almacenada en cualquier nodo es menor o igual que los valores claves de sus hijos. Propiedad de la forma: árbol binario semicompleto Nodos hojas, sin huecos

27/04/2015Dulce M. Rivero A. Estructura de datos 17 MONTÍCULOS BINARIOS Ventajas: el hecho de ser semicompleto hace que sea posible una representación secuencial

27/04/2015Dulce M. Rivero A. Estructura de datos 18 MONTÍCULOS BINARIOS La propiedad de la forma implica entonces: Si un nodo está almacenado en la posición i. Su hijo izquierdo, si existe, se encuentra en la posición 2i. Su hijo derecho, si existe, se encuentra en la posición 2i+1. El padre se encuentra en la posición i/ i=3 2*3=62*3+1=7 i/2=1

27/04/2015Dulce M. Rivero A. Estructura de datos 19 MONTÍCULOS BINARIOS Se cálcula fácil y rápidamente, realizando un dezplazamiento de un bit a la izquierda o a la derecha. No hay necesidad de almacenar punteros como en los ABB. Los cálculos de índices tardan menos tiempo que los de desreferencia de punteros asociados a una representación enlazada.

27/04/2015Dulce M. Rivero A. Estructura de datos 20 MONTÍCULOS BINARIOS MANTENIMIENTO DE MONTICULOS La operación EncontrarMin() se realiza en orden constante ya que solo será necesario acceder al valor de la raíz. Las operaciones Insertar(x) y EliminarMin() no tienen implantaciones triviales en un montículo binario. Es necesario asegurar que ambas operaciones no destruyan las propiedades de un montículo.

27/04/2015Dulce M. Rivero A. Estructura de datos 21 MONTÍCULOS BINARIOS Insertar (x): Al insertar un elemento x en un montículo de n elementos debe resultar un árbol binario de n+1 elementos, esto es: El nodo se añade como una hoja extrema creciendo de izquierda a derecha (n+1).

27/04/2015Dulce M. Rivero A. Estructura de datos 22 MONTÍCULOS BINARIOS Insertar (x): Al insertar un elemento x en un montículo de n elementos debe resultar un árbol binario de n+1 elemntos, esto es: El nodo se añade como una hoja extrema creciendo de izquierda a derecha (n+1). (garantiza la propiedad de forma) Se garantiza la propiedad de ordenamiento parcial

27/04/2015Dulce M. Rivero A. Estructura de datos 23 MONTÍCULOS BINARIOS

27/04/2015Dulce M. Rivero A. Estructura de datos 24 MONTÍCULOS BINARIOS

27/04/2015Dulce M. Rivero A. Estructura de datos 25 MONTÍCULOS BINARIOS

27/04/2015Dulce M. Rivero A. Estructura de datos 26 MONTÍCULOS BINARIOS I=10 I=5 I=2 I=1

27/04/2015Dulce M. Rivero A. Estructura de datos 27 MONTÍCULOS BINARIOS Eliminar(): Al eliminar un elemento x en un montículo de n elementos, se elimina el elemento de clave mínima, es decir el elemento de la raíz. Se debe garantizar la propiedad de ordenamiento parcial??

27/04/2015Dulce M. Rivero A. Estructura de datos 28 MONTÍCULOS BINARIOS n=n-1

27/04/2015Dulce M. Rivero A. Estructura de datos 29 MONTÍCULOS BINARIOS

27/04/2015Dulce M. Rivero A. Estructura de datos 30 MONTÍCULOS BINARIOS

27/04/2015Dulce M. Rivero A. Estructura de datos 31 MONTÍCULOS BINARIOS

27/04/2015Dulce M. Rivero A. Estructura de datos 32 MONTÍCULOS BINARIOS En la operación de inserción es necesario realizar un subir (filtrado ascendente) del nodo pivote o insertador para asegurar la propiedad de forma. En la operación de eliminación es necesario realizar un hundir (filtrado descendente) del nodo pivote o insertador para asegurar la propiedad de forma.

27/04/2015Dulce M. Rivero A. Estructura de datos 33 MONTÍCULOS BINARIOS Creación de un montículo a partir de una colección existente de datos. Sol 1: Hacer n inserciones en un montículo inicialmente vacío O(nlog n). Enfoque de arriba hacia abajo.

27/04/2015Dulce M. Rivero A. Estructura de datos 34 MONTÍCULOS BINARIOS Creación de un montículo a partir de una colección existente de datos. Sol 1: Hacer n inserciones en un montículo inicialmente vacío O(nlog n). Enfoque de arriba hacia abajo. Sol 2: Utilizar un enfoque de abajo hacia arriba, O(n).

27/04/2015Dulce M. Rivero A. Estructura de datos 35 MONTÍCULOS BINARIOS Sol 2: Utilizar un enfoque de abajo hacia arriba, O(n). Pasos: Almacenar arbitariamente los n elementos en el árbol

27/04/2015Dulce M. Rivero A. Estructura de datos 36 MONTÍCULOS BINARIOS Pasos: Almacenar arbitariamente los n elementos en el árbol. Con el nodo [n/2] procesando en orden decreciente hasta el nodo 1, montificar el subárbol con raíz en cada nodo por medio de un hundir

27/04/2015Dulce M. Rivero A. Estructura de datos 37 MONTÍCULOS BINARIOS

27/04/2015Dulce M. Rivero A. Estructura de datos 38 MONTÍCULOS BINARIOS

27/04/2015Dulce M. Rivero A. Estructura de datos 39 MONTÍCULOS BINARIOS

27/04/2015Dulce M. Rivero A. Estructura de datos 40 MONTÍCULOS BINARIOS

27/04/2015Dulce M. Rivero A. Estructura de datos 41 MONTÍCULOS BINARIOS

27/04/2015Dulce M. Rivero A. Estructura de datos 42 MONTÍCULOS BINARIOS

27/04/2015Dulce M. Rivero A. Estructura de datos 43 MONTÍCULOS BINARIOS Template class Monticulo{ T elemento[max]; int n=0; protected: Flotar(int i); Hundir(int i); public: Montículo(const T& elem); Montículo(T* elem); Montículo();

27/04/2015Dulce M. Rivero A. Estructura de datos 44 MONTÍCULOS BINARIOS void Inserta(const T& elem); T& EncontrarMin(); T& EliminarMin(); Booleano Vacio() const; inline void HacerVacio(); // operadores.>> <<

27/04/2015Dulce M. Rivero A. Estructura de datos 45 MONTÍCULOS BINARIOS Template void Monticulo::Flotar(int i){ T elem=elemento[i]; int p=i/2; while (elem =1) { elemento[i]=elemento[p]; i=p; p=i>>1;} elemento[i]=elem;}

27/04/2015Dulce M. Rivero A. Estructura de datos 46 MONTÍCULOS BINARIOS Template void Monticulo::Hundir(int i){ Assert(i>=0) return; T elem=elemento[i]; int n; int c; j=i; c=2*i; while (c<=n) { if ( c+1<= n){ if (elemento[c+1]<elemento[c]) c=c+1;} if (elem>elemento[c]) elemento[j]=elemento[c]; j=c; c=j<<1; //2*j } elemento[j]=elem;}

27/04/2015Dulce M. Rivero A. Estructura de datos 47 MONTÍCULOS BINARIOS Template void Monticulo ::Insertar(constT& e){ n=n+1; if (n<=max){ elemento[n]=e; flotar(n);}} Template T& Monticulo ::EliminarMin(){ T* elem= new T(elemento[1]); elemento[1]=elemento[n]; n--; if (Vacio()==falso) Hundir(1); return *elem;}

27/04/2015Dulce M. Rivero A. Estructura de datos 48 MONTÍCULOS BINARIOS Template T& Monticulo ::EncontrarMin(){ T* elem= new T(elemento[1]); return *elem;} Template booleano Monticulo ::Vacio(){ if (n>0) return true; return falso;

27/04/2015Dulce M. Rivero A. Estructura de datos MONTÍCULOS -d Montículos parecidos a los binarios, excepto que todos los nodos tienen d hijos.

27/04/2015Dulce M. Rivero A. Estructura de datos 50 Características Más bajos que los montículos binarios altura log d n. Mejora la operación de insertar EliminarMin es más costosa O(d log d n) ¿por qué? Se pueden implantar en arreglos Operaciones de multiplicación y división son más costosas Bueno cuando hay muchas inserciones y pocas eliminaciones Bueno cuando el tamaño del montículo es muy grande. MONTÍCULOS -d

27/04/2015Dulce M. Rivero A. Estructura de datos 51 Problema: La operación de combinar dos montículos en uno (fusionar) no tiene un soporte eficiente Estructuras para fusionar eficientemente. Montículos a la izquierda: es un árbol binario. Se diferencia del montículo binario porque el montículo a la izquierda no está perfectamente equilibrado (intenta ser muy desequilibrado). Montículos oblicuos: MONTÍCULOS -d

27/04/2015Dulce M. Rivero A. Estructura de datos 52 MONTÍCULOS BINARIOS A LA IZQUIERDA Longitud del camino nulo Longitud del camino nulo lcn(x): es la longitud del camino más corto entre x y un nodo hoja. Longitud del camino nulo de un nodo hoja o rama con un hijo es 0. lcn(nulo) = -1 (longitud del camino nulo es -1)

27/04/2015Dulce M. Rivero A. Estructura de datos 53 MONTÍCULOS BINARIOS A LA IZQUIERDA Propiedad del montículo a la izquierda: La lcn del hijo izquierdo es al menos tan grande como la del hijo derecho El árbol se desvia con mayor profundidad al lado izquierdo.

27/04/2015Dulce M. Rivero A. Estructura de datos 54 MONTÍCULOS BINARIOS A LA IZQUIERDA Un montículo a la izquierda poseen dos propiedades: Propiedad estructural basada en la longitud del camino nulo Propiedad de orden (como el montículo binario)

27/04/2015Dulce M. Rivero A. Estructura de datos 55 MONTÍCULOS BINARIOS A LA IZQUIERDA *1*

27/04/2015Dulce M. Rivero A. Estructura de datos 56 MONTÍCULOS BINARIOS A LA IZQUIERDA *1* MONTÍCULO A LA IZQUIERDA NO lcn de cualquier nodo es 1 más que la mínima longitud del camino nulo de sus hijos

27/04/2015Dulce M. Rivero A. Estructura de datos 57 MONTÍCULOS BINARIOS A LA IZQUIERDA Teorema 4Un árbol a la izquierda con d nodos en el camino derecho debe tener al menos 2 d - 1 nodos 4Un árbol a la izquierda de n nodos tiene un camino derecho con a lo más log(n+1) nodos 4La idea es trabajarlo por el lado derecho que es más corto.

27/04/2015Dulce M. Rivero A. Estructura de datos 58 MONTÍCULOS BINARIOS A LA IZQUIERDA Ejemplo para fusionar dos montículos a la izquierda (P1, P2) P1P2

27/04/2015Dulce M. Rivero A. Estructura de datos 59 MONTÍCULOS BINARIOS A LA IZQUIERDA P1 P2 Ejemplo para fusionar dos montículos a la izquierda (P1, P2)

27/04/2015Dulce M. Rivero A. Estructura de datos 60 MONTÍCULOS BINARIOS A LA IZQUIERDA P1 P2 Ejemplo para fusionar dos montículos a la izquierda (P1, P2)

27/04/2015Dulce M. Rivero A. Estructura de datos 61 MONTÍCULOS BINARIOS A LA IZQUIERDA P1 P2 Ejemplo para fusionar dos montículos a la izquierda (P1, P2)

27/04/2015Dulce M. Rivero A. Estructura de datos 62 MONTÍCULOS BINARIOS A LA IZQUIERDA P1 P2 NULO Ejemplo para fusionar dos montículos a la izquierda (P1, P2)

27/04/2015Dulce M. Rivero A. Estructura de datos 63 MONTÍCULOS BINARIOS A LA IZQUIERDA LCN? Ejemplo para fusionar dos montículos a la izquierda (P1, P2)

27/04/2015Dulce M. Rivero A. Estructura de datos 64 MONTÍCULOS BINARIOS A LA IZQUIERDA LCN? Ejemplo para fusionar dos montículos a la izquierda (P1, P2)

27/04/2015Dulce M. Rivero A. Estructura de datos 65 MONTÍCULOS BINARIOS A LA IZQUIERDA LCN ? Ejemplo para fusionar dos montículos a la izquierda (P1, P2)

27/04/2015Dulce M. Rivero A. Estructura de datos 66 MONTÍCULOS BINARIOS A LA IZQUIERDA LCN? Ejemplo para fusionar dos montículos a la izquierda (P1, P2)

27/04/2015Dulce M. Rivero A. Estructura de datos 67 MONTÍCULOS BINARIOS A LA IZQUIERDA LCN? Ejemplo para fusionar dos montículos a la izquierda (P1, P2)

27/04/2015Dulce M. Rivero A. Estructura de datos 68 MONTÍCULOS BINARIOS A LA IZQUIERDA Ejemplo para fusionar dos montículos a la izquierda (P1, P2)

27/04/2015Dulce M. Rivero A. Estructura de datos 69 MONTÍCULOS BINARIOS Template class MontIzq{ template class ElMont { friend class Montizq ; protected: T clave; int lcn; public: // los métodos de la clase } A LA IZQUIERDA

27/04/2015Dulce M. Rivero A. Estructura de datos 70 MONTÍCULOS BINARIOS Template class MontIzq: private ABB { public: MontIzq(const T& elem); MontIzq(const MontIzq* elem); MontIzq(T* elem); MontIzq(); MontIzq & Fusionar(MontIzq & m1, MontIzq & m2); A LA IZQUIERDA

27/04/2015Dulce M. Rivero A. Estructura de datos 71 MONTÍCULOS BINARIOS void Inserta(const T& elem); T& EncontrarMin(); T& EliminarMin(); Booleano Vacio() const; inline void HacerVacio(); // operadores.>> << private: MontIzq & Fusionar1(MontIzq & m1, MontIzq & m2) A LA IZQUIERDA

27/04/2015Dulce M. Rivero A. Estructura de datos 72 MONTÍCULOS BINARIOS A LA IZQUIERDA Template void MontIzq::Fusionar(MontIzq & m1, MontIzq & m2){ if (m1.Vacio()==true) return m2; else { if (m2.Vacio ()== true) return m1; else{ if (m1  Infor().clave() < m2  Infor().clave()) return Fusionar1(m1,m2); else return Fusionar1(m2,m1);}} }

27/04/2015Dulce M. Rivero A. Estructura de datos 73 MONTÍCULOS BINARIOS A LA IZQUIERDA Template void MontIzq::Fusionar1(MontIzq & m1, MontIzq & m2){ MontIzq aux; if (m1  Hizq() == 0) m1  Hizq(m2.raiz); else { m1  Hder(Fusionar(m1  Hder(),m2)); if (m1  Hizq()  Lcn() < m1  Hder()  Lcn()) intercambiar(m1  Izq(),m1  Der()) m1  Lcn(m1  Der()  Lcn()+1)} return m1;}

27/04/2015Dulce M. Rivero A. Estructura de datos 74 MONTÍCULOS BINARIOS Insertar 6 M1M

27/04/2015Dulce M. Rivero A. Estructura de datos 75 MONTÍCULOS BINARIOS Insertar 6 M1M Nulo

27/04/2015Dulce M. Rivero A. Estructura de datos 76 MONTÍCULOS BINARIOS Insertar 6 M1M

27/04/2015Dulce M. Rivero A. Estructura de datos 77 MONTÍCULOS BINARIOS Insertar 6 M1M

27/04/2015Dulce M. Rivero A. Estructura de datos 78 MONTÍCULOS BINARIOS Insertar 6 M

27/04/2015Dulce M. Rivero A. Estructura de datos 79 MONTÍCULOS BINARIOS Template void Monticulo ::Insertar(constT& e){ MontIzq aux = new MontIzq (e); MontIzq aux1 = new MontIzq (this); this  Fusionar( aux, aux1); A LA IZQUIERDA

27/04/2015Dulce M. Rivero A. Estructura de datos 80 MONTÍCULOS BINARIOSA LA IZQUIERDA M EliminarMin()

27/04/2015Dulce M. Rivero A. Estructura de datos 81 MONTÍCULOS BINARIOSA LA IZQUIERDA M M2

27/04/2015Dulce M. Rivero A. Estructura de datos 82 MONTÍCULOS BINARIOSA LA IZQUIERDA M M2

27/04/2015Dulce M. Rivero A. Estructura de datos 83 MONTÍCULOS BINARIOSA LA IZQUIERDA M M2 NULO

27/04/2015Dulce M. Rivero A. Estructura de datos 84 MONTÍCULOS BINARIOSA LA IZQUIERDA M

27/04/2015Dulce M. Rivero A. Estructura de datos 85 MONTÍCULOS BINARIOS A LA IZQUIERDA Template T& Monticulo ::EliminarMin(){ T* ele = new T(raiz->Elem()); MontIzq m1; MontIzq m2; m1=raiz  Hizq(); m2=raiz  Hder(); delete raiz; this  Fusionar(m1,m2); return *ele;}

27/04/2015Dulce M. Rivero A. Estructura de datos 86 MONTÍCULOS BINARIOS OBLICUOS 4Un montículo oblicuo es una versión autoajustable de un montículo a la izquierda. 4Es más facil de implementar debido al empleo de la heurística auto-ajustable. 4En estos, el recorrido de abajo hacia arriba incondicionalmente se realiza el intercambio en todos los nodos (excepto para el nodo extremo derecho, dado que no tiene hijo no tiene sentido intercambiarlos). 4No se mantiene información acerca de la longitud del camino nulo.

27/04/2015Dulce M. Rivero A. Estructura de datos 87 MONTÍCULOS BINARIOS OBLICUOS 4El camino derecho del montículo oblicuo puede ser arbitrariamente largo en un momento dado O(n). 4Para cualesquiera m operaciones consecutivas, el tiempo total en el peor de los casos es O(m log n). Así el costo amortizado por operación en un montículo oblicuo es O(log n)

27/04/2015Dulce M. Rivero A. Estructura de datos P1P2 MONTÍCULOS BINARIOS OBLICUOS

27/04/2015Dulce M. Rivero A. Estructura de datos P1 P2 MONTÍCULOS BINARIOS OBLICUOS

27/04/2015Dulce M. Rivero A. Estructura de datos P1 P2 MONTÍCULOS BINARIOS OBLICUOS

27/04/2015Dulce M. Rivero A. Estructura de datos P1 P2 MONTÍCULOS BINARIOS OBLICUOS

27/04/2015Dulce M. Rivero A. Estructura de datos P1 P2 NULO MONTÍCULOS BINARIOS OBLICUOS

27/04/2015Dulce M. Rivero A. Estructura de datos MONTÍCULOS BINARIOS OBLICUOS

27/04/2015Dulce M. Rivero A. Estructura de datos MONTÍCULOS BINARIOS OBLICUOS

27/04/2015Dulce M. Rivero A. Estructura de datos MONTÍCULOS BINARIOS OBLICUOS

27/04/2015Dulce M. Rivero A. Estructura de datos MONTÍCULOS BINARIOS OBLICUOS

27/04/2015Dulce M. Rivero A. Estructura de datos MONTÍCULOS BINARIOS OBLICUOS

27/04/2015Dulce M. Rivero A. Estructura de datos MONTÍCULOS BINARIOS OBLICUOS

27/04/2015Dulce M. Rivero A. Estructura de datos MONTÍCULOS BINARIOS OBLICUOS

27/04/2015Dulce M. Rivero A. Estructura de datos MONTÍCULOS BINARIOS OBLICUOS

27/04/2015Dulce M. Rivero A. Estructura de datos 101 Template class MonO: private ABB { public: MonO(const T& elem); MonO(const MontIzq* elem); MonO(T* elem); MonO(); MontO & Fusionar(MonO & m1, MonO & m2); MONTÍCULOS BINARIOS OBLICUOS

27/04/2015Dulce M. Rivero A. Estructura de datos 102 void Inserta(const T& elem); T& EncontrarMin(); T& EliminarMin(); Booleano Vacio() const; inline void HacerVacio(); // operadores.>> << privare: MonO & Fusionar1(MonO & m1, MonO & m2) MONTÍCULOS BINARIOS OBLICUOS

27/04/2015Dulce M. Rivero A. Estructura de datos 103 Template void MonO::Fusionar(MonO & m1, MonO & m2){ if (m1.Vacio()==true) return m2; else¨{ if (m2.Vacio ()== true) return m1; else{ if (m1  Infor() < m2  Infor()) return Fusionar1(m1,m2); else return Fusionar1(m2,m1);}} } MONTÍCULOS BINARIOS OBLICUOS

27/04/2015Dulce M. Rivero A. Estructura de datos 104 Template void MonO::Fusionar1(MonO & m1, MonO & m2){ MonO aux; if (m1  Hizq() == 0) m1  Hizq(m2.raiz); else { m1  Hder(Fusionar(m1  Hder(),m2)); intercambiar(m1  Izq(),m1  Der());} return m1;} MONTÍCULOS BINARIOS OBLICUOS

27/04/2015Dulce M. Rivero A. Estructura de datos 105 BIBLIOGRAFÍA Gregory L. Heilemam. “ Estructura de Datos, Algoritmos, y Programación Orientada a Objetos”. Mc Graw Hill Luis Joyanes A. Ignacio Zahonero M. “ Estructura de Datos”. Mc Graw Hill Mark Allen W. “ Estructura de Datos y Algoritmos”. Addison Wesley 1995.