COLAS DE PRIORIDAD
This presentation is the property of its rightful owner.
Sponsored Links
1 / 105

COLAS DE PRIORIDAD PowerPoint PPT Presentation


  • 84 Views
  • Uploaded on
  • Presentation posted in: General

COLAS DE PRIORIDAD. Las colas de prioridad son estructuras de datos que resultan ser útiles en muchas aplicaciones informáticas. COLAS DE PRIORIDAD. Las colas de prioridad son estructuras de datos que resultan ser útiles en muchas aplicaciones informáticas.

Download Presentation

COLAS DE PRIORIDAD

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Colas de prioridad

COLAS DE PRIORIDAD

Las colas de prioridad son estructuras de datos que resultan ser útiles en muchas aplicaciones informáticas.

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

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.

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

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

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

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:

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

ColaPrioridad(T)

Insertar(P,x): añade el elemento x a la cola de prioridad

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:

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

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.

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:

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

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.

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:

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

COLAS DE PRIORIDAD

  • 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.

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

COLAS DE PRIORIDAD

  • 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

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

COLAS DE PRIORIDAD

  • 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

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

COLAS DE PRIORIDAD

  • 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)

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

COLAS DE PRIORIDAD

  • 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

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

MONTÍCULOS BINARIOS

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

Es una estructura de datos simple que da soporte eficiente al TDA de colas de prioridad.

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

MONTÍCULOS BINARIOS

Un Monticúlo binario entonces debe satisfacer dos propiedades

  • Propiedad de ordenamiento parcial: la clave almacenada en cualquier nodo es menor o igualque los valores claves de sus hijos.

2

8

3

10

16

7

18

13

15

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

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

8

3

10

16

7

18

13

15

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

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

8

3

10

16

7

18

13

15

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

MONTÍCULOS BINARIOS

Ventajas: el hecho de ser semicompleto hace que sea posible una representación secuencial.

2

8

3

10

16

7

18

13

15

2

8

3

2

10

16

7

18

13

15

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

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

8

3

2*3=6

2*3+1=7

i/2=1

10

16

7

18

i=3

2

8

3

2

10

16

7

18

13

15

13

15

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

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.

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

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.

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

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).

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

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

2

8

3

10

2

16

7

18

13

15

4

8

3

10

16

7

18

13

15

4

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

MONTÍCULOS BINARIOS

2

8

3

10

4

7

18

13

15

16

2

8

3

2

10

4

7

18

13

15

16

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

MONTÍCULOS BINARIOS

2

4

3

10

8

7

18

13

15

16

2

4

3

2

10

8

7

18

13

15

16

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

MONTÍCULOS BINARIOS

2

4

3

10

8

7

18

13

15

16

2

4

3

2

10

8

7

18

13

15

16

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

MONTÍCULOS BINARIOS

2

8

3

10

2

16

7

18

13

15

4

I=10

2

8

3

10

2

4

7

18

13

15

16

I=5

2

4

3

10

2

8

7

18

13

15

16

I=2

2

4

3

10

2

8

7

18

13

15

16

I=1

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

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

2

8

3

10

2

16

7

18

13

15

8

3

10

16

7

18

13

15

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

MONTÍCULOS BINARIOS

15

8

3

10

16

7

18

13

15

15

8

3

2

10

16

7

18

13

n=n-1

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

MONTÍCULOS BINARIOS

15

8

3

10

16

7

18

13

15

8

3

2

10

16

7

18

13

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

MONTÍCULOS BINARIOS

3

8

15

10

16

7

18

13

3

8

15

2

10

16

7

18

13

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

MONTÍCULOS BINARIOS

3

8

7

10

16

15

18

13

3

8

7

2

10

16

15

18

13

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

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.

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

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.

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

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).

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

MONTÍCULOS BINARIOS

  • Sol 2: Utilizar un enfoque de abajo hacia arriba, O(n).

  • Pasos:

    • Almacenar arbitariamente los n elementos en el árbol.

19

2

13

18

15

3

7

16

8

19

2

13

2

18

15

3

7

16

8

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

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.

1

19

3

2

2

13

4

18

15

3

7

16

8

19

2

13

18

2

15

3

7

16

8

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

MONTÍCULOS BINARIOS

1

19

2

3

2

13

8

15

3

7

16

18

19

2

13

2

8

15

3

7

16

18

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

MONTÍCULOS BINARIOS

1

19

