Está en la página 1de 52

Introducci

on Definici
on la Estructura Implementaci
on

Estructura de Datos
Clase 20: Conjuntos Disjuntos (disjoint-set)
Carlos Contreras Bolton
Universidad Andr
es Bello
Facultad de Ingeniera

10 de Junio de 2014

Carlos Contreras Bolton Estructura de Datos

1/52

Introducci
on Definici
on la Estructura Implementaci
on

Contenido

1 Introducci
on
2 Definici
on la Estructura
3 Implementaci
on

Basica
Mejorada

Carlos Contreras Bolton Estructura de Datos

2/52

Introducci
on Definici
on la Estructura Implementaci
on

Introduccion

Es una estructura tipo conjunto en la que los elementos


estan organizados en subconjuntos disjuntos.
El numero de elementos es fijo (no se anaden ni se
borran).
Las operaciones caractersticas son:
Combinar: hace la uni
on de dos conjuntos disjuntos
(Union).
Encuentra: dado un elemento debe determinar a que
conjunto pertenece (Find).

Carlos Contreras Bolton Estructura de Datos

3/52

Introducci
on Definici
on la Estructura Implementaci
on

Introduccion

En matematicas, dos conjuntos son disjuntos si no tienen


ningun elemento en comun.
Equivalentemente, dos conjuntos son disjuntos si su
interseccion es vaca.
Por ejemplo, {1, 2, 3} y {4, 5, 6} son conjuntos disjuntos.

Carlos Contreras Bolton Estructura de Datos

4/52

Introducci
on Definici
on la Estructura Implementaci
on

Definicion de la Estructura
Una estructura de datos de conjuntos disjuntos
(disjoint-set data structure) mantiene una coleccion:
S = S1 , S2 , . . . , Sk
de conjuntos disjuntos entre s
i, j {1, . . . , k}|i 6= j, si Si Sj =
con elementos dentro de un cierto universo:
U = x1 , . . . , xn .
Cada conjunto de la coleccion se identifica por un
representante que puede ser un miembro cualquiera del
conjunto.
Solo se requiere que al consultar por el representante de
un conjunto dos veces consecutivas sin modificar el
conjunto el resultado sea el mismo.
Carlos Contreras Bolton Estructura de Datos

5/52

Introducci
on Definici
on la Estructura Implementaci
on

Definicion de la Estructura

Sin perder generalidad se puede asumir que


U = {1, . . . , n}.
Si no fuera as se puede encontrar una funcion biyectiva
que realice la traduccion entre U y el conjunto {1, . . . , n}.
Sean x, y U se desea implementar las siguientes
operaciones:

Carlos Contreras Bolton Estructura de Datos

6/52

Introducci
on Definici
on la Estructura Implementaci
on

Definicion de la Estructura
MakeSet(x): Crea un nuevo conjunto cuyo unico
miembro (y representante) es x. Se requiere que x no este
en ningun conjunto de la estructura.
k
entrada: x U Ui=1
Si .
0
salida: S = S {x}.
Union(x, y ): Une los conjuntos que contienen a x y a
y , sea Sx y Sy . El representante del conjunto resultante
puede ser cualquier miembro de Sx Sy . Como se
requiere que la coleccion sea disjunta, se eliminan los
conjuntos Sx y Sy de la coleccion S.
entrada: x Sx y U Sx 6= Sy .
salida: S 0 = S {Sx Sy } {Sx , Sy }.
Carlos Contreras Bolton Estructura de Datos

7/52

Introducci
on Definici
on la Estructura Implementaci
on

Definicion de la Estructura

Find(x): Encuentra el representante del unico conjunto


al que pertenece x o 0 si x no esta en ningun conjunto de
la coleccion.
entrada: x U.
salida: (x Si , i = 1, . . . , k Find(x) Si ) (x 6=
k
Ui=1
Si Find(x) = 0).

Carlos Contreras Bolton Estructura de Datos

8/52

Introducci
on Definici
on la Estructura Implementaci
on

Implementacion

Veremos dos formas de implementar Conjuntos Disjuntos:


Una forma basica.
Una mejora a la forma basica.

Carlos Contreras Bolton Estructura de Datos

