• Nenhum resultado encontrado

Análise do Union-Find

N/A
N/A
Protected

Academic year: 2022

Share "Análise do Union-Find"

Copied!
46
0
0

Texto

(1)

Análise do Union-Find

CLRS cap 21

(2)

Coleção de conjuntos disjuntos

Queremos uma ED boa para representar uma partição de um conjunto

e as seguintes operações sobre a partição:

MakeSet(x): cria um conjunto unitário com o elementox. FindSet(x): devolve o identificador do bloco da partição que contémx.

Union(x,y): substitui os blocos da partição que contêm xeypela união deles.

Idéia:

Usar um elemento do conjunto (orepresentante) como identificador.

(3)

Coleção de conjuntos disjuntos

Queremos uma ED boa para representar uma partição de um conjunto

e as seguintes operações sobre a partição:

MakeSet(x): cria um conjunto unitário com o elementox.

FindSet(x): devolve o identificador do bloco da partição que contémx.

Union(x,y): substitui os blocos da partição que contêm xeypela união deles.

Idéia:

Usar um elemento do conjunto (orepresentante) como identificador.

(4)

Coleção de conjuntos disjuntos

Queremos uma ED boa para representar uma partição de um conjunto

e as seguintes operações sobre a partição:

MakeSet(x): cria um conjunto unitário com o elementox.

FindSet(x): devolve o identificador do bloco da partição que contémx.

Union(x,y): substitui os blocos da partição que contêm xeypela união deles.

Idéia:

(5)

Como analizar?

Uso típico:

n−1 Union, m FindSet, mn em sequência arbitrária.

O custo de uma operação pode variar muito - émuito pessimista supor o pior caso em cada uma.

Vale a pena considerar uma sequência completa de operações, em vez de analizar uma a uma.

Isso se chamaAnálise Amortizada.

É um método especialmente útil para analizar estruturas adaptativas, em que uma operação pode preparar caminho para a execução de operações futuras.

(6)

Como analizar?

Uso típico:

n−1 Union, m FindSet, mn em sequência arbitrária.

O custo de uma operação pode variar muito - émuito pessimista supor o pior caso em cada uma.

Vale a pena considerar uma sequência completa de operações, em vez de analizar uma a uma.

Isso se chamaAnálise Amortizada.

É um método especialmente útil para analizar estruturas adaptativas, em que uma operação pode preparar caminho para a execução de operações futuras.

(7)

Como analizar?

Uso típico:

n−1 Union, m FindSet, mn em sequência arbitrária.

O custo de uma operação pode variar muito - émuito pessimista supor o pior caso em cada uma.

Vale a pena considerar uma sequência completa de operações, em vez de analizar uma a uma.

Isso se chamaAnálise Amortizada.

É um método especialmente útil para analizar estruturas adaptativas, em que uma operação pode preparar caminho para a execução de operações futuras.

(8)

Como analizar?

Uso típico:

n−1 Union, m FindSet, mn em sequência arbitrária.

O custo de uma operação pode variar muito - émuito pessimista supor o pior caso em cada uma.

Vale a pena considerar uma sequência completa de operações, em vez de analizar uma a uma.

Isso se chamaAnálise Amortizada.

É um método especialmente útil para analizar estruturas adaptativas, em que uma operação pode preparar caminho para a execução de operações futuras.

(9)

Como analizar?

Uso típico:

n−1 Union, m FindSet, mn em sequência arbitrária.

O custo de uma operação pode variar muito - émuito pessimista supor o pior caso em cada uma.

Vale a pena considerar uma sequência completa de operações, em vez de analizar uma a uma.

Isso se chamaAnálise Amortizada.

É um método especialmente útil para analizar estruturas adaptativas, em que uma operação pode preparar caminho para a execução de operações futuras.

(10)

Não é tão novidade assim

Numa busca em grafos:

1 para cadau∈G.V

2 para cadav∈u.Estrelafaça Análise ingênua:

Como cada estrela tem tamanhoO(n), os dois laços combinados levamO(n2).

Análise amortizada:

Como na linha 2 cada arco é examinado uma única vez, os dois laços combinados levamO(m).

(11)

Não é tão novidade assim

