You are on page 1of 17

Pontifcia Universidade Catolica de Minas Gerais

Instituto Politecnico Engenharia Mecanica - enfase em Mecatronica Tecnicas de Programacao para Engenharia Notas de aula extra
Prof. Joao Leonardo Ribeiro Neto Instituto de Informatica

2010

Problema da Conectividade

Supondo uma sequencia de pares de inteiros. Cada inteiro representando um objeto qualquer. O par p-q signica p esta conectado a q. A relacao e reexiva: se p esta conectado a q==>q esta conectado a p. A relacao e transitiva: se p esta conectado a q e q esta conectado a r , entao p esta conectado a r .

Problema da Conectividade

Os inteiros podem representar computadores de uma grande rede, e os pares podem representar as conexoes da rede. Entao podemos determinar se necessitamos estabelecer uma nova conexao ou se existe um caminho para uma determinada rota de comunicacao. Similarmente, os inteiros podem representar pontos de contatos em uma rede eletrica, e os pares podem representar os conectando estes pontos. Nesta caso, podemos encontrar um caminho para conectar todos os pontos que ainda nao estao conectados.

Problema da Conectividade

Figura: Ilustracao dos dois tipos de aplicacoes em larga escala

Problema da Conectividade

Nosso objetivo e ltrar a sada dos pares a partir do conjunto: - Quando o programa receber como entrada um par p-q, mostrara o par na sada, somente se, os pontos p-q ainda nao estiverem conectados. Se os pares ja estiverem conectados, o programa ignora p-q e solicita outro par de pontos.

Problema da Conectividade
Entrada 34 49 80 23 56 29 59 73 48 56 02 61 Sada 34 49 80 23 56 59 73 48 56 08432 61 Conexao existente

2349

quick-nd (localizacao rapida)

Utilizaremos um array de inteiros ( a[N] ) como estrutura de dados que armazena os subconjuntos conectados. Dois elementos p e q pertencerao a um mesmo subconjunto se a[p] = a[q] ==> a operacao de localizacao se reduz a um teste de igualdade. Para implementar a operacao de uniao percorre-se o array, modicando-se todas as entradas de valor = a[p] para o valor a[q]. Localizacao rapida e uniao lenta.

quick-nd(localizacao rapida)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 #include<s t d i o . h> #include<s t d l i b . h> i n t main ( ) { i n t i , p , q , quant , c o n t =0 , i d [ 1 0 0 0 0 ] ; f o r ( i =0; i <10000; i ++) i d [ i ] = i ; p r i n t f ( \ nEntre com o numero de e n t r a d a s : ) ; s c a n f ( %d ,& quant ) ; while ( cont<quant ) { p r i n t f ( \ nEntre com os pontos : ) ; s c a n f ( %d %d ,&p ,& q ) ; c o n t ++; i f ( i d [ p ]== i d [ q ] ) continue ; f o r ( i =0; i <10000; i ++) i f ( i d [ i ]== i d [ p ] ) i d [ i ] = i d [ q ] ; p r i n t f ( %d %d\n , p , q ) ; } system ( PAUSE ) ; return 0; }

quick-nd(localizacao rapida)
p 3 4 8 2 5 2 5 7 4 5 0 6 q 4 9 0 3 6 9 9 3 8 6 2 1 0123456789 0124456789 0129956789 0129956709 0199956709 0199966709 0199966709 0199999709 0199999909 0100000000 0100000000 0100000000 1111111111

quick-nd(localizacao rapida)

quick-nd(localizacao rapida)

quick-nd(localizacao rapida)

Propriedade: - O algoritmo quick-nd(localizacao rapida) executa pelo para resolver um problema de menos MN instrucoes conectividade com N objetos que envolvem M operacoes de uniao. Para cada uma das M operacoes de uniao, o programa faz N interacoes. Cada instrucao requer pelo menos uma instrucao(se somente vericar se o loop pode ser encerrado).

quick-union(uniao rapida)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 #include<s t d i o . h> #include<s t d l i b . h> i n t main ( ) { i n t i , j , p , q , quant , c o n t =0 , i d [ 1 0 0 0 0 ] ; f o r ( i =0; i <10000; i ++) i d [ i ] = i ; p r i n t f ( \ nEntre com o numero de e n t r a d a s : ) ; s c a n f ( %d ,& quant ) ; while ( cont<quant ) { p r i n t f ( \ nEntre com os pontos : ) ; s c a n f ( %d %d ,&p ,& q ) ; c o n t ++; f o r ( i =p ; i ! = i d [ i ] ; i = i d [ i ] ) ; f o r ( j =q ; j ! = i d [ j ] ; j = i d [ j ] ) ; i f ( i == j ) continue ; id [ i ]= j ; p r i n t f ( %d %d\n , p , q ) ; } system ( PAUSE ) ; return 0; }

quick-union(uniao rapida)
p 3 4 8 2 5 2 5 7 4 5 0 6 5 q 4 9 0 3 6 9 9 3 8 6 2 1 8 0123456789 0124456789 0124956789 0124956709 0194956709 0194966709 0194966709 0194969709 0194969909 0194969900 0194969900 0194969900 1194969900 1194969900

quick-union(uniao rapida)

quick-union(uniao rapida)

quick-union(uniao rapida)

Propriedade: - Para M > N, o algoritmo quick-union(uniao rapida) pode precisar executar mais do que MN/2 instrucoes com M pares de N objetos.

You might also like