9/52

Introducci
on Definici
on la Estructura Implementaci
on

Implementacion basica

En esta implementacion se representan los conjuntos


como un arbol.
Donde cada nodo mantiene la informacion de su nodo
padre.
La raz del arbol es el elemento representativo de todo el
conjunto.
Por lo tanto basta con declarar un arreglo que contenga
los elementos del padre de un determinado elemento:
1

i n t p a d r e [MAX ] ; / E s t e a r r e g l o c o n t i e n e e l p a d r e d e l ie s i m o nodo /

Carlos Contreras Bolton Estructura de Datos

10/52

Introducci
on Definici
on la Estructura Implementaci
on

Operacion MakeSet

Operacion que inicializa los conjuntos:


1 / F u n c i
o n de i n i c i a l i z a c i
o n /
2 v o i d MakeSet ( i n t n )
3 {
4
f o r ( i n t i = 0 ; i < n ; i ++)
5
p a d r e [ i ] = i ; / I n i c i a l m e n t e
6 }

Carlos Contreras Bolton Estructura de Datos

e l p a d r e de c a d a e l e m e n t o e s e l mismo nodo /

11/52

Introducci
on Definici
on la Estructura Implementaci
on

Operacion MakeSet
Ejemplo

Sea un ejemplo de 9 elementos, inicializamos por medio


de MakeSet, el cual genera 9 conjuntos de 1 elemento.
MakeSet (9):

nodo 0 1
padre 0 1

Carlos Contreras Bolton Estructura de Datos

2 3 4 5 6 7
2 3 4 5 6 7

8
8

12/52

Introducci
on Definici
on la Estructura Implementaci
on

Operacion Find
Ejemplo

Hay que determinar a cual conjunto pertenece un


elemento x.
Se hace retornando el vertice raz del arbol en el que se
encuentra el elemento x.
1 i n t Find ( i n t x )
2 {
3
i f ( x == p a d r e [ x ] ) / S i e s t o y en l a r a z /
4
return x ;
/ R e t o r n o l a r a z /
5
e l s e / S i n o s e b u s c a e l p a d r e d e l nodo a c t u a l , h a s t a l l e g a r a l a
6
r e t u r n Find ( padre [ x ] ) ;
7 }

Carlos Contreras Bolton Estructura de Datos

r a i z /

13/52

Introducci
on Definici
on la Estructura Implementaci
on

Operacion Find
Ejemplo

Find(3).

nodo 0 1
padre 0 0

Carlos Contreras Bolton Estructura de Datos

2 3 4 5 6 7
0 1 5 5 4 0

8
4

14/52

Introducci
on Definici
on la Estructura Implementaci
on

Operacion Find
Ejemplo

Find(3).

nodo 0 1
padre 0 0

Carlos Contreras Bolton Estructura de Datos

2 3 4 5 6 7
0 1 5 5 4 0

8
4

15/52

Introducci
on Definici
on la Estructura Implementaci
on

Operacion Find
Ejemplo

Find(3).

nodo 0 1
padre 0 0

Carlos Contreras Bolton Estructura de Datos

2 3 4 5 6 7
0 1 5 5 4 0

8
4

16/52

Introducci
on Definici
on la Estructura Implementaci
on

Operacion Find
Ejemplo

Find(3).

nodo 0 1
padre 0 0

Carlos Contreras Bolton Estructura de Datos

2 3 4 5 6 7
0 1 5 5 4 0

8
4

17/52

Introducci
on Definici
on la Estructura Implementaci
on

Operacion Union
Se debe permite unir dos conjuntos, ello se realiza por lo
siguiente:
Obtenemos la raz del conjunto de donde esta x.
Obtenemos la raz del conjunto de donde esta y .

Actualizamos el padre de alguna de las races, asignandole


como nuevo padre la otra raz.
1 v o i d Union ( i n t x , i n t y )
2 {
3
i n t xRoot = F i n d ( x ) ;
4
i n t yRoot = F i n d ( y ) ;
5
p a d r e [ xRoot ] = yRoot ;
p a d r e de a l g u n o
6 }

/
/
/
de