2

2

3

8

15

13

7

16

18

19

2

3

8

2

15

13

7

16

18

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

MONTÍCULOS BINARIOS

19

2

3

8

15

13

7

16

18

19

2

3

2

8

15

13

7

16

18

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

MONTÍCULOS BINARIOS

2

19

3

8

15

13

7

16

18

2

19

3

2

8

15

13

7

16

18

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

MONTÍCULOS BINARIOS

2

8

3

19

15

13

7

16

18

2

8

3

2

19

15

13

7

16

18

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

MONTÍCULOS BINARIOS

2

8

3

16

15

13

7

19

18

2

8

3

2

16

15

13

7

19

18

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

MONTÍCULOS BINARIOS

Template<class T> 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();

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

MONTÍCULOS BINARIOS

void Inserta(const T& elem);

T& EncontrarMin();

T& EliminarMin();

Booleano Vacio() const;

inline void HacerVacio(); // operadores .>> <<

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

MONTÍCULOS BINARIOS

Template<class T>

void Monticulo::Flotar(int i){

T elem=elemento[i];

int p=i/2;

while (elem< elemento[p] && i>=1)

{ elemento[i]=elemento[p];

i=p;

p=i>>1;}

elemento[i]=elem;}

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

MONTÍCULOS BINARIOS

Template<class T>

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;}

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

MONTÍCULOS BINARIOS

Template<class T> void Monticulo<T>::Insertar(constT& e){

n=n+1;

if (n<=max){

elemento[n]=e;

flotar(n);}}

Template<class T> T& Monticulo<T>::EliminarMin(){

T* elem= new T(elemento[1]);

elemento[1]=elemento[n];

n--;

if (Vacio()==falso) Hundir(1);

return *elem;}

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

MONTÍCULOS BINARIOS

Template<class T> T& Monticulo<T>::EncontrarMin(){

T* elem= new T(elemento[1]);

return *elem;}

Template<class T> booleano Monticulo<T>::Vacio(){

if (n>0) return true;

return falso;

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

MONTÍCULOS -d

Montículos parecidos a los binarios, excepto que todos los nodos tienen d hijos.

5

1

6

7

10

2

3

4

21

61

31

14

13

12

19

18

16

4 7 10 13 15 16 8 17 9

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

MONTÍCULOS -d

  • Características

  • Más bajos que los montículos binarios altura logd n.

  • Mejora la operación de insertar

  • EliminarMin es más costosa O(d logd 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.

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

MONTÍCULOS -d

  • 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:

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

1

1

0

0

0

0

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)

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

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.

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

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)

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

MONTÍCULOS BINARIOS A LA IZQUIERDA

1

1

1

0

1*

0

0

0

0

1

0

0

0

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

MONTÍCULOS BINARIOS A LA IZQUIERDA

MONTÍCULO A LA IZQUIERDA

NO

1

1

1

0

1*

0

0

0

0

1

0

0

0

lcn de cualquier nodo es 1 más que la mínima longitud del camino nulo de sus hijos

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

MONTÍCULOS BINARIOS A LA IZQUIERDA

  • Teorema

    • Un árbol a la izquierda con d nodos en el camino derecho debe tener al menos 2d - 1 nodos

    • Un árbol a la izquierda de n nodos tiene un camino derecho con a lo más log(n+1) nodos

    • La idea es trabajarlo por el lado derecho que es más corto.

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

MONTÍCULOS BINARIOS A LA IZQUIERDA

Ejemplo para fusionar dos montículos a la izquierda (P1, P2)

3

6

10

8

12

7

21

14

17

18

24

37

18

23

26

33

P1

P2

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

MONTÍCULOS BINARIOS A LA IZQUIERDA

Ejemplo para fusionar dos montículos a la izquierda (P1, P2)

3

6

10

12

7

8

21

14

18

24

37

18

17

23

33

26

P2

P1

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

MONTÍCULOS BINARIOS A LA IZQUIERDA

Ejemplo para fusionar dos montículos a la izquierda (P1, P2)

3

6

10

12

8

7

21

14

18

24

17

37

18

23

33

26

P2

P1

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

MONTÍCULOS BINARIOS A LA IZQUIERDA

Ejemplo para fusionar dos montículos a la izquierda (P1, P2)

3

6

10

12

8

7

21

14

18

24

17

37

23

33

26

18

P2

P1

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

MONTÍCULOS BINARIOS A LA IZQUIERDA

