Buscar

Grafos Union find

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 22 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 22 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 22 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Algoritmos e Estruturas 
de Dados II 
 
Union-find 
Gustavo Batista 
Introdução 
Aplicações para union-find: 
n  Dada uma rede de computadores, 
desejamos saber se dois computadores 
estão na mesma rede 
n  Dado um mapa com ferrovias e rodovias, 
queremos saber se existe caminho entre 
duas cidades 
n  Dada uma rede social, queremos saber se 
existe uma cadeia de amigos entre duas 
pessoas 
2 
TAD Union-find 
Disjoint-Set Data Structure (DSDU): é uma 
estrutura de dados que mantém sub-
conjuntos de elementos mutuamente 
exclusivos 
Union-find: é um TAD com as seguintes 
operações sobre a DSDU: 
n  Find(X): diz a qual sub-conjunto X pertence 
n  Union(X, Y): se X e Y pertencem a sub-conjuntos 
diferentes, então os sub-conjuntos são unidos, ou 
nada acontece. 
3 
TAD Union-find 
4 
1 2 3 4 5 
1 2 3 4 5 
1 2 3 4 5 
Find(2) = verde 
Union(2, 3) 
Find(3) = verde 
Abordagem 1: Quick find 
Para descrever a qual cada sub-
conjunto pertence, vamos utilizar um 
vetor id[]: 
5 
Abordagem 1: Quick find 
Find(X) pode ser implementado em 1 linha e tem 
complexidade O(1): 
No entanto é preciso garantir que ao executar 
Union(1,2) e Union(2,3) todos os 3 elementos 
pertencam ao mesmo sub-conjunto, ou seja, 
id[1] = id[2] = id[3] 
6 
Abordagem 1: Quick find 
Para garantir que os 3 pertencam ao mesmo 
subconjunto basta percorrer todo o vetor alterando 
todos os elementos que tenham id igual ao id[x] para 
id[y]: 
7 
Abordagem 2: Quick union 
Essa abordagem possui o inconveniente da operação 
de union em O(N). 
Podemos tentar deixar o union mais rápido da 
seguinte maneira: 
8 
Abordagem 2: Quick union 
9 
1 2 3 4 5 6 
Abordagem 2: Quick union 
10 
1 
2 3 4 5 6 
Abordagem 2: Quick union 
11 
1 
2 
3 
4 5 6 
Abordagem 2: Quick union 
Para implementar Find basta adotar a convenção de 
que o id do sub-conjunto é o id do nó raiz: 
Mas como fica a complexidade? 
12 
Abordagem 2: Quick union 
Portanto o Find se torna O(N) e 
consequentemente o Union também. 
13 
Abordagem 3: Weighted Quick 
Union 
Para este exemplo com N = 3 tem-se 
duas possibilidades para Union(1, 3) 
14 
1 
2 
3 
1 
2 3 
1 
2 
3 
Union(1,3) Union(1,3) 
Abordagem 3: Weighted Quick 
Union 
A ideia geral é fazer o menor subconjunto 
apontar para o maior 
A consequencia é que a árvore terá altura 
O(log N) 
n  Pense em um sub-conjunto e um nó arbitrário x 
n  Se o sub-conjunto de x é anexado a outro sub-
conjunto, então o tamanho do sub-conjunto unido 
é pelo menor o dobro do sub-conjunto de x 
n  Portanto, o aumento em altura em uma unidade 
leva ao dobro de elementos no pior caso, logo 
log(N) 
15 
Abordagem 3: Weighted Quick 
Union 
16 
x 
x x 
x 
x 
x 
Abordagem 3: Weighted Quick 
Union 
Para saber o tamanho dos subcojuntos vamos definir 
um vetor sz[], que tem tamanho N (um para cada 
elemento) e é inicializado com 1 
17 
Abordagem 4: Weighted Quick 
Union + Path Compression 
Path Compression: usar a execução do Find para 
atualizar e comprimir o caminho do elemento até o 
representante do sub-conjunto. 
18 
Abordagem 4: Weighted Quick 
Union + Path Compression 
Path Compression é obtido por incluir uma única 
linha de código: 
19 
Abordagem 4: Weighted Quick 
Union + Path Compression 
Na prática, ao executar várias vezes o 
Find, a árvore se torna praticamente 
plana, sendo assim, a complexidade do 
Find é O(1). 
Na teoria continua sendo O(log N). 
20 
Exercícios 
Faça a seguinte sequência de unions 
com quick union para 10 elementos: 
n  3-4, 4-9, 8-0, 2-3, 5-6, 5-9, 7-3, 4-8, 6-1 
Faça a mesma sequência de unions com 
quick union e path compression. 
21 
Exercícios 
Faça uma implementação da função 
find que faça compressão de caminho 
forte, ou seja, todo nó intermediário é 
redirecionado para apontar seu 
representante canônico. 
22

Outros materiais