Obtenemos l a r a z d e l c o n j u n t o de donde e s t
a x . /
Obtenemos l a r a z d e l c o n j u n t o de donde e s t
a y . /
M e z c l o ambos a r b o l e s o c o n j u n t o s , a c t u a l i z a n d o s u
e l l o s como l a r a i z de o t r o /

Carlos Contreras Bolton Estructura de Datos

18/52

Introducci
on Definici
on la Estructura Implementaci
on

Operacion Union
Ejemplo

Union(2, 0) RaizX = Find(2) y RaizY = Find(0).

nodo 0 1
padre 0 1

Carlos Contreras Bolton Estructura de Datos

2 3 4 5 6 7
2 3 4 5 6 7

8
8

19/52

Introducci
on Definici
on la Estructura Implementaci
on

Operacion Union
Ejemplo

Union(2, 0) RaizX = Find(2)=2 y RaizY =


Find(0)=0.

nodo 0 1
padre 0 1

Carlos Contreras Bolton Estructura de Datos

2 3 4 5 6 7
2 3 4 5 6 7

8
8

20/52

Introducci
on Definici
on la Estructura Implementaci
on

Operacion Union
Ejemplo

Union(2, 0) RaizX = Find(2)=2 y RaizY =


Find(0)=2.
Padre[RaizX] RaizY.

nodo 0 1
padre 0 1

Carlos Contreras Bolton Estructura de Datos

2 3 4 5 6 7
0 3 4 5 6 7

8
8

21/52

Introducci
on Definici
on la Estructura Implementaci
on

Operacion Union
Ejemplo

Union(7, 2) RaizX = Find(7)=7 y RaizY =


Find(2)=0.

nodo 0 1
padre 0 1

Carlos Contreras Bolton Estructura de Datos

2 3 4 5 6 7
0 3 4 5 6 7

8
8

22/52

Introducci
on Definici
on la Estructura Implementaci
on

Operacion Union
Ejemplo

Union(7, 2) RaizX = Find(7)=7 y RaizY =


Find(2)=0.
Padre[RaizX] RaizY.

nodo 0 1
padre 0 1

Carlos Contreras Bolton Estructura de Datos

2 3 4 5 6 7
0 3 4 5 6 7

8
8

23/52

Introducci
on Definici
on la Estructura Implementaci
on

Operacion Union
Ejemplo

Union(7, 2) RaizX = Find(7)=7 y RaizY =


Find(2)=0.
Padre[RaizX] RaizY.

nodo 0 1
padre 0 1

Carlos Contreras Bolton Estructura de Datos

2 3 4 5 6 7
0 3 4 5 6 0

8
8

24/52

Introducci
on Definici
on la Estructura Implementaci
on

Operacion Union
Ejemplo

Union(3, 1) RaizX = Find(3)=3 y RaizY =


Find(1)=1.

nodo 0 1
padre 0 1

Carlos Contreras Bolton Estructura de Datos

2 3 4 5 6 7
0 3 4 5 6 0

8
8

25/52

Introducci
on Definici
on la Estructura Implementaci
on

Operacion Union
Ejemplo

Union(3, 1) RaizX = Find(3)=3 y RaizY =


Find(1)=1.

nodo 0 1
padre 0 1

Carlos Contreras Bolton Estructura de Datos

2 3 4 5 6 7
0 3 4 5 6 0

8
8

26/52

Introducci
on Definici
on la Estructura Implementaci
on

Operacion Union
Ejemplo

Union(3, 1) RaizX = Find(3)=3 y RaizY =


Find(1)=1.
Padre[RaizX] RaizY.

nodo 0 1
padre 0 1

Carlos Contreras Bolton Estructura de Datos

2 3 4 5 6 7
0 1 4 5 6 0

8
8

27/52

Introducci
on Definici
on la Estructura Implementaci
on

Operacion Union
Ejemplo

Union(3, 7) RaizX = Find(3)=1 y RaizY =


Find(7)=0.

nodo 0 1
padre 0 1

Carlos Contreras Bolton Estructura de Datos

2 3 4 5 6 7
0 1 4 5 6 0

8
8

28/52

Introducci
on Definici
on la Estructura Implementaci
on

Operacion Union
Ejemplo

