• Nenhum resultado encontrado

INF 1010 Estruturas de Dados Avançadas

N/A
N/A
Protected

Academic year: 2021

Share "INF 1010 Estruturas de Dados Avançadas"

Copied!
40
0
0

Texto

(1)

INF 1010

Estruturas de Dados Avançadas

Partições dinâmicas

14/05/2018 © 2012 DI, PUC-Rio • Estruturas de

Dados Avançadas • 2012.1 1

(2)

Motivação:

Como criar um Labirinto?

(3)

Algoritmo

5/14/18 3

Numere todas as células da grade de 0 a N*N-1;

Crie todas as paredes isolando todas as células;

Repita {

Escolha randomicamente uma parede interior;

Se as duas células adjacentes a esta parede, x e y, estiverem em diferentes partições remova a parede e faça uma união(x,y);

}

Até que todas as células estejam no na mesma partição.

(4)

Motivação: Detecção de Componentes Conectadas

Objetivo:

detectar componentes conectadas encontra regiões de pixels que possuem o mesmo valor.

Dois pixels são conectados quando:

eles são vizinhos

seus valores de cinza satisfazem um critério específico de similaridade

Obs: imagem binária devem possuir o mesmo valor.

Label 1 Label 0 Background

4 - conectado 8 - conectado

(5)

Algoritmo

Percorrer a imagem e etiquetar as componentes.

0 0 0 0 1 1

0 0 0 1 1

0 0 1 1

2 2 2 2

2 2 2

2

2 2 2 2

2 2 2 2 2

(6)

Detectando componentes

Dada uma imagem binária I.

B C D

A x

POSIÇÃO CORRENTE

PARTE 1:

Varrer a imagem da esquerda para a direita e de cima para baixo avaliando cada pixel preto e atribuindo uma etiqueta conforme sua

vizinhança.

PARTE 2:

Percorrer a imagem mais uma vez atribuindo uma única etiqueta para cada componente conectada.

C A x

4-CONECTADA 8-CONECTADA

POSIÇÃO CORRENTE

(7)

0

B C D A X

Tabela de Equivalência

Detectando componentes

(8)

0 0

B C D A X

Tabela de Equivalência

Detectando componentes

(9)

0 0 0 0 1 1

0 0 0

B C D A X

Tabela de Equivalência

Detectando componentes

(10)

0 0 0 0 1 1

0 0 0 1 1

0 0 1 1

2 3 4 5

B C D 2

A X

2 3 Tabela de Equivalência

Detectando componentes

(11)

0 0 0 0 1 1

0 0 0 1 1

0 0 1 1

2 3 4 5

2 3

B C D A X

2 3 3 4 Tabela de Equivalência

Detectando componentes

(12)

0 0 0 0 1 1

0 0 0 1 1

0 0 1 1

2 3 4 5

2 3 4

B C D A X

2 3 3 4 4 5 Tabela de Equivalência

Detectando componentes

(13)

0 0 0 0 1 1

0 0 0 1 1

0 0 1 1

2 3 4 5

2 3 4

3

6 3 7 8

6 6 3 3 7

B C D A X

2 3 3 4 4 5 6 3 6 3 3 7 7 8 Tabela de Equivalência

Detectando componentes

(14)

2 3 3 4 4 5 6 3 6 3 3 7 7 8 Tabela de Equivalência

2

1 3 4 5 6 8

0 7

Detectando componentes conectadas

2 3

(15)

2 3 3 4 4 5 6 3 6 3 3 7 7 8 Tabela de Equivalência

1 4 5 6 8

0 7

Detectando componentes conectadas

2 3

4

5

(16)

2 3 3 4 4 5 6 3 6 3 3 7 7 8 Tabela de Equivalência

1 6 8

0 7

Detectando componentes conectadas

2 3

4

5 6

(17)

2 3 8

3 4 4 5 6 3 6 3 3 7 7 8 Tabela de Equivalência

1

0 7

Detectando componentes conectadas

2 3

4

5

6 7

8

(18)

Detectando componentes

0 0 0 0 1 1

0 0 0 1 1

0 0 1 1

2 3 4 5

2 3 4

3

6 3 7 8

6 6 3 3 7

0 0 0 0 1 1

0 0 0 1 1

0 0 1 1

2 2 2 2

2 2 2

2

2 2 2 2

2 2 2 2 2

2 3

4

5

6 7

8

(19)

Partições de Conjuntos Dinâmicas

Estrutura de dados de conjuntos-disjuntos

• Uma estrutura de dados de conjuntos- disjuntos (Disjoint-set data structure),

também conhecida como "Union Find" ou

ainda "Merge Find", é uma estrutura de dados que manipula um conjunto de elementos

disjuntos particionados em subconjuntos.

14/05/2018 © 2012 DI, PUC-Rio • Estruturas de Dados Avançadas • 2012.1 19

(20)

Definições

• Universo: U = {x1,x2,…,xn}

• Coleções: C = {S1,…,Sk} de conjuntos disjuntos

• Si ⊆ U para qualquer i

• ∪Si = U (COBERTURA)

• Si ∩ Sj = φ sempre que i≠j (DISJUNTOS)

