Descargar la presentación
La descarga está en progreso. Por favor, espere
Publicada porPepe Torralba Modificado hace 10 años
1
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.
2
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.
3
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
4
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:
5
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
6
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.
7
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.
8
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
9
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
10
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
11
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
12
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
13
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
14
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 2 83 1016718 1315
15
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 2 83 1016718 1315
16
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 2 83 1016718 1315
17
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. 2 83 1016718 1315 283210167181315
18
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/2. 2 83 1016718 1315 283210167181315 i=3 2*3=62*3+1=7 i/2=1
19
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.
20
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.
21
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).
22
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 2 83 1016718 1315 283210167181315 4 4
23
27/04/2015Dulce M. Rivero A. Estructura de datos 23 MONTÍCULOS BINARIOS 2 83 104718 1315 28321047181315 16
24
27/04/2015Dulce M. Rivero A. Estructura de datos 24 MONTÍCULOS BINARIOS 43 108718 1315 24321087181315 16 2
25
27/04/2015Dulce M. Rivero A. Estructura de datos 25 MONTÍCULOS BINARIOS 43 108718 1315 24321087181315 16 2
26
27/04/2015Dulce M. Rivero A. Estructura de datos 26 MONTÍCULOS BINARIOS 24321087181315 16 283210167181315 4 283210 47181315 16 24321087181315 16 I=10 I=5 I=2 I=1
27
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?? 2 83 1016718 1315 283210167181315
28
27/04/2015Dulce M. Rivero A. Estructura de datos 28 MONTÍCULOS BINARIOS 15 83 1016718 1315 832101671813 n=n-1
29
27/04/2015Dulce M. Rivero A. Estructura de datos 29 MONTÍCULOS BINARIOS 15 83 1016718 13 15832101671813
30
27/04/2015Dulce M. Rivero A. Estructura de datos 30 MONTÍCULOS BINARIOS 3 815 1016718 13 38152101671813
31
27/04/2015Dulce M. Rivero A. Estructura de datos 31 MONTÍCULOS BINARIOS 3 87 10161518 13 38721016151813
32
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.
33
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.
34
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).
35
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. 19 213 181537 16 19213218153716 8 8
36
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. 16 19 213 181537 19213218153716 8 8 4 3 2 1
37
27/04/2015Dulce M. Rivero A. Estructura de datos 37 MONTÍCULOS BINARIOS 16 19 213 81537 1921328153716 18 3 2 1
38
27/04/2015Dulce M. Rivero A. Estructura de datos 38 MONTÍCULOS BINARIOS 16 19 23 815137 1923281513716 18 2 1
39
27/04/2015Dulce M. Rivero A. Estructura de datos 39 MONTÍCULOS BINARIOS 16 19 23 815137 1923281513716 18
40
27/04/2015Dulce M. Rivero A. Estructura de datos 40 MONTÍCULOS BINARIOS 16 2 193 815137 2193281513716 18
41
27/04/2015Dulce M. Rivero A. Estructura de datos 41 MONTÍCULOS BINARIOS 16 2 19 3 8 15137 2832191513716 18
42
27/04/2015Dulce M. Rivero A. Estructura de datos 42 MONTÍCULOS BINARIOS 16 2 19 3 8 15137 2832161513719 18
43
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();
44
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.>> <<
45
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;}
46
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;}
47
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;}
48
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;
49
27/04/2015Dulce M. Rivero A. Estructura de datos 49 1 2 3 4 4 7 10 13 15 16 8 17 9 67 10 6161 3131 2121 1414 1313 1212 1919 1818 1616 5 MONTÍCULOS -d Montículos parecidos a los binarios, excepto que todos los nodos tienen d hijos.
50
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
51
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
52
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) 1 10 00 0
53
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.
54
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)
55
27/04/2015Dulce M. Rivero A. Estructura de datos 55 MONTÍCULOS BINARIOS A LA IZQUIERDA 1 10 00 0 1 1*1* 0 01 0 0
56
27/04/2015Dulce M. Rivero A. Estructura de datos 56 MONTÍCULOS BINARIOS A LA IZQUIERDA 1 10 00 0 1 1*1* 0 01 0 0 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
57
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.
58
27/04/2015Dulce M. Rivero A. Estructura de datos 58 MONTÍCULOS BINARIOS A LA IZQUIERDA 6 1212 7 1818 2424 3 3 1010 8 2121 1414 2323 1717 2626 3737 1818 Ejemplo para fusionar dos montículos a la izquierda (P1, P2) P1P2
59
27/04/2015Dulce M. Rivero A. Estructura de datos 59 MONTÍCULOS BINARIOS A LA IZQUIERDA 6 1212 1818 2424 3 3 1010 2121 1414 2323 7 3737 1818 8 1717 2626 P1 P2 Ejemplo para fusionar dos montículos a la izquierda (P1, P2)
60
27/04/2015Dulce M. Rivero A. Estructura de datos 60 MONTÍCULOS BINARIOS A LA IZQUIERDA 6 1212 1818 2424 3 3 1010 2121 1414 2323 7 3737 1818 8 1717 2626 P1 P2 Ejemplo para fusionar dos montículos a la izquierda (P1, P2)
61
27/04/2015Dulce M. Rivero A. Estructura de datos 61 MONTÍCULOS BINARIOS A LA IZQUIERDA 6 1212 1818 2424 3 3 1010 2121 1414 2323 7 3737 1818 8 1717 2626 P1 P2 Ejemplo para fusionar dos montículos a la izquierda (P1, P2)
62
27/04/2015Dulce M. Rivero A. Estructura de datos 62 MONTÍCULOS BINARIOS A LA IZQUIERDA 6 1212 1818 2424 3 3 1010 2121 1414 2323 7 3737 1818 8 1717 2626 P1 P2 NULO Ejemplo para fusionar dos montículos a la izquierda (P1, P2)
63
27/04/2015Dulce M. Rivero A. Estructura de datos 63 MONTÍCULOS BINARIOS A LA IZQUIERDA 6 1212 1818 2424 3 3 1010 2121 1414 2323 7 3737 1818 8 1717 2626 LCN? Ejemplo para fusionar dos montículos a la izquierda (P1, P2)
64
27/04/2015Dulce M. Rivero A. Estructura de datos 64 MONTÍCULOS BINARIOS A LA IZQUIERDA 6 1212 1818 2424 3 3 1010 2121 1414 2323 7 3737 1818 8 1717 2626 LCN? Ejemplo para fusionar dos montículos a la izquierda (P1, P2)
65
27/04/2015Dulce M. Rivero A. Estructura de datos 65 MONTÍCULOS BINARIOS A LA IZQUIERDA 6 1212 1818 2424 3 3 1010 2121 1414 2323 7 37 8 18 17 26 LCN ? Ejemplo para fusionar dos montículos a la izquierda (P1, P2)
66
27/04/2015Dulce M. Rivero A. Estructura de datos 66 MONTÍCULOS BINARIOS A LA IZQUIERDA 6 1212 1818 2424 3 3 1010 2121 1414 2323 7 37 8 LCN? 18 17 26 Ejemplo para fusionar dos montículos a la izquierda (P1, P2)
67
27/04/2015Dulce M. Rivero A. Estructura de datos 67 MONTÍCULOS BINARIOS A LA IZQUIERDA 6 1212 1818 2424 3 3 1010 2121 1414 2323 7 37 8 LCN? 18 17 26 Ejemplo para fusionar dos montículos a la izquierda (P1, P2)
68
27/04/2015Dulce M. Rivero A. Estructura de datos 68 MONTÍCULOS BINARIOS A LA IZQUIERDA 3 1010 2121 1414 2323 6 1212 1818 2424 3 7 37 8 18 17 26 Ejemplo para fusionar dos montículos a la izquierda (P1, P2)
69
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
70
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
71
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
72
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);}} }
73
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;}
74
27/04/2015Dulce M. Rivero A. Estructura de datos 74 MONTÍCULOS BINARIOS Insertar 6 M1M2 3 1010 8 2121 1414 2323 1717 2626
75
27/04/2015Dulce M. Rivero A. Estructura de datos 75 MONTÍCULOS BINARIOS Insertar 6 M1M2 3 1010 8 2121 1414 2323 1717 2626 Nulo
76
27/04/2015Dulce M. Rivero A. Estructura de datos 76 MONTÍCULOS BINARIOS Insertar 6 M1M2 3 1010 8 2121 1414 2323 1717 2626
77
27/04/2015Dulce M. Rivero A. Estructura de datos 77 MONTÍCULOS BINARIOS Insertar 6 M1M2 3 1010 8 2121 1414 2323 1717 2626
78
27/04/2015Dulce M. Rivero A. Estructura de datos 78 MONTÍCULOS BINARIOS Insertar 6 M1 3 1010 8 2121 1414 2323 1717 2626
79
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
80
27/04/2015Dulce M. Rivero A. Estructura de datos 80 MONTÍCULOS BINARIOSA LA IZQUIERDA M1 3 1010 8 2121 1414 2323 1717 2626 EliminarMin()
81
27/04/2015Dulce M. Rivero A. Estructura de datos 81 MONTÍCULOS BINARIOSA LA IZQUIERDA M1 1010 8 2121 1414 2323 1717 2626 M2
82
27/04/2015Dulce M. Rivero A. Estructura de datos 82 MONTÍCULOS BINARIOSA LA IZQUIERDA M1 1010 8 2121 1414 2323 1717 2626 M2
83
27/04/2015Dulce M. Rivero A. Estructura de datos 83 MONTÍCULOS BINARIOSA LA IZQUIERDA M1 1010 8 2121 1414 2323 1717 2626 M2 NULO
84
27/04/2015Dulce M. Rivero A. Estructura de datos 84 MONTÍCULOS BINARIOSA LA IZQUIERDA M1 1010 8 2121 1414 2323 1717 2626
85
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;}
86
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.
87
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)
88
27/04/2015Dulce M. Rivero A. Estructura de datos 88 6 1212 7 1818 2424 3 3 1010 8 2121 1414 2323 1717 2626 3737 1818 P1P2 MONTÍCULOS BINARIOS OBLICUOS
89
27/04/2015Dulce M. Rivero A. Estructura de datos 89 6 1212 1818 2424 3 3 1010 2121 1414 2323 7 3737 1818 8 1717 2626 P1 P2 MONTÍCULOS BINARIOS OBLICUOS
90
27/04/2015Dulce M. Rivero A. Estructura de datos 90 6 1212 1818 2424 3 3 1010 2121 1414 2323 7 3737 1818 8 1717 2626 P1 P2 MONTÍCULOS BINARIOS OBLICUOS
91
27/04/2015Dulce M. Rivero A. Estructura de datos 91 6 1212 1818 2424 3 3 1010 2121 1414 2323 7 3737 1818 8 1717 2626 P1 P2 MONTÍCULOS BINARIOS OBLICUOS
92
27/04/2015Dulce M. Rivero A. Estructura de datos 92 6 1212 1818 2424 3 3 1010 2121 1414 2323 7 3737 1818 8 1717 2626 P1 P2 NULO MONTÍCULOS BINARIOS OBLICUOS
93
27/04/2015Dulce M. Rivero A. Estructura de datos 93 6 1212 1818 2424 3 3 1010 2121 1414 2323 7 3737 1818 8 1717 2626 MONTÍCULOS BINARIOS OBLICUOS
94
27/04/2015Dulce M. Rivero A. Estructura de datos 94 6 1212 1818 2424 3 3 1010 2121 1414 2323 7 3737 1818 8 1717 2626 MONTÍCULOS BINARIOS OBLICUOS
95
27/04/2015Dulce M. Rivero A. Estructura de datos 95 6 1212 1818 2424 3 3 1010 2121 1414 2323 7 3737 1818 8 1717 2626 MONTÍCULOS BINARIOS OBLICUOS
96
27/04/2015Dulce M. Rivero A. Estructura de datos 96 6 1212 1818 2424 3 3 1010 2121 1414 2323 7 3737 1818 8 1717 2626 MONTÍCULOS BINARIOS OBLICUOS
97
27/04/2015Dulce M. Rivero A. Estructura de datos 97 6 1212 1818 2424 3 3 1010 2121 1414 2323 7 3737 1818 8 1717 2626 MONTÍCULOS BINARIOS OBLICUOS
98
27/04/2015Dulce M. Rivero A. Estructura de datos 98 6 3 1010 2121 1414 2323 7 3737 1818 8 1717 2626 1212 1818 2424 3 MONTÍCULOS BINARIOS OBLICUOS
99
27/04/2015Dulce M. Rivero A. Estructura de datos 99 6 3 1010 2121 1414 2323 7 3737 1818 8 1717 2626 1212 1818 2424 3 MONTÍCULOS BINARIOS OBLICUOS
100
27/04/2015Dulce M. Rivero A. Estructura de datos 100 6 3 7 3737 1818 8 1717 2626 1212 1818 2424 3 1010 2121 1414 2323 MONTÍCULOS BINARIOS OBLICUOS
101
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
102
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
103
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
104
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
105
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. 1997. Luis Joyanes A. Ignacio Zahonero M. “ Estructura de Datos”. Mc Graw Hill. 1999. Mark Allen W. “ Estructura de Datos y Algoritmos”. Addison Wesley 1995.
Presentaciones similares
© 2025 SlidePlayer.es Inc.
All rights reserved.