Sunteți pe pagina 1din 7

Estructuras de Datos

Montculos
Definiciones bsicas:

Tema 3. Montculos
1.
2.
3.
4.

En un rbol binario completo todos los niveles del


rbol (excepto tal vez el ltimo) estn completos y en
el ltimo nivel todos los hijos estn acumulados del
mismo lado (por ejemplo a la izquierda)

Definiciones bsicas
Implementacin
Operaciones con montculos
Funciones de manipulacin

El elemento (uno de los) de mayor valor del montculo


se denomina raz del montculo

Montculos

Montculos
10

Definiciones bsicas:

no satisface la
condicin de
montculo

Un rbol binario satisface la condicin de montculo


si cada padre es mayor que sus hijos

12
8

A diferencia de los rboles binarios ordenados, no hay


ninguna condicin que relacione a los hijos de un
mismo padre

9
12

12
10

Un rbol binario es un montculo si satisface la


condicin de montculo y, adems, es un rbol binario
completo

8
9

10
9
6
no es completo

es un montculo

Montculos

Montculos

Utilizacin:

Implementacin:

Problemas que requieran que los datos estn siempre


ordenados para tener acceso al elemento:

Si el array es de 0 .. N-1:

Los nodos de profundidad k del rbol se almacenan ledos


de izda. a dcha en:
T[2k -1], T[2k],T[2k+1- 2]

Mayor: montculo de mximos


Menor: montculo de mnimos

Los hijos del nodo T[i] son respectivamente:

Al estado de orden del montculo se le denomina


propiedad de montculo

T[2i+1] y T[2i+2]

Cada vez que se modifica la estructura se debe


restaurar la propiedad de montculo

El padre de T[i] est en la posicin: (i-1) div 2

Montculos

Montculos
Operaciones:

Implementacin:
Al ser rboles binarios completos se implementan mediante

Hay dos operaciones principales:

un array
Si el array es de 1 .. N:
Los nodos de profundidad k del rbol se almacenan ledos
de izda. a dcha en:
T[2k], T[2k+1],T[2k+1-1]
Los hijos del nodo T[i] son respectivamente:
T[2i] y T[2i+1]

Crear un montculo

Eliminar la raz de un montculo restaurando la


propiedad del montculo

El padre de T[i] est en la posicin: i div 2

Montculos

Montculos

Operaciones. Crear un montculo

Operaciones. Crear un montculo

Creacin de un montculo a partir de los elementos: 10,


5, 3, 6, 12

Se inserta un nuevo elemento al final del montculo (primera posicin libre)

(1)

(2)

(3)

Si se mantiene la propiedad del montculo no hay que hacer ninguna


operacin

(4)

Si no se mantiene la propiedad del montculo hay que restaurarla

10

10

10

10

10

Se restaura la propiedad del montculo intercambiando el nuevo elemento


con su padre cuantas veces sea necesario, a esta operacin de subir en el

montculo se la denomina flotar un elemento

El nuevo elemento sube en el montculo (flota) y sus padres bajan en el

montculo (se hunden)

A la operacin de bajar en un montculo se la denomina hundir

Montculos

Montculos
Operaciones. Crear un montculo

Operaciones. Crear un montculo


Creacin de un montculo a partir de los elementos: 10,
5, 3, 6, 12

Nmero de operaciones en el peor de los casos para


(5)

crear un montculo con N elementos:

10

10

12

Al insertar el K-simo elemento, ste puede subir un mximo


de log2 k niveles

12

10

El nmero mximo de veces que tendramos que intercambiar


dos elementos al construir un montculo es log2 1 + log2 2 + ...

12

+ log2 N, que es O(N log2 N) = O(N log N)

Montculos

Montculos

Operaciones. Eliminar la raz sucesivamente

Operaciones. Eliminar la raz sucesivamente

(1)

(3)

12

10

10

10

(4)

3
3

5
3

(5)

Montculos

Montculos
Operaciones. Eliminar la raz sucesivamente

Operaciones. Eliminar la raz sucesivamente

Se elimina la raz del montculo y como esa posicin no debe


(2)

quedar vaca se reemplaza por el ltimo elemento del montculo

10
6

5
3

Si no se mantiene la propiedad del montculo hay que restaurarla

6
3

Para restaurarla se intercambia la nueva raz con el mayor de sus


hijos cuantas veces sea necesario

En cada paso la nueva raz va bajando (hundindose) y el mayor


de sus hijos va subiendo (flotando) hasta que la nueva raz no sea

menor que ninguno de sus hijos

Montculos

Montculos

Operaciones. Eliminar la raz sucesivamente

Funciones de manipulacin

Nmero de operaciones en el peor de los casos para

Creacin

eliminar los N elementos de un montculo:

fun montculoVaco(v: array) dev m:montculo;

Al eliminar el K-sima raz la nueva puede bajar un mximo


de log2 (N-k-1) niveles

El nmero mximo de veces que tendramos que intercambiar

Devuelve un montculo vaco. Ejemplo:

dos elementos al destruir un montculo es log2 (N-1) + log2 (N2) + ... + log2 2, que es O(N log2 N) = O(N log N)

montiEjemplo montculoVaco();

Montculos

Montculos

Ordenar un array por medio de un montculo

Funciones de manipulacin

Si se tiene un array de tamao N se crea un montculo y luego se

Modificacin: hundir

destruye se obtiene un array ordenado

fun hundir(i:ndice, m:montculo) dev m:montculo


Este algoritmo de ordenamiento se denomina ordenamiento por
montculo

Restaura la propiedad de montculo perdida por ser T[i]


menor que alguno de sus hijos. Ejemplo:

El coste de este algoritmo es de O(N log N) en el peor de los


casos: igual que otros conocidos basados en intercambios

montiEjemplo hundir(i, montiEjemplo);

10

Montculos

Montculos

Funciones de manipulacin

Funciones de manipulacin

Modificacin: flotar

Modificacin: borrar raz

fun flotar(i:ndice, m:montculo) dev m:montculo

fun borrarRaiz(m:montculo) dev m:montculo

Restaura la propiedad de montculo perdida por ser T[i]


mayor que su padre. Ejemplo:

Elimina la raz del montculo y restaura la propiedad de


montculo. Ejemplo:

montiEjemplo flotar(i, montiEjemplo);

montiEjemplo borrarRaiz(montiEjemplo);

Montculos

Montculos

Funciones de manipulacin

Funciones de manipulacin

Modificacin: aadir nodo

Consulta: vaco

fun anadirNodo(e:elemento, m:montculo) dev


m:montculo

fun vacio(m:montculo) dev b:booleano

Aade el valor e y flota este valor hasta restaurar la


propiedad de montculo . Ejemplo:

Comprueba si en el montculo hay algn


elemento. Ejemplo:

montiEjemplo anadirNodo(e, montiEjemplo);

varBooleana vacio(montiEjemplo);

11

12

Montculos
Funciones de manipulacin
Consulta: raz
fun raiz(m:montculo) dev e:elemento
Devuelve elemento de mayor valor del montculo sin
borrarlo. Ejemplo:
elemento raiz(montiEjemplo);

Montculos
Funciones de manipulacin. Coste
Funciones
montculoVaco

Coste
Cte

hundir

O(log N)

flotar

O(log N)

anadirNodo

O(log N)

borrarRaiz

O(log N)

vacio

Cte

raiz

Cte

13

S-ar putea să vă placă și