Ejemplo para fusionar dos montículos a la izquierda (P1, P2)

3

6

10

12

8

7

NULO

21

14

18

24

17

37

23

33

26

18

P2

P1

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

MONTÍCULOS BINARIOS A LA IZQUIERDA

Ejemplo para fusionar dos montículos a la izquierda (P1, P2)

3

6

LCN?

10

12

8

7

21

14

18

24

18

17

37

23

33

26

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

MONTÍCULOS BINARIOS A LA IZQUIERDA

Ejemplo para fusionar dos montículos a la izquierda (P1, P2)

LCN?

6

3

7

12

10

8

37

18

24

21

14

18

17

33

23

26

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

MONTÍCULOS BINARIOS A LA IZQUIERDA

Ejemplo para fusionar dos montículos a la izquierda (P1, P2)

LCN?

6

3

7

12

10

37

8

18

24

21

14

18

17

33

23

26

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

MONTÍCULOS BINARIOS A LA IZQUIERDA

Ejemplo para fusionar dos montículos a la izquierda (P1, P2)

LCN?

6

3

12

7

10

37

8

18

24

21

14

33

23

18

17

26

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

MONTÍCULOS BINARIOS A LA IZQUIERDA

Ejemplo para fusionar dos montículos a la izquierda (P1, P2)

3

LCN?

6

10

12

7

21

14

37

8

18

24

23

33

18

17

26

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

MONTÍCULOS BINARIOS A LA IZQUIERDA

Ejemplo para fusionar dos montículos a la izquierda (P1, P2)

3

6

10

12

7

21

14

37

8

18

24

23

33

18

17

26

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

MONTÍCULOS BINARIOS

A LA IZQUIERDA

Template<class Type> class MontIzq{

template <class T> class ElMont {

friend class Montizq<T>;

protected:

T clave;

int lcn;

public:

// los métodos de la clase }

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

MONTÍCULOS BINARIOS

A LA IZQUIERDA

Template<class T> class MontIzq: private ABB<ElMont>{

public:

MontIzq(const T& elem);

MontIzq(const MontIzq* elem);

MontIzq(T* elem);

MontIzq();

MontIzq<T>& Fusionar(MontIzq<T>& m1, MontIzq<T>& m2);

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

MONTÍCULOS BINARIOS

A LA IZQUIERDA

void Inserta(const T& elem);

T& EncontrarMin();

T& EliminarMin();

Booleano Vacio() const;

inline void HacerVacio(); // operadores .>> <<

private:

MontIzq<T>& Fusionar1(MontIzq<T>& m1, MontIzq<T>& m2)

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

MONTÍCULOS BINARIOS A LA IZQUIERDA

Template<class T>

void MontIzq::Fusionar(MontIzq<T>& m1, MontIzq<T>& 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);}}

}

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

MONTÍCULOS BINARIOS A LA IZQUIERDA

Template<class T>

void MontIzq::Fusionar1(MontIzq<T>& m1, MontIzq<T>& m2){

MontIzq<T> 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;}

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

MONTÍCULOS BINARIOS

Insertar

M1

M2

6

3

10

8

21

14

17

23

26

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

MONTÍCULOS BINARIOS

Insertar

M1

M2

6

3

Nulo

10

8

21

14

17

23

26

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

MONTÍCULOS BINARIOS

Insertar

M1

M2

6

3

8

10

17

21

14

26

23

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

MONTÍCULOS BINARIOS

Insertar

M1

M2

6

3

8

10

17

21

14

26

23

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

MONTÍCULOS BINARIOS

Insertar

M1

3

6

10

8

21

14

17

23

26

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

MONTÍCULOS BINARIOS

A LA IZQUIERDA