Union(3, 7) RaizX = Find(3)=1 y RaizY =


Find(7)=0.

nodo 0 1
padre 0 1

Carlos Contreras Bolton Estructura de Datos

2 3 4 5 6 7
0 1 4 5 6 0

8
8

29/52

Introducci
on Definici
on la Estructura Implementaci
on

Operacion Union
Ejemplo

Union(3, 7) RaizX = Find(3)=1 y RaizY =


Find(7)=0.
Padre[RaizX] Raiz.

nodo 0 1
padre 0 0
Carlos Contreras Bolton Estructura de Datos

2 3 4 5 6 7
0 1 4 5 6 0

8
8
30/52

Introducci
on Definici
on la Estructura Implementaci
on

Operacion Union
Ejemplo

Union(6, 4), Union(8, 4), Union(4, 5).

nodo 0 1
padre 0 0

Carlos Contreras Bolton Estructura de Datos

2 3 4 5 6 7
0 1 4 5 6 0

8
8

31/52

Introducci
on Definici
on la Estructura Implementaci
on

Operacion Union
Ejemplo

Union(6, 4), Union(8, 4), Union(4, 5).

nodo 0 1
padre 0 0

Carlos Contreras Bolton Estructura de Datos

2 3 4 5 6 7
0 1 5 5 4 0

8
4

32/52

Introducci
on Definici
on la Estructura Implementaci
on

Operacion Union
Ejemplo

Union(3, 8) RaizX = Find(3)=0 y RaizY =


Find(8)=5.

nodo 0 1
padre 0 0

Carlos Contreras Bolton Estructura de Datos

2 3 4 5 6 7
0 1 5 5 4 0

8
4

33/52

Introducci
on Definici
on la Estructura Implementaci
on

Operacion Union
Ejemplo

Union(3, 8) RaizX = Find(3)=0 y RaizY =


Find(8)=5.

nodo 0 1
padre 0 0

Carlos Contreras Bolton Estructura de Datos

2 3 4 5 6 7
0 1 5 5 4 0

8
4

34/52

Introducci
on Definici
on la Estructura Implementaci
on

Operacion Union
Ejemplo

Union(3, 8) RaizX = Find(3)=0 y RaizY =


Find(8)=5.
Padre[RaizX] RaizY.

nodo 0 1
padre 5 0
Carlos Contreras Bolton Estructura de Datos

2 3 4 5 6 7
0 1 5 5 4 0

8
4
35/52

Introducci
on Definici
on la Estructura Implementaci
on

Operaciones
Implementaci
on basica

Sin embargo, se puede observar que cada vez que


hagamos union entre componentes con mayor numero de
nodos el arbol tiende a ser un arbol desbalanceado.

Carlos Contreras Bolton Estructura de Datos

36/52

Introducci
on Definici
on la Estructura Implementaci
on

Implementacion Mejorada
Find por Compresi
on de Caminos

Cada nodo que visitemos en el camino al nodo raz puede


ser conectado directamente hacia la raz.
Es decir, la operacion Find todos los nodos que visite
tendran como padre la raz directamente.
Entonces, la Compresion de Caminos, al momento de
retornar la raz en la recursion actualizamos el padre de
cada vertice visitado como la raz encontrada.
1 / F u n c i
o n p a r a e n c o n t r a r l a r a z d e l
2 i n t Find ( i n t x )
3 {
4
i f ( x == p a d r e [ x ] ) / S i e s t o y en l a
5
return x ;
/ R e t o r n o l a r a z
6
/ e l s e /\ S i n o s e b u s c a e l p a d r e
\/ /
7
/
r e t u r n F i n d ( p a d r e [ x ] ) ; /
8
else
9
r e t u r n padre [ x ] = Find ( padre [ x ] ) ;
10 }

Carlos Contreras Bolton Estructura de Datos

e l e m e n t o x /

r a z /
/
d e l nodo a c t u a l , h a s t a l l e g a r a l a

raiz .

/ C o m p r e s i o n de c a m i n o s /

37/52

Introducci
on Definici
on la Estructura Implementaci
on

Find por Compresion de Caminos


Ejemplo

Probemos el ejemplo de Find(3) anterior.

