A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Conjuntos Algoritmos e Estruturas de Dados - IF672

Apresentações semelhantes


Apresentação em tema: "Conjuntos Algoritmos e Estruturas de Dados - IF672"— Transcrição da apresentação:

1 Conjuntos Algoritmos e Estruturas de Dados - IF672
Adriana Libório Fernandes Lins Arthur Cavalcanti Alem Átila Valgueiro Malta Moreira Flavio Juvenal da Silva Júnior Gustavo Cauê Silva Botelho Matheus Bispo Arrais de Souza Murilo Raphael de Souza Lira Rafael Alberto Gomes Pereira Lima Rafael Brandão Lobo Rafael Loureiro de Carvalho Tiago Carneiro Pessoa Canto Vinicius Miranda Cesar

2 Conjuntos Uma estrutura de dados conjuntos-disjuntos é uma coleção S = {S1, , Sk} de conjuntos dinâmicos disjuntos. Cada conjunto Sk é identificado por um representante, que é um membro do conjunto (head); que obviamente faz parte do conjunto. Tipicamente não importa quem é o representante, apenas que ele seja consistente.

3 Conjuntos Algumas aplicações envolvem o agrupamento de N elementos em uma coleção de conjuntos disjuntos, ou seja, um particionamento dos elementos em conjuntos. Alguns usos: ° problemas de grafos ° equivalência de tipos em compiladores

4 Conjuntos Make_Set(x): cria um novo conjunto cujo único elemento é apontado por X (head). X não pode pertencer a outro conjunto da coleção. Union(x, y): executa a união dos conjuntos que contêm x e y, digamos Sx e Sy, em um conjunto único. Sx ∩ Sy = Ø. O representante de S = Sx ∪ Sy é o representante de Sx ou de Sy. (x e y não necessariamente são os heads). Find(x): retorna um ponteiro para o representante (único) do conjunto que contém x.

5 Representação de Conjuntos Disjuntos
Uma maneira simples de implementar uma estrutura de dados Conjuntos Disjuntos consiste em representar cada conjunto como uma lista encadeada. O primeiro elemento da lista é o representante. Ex: S = {a, d, e} HEAD: Conjunto 1. a h n d h n e h n a, d, e = Valor h = ponteiro para head n = ponteiro para next

6 Representação de Conjuntos Disjuntos
Em Conjuntos Disjuntos de Listas Encadeadas: A forma mais simples de implementar a operação união [union(x, y)] é adicionar a lista de x no fim da lista de y. O representante do conjunto x agora será o elemento que era originalmente o representante de y. Todavia, temos de atualizar o ponteiro para o representante (ponteiro head) de todos os elementos da lista de x.

7 Representação de Conjuntos Disjuntos
Todos os elementos são indexados. Cada subconjunto terá o nome de seu representante. Mantemos um vetor de nomes para o subconjunto disjunto de cada elemento. 2 10 7 4 6 3 8 9 1 5 Conjunto 1 2 3

8 Representação de Conjuntos Disjuntos
Em uma implementação mais rápida da estrutura de dados Conjuntos Disjuntos, representamos conjuntos por meio de árvores. A raiz da árvore contém o representante do conjunto. O filho aponta para o pai. Ex: S1 = {c, h, e, b} e S2 = {f, d, g} c f d h e b g

9 Representação de Conjuntos Disjuntos
Em Florestas de Conjuntos Disjuntos: Make Set: cria uma árvore com um único vértice. Find Set: segue os ponteiros para os pais até atingir a raiz. Union: faz a raiz de uma árvore apontar para a raiz da outra.

10 Representação de Conjuntos Disjuntos
Cada entrada do vetor contém o pai do elemento i. 1 2 3 6 8 9 4 5 7 10 Conjunto 1 2 3 4

11 Representação de Conjuntos Disjuntos
Elemento Implementação: Elemento{ inteiro indice; inteiro indice_do_pai; Objeto outras_coisas; construtor(inteiro indice){ this.indice = indice; }

12 Representação de Conjuntos Disjuntos
Construtor Implementação: Criador_de_floresta (inteiro tamanho) { //criacao da floresta array = novo elemento[tamanho]; //estamos admitindo que o array inicia como se //todos os elementos fossem NULL }

13 Representação de Conjuntos Disjuntos
Make Set Implementação: Criar_conjunto (elemento e) { e.indice_do_pai = e.indice; array[e.indice] = e; }

14 Representação de Conjuntos Disjuntos
Find Set Implementação: elemento procurar_representante (elemento e) { Se (e.indice_do_representante == e.indice) retorna e; Senão array[e.indice].indice_do_representante = procurar_representante (array[e.indice_do_representante]).indice; retorna array[e.indice_do_representante]; }

15 Representação de Conjuntos Disjuntos
Union Implementação mais simples: União (elemento a, elemento b) { elemento representante_a = array[procurar_representante(a).indice]; elemento representante_b = array[procurar_representante(b).indice]; se (representante_a != representante_b) array[representante_a.indice].indice_do_representante = representante_b.indice; }


Carregar ppt "Conjuntos Algoritmos e Estruturas de Dados - IF672"

Apresentações semelhantes


Anúncios Google