Conjuntos Disjuntos Monitoria Algoritmos 2012.2.

Slides:



Advertisements
Apresentações semelhantes
Procedimentos e Funções
Advertisements

Complexidade de Algoritmos Recursivos
Celso C. Ribeiro Caroline T. Rocha
Monitoria de Matemática Discreta
Estruturas de Dados e Algoritmos II
ESTRUTURA DE DADOS EXERCÍCIOS e MATRIZES
Laboratório de programação III Linguagem C
Funções em C.
Perspectivas baseadas em procedimentos e orientadas por objectos Conceitos principais: Encapsulamento, Herança, Polimorfismo (Encapsulation, Hierarchy,
Vamos abordar o exemplo
Problemas de fluxo numa rede
Conjuntos disjuntos Objectivo
Área de um Polígono CG Guilherme Bertschinger
Algoritmos e Programação Linguagens de Programação Teoria Aula (09/06)
Teoria dos Grafos Loana T. Nogueira Aula 5.
Aula 1 Tipo Abstrato de Dados
Automato de Pilha.
Recursividade Conceitos e Aplicações.
Árvores Introdução e Aplicações Árvores de Busca Binária Fundamentos
1 Agora vamos falar a respeito de Gestão O que é Gestão ? Gestão significa, de maneira simples, a interferência direta dos responsáveis pelos resultados.
Algoritmos Escher.
Computação Gráfica: Aula2: Curvas e Superfícies
Capítulo 16 Applets.
Linguagem C Funções.
Vetores, Matrizes e Funções
Programação Estruturada
Aula 8 Polimorfismo.
Metodologia de Dijkstra para desenvolvimento de ciclos
Prof. Ernesto Lindstaedt
Professor Reverton de Paula Faculdade Anhanguera de Indaiatuba
JAVA: Conceitos Iniciais
Aux a fim início Simulação da execução de um algoritmo que troca o conteúdo de duas variáveis recebidas e apresenta o resultado da inversão: leia a,b a.
Unidade I: “Dê um mergulho rápido”
Aula prática 9 Alocação Dinâmica Monitoria de Introdução à Programação
INF 1010 Estruturas de Dados Avançadas
Professor: Bruno Moser de Alvarenga
Conjuntos Zenão de Eléia (filósofo grego) , viveu entre 490 e 430 a. C., já estudava e se preocupava com o conceito de conjuntos e a sua imensidão. Em.
Desempenho, Método de Shell, Quicksort
Aula 02 – BCC202 Tipo Abstrato de Dados Túlio Toffolo www. decom. ufop
Prof. Ricardo Santos PONTEIROS
Vamos ampliar o pentágono abaixo duas vezes
INTRODUÇÃO À TEORIA DOS CONJUNTOS
SOMA  0 fim início Simulação do algoritmo que soma os valores dos primeiros números naturais até o número fornecido como entrada: leia N T
(Medições e traçados na cartolina)
CLIQUE AQUI PARA COMEÇAR
Algoritmo BSP/CGM para Euler tour em Grafos
GESTÃO DE QUALIDADE Gestão Financeira, Auditoria e Controladoria.
Desenvolvimento de Jogos e Entretenimento Digital Oficina temática: Algoritmos e Programação Orientação a Objetos: herança Professor: Sandro Rigo.
Curso de Aprendizado Industrial Desenvolvedor WEB
Educação Profissional Técnica de Nível Médio Curso Técnico de Informática
Técnicas de Desenvolvimento de Algoritmos
Introdução à Linguagem C
Vetores Unidimensionais Sistemas de Informação Desenvolvimento de Sistemas para Web Prof. Gale.
Aula Prática 3 Funções Monitoria Introdução à Programação.
Vetores Unidimensionais Prof. Gale. A Variável A  Ilustrando: O que aconteceria no algoritmo... A  3 Escreva A A  5 Escreva A 3 5.
Vendo o código como um bolo... com várias camadas! Interface com o usuário (GUI) Comunicação Negócio Dados.
Revisão Luis Antonio Tavares
FACULDADE DE CIÊNCIAS SOCIAIS E TECNOLÓGICAS Tecnologia em Redes de Computadores Algoritmos e linguagens de programação 1 (aula 09) Prof. Alessandro Bernardo.
Aula Prática 3 Funções Monitoria Introdução à Programação.
Exercícios Laboratório. Inicio Escreva (“Olá Mundo!”) Fim static void main (string[] args) { Console.WriteLine (“Olá Mundo!”); }
Igor Steinmacher, MSc. Java!!!!
Introdução à Programação Engenharia da Computação Aula Prática 3 Funções Monitoria
4º Seminário dos Profissionais Educadores Diretoria de Ensino Centro-Oeste TÍTULO DO TRABALHO: Subtítulo do trabalho TÍTULO DO TRABALHO: Subtítulo do trabalho.
Funcionamento Bucket sort funciona do seguinte modo: Inicialize um vetor de "baldes", inicialmente vazios. Vá para o vetor original, incluindo cada.
PRE 1002 Éverlin Marques 2015/1.
1Unidade 04 – Estruturas de Repetição Algoritmos e Linguagens de Programação Estruturas de Repetição Prof.: Guilherme Baião S. Silva
IFRN Técnico em Informática para Internet Estruturas Condicionais Prof. Gilbert Azevedo.
IDENTIFICAÇÃO DOS RELACIONAMENTOS Nesta atividade devem ser definidos os relacionamentos entre as classes Podem ser representados pela: – associação, –
Algoritmos e Estruturas de Dados I
PAGO DATA: ___/___/____ VALOR TOTAL: __________ Obs.:_________________ _____________________ _____________________ ________.
Transcrição da apresentação:

Conjuntos Disjuntos Monitoria Algoritmos 2012.2

Conjuntos Disjuntos Breve resumo Uma coleção de elementos, e cada elemento pertence a um conjunto. Unir elementos é o mesmo que unir os conjuntos os quais eles pertencem. Cada conjunto tem o seu representante. x y x U y 1 2 3 4 5 6 1 4 2 3 5 6

Conjuntos Disjuntos x y x U y 1 2 3 4 5 6 1 4 2 3 5 6 Vamos supor que o representante do conjunto x é 1, e o representante do conjunto y é 4. Rep(x) é o representante do conjunto em que x está contido. Rep(1) = Rep(2) = Rep(3) = 1 Rep(4) = Rep(5) = Rep(6) = 4

Conjuntos Disjuntos x y x U y 1 2 3 4 5 6 1 4 2 3 5 6 unir(1,2) = unir(1,3) = unir(2,3) = x unir(4,5) = unir(4,6) = unir(5,6) = y unir(1,4) = unir(1,5) = unir(1,6) = unir(2,4) = ... = unir(3,6) = x U y

OBS.: a aresta significa quem é o representante do elemento. Conjuntos Disjuntos Início: 6 conjuntos disjuntos OBS.: a aresta significa quem é o representante do elemento. 1 2 3 4 5 6 Como representar isso em código? public void init (int N) { for (int i = 1; i <= N; i++) { rep[i] = i; } //rep[i] indica o representante do elemento i

Mas peraí, isso é eficiente? Conjuntos Disjuntos Vamos utilizar o seguinte algoritmo para união: unir(2,1) public void unir (int i, int j) { rep[i] = j; } 1 3 4 5 6 2 unir(3,2) 1 4 5 6 2 3 Mas peraí, isso é eficiente?

Não! Imagine o caso: unir(2,1), unir(3,2), unir(4,3), unir(5,4), etc. Conjuntos Disjuntos Não! Imagine o caso: unir(2,1), unir(3,2), unir(4,3), unir(5,4), etc. Teríamos uma lista encadeada: 1 2 Se eu quiser saber o conjunto em que o 6 está contido, eu teria que percorrer os 5 elementos acima dele. Esta estratégia é custosa (O(n) por consulta). Precisamos pensar numa estratégia que amortize este custo! 3 4 5 6 ...

Conjuntos Disjuntos E a estratégia nova que iremos adotar é simples! Ao invés de unirmos um elemento diretamente a outro, vamos unir o representante do conjunto de um com o representante do conjunto do outro. Para isso, criaremos uma função recursiva achaConjunto que faz o representante do elemento atual ser igual ao representante do seu atual representante. Isto é: public int achaConjunto (int i) { if (rep[i] = i) { return i; } else { rep[i] = achaConjunto(rep[i]); return rep[i]; }

Conjuntos Disjuntos Nossa nova função de unir conjuntos agora será: public void unir (int i, int j) { rep[AchaConjunto(i)] = AchaConjunto(j); } Voltando à simulação em que estávamos antes: 1 3 4 5 6 2 unir(2,3) 3 4 5 6 1 2

Conjuntos Disjuntos unir(2,3) 3 4 5 6 1 2 achaConjunto(2) = 3 3 4 5 6 1 2

Conjuntos Disjuntos unir(1,5) 4 5 6 3 1 2 unir(4,2) 5 6 2 3 4 1

Conjuntos Disjuntos public void init (int N) { for (int i = 1; i <= N; i++) { rep[i] = i; } public int achaConjunto (int i) { if (rep[i] = i) { return i; } else { rep[i] = achaConjunto(rep[i]); return rep[i]; } public void unir (int i, int j) { rep[achaConjunto(i)] = achaConjunto(j); }

DESAFIO! EXEMPLO INPUT EXEMPLO OUTPUT Conjuntos Disjuntos Há N discos no chão. Cada disco é definido por sua posição (x,y) e seu raio r. Os discos são cobertos de cola, portanto dois discos estão colados se eles se intersectam em pelo menos 2 pontos. Se você levantar um disco do chão, você levantará todos os discos colados a ele, e todos os discos colados aos discos colados a ele, e assim por diante. Dados os N discos, você deverá informar a maior quantidade de discos que se pode levantar de uma vez só segurando um único disco. A entrada é composta por vários casos de teste, e cada caso de teste começa com um inteiro N, e N linhas se seguem, cada uma definindo x, y, r, onde (x,y) é a posição do centro do disco, e r é o raio do mesmo. A entrada deverá ser lida até o N encontrado ser -1. A saída para cada caso de teste é uma linha contendo um único número com a resposta. EXEMPLO INPUT EXEMPLO OUTPUT 3 3.0 2.0 2.0 0.0 -0.5 1.0 0.0 0.0 2.0 2