nodo 0 1
padre 0 0

Carlos Contreras Bolton Estructura de Datos

2 3 4 5 6 7
0 1 5 5 4 0

8
4

38/52

Introducci
on Definici
on la Estructura Implementaci
on

Find por Compresion de Caminos


Ejemplo

Aplicamos compresion de caminos, Find(3).

nodo 0 1
padre 0 0

Carlos Contreras Bolton Estructura de Datos

2 3 4 5 6 7
0 0 5 5 4 0

8
4

39/52

Introducci
on Definici
on la Estructura Implementaci
on

Find por Compresion de Caminos


Ejemplo

Aplicamos compresion de caminos, Find(3).

nodo 0 1
padre 5 0

Carlos Contreras Bolton Estructura de Datos

2 3 4 5 6 7
0 1 5 5 4 0

8
4

40/52

Introducci
on Definici
on la Estructura Implementaci
on

Find por Compresion de Caminos


Ejemplo

Aplicamos compresion de caminos, Find(3).

nodo 0 1
padre 5 0

Carlos Contreras Bolton Estructura de Datos

2 3 4 5 6 7
0 1 5 5 4 0

8
4

41/52

Introducci
on Definici
on la Estructura Implementaci
on

Find por Compresion de Caminos

Entonces, se cambio el puntero actual al padre de un


nodo en el recorrido, apuntando a la raz directamente.
Con esto se mejora la eficiencia para futuras llamadas de
alguno de los nodos vistos.
No tendremos que realizar todo el recorrido hacia la raz.
Simplemente revisara el padre actual del nodo que es la
raz.

Carlos Contreras Bolton Estructura de Datos

42/52

Introducci
on Definici
on la Estructura Implementaci
on

Implementacion de Union por Rango


Esta mejora une el arbol de menor rango a la raz del arbol
con el mayor rango.
Los rangos los almacenamos en un arreglo, que sufrira
modificacion al momento de la uni
on.
Los pasos para la implementaci
on son los siguientes:
1 Obtenemos la ra
z del conjunto de donde esta x.
2 Obtenemos la ra
z del conjunto de donde esta y .
3 Si el rango de x es mayor que el rango de y entonces.
Se actualiza el padre de la raz de y asignandole como
nuevo padre la raz de x.
4

Caso contrario:
Se actualiza el padre de la raz de x asignandole como
nuevo padre la raz de Y.
Si los rangos de ambas races son iguales incremento el
rango de la nueva raz en este caso incremento el rango
de la raz del vertice y .

Carlos Contreras Bolton Estructura de Datos

43/52

Introducci
on Definici
on la Estructura Implementaci
on

Implementacion de Union por Rango


En resumen cada vez que hagamos union entre dos
conjuntos, el conjunto de mayor altura (rango) siempre
predominara sobre el de menor altura (rango).
1 / F u n c i
o n p a r a u n i r d o s c o n j u n t o s u s a n d o s u s a l t u r a s ( r a n g o s ) /
2 v o i d UnionbyRank ( i n t x , i n t y )
3 {
4
i n t xRoot = F i n d ( x ) ; / Obtenemos l a r a z d e l c o n j u n t o de donde e s t
a x . /
5
i n t yRoot = F i n d ( y ) ; / Obtenemos l a r a z d e l c o n j u n t o de donde e s t
a y . /
6
/ en e s t e c a s o l a a l t u r a d e l c o n j u n t o de x e s mayor que l a a l t u r a /
7
i f ( r a n g o [ xRoot ] > r a n g o [ yRoot ] ) / de c o n j u n t o de y . /
8
p a d r e [ yRoot ] = xRoot ; / e l p a d r e de ambos c j t o s e s e l de mayor a l t u r a /
9
else
10
{ / en e s t e c a s o l a a l t u r a d e l c j t o de y e s mayor o i g u a l que l a de x /
11
p a d r e [ xRoot ] = yRoot ; / e l p a d r e de ambos c j t o s e s e l de mayor a l t u r a /
12
i f ( r a n g o [ xRoot ] == r a n g o [ yRoot ] ) / s i p o s e e n l a misma a l t u r a /
13
r a n g o [ yRoot ]++; / i n c r e m e n t o e l r a n g o de l a n u e v a r a z /
14
}
15 }