• Cada Si é identificado por um de seus elementos x∈Si (REPRESENTANTE)

14/05/2018 © 2012 DI, PUC-Rio • Estruturas de Dados Avançadas • 2012.1 20

(21)

Operações Básicas

MakeSet(x) : Cria um conjunto com um só elemento. Esta configuração também é conhecida como singleton;

Si = {x}

Find(x): Informa de que conjunto um elemento faz parte, para é retornado um elemento que representa o conjunto.

Também útil para determinar se dois elementos estão no mesmo conjunto;

{k,j,n,o,y,w,x,z} := w

Union(x,y): Junta dois conjuntos em um único. Substituindo assim Si e Sj em C por um novo conjunto Sk.

Si Sj = Sk

14/05/2018 © 2012 DI, PUC-Rio • Estruturas de Dados Avançadas • 2012.1 21

(22)

Representação Por Floresta Árvore Reversa

Uma forma tradicional de se representar e implementar estas estruturas é usando árvores reversas (Reversed Trees)

Nesta configuração, cada nó aponta para o seu pai.

Um nó da estrutura de dados Union-Find é um líder se ele é a raiz da árvore.

Depois de um nó deixar de ser um líder (ou seja, o nó no topo de uma árvore), ele nunca pode se tornar um líder novamente.

O apontamento do nó raiz pode ser definido de duas formas principais:

a raiz aponta para si mesmo

a raiz aponta para NULL x

s w

x

s w

14/05/2018 © 2012 DI, PUC-Rio • Estruturas de Dados Avançadas • 2012.1 22

(23)

Exemplo de Conjuntos Disjuntos

• Um conjunto é representado pela sua raiz.

S

1

= {t,u,v,y,z} S

2

= {s,w,x}

v u

z y

t

x

s w

14/05/2018 © 2012 DI, PUC-Rio • Estruturas de Dados Avançadas • 2012.1 23

(24)

Exemplo de Operações: MakeSet(x)

• O MakeSet(x) cria um conjunto com um elemento só (singleton).

MakeSet(x) = {x}

x

14/05/2018 © 2012 DI, PUC-Rio • Estruturas de Dados Avançadas • 2012.1 24

(25)

Exemplo de Operações: Find(x)

• O Find(x) retorna o elemento que representa o conjunto naquele instante. Assim o

algoritmo busca a raiz da árvore que contém o elemento x.

Find(z) = u Find(w) = x

v u

z y

t

x

s w

14/05/2018 © 2012 DI, PUC-Rio • Estruturas de Dados Avançadas • 2012.1 25

(26)

Exemplo de Operações: Union(u,x)

• O Union(u,x) une dois grupos fazendo com que a raiz de um grupo aponte para a raiz do outro grupo.

Desta forma uma árvore vira a sub-árvore da outra.

• Union(u,x) => S1 ∪ S2 = {t,u,v,y,z, s,w,x}.

v u

z y

t

x

s w

Já é possível perceber aqui, que conforme as uniões forem realizada, uma árvore completamente degenerada pode ser criada, fazendo com que as operações de Find se realizem em tempo linear O(n)

14/05/2018 © 2012 DI, PUC-Rio • Estruturas de Dados Avançadas • 2012.1 26

(27)

Exemplo de Operações: Find(w)

• O comando de Find vai percorrendo toda a estrutura até encontrar o elemento que

representa o conjunto.

• Find(w) = u

v u

z y

t

x

s w

14/05/2018 © 2012 DI, PUC-Rio • Estruturas de Dados Avançadas • 2012.1 27

(28)

Representação Simplificada por Vetor

• Um exemplo didático de como estrutura de dados de conjuntos-disjuntos pode ser

implementada é com um simples vetor contínuo. Cada elemento do vetor é

diretamente mapeados para os elementos do universo. Cada elemento do vetor possui um apontador para o pai dele.

14/05/2018 © 2012 DI, PUC-Rio • Estruturas de Dados Avançadas • 2012.1 28

(29)

Representação Simplificada por Vetor

• Veja aqui um exemplo de conjuntos de alguns

números. Note que neste exemplo a representação de raiz é quando o elemento apontando para -1.

elemento 0 1 2 3 4 5 6 7

ponteiro 1 -1 1 1 5 -1 5 -1

1

2 3

0

5

4 6

7

14/05/2018 © 2012 DI, PUC-Rio • Estruturas de Dados Avançadas • 2012.1 29

(30)

Algoritmo Simples de Union-Find

void create(int p[], int size) {

for(int i=0;i<size;++i) p[i] = -1;

}

int find(int u){

return ( ( p[u] == -1 ) ? u : find(p[u]) );

}

int union(int u, int v) { u = find(u);

v = find(v)

if (u!=v) p[u] = v;

}

14/05/2018 © 2012 DI, PUC-Rio • Estruturas de Dados Avançadas • 2012.1 30

(31)

Problemas do Algoritmo Simples

Num primeiro instante a configuração inicial consiste de uma floresta com n nós (singletons). Unindo todos os elementos em ordem: Union(1,2), Union(2,3), Union(3,4), ... Union(n-1, n).