Template<class T> void Monticulo<T>::Insertar(constT& e){

MontIzq<T> aux = new MontIzq<T>(e);

MontIzq<T> aux1 = new MontIzq<T>(this);

this  Fusionar( aux, aux1);

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

MONTÍCULOS BINARIOS

A LA IZQUIERDA

EliminarMin()

M1

3

10

8

21

14

17

23

26

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

MONTÍCULOS BINARIOS

A LA IZQUIERDA

M1

M2

8

10

17

21

14

26

23

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

MONTÍCULOS BINARIOS

A LA IZQUIERDA

M1

M2

8

10

17

21

14

26

23

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

MONTÍCULOS BINARIOS

A LA IZQUIERDA

M1

M2

8

10

17

NULO

21

14

26

23

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

MONTÍCULOS BINARIOS

A LA IZQUIERDA

8

M1

17

10

26

21

14

23

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

MONTÍCULOS BINARIOS A LA IZQUIERDA

Template<class T> T& Monticulo<T>::EliminarMin(){

T* ele = new T(raiz->Elem());

MontIzq<T> m1;

MontIzq<T> m2;

m1=raiz  Hizq();

m2=raiz  Hder();

delete raiz;

this  Fusionar(m1,m2);

return *ele;}

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

MONTÍCULOS BINARIOS OBLICUOS

  • Un montículo oblicuo es una versión autoajustable de un montículo a la izquierda.

  • Es más facil de implementar debido al empleo de la heurística auto-ajustable.

  • En 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).

  • No se mantiene información acerca de la longitud del camino nulo.

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

MONTÍCULOS BINARIOS OBLICUOS

  • El camino derecho del montículo oblicuo puede ser arbitrariamente largo en un momento dado O(n).

  • Para 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)

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

MONTÍCULOS BINARIOS OBLICUOS

3

6

10

8

12

7

21

14

17

18

24

37

18

23

26

33

P1

P2

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

MONTÍCULOS BINARIOS OBLICUOS

3

6

10

12

7

8

21

14

18

24

37

18

17

23

33

26

P2

P1

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

MONTÍCULOS BINARIOS OBLICUOS

3

6

10

12

8

7

21

14

18

24

17

37

18

23

33

26

P2

P1

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

MONTÍCULOS BINARIOS OBLICUOS

3

6

10

12

8

7

21

14

18

24

17

37

23

33

26

18

P2

P1

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

MONTÍCULOS BINARIOS OBLICUOS

3

6

10

12

8

7

NULO

21

14

18

24

17

37

23

33

26

18

P2

P1

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

MONTÍCULOS BINARIOS OBLICUOS

3

6

10

12

8

7

21

14

18

24

18

17

37

23

33

26

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

MONTÍCULOS BINARIOS OBLICUOS

3

6

10

12

8

7

21

14

18

17

18

24

37

23

26

33

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

MONTÍCULOS BINARIOS OBLICUOS

3

6

7

10

12

37

8

21

14

18

24

18

17

23

33

26

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

MONTÍCULOS BINARIOS OBLICUOS

3

6

7

10

12

8

37

21

14

18

24

18

17

23

33

26

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

MONTÍCULOS BINARIOS OBLICUOS

3

6

10

12

7

21

14

8

37

18

24

23

33

18

17

26

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

MONTÍCULOS BINARIOS OBLICUOS

3

6

10

12

7

21

14

8

37

18

24

23

33

18

17

26

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

MONTÍCULOS BINARIOS OBLICUOS

3

6

10

12

7

21

14

8

37

18

24

23

33

18

17

26

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

MONTÍCULOS BINARIOS OBLICUOS

3

6

10

12

7

21

14

8

37

18

24

23

33

18

17

26

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

MONTÍCULOS BINARIOS OBLICUOS

Template<class T> class MonO: private ABB<T>{

public:

MonO(const T& elem);

MonO(const MontIzq* elem);

MonO(T* elem);

MonO();

MontO<T>& Fusionar(MonO<T>& m1, MonO<T>& m2);

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

MONTÍCULOS BINARIOS OBLICUOS

void Inserta(const T& elem);

T& EncontrarMin();

T& EliminarMin();

Booleano Vacio() const;

inline void HacerVacio(); // operadores .>> <<

privare:

MonO<T>& Fusionar1(MonO<T>& m1, MonO<T>& m2)

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

MONTÍCULOS BINARIOS OBLICUOS

Template<class T>

void MonO::Fusionar(MonO<T>& m1, MonO<T>& 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);}}

}

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

MONTÍCULOS BINARIOS OBLICUOS

Template<class T>

void MonO::Fusionar1(MonO<T>& m1, MonO<T>& m2){

MonO<T> aux;

if (m1  Hizq() == 0)

m1  Hizq(m2.raiz);

else

{ m1 Hder(Fusionar(m1  Hder(),m2));

intercambiar(m1 Izq(),m1  Der());}

return m1;}

Dulce M. Rivero A. Estructura de datos


Colas de prioridad

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.

Dulce M. Rivero A. Estructura de datos


  • Login