0 1 2 3 4 5 6 7 8 9
Id[] 0 1 9 4 9 6 6 7 8 9
La raíz de 3 es 9
Conectividad dinámica – Quick union
0 1 2 3 4 5 6 7 8 9
0 1 9 4 9 6 6 7 8 6
Id[]
Demo Quick union
0 1 2 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7 8 9
Demo Quick union
union(4,3)
0 1 2 3 4 5 6 7 8 9
0 1 2 3 3 5 6 7 8 9
Demo Quick union
union(3,8)
0 1 2 3 4 5 6 7 8 9
0 1 2 8 3 5 6 7 8 9
Demo Quick union
union(6,5)
0 1 2 3 4 5 6 7 8 9
0 1 2 8 3 5 5 7 8 9
Demo Quick union
union(9,4)
0 1 2 3 4 5 6 7 8 9
0 1 2 8 3 5 5 7 8 8
Demo Quick union
union(2,1)
0 1 2 3 4 5 6 7 8 9
0 1 1 8 3 5 5 7 8 8
Demo Quick union
connected (8,9)✔
0 1 2 3 4 5 6 7 8 9
0 1 1 8 3 5 5 7 8 8
Demo Quick union
connected (5,4)✖
0 1 2 3 4 5 6 7 8 9
0 1 1 8 3 5 5 7 8 8
Demo Quick union
union (5,0)
0 1 2 3 4 5 6 7 8 9
0 1 1 8 3 0 5 7 8 8
Demo Quick union
union (7,2)
0 1 2 3 4 5 6 7 8 9
0 1 1 8 3 0 5 1 8 8
Demo Quick union
union (6,1)
0 1 2 3 4 5 6 7 8 9
1 1 1 8 3 0 5 1 8 8
Demo Quick union
union (7,3)
0 1 2 3 4 5 6 7 8 9
1 8 1 8 3 0 5 1 8 8
Análisis – Quick union
public class QuickUnionUF
{ private int[] id; //access to component id(site indexed)
public QuickUnionUF(int N)
{ id=new int[N]; Establecer el ID del objeto así mismo
for(int i=0;i<N; i++) id[i]=i; ( N accesos al aarreglo )
}
Quick –f ind N N 1
0 1 2 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7 8 9
Demo Weighted Quick-union
Union(4,3)
0 1 2 3 4 5 6 7 8 9
0 1 2 4 4 5 6 7 8 9
Demo Weighted Quick-union
Union(3,8)
0 1 2 3 4 5 6 7 8 9
0 1 2 4 4 5 6 7 4 9
Demo Weighted Quick-union
Union(6,5)
0 1 2 3 4 5 6 7 8 9
0 1 2 4 4 6 6 7 4 9
Demo Weighted Quick-union
Union(6,5)
0 1 2 3 4 5 6 7 8 9
0 1 2 4 4 6 6 7 4 9
Demo Weighted Quick-union
Union(9,4)
0 1 2 3 4 5 6 7 8 9
0 1 2 4 4 6 6 7 4 4
Demo Weighted Quick-union
Union(2,1)
0 1 2 3 4 5 6 7 8 9
0 2 2 4 4 6 6 7 4 4
Demo Weighted Quick-union
Union(5,0)
0 1 2 3 4 5 6 7 8 9
0 2 2 4 4 6 6 7 4 4
Demo Weighted Quick-union
Union(5,0)
0 1 2 3 4 5 6 7 8 9
6 2 2 4 4 6 6 7 4 4
Demo Weighted Quick-union
Union(7,2)
0 1 2 3 4 5 6 7 8 9
6 2 2 4 4 6 6 2 4 4
Demo Weighted Quick-union
Union(6,1)
0 1 2 3 4 5 6 7 8 9
6 2 6 4 6 6 6 2 4 4
Demo Weighted Quick-union
Union(7,3)
0 1 2 3 4 5 6 7 8 9
6 2 6 4 4 6 6 2 4 4
Weighted Quick-union
Weighted Quick-union
int i = root(p);
int j = root(q);
if (i == j) return;
// Make smaller root point to larger one.
if (sz[i] < sz[j]) { id[i] = j; sz[j] += sz[i]; }
else { id[j] = i; sz[i] += sz[j]; }
Demo Weighted Quick-union
Find() toma un tiempo proporcional a la profundidad de p y
de q.
Quick –f ind N N 1
Quick - union N N N
Weighted Quick-union N Lg N Lg N
WQU - Path compression
Justo después de calcular la raíz de p, coloque el id de cada
nodo examinado a apuntar a la raíz.
WQU - Path compression
Justo después de calcular la raíz de p, coloque el id de cada
nodo examinado a apuntar a la raíz.
WQU - Path compression
Justo después de calcular la raíz de p, coloque el id de cada
nodo examinado a apuntar a la raíz.
WQU - Path compression
Justo después de calcular la raíz de p, coloque el id de cada
nodo examinado a apuntar a la raíz.
WQU - Path compression
Justo después de calcular la raíz de p, coloque el id de cada
nodo examinado a apuntar a la raíz.
Implementar WQU - Path compression
Implementación de dos pasadas:
Añadir un segundo loop al método root() para setear el id[]
de cada nodo examinado hacia el root.