Resulta em uma árvore degenerada.

10 9

8 7

6 5

4 3

2 1

14/05/2018 © 2012 DI, PUC-Rio • Estruturas de Dados Avançadas • 2012.1 31

(32)

Eficiência

MakeSet

ACESSO DIRETO A NÓ : O( 1 )

Find

NECESSÁRIO PERCORRER OS ELEMENTOS : O( n )

Union

TEMPO CONSTANTE EM SI : O( 1 )

PORÉM É NECESSÁRIO ENCONTRAR OS

REPRESENTANTES CASO NÃO SE TENHA CERTEZA DA ORDERM DE INSERÇÃO : O( n )

14/05/2018 © 2012 DI, PUC-Rio • Estruturas de Dados Avançadas • 2012.1 32

(33)

Eficiência dos Algoritmos

Caso seja necessário unir todos os elementos e depois verificar cada um a que conjunto ele pertence, todos os elementos precisaria sofrem um Union e depois um Find.

O tempo de uma Union é constante assim unir todos os elemento leva o tempo O(n). Mas cada execução do find segue uma sequência até a raiz do conjunto.

Como o tempo para cada find de um elemento no nível i de uma árvore é O(i), o tempo total necessário para processar os n finds é:

14/05/2018 © 2012 DI, PUC-Rio • Estruturas de Dados Avançadas • 2012.1 33

(34)

Union Seguro

• Para fazer a união de dois grupos é necessário informar a raiz do conjunto, caso isso não seja feito o algoritmo ira ter um comportamente errado.

• Contudo fazer os Finds dentro da rotina de Union vai fazer com que ela se torne O( n ).

14/05/2018 © 2012 DI, PUC-Rio • Estruturas de Dados Avançadas • 2012.1 34

(35)

Algoritmo União por Altura

• No algoritmos de união por altura é verificada a altura de cada conjunto para determinar a união.

x

h1

y

h2

U =

h2 x

y

14/05/2018 © 2012 DI, PUC-Rio • Estruturas de Dados Avançadas • 2012.1 35

(36)

Compressão de Trajetória

d

v u

k s

f t e b

w j

c a

FIND_SET (w)

14/05/2018 © 2012 DI, PUC-Rio • Estruturas de Dados Avançadas • 2012.1 36

(37)

Compressão de Trajetória

d

v u

k s

f t e b

w j

c a

FIND_SET (w)

14/05/2018 © 2012 DI, PUC-Rio • Estruturas de Dados Avançadas • 2012.1 37

(38)

Compressão de Trajetória

d

v u

k s

f t e b

w j

c a

FIND_SET (w)

14/05/2018 © 2012 DI, PUC-Rio • Estruturas de Dados Avançadas • 2012.1 38

(39)

União Por Tamanho

• Da mesma forma que a união por altura a união por tamanho, minimiza a criação de uniões degeneradas, colocando sempre o menor no maior

14/05/2018 © 2012 DI, PUC-Rio • Estruturas de Dados Avançadas • 2012.1 39

(40)

Referências

Cormen, T. H., Leiserson, C. E., Rivest, R. L., Stein, C.

Introduction to Algorithms. Second edition. The MIT Press, 2001.

Halim, S, Halim, F. Competitive Programming. Lulu, 2010

Horowitz, E., Sahni, S., Rajasekaran, S. Computer Algorithms.

Computer Science Press, 1997.

Weiss, M.K. – Data Structures and Algorithm Analysis, Benjamin/Cummins, 1992.

en.wikipedia.org/wiki/Disjoint-set_data_structure

14/05/2018 © 2012 DI, PUC-Rio • Estruturas de Dados Avançadas • 2012.1 40

Referências

Documentos relacionados

Os objetivos desse estudo foram: verificar a evolução do peso e da composição corporal de nutrizes nos três primeiros meses pós-parto, bem como os fatores que influenciaram o

De seguida, vamos adaptar a nossa demonstrac¸ ˜ao da f ´ormula de M ¨untz, partindo de outras transformadas aritm ´eticas diferentes da transformada de M ¨obius, para dedu-

Curvas de rarefação (Coleman) estimadas para amostragens de espécies de morcegos em três ambientes separadamente (A) e agrupados (B), no Parque Estadual da Ilha do Cardoso,

ABSTRACT: The toxicological effects of crude ethanolic extracts (CEE) of the seed and bark of Persea americana have been analyzed on larvae and pupae of

Puxe a alça lateral segurando pela fivela que você alcançou trazendo-a para baixo e cruzando suas costas até encontrar a outra parte da fivela que está no painel.. Feche a fivela

Favor verificar a especificação correta, materiais e demais detalhes no memorial de incorporação e nos projetos técnicos disponível nas lojas e no material de incorporação....

variáveis “potência de UV irradiada” e pH , quando a variável [CN - ]0 está em seu nível inferior e a variável “razão molar [H2O2]:[CN - ]” estão em seu nível superior

O presente trabalho tem por objetivo apresentar o desenvolvimento de uma ativi- dade escolar realizada para a disciplina de língua portuguesa pelos alunos do 9º ano do