Numa busca em grafos:

1 para cadau∈G.V

2 para cadav∈u.Estrelafaça

Análise ingênua:

Como cada estrela tem tamanhoO(n), os dois laços combinados levamO(n2).

Análise amortizada:

Como na linha 2 cada arco é examinado uma única vez, os dois laços combinados levamO(m).

(12)

Não é tão novidade assim

Numa busca em grafos:

1 para cadau∈G.V

2 para cadav∈u.Estrelafaça Análise ingênua:

Como cada estrela tem tamanhoO(n), os dois laços combinados levamO(n2).

Análise amortizada:

Como na linha 2 cada arco é examinado uma única vez, os dois laços combinados levamO(m).

(13)

Não é tão novidade assim

Numa busca em grafos:

1 para cadau∈G.V

2 para cadav∈u.Estrelafaça Análise ingênua:

Como cada estrela tem tamanhoO(n), os dois laços combinados levamO(n2).

Análise amortizada:

Como na linha 2 cada arco é examinado uma única vez, os dois laços combinados levamO(m).

(14)

Não é tão novidade assim

Numa busca em grafos:

1 para cadau∈G.V

2 para cadav∈u.Estrelafaça Análise ingênua:

Como cada estrela tem tamanhoO(n), os dois laços combinados levamO(n2).

Análise amortizada:

Como na linha 2 cada arco é examinado uma única vez, os dois laços combinados levamO(m).

(15)

Não é tão novidade assim

Numa busca em grafos:

1 para cadau∈G.V

2 para cadav∈u.Estrelafaça Análise ingênua:

Como cada estrela tem tamanhoO(n), os dois laços combinados levamO(n2).

Análise amortizada:

Como na linha 2 cada arco é examinado uma única vez, os dois laços combinados levamO(m).

(16)

Implementação 1 do union-find

I Cada conjunto é uma lista ligada, com cabeçalho apontando início e fim - facilitaUnion.

I Cada elemento da lista tem um apontadornomepara o cabeçalho - facilitaFindSet.

MakeSet(x) cria uma lista contendo sóx. FindSetrespondido direto pelonome.

Union: juntar as duas listas é fácil, mas é preciso atualizar onomedos membros de um dos conjuntos.

MakeSeteFindSetlevamO(1), mas váriosUnion podem gastarÒ(n2)mudanças denome.

(17)

Implementação 1 do union-find

I Cada conjunto é uma lista ligada, com cabeçalho apontando início e fim - facilitaUnion.

I Cada elemento da lista tem um apontadornomepara o cabeçalho - facilitaFindSet.

MakeSet(x) cria uma lista contendo sóx. FindSetrespondido direto pelonome.

Union: juntar as duas listas é fácil, mas é preciso atualizar onomedos membros de um dos conjuntos.

MakeSeteFindSetlevamO(1), mas váriosUnion podem gastarÒ(n2)mudanças denome.

(18)

Implementação 1 do union-find

I Cada conjunto é uma lista ligada, com cabeçalho apontando início e fim - facilitaUnion.

I Cada elemento da lista tem um apontadornomepara o cabeçalho - facilitaFindSet.

MakeSet(x) cria uma lista contendo sóx.

FindSetrespondido direto pelonome.

Union: juntar as duas listas é fácil, mas é preciso atualizar onomedos membros de um dos conjuntos.

MakeSeteFindSetlevamO(1), mas váriosUnion podem gastarÒ(n2)mudanças denome.

(19)

Implementação 1 do union-find

I Cada conjunto é uma lista ligada, com cabeçalho apontando início e fim - facilitaUnion.

I Cada elemento da lista tem um apontadornomepara o cabeçalho - facilitaFindSet.

MakeSet(x) cria uma lista contendo sóx.

FindSetrespondido direto pelonome.

Union: juntar as duas listas é fácil, mas é preciso atualizar onomedos membros de um dos conjuntos.

MakeSeteFindSetlevamO(1), mas váriosUnion podem gastarÒ(n2)mudanças denome.

(20)

Implementação 1 do union-find

I Cada conjunto é uma lista ligada, com cabeçalho apontando início e fim - facilitaUnion.