Carlos Contreras Bolton Estructura de Datos

44/52

Introducci
on Definici
on la Estructura Implementaci
on

Implementacion de Union por Rango

Entonces, a la operacion de MakeSet, se le agrega el


rango.
1 v o i d MakeSet ( i n t
2 {
3
for ( int i = 0;
4
{
5
padre [ i ] =
6
rango [ i ] =
7
}
8 }

n)
i < n;

i ++)

i ; / I n i c i a l m e n t e e l p a d r e de c a d a e l e m e n t o e s e l mismo nodo /
0 ; / A l t u r a o r a n g o de c a d a nodo e s 0 /

Carlos Contreras Bolton Estructura de Datos

45/52

Introducci
on Definici
on la Estructura Implementaci
on

Operacion Union mejorada


Ejemplo

Sean los siguientes conjuntos: RaizX = Find(3)=0 y


RaizY = Find(8)=5.
El rango de y es mayor al de x y el rango se mantiene.

nodo 0
padre 0
rango 2
Carlos Contreras Bolton Estructura de Datos

1 2 3 4 5 6
0 0 1 4 5 4
1 0 0 1 0 0

7 8
0 8
0 0
46/52

Introducci
on Definici
on la Estructura Implementaci
on

Operacion Union mejorada


Ejemplo

Union(8, 4) RaizX = Find(8)=8 y RaizY =


Find(4)=4.
El rango de y es mayor al de x y el rango se mantiene.

nodo 0
padre 0
rango 2
Carlos Contreras Bolton Estructura de Datos

1 2 3 4 5 6
0 0 1 4 5 4
1 0 0 1 0 0

7 8
0 8
0 0
47/52

Introducci
on Definici
on la Estructura Implementaci
on

Operacion Union mejorada


Ejemplo

Union(8, 4) RaizX = Find(8)=8 y RaizY =


Find(4)=4.
El rango de y es mayor al de x y el rango se mantiene.

nodo 0
padre 0
rango 2
Carlos Contreras Bolton Estructura de Datos

1 2 3 4 5 6
0 0 1 4 5 4
1 0 0 1 0 0

7 8
0 4
0 0
48/52

Introducci
on Definici
on la Estructura Implementaci
on

Operacion Union mejorada


Ejemplo

No se aprecia la mejora de la Union.


Pero ahora, sea Union(3, 6) RaizX = Find(3)=0 y
RaizY = Find(6)=4.

nodo 0
padre 0
rango 2
Carlos Contreras Bolton Estructura de Datos

1 2 3 4 5 6
0 0 1 4 5 4
1 0 0 1 0 0

7 8
0 4
0 0
49/52

Introducci
on Definici
on la Estructura Implementaci
on

Operacion Union mejorada


Ejemplo

Pero ahora, sea Union(3, 6) RaizX = Find(3)=0 y


RaizY = Find(6)=4.
El rango de x es mayor al de y y los rangos son iguales,
se incrementa.

nodo 0
padre 0
rango 2
Carlos Contreras Bolton Estructura de Datos

1 2 3 4 5 6
0 0 1 4 5 4
1 0 0 1 0 0

7 8
0 4
0 0
50/52

Introducci
on Definici
on la Estructura Implementaci
on

Operacion Union mejorada


Ejemplo

Pero ahora, sea Union(3, 6) RaizX = Find(3)=0 y


RaizY = Find(6)=4.
El rango de x es mayor al de y y los rangos son iguales,
se incrementa.

nodo 0
padre 0
rango 2
Carlos Contreras Bolton Estructura de Datos

1 2 3 4 5 6
0 0 0 0 5 4
1 0 0 1 0 0

7 8
0 4
0 0
51/52

Introducci
on Definici
on la Estructura Implementaci
on

Operacion Union mejorada

La altura del nuevo arbol es 2.


Esta mejora mantiene el arbol tan balanceado como sea
posible.
Para mayor numero de elementos se vera la diferencia en
cuanto a la eficiencia.

Carlos Contreras Bolton Estructura de Datos

52/52

También podría gustarte