I Cada elemento da lista tem um apontadornomepara o cabeçalho - facilitaFindSet.

MakeSet(x) cria uma lista contendo sóx.

FindSetrespondido direto pelonome.

Union: juntar as duas listas é fácil, mas é preciso atualizar onomedos membros de um dos conjuntos.

MakeSeteFindSetlevamO(1), mas váriosUnion podem gastarÒ(n2)mudanças denome.

(21)

Implementação 1 do union-find

I Cada conjunto é uma lista ligada, com cabeçalho apontando início e fim - facilitaUnion.

I Cada elemento da lista tem um apontadornomepara o cabeçalho - facilitaFindSet.

MakeSet(x) cria uma lista contendo sóx.

FindSetrespondido direto pelonome.

Union: juntar as duas listas é fácil, mas é preciso atualizar onomedos membros de um dos conjuntos.

MakeSeteFindSetlevamO(1), mas váriosUnion podem gastarÒ(n2)mudanças denome.

(22)

Melhoria

NaUnion, pendure a lista menor na maior (cabeçalho precisa guardar o tamanho da lista).

Agora, cada vez que um elemento muda denome,

o conjunto em que ele está pelo menos dobra de tamanho. Assim, seunomemuda no máximo lgnvezes

.

Tempo total den Union:O(nlgn)

.

Tempo total:O(m+nlgn)

(23)

Melhoria

NaUnion, pendure a lista menor na maior (cabeçalho precisa guardar o tamanho da lista).

Agora, cada vez que um elemento muda denome,

o conjunto em que ele está pelo menos dobra de tamanho.

Assim, seunomemuda no máximo

lgn vezes

.

Tempo total den Union:O(nlgn)

.

Tempo total:O(m+nlgn)

(24)

Melhoria

NaUnion, pendure a lista menor na maior (cabeçalho precisa guardar o tamanho da lista).

Agora, cada vez que um elemento muda denome,

o conjunto em que ele está pelo menos dobra de tamanho.

Assim, seunomemuda no máximo lgn vezes.

Tempo total den Union:O(nlgn)

.

Tempo total:O(m+nlgn)

(25)

Melhoria

NaUnion, pendure a lista menor na maior (cabeçalho precisa guardar o tamanho da lista).

Agora, cada vez que um elemento muda denome,

o conjunto em que ele está pelo menos dobra de tamanho.

Assim, seunomemuda no máximo lgn vezes.

Tempo total den Union:O(nlgn).

Tempo total:O(m+nlgn)

(26)

Melhoria

NaUnion, pendure a lista menor na maior (cabeçalho precisa guardar o tamanho da lista).

Agora, cada vez que um elemento muda denome,

o conjunto em que ele está pelo menos dobra de tamanho.

Assim, seunomemuda no máximo lgn vezes.

Tempo total den Union:O(nlgn).

Tempo total:O(m+nlgn)

(27)

Implementação 2 do union-find

Cada conjunto é uma árvore apontando para a raíz.

MakeSet(x) 1 x.pai←x

FindSet(x) 1 sex=x.pai 2 devolvax

3 devolvaFindSet(x.pai)

FindSet(x)

1 enquantox.pai,xfaça 2 x←x.pai

3 devolvax

Union(x,y) Bxey representantes distintos 1 y.pai←x

Consumo de tempo:doFindSetpode ser muito ruim...Ê(n). Temos que fazer melhor...

(28)

Implementação 2 do union-find

Cada conjunto é uma árvore apontando para a raíz.

MakeSet(x) 1 x.pai←x FindSet(x)

1 sex=x.pai 2 devolvax

3 devolvaFindSet(x.pai)

FindSet(x)

1 enquantox.pai,xfaça 2 x←x.pai

3 devolvax

Union(x,y) Bxey representantes distintos 1 y.pai←x

Consumo de tempo:doFindSetpode ser muito ruim...Ê(n). Temos que fazer melhor...

(29)

Implementação 2 do union-find

Cada conjunto é uma árvore apontando para a raíz.

MakeSet(x) 1 x.pai←x FindSet(x)

1 sex=x.pai 2 devolvax

3 devolvaFindSet(x.pai)

FindSet(x)

1 enquantox.pai,xfaça 2 x←x.pai

3 devolvax

Union(x,y) Bxey representantes distintos 1 y.pai←x

Consumo de tempo:doFindSetpode ser muito ruim...Ê(n). Temos que fazer melhor...

(30)

Implementação 2 do union-find

Cada conjunto é uma árvore apontando para a raíz.

MakeSet(x) 1 x.pai←x FindSet(x)

1 sex=x.pai 2 devolvax

3 devolvaFindSet(x.pai)

FindSet(x)

1 enquantox.pai,xfaça 2 x←x.pai

3 devolvax

Union(x,y) Bxey representantes distintos 1 y.pai←x

Temos que fazer melhor...

(31)

Implementação 2 do union-find

Cada conjunto é uma árvore apontando para a raíz.

MakeSet(x) 1 x.pai←x FindSet(x)

1 sex=x.pai 2 devolvax

3 devolvaFindSet(x.pai)

FindSet(x)

1 enquantox.pai,xfaça 2 x←x.pai

3 devolvax

Union(x,y) Bxey representantes distintos 1 y.pai←x

Ê(n).

(32)

Melhoria 1

Heurística das alturas

MakeSet(x) 1 x.pai←x 2 x.rank←0

FindSet(x): o mesmo de antes

Union(x,y) Bxey representantes distintos 1 sex.rank≥y.rank

2 então y.pai←x

3 entãosex.rank=y.rank

4 entãoentãox.rank←x.rank+1 5 senãox.pai←y

Invariante:x.rank≥altura da árvore pendurada emx. Melhorou:FindSetéÊ(lgn). Total:O(n+mlgn)

Um pouco pior que antes, masdá para fazer melhor ainda!

(33)

Melhoria 1

Heurística das alturas

MakeSet(x) 1 x.pai←x 2 x.rank←0

FindSet(x): o mesmo de antes

Union(x,y) Bxey representantes distintos 1 sex.rank≥y.rank

2 então y.pai←x

3 entãosex.rank=y.rank

4 entãoentãox.rank←x.rank+1 5 senãox.pai←y

Invariante:x.rank≥altura da árvore pendurada emx. Melhorou:FindSetéÊ(lgn). Total:O(n+mlgn)

Um pouco pior que antes, masdá para fazer melhor ainda!

(34)

Melhoria 1

Heurística das alturas

MakeSet(x) 1 x.pai←x 2 x.rank←0

FindSet(x): o mesmo de antes

Union(x,y) Bxey representantes distintos 1 sex.rank≥y.rank

2 então y.pai←x

3 entãosex.rank=y.rank

4 entãoentãox.rank←x.rank+1 5 senãox.pai←y

Invariante:x.rank≥altura da árvore pendurada emx. Melhorou:FindSetéÊ(lgn). Total:O(n+mlgn)

Um pouco pior que antes, masdá para fazer melhor ainda!

(35)

Melhoria 1

Heurística das alturas

MakeSet(x) 1 x.pai←x 2 x.rank←0

FindSet(x): o mesmo de antes

Union(x,y) Bxey representantes distintos 1 sex.rank≥y.rank

2 então y.pai←x

3 entãosex.rank=y.rank

4 entãoentãox.rank←x.rank+1 5 senãox.pai←y

Invariante:x.rank≥altura da árvore pendurada emx.

Melhorou:FindSetéÊ(lgn). Total:O(n+mlgn)

Um pouco pior que antes, masdá para fazer melhor ainda!

(36)

Melhoria 1

Heurística das alturas

MakeSet(x) 1 x.pai←x 2 x.rank←0

FindSet(x): o mesmo de antes

Union(x,y) Bxey representantes distintos 1 sex.rank≥y.rank

2 então y.pai←x

3 entãosex.rank=y.rank

4 entãoentãox.rank←x.rank+1 5 senãox.pai←y

Um pouco pior que antes, masdá para fazer melhor ainda!

(37)

Melhoria 1

Heurística das alturas

MakeSet(x) 1 x.pai←x 2 x.rank←0

FindSet(x): o mesmo de antes

Union(x,y) Bxey representantes distintos 1 sex.rank≥y.rank

2 então y.pai←x

3 entãosex.rank=y.rank

4 entãoentãox.rank←x.rank+1 5 senãox.pai←y

Invariante:x.rank≥altura da árvore pendurada emx.

Melhorou: éÊ(lgn). Total:O(n+mlgn)

(38)

Implementação 3

Heurística da compressão dos caminhos

FindSet(x) 1 ifx.pai,x

2 entãox.pai←FindSet(x.pai) 3 devolvax.pai

Consumoamortizadode tempo de cada operação: O(lgn),

onde lgné o número de vezes que temos que aplicar o lg até atingir um número menor ou igual a 1.

Na verdade, é melhor do que isso.

A análise desta ED é vista na disciplina MAC6711.

(39)

Implementação 3

Heurística da compressão dos caminhos

FindSet(x) 1 ifx.pai,x

2 entãox.pai←FindSet(x.pai) 3 devolvax.pai

Consumoamortizadode tempo de cada operação:

O(lgn),

onde lgné o número de vezes que temos que aplicar o lg até atingir um número menor ou igual a 1.

Na verdade, é melhor do que isso.

A análise desta ED é vista na disciplina MAC6711.

(40)

Implementação 3

Heurística da compressão dos caminhos

FindSet(x) 1 ifx.pai,x

2 entãox.pai←FindSet(x.pai) 3 devolvax.pai

Consumoamortizadode tempo de cada operação:

O(lgn),

onde lgné o número de vezes que temos que aplicar o lg até

(41)

O que isso significa

Duas maneiras de entender o lg:

lg(0)(n) =n

lg(k)(n) =lg(lg(k1)(n)), k >0 lg(n) =min{k| lg(k)(n)≤1}

b0=1

bk =2bk1, k>0 lg(n) =min{k|n<bk}.

(42)

O que isso significa

Duas maneiras de entender o lg:

lg(0)(n) =n

lg(k)(n) =lg(lg(k1)(n)), k >0 lg(n) =min{k| lg(k)(n)≤1}

b0=1

bk =2bk1, k>0

(43)

O que isso significa

bn =222 ...2

|{z}

ntimes

k bk

0 1

1 2

2 4

3 16

4 65536

5 > 1019000

No mundo real, lg

n ≤ 5 .

(44)

O que isso significa

bn =222 ...2

|{z}

ntimes

k bk

0 1

1 2

2 4

3 16

4 65536

5 > 1019000

No mundo real, lg

n ≤ 5 .

(45)

O que isso significa

bn =222 ...2

|{z}

ntimes

k bk

0 1

1 2

2 4

3 16

4 65536

5 > 1019000

No mundo real, lg

n ≤ 5 .

(46)

O que isso significa

bn =222 ...2

|{z}

ntimes

k bk

0 1

1 2

2 4

3 16

4 65536

Referências

Documentos relacionados

(Você ainda pode ler e gravar dados na organização, mas não pode fazer alterações de configuração que modificariam os metadados.) Para testar a implantação de um conjunto

Casara a 11-11-1848 no Recife (Boa Vista 2, 63) com Manoel Gonçalves Pereira Lima, filho de José Gonçalves Pereira e Rita Florência de Lima e viúvo de Ana Joaquina da Silva, além

Na atualidade, mais do que em outros períodos da história humana, a percepção e o registro de imagens e vídeos acontecem corriqueiramente através dos diferentes tipos

Saber calcular a resistência equivalente a um conjunto de o cálculo ciação de resistores é bastante importante para o técnico. No trabalho pode ocorrer a necessidade de se

O número baixo de indivíduos encontrados de répteis e anfíbios não permitiu análises estatísticas, mas foram coletados mais indivíduos em áreas de cerrado neste estudo (Fig.3)..

Para o objetivo geral de que o aluno seja capaz de análise critica e produzir uma campanha publicitária em vídeo começamos por fazer uma abordagem teórica, depois exemplificamos

Os cidadãos da classe média são também os que se mantêm e conservam melhor: pois não desejam os bens dos outros, como os pobres, nem são eles próprios objeto de inveja ou de

A Pandemia de COVID-19 alterou amplamente as relações nos mais diversos estratos, requerendo medidas drásticas de redução do contato entre as pessoas, a fim de evitar