Escolar Documentos
Profissional Documentos
Cultura Documentos
Algoritmos Básicos
UFMG/ICEx/DCC 1
Propagação de Informação
UFMG/ICEx/DCC 2
Suposições
• n é o número de nodos em G
• m é o número de vértices em G
UFMG/ICEx/DCC 3
Propagação de informação (PI)
• Problema:
– Difundir em G informação presente num subconjunto dos nodos de G
UFMG/ICEx/DCC 4
Estratégia para resolução do problema PI
• Estratégia é similar para o caso em que dois ou mais nodos possuem inf
UFMG/ICEx/DCC 5
Razões que podem dificultar a aplicação dessa
estratégia
UFMG/ICEx/DCC 6
Solução para o problema PI baseada em “Difusão”
ou “Onda de Propagação”
• Sejam os conjuntos:
– N0: conjunto de nodos que possuem inf inicialmente
– N00 : conjunto de nodos que não possuem inf inicialmente
• Princípio:
– Fazer difusão através de inundação (flooding)
• Complexidade de mensagem:
– Tende a ser maior que usando árvore geradora
UFMG/ICEx/DCC 7
Solução para o problema PI baseada em “Difusão”
ou “Onda de Propagação”
• Idéia:
– No início, cada nodo em N0 envia inf para todos os seus vizinhos
– Cada nodo em N00 , ao receber inf pela primeira vez, envia a mensagem
para todos os seus vizinhos, incluindo a aresta de onde foi recebida
Ü Um nodo recebe inf de todos os seus vizinhos
– A mensagem inf é propagada a partir dos nodos em N0 através de uma
onda
Ü Cada nodo em N00 recebe inf a partir de N0, da forma mais rápida
possível, apesar de falhas que possam haver em G, que ainda geram
um grafo conexo
Ü Vários algoritmos distribuídos funcionam desta forma
UFMG/ICEx/DCC 8
Algoritmo A PI
. Variables:
. Input:
msg i = nil.
Action if ni ∈ N0 : (1)
reached i ← true;
Send inf to all nj ∈ Neig i.
. Input:
msg i = inf.
Action: (2)
if not reached i
then begin
reached i ← true;
Send inf to all nj ∈ Neig i
end.
UFMG/ICEx/DCC 9
Comentários sobre A PI
Resultado de impossibilidade:
• Dado um nodo ni com reached i = true não é possível identificar se a cópia
de inf que o nodo recebe em (2) é uma resposta a mensagem enviada no:
(i) ponto (1), onde o nodo ni ∈ N0 e a mensagem foi enviada por um nodo
vizinho nj ∈ N00
(ii) ponto (2), onde o nodo ni ∈ N00 e a mensagem foi enviada por um nodo
vizinho nj ∈ N00
ou
(iii) uma mensagem que estava em trânsito de nj ∈ Neig i para ni.
UFMG/ICEx/DCC 10
Problema
UFMG/ICEx/DCC 11
Propagação de informação com realimentação
(PIF)
• Problema:
– Difundir em G informação presente em um único nodo s para todos os
outros nodos em G com o requisito que ao final da execução do algoritmo,
o nodo s tenha a confirmação do recebimento de inf por todos os outros
nodos
UFMG/ICEx/DCC 12
Solução baseada em árvore geradora
• Suposições:
– n1 é o único nodo que inicialmente possui inf (raiz da árvore)
– Todos os nodos ni, i 6= 1, possuem um vizinho especial, parent i, no cam-
inho na árvore de ni a n1
UFMG/ICEx/DCC 13
Solução baseada em árvore geradora
• Algoritmo:
1. Calcular uma árvore geradora em G, sendo n1 a raiz da árvore
{Usar a árvore geradora para fazer a difusão de inf }
2. Nodo n1 envia inf em todas as arestas da árvore geradora que são inci-
dentes a n1
3. Um nodo ni, i 6= 1, ao receber inf pela primeira vez de algum vizinho nj ,
marca parent i, com o vizinho nj
4. Se ni não é um nodo folha, então ni envia inf em todas as arestas da ár-
vore geradora que são incidentes a ni, exceto na aresta que leva a parent i
(nj )
5. Se ni é um nodo folha, então ni envia inf imediatamente para parent i ao
receber inf pela primeira vez
UFMG/ICEx/DCC 14
Solução baseada em árvore geradora
• Algoritmo (continuação):
6. Um nodo ni, i 6= 1, ao receber inf em todas as arestas da árvore geradora
que são incidentes a ni, exceto na aresta que leva a parent i (nj ), envia inf
para parent i
7. O nodo n1, ao receber inf em todas as arestas da árvore geradora que
são incidentes a n1, sabe que a mensagem foi propagada e recebida por
todos os nodos da árvore
UFMG/ICEx/DCC 15
Solução para o problema PIF baseada em
“Difusão”
• Idéia:
– Similar à solução para o problema PI
– Utiliza a variável parent i, como descrito na solução com árvore geradora
– Executa os passos (2) a (7) do algoritmo utilizando a árvore geradora, ex-
ceto que as mensagens são propagadas por todas as arestas, e não ape-
nas aquelas presentes na árvora geradora
UFMG/ICEx/DCC 16
Algoritmo A PIF
. Variables:
parent i = nil; {Vizinho de ni por onde inf chegou inicialmente}
count i = 0; {Número de cópias recebidas de inf }
reached i = false. {Indica se ni já recebeu inf ou não}
. Input:
msg i = nil.
Action if ni ∈ N0: (1)
reached i ← true;
Send inf to all nj ∈ Neig i.
UFMG/ICEx/DCC 17
Algoritmo A PIF
. Input:
msg i = inf | origini(msg i) = (ni, nj ).
Action: (2)
count i ← count i + 1
if not reached i
then begin
reached i ← true;
parent i ← nj ;
Send inf to all nk ∈ Neig i | nk 6= parent i.
end;
if count i = |Neig i|
then if parent i 6= nil
then Send inf to parent i.
UFMG/ICEx/DCC 18
Observações sobre o algoritmo A PIF
UFMG/ICEx/DCC 19
Observações sobre o algoritmo A PIF
UFMG/ICEx/DCC 20
Múltiplas instâncias concorrentes do algoritmo de
PI
• Possível solução:
– Ter em cada nodo ni uma variável booleana reached ki associada a inf k ,
para k ≥ 1
UFMG/ICEx/DCC 21
Múltiplas instâncias concorrentes do algoritmo de
PI
• Estratégia:
– Cada nodo ni deve possuir |Neig i| contadores, um para cada aresta inci-
j
dente a ni, chamados count i para nj ∈ |Neig i|
j
– O contador count i é incrementado toda vez que ni recebe uma mensagem
vinda de nj
j
– O valor do contador count i indica o número da última mensagem recebida
em ni vinda de nj
UFMG/ICEx/DCC 22
Múltiplas instâncias concorrentes do algoritmo de
PI
• Como saber que uma mensagem nl ∈ Neig i está sendo recebida em ni pela
primeira vez?
– Basta verificar
j
count li > count i
para todo nj ∈ Neig i tal que j 6= l
UFMG/ICEx/DCC 23
Problema
UFMG/ICEx/DCC 24
Múltiplas instâncias concorrentes do algoritmo de
PIF
• Problema:
– Nodo n1 envia uma seqüência de mensagens
• Estratégia:
– Usar variáveis booleanas, mas com os problemas já mencionados
– Pensar em outra solução, já que com canais FIFO não é possível resolver
UFMG/ICEx/DCC 25
Problema
• Mostre, através de um exemplo, que arestas FIFO não são suficientes para
garantir que mensagens são recebidas em todos os nodos na ordem enviada
pelo nodo n1, no contexto de múltiplas instâncias concorrentes do algoritmo
A PIF
UFMG/ICEx/DCC 26
Conectividade em Grafos
UFMG/ICEx/DCC 27
Introdução
• Problema:
– Dado um grafo G, cada nodo em N deve descobrir as identificações de
todos os outros nodos aos quais está conectado por um caminho em G
• Importância do problema:
– Em um sistema sujeito a falhas, é importante saber os identificadores dos
nodos de um componente conectado
UFMG/ICEx/DCC 28
Observações
UFMG/ICEx/DCC 29
Algoritmo A Test Connectivity
. Variables:
parent ki = nil for all nk ∈ N ; {nodo em Neig i de onde recebeu id k }
count ki = 0 for all nk ∈ N ; {# vezes que id k foi recebido}
reached ki = false for all nk ∈ N ; {indica se id k foi recebido pelo menos uma vez}
initiated i = false. {indica se ni ∈ N0 }
. Input:
msg i = nil.
Action if ni ∈ N0 : (1)
initiated i ← true;
reached ii ← true;
Send id i to all nj ∈ Neig i.
UFMG/ICEx/DCC 30
Algoritmo A Test Connectivity
. Input:
msg i = id k | origini( msg i) = (ni, nj ) for some nk ∈ N .
Action: (2)
if not initiated i
then begin
initiated i ← true;
reached ii ← true;
parent i ← nj ;
Send id i to all nl ∈ Neig i
end;
count ki ← count ki + 1;
if not reached ki
then begin
reached ki ← true;
parent ki ← nj ;
Send id k to every nl ∈ Neig i | nl 6= parent ki
end;
if count ki = |Neig i|
then if parent ki 6= nil
then Send id k to parent ki .
UFMG/ICEx/DCC 31
Menor Distância
UFMG/ICEx/DCC 32
Menor distância
• Problema:
– Determinar a menor distância em G entre todos os pares de nodos
– Distância é medida em número de arestas
• Resultado final:
– Distância de cada nodo ni para todos os outros
– Nodo em Neig i que está em cada caminho mais curto
Ü Permite que mensagens sejam roteadas
UFMG/ICEx/DCC 33
Algoritmo síncrono para calcular a menor distância
• Princípio:
– O algoritmo funciona em pulsos síncronos
• Idéia básica:
– Cada nodo possui uma identificação
– Em s = 0 cada nodo envia sua identificação para os seus vizinhos
– Em s = i, i > 0, cada nodo envia para os vizinhos as identificações
recebidas durante s − 1
– N0 = N
UFMG/ICEx/DCC 34
Algoritmo S Compute Distances
. Variables:
dist ii = 0; {distância de i para i}
k
dist i = n ∀nk ∈ N | k 6= i; {menor distância de i para k}
first ki = nil ∀nk ∈ N | k 6= i; {nodo em Neig i no caminho mais curto para nk 6= ni}
set i = {id i}. {conjunto de identificações a serem enviadas para os vizinhos}
. Input:
s = 0, MSGi(0) = ∅.
Action if ni ∈ N0 : (1)
Send set i to all nj ∈ Neig i.
UFMG/ICEx/DCC 35
Algoritmo S Compute Distances
. Input:
0 < s ≤ n − 1, MSGi(s) | origini(set j ) = (ni, nj ) for set j ∈ MSGi(s)
Action: (2)
set i = ∅;
for all set j ∈ MSGi(s) do
for all id k ∈ set j do
if dist ki > s
then begin
dist ki ← s;
first ki ← nj ;
set i ← set i∪ {id k }.
end;
Send set i to all nk ∈ Neig i.
UFMG/ICEx/DCC 36
Comentários sobre o algoritmo
S Compute Distances
• Cada mensagem com a identificação passa por cada aresta duas vezes
– Logo, o número de mensagens é 2nm = O(nm)
– No entanto, o comprimento de cada mensagem varia
– Se a identificação pode ser expressa em dlog ne bits, então a complexidade
em bits é O(nm log n)
UFMG/ICEx/DCC 37
Algoritmo assíncrono para calcular a menor
distância
• Estratégia:
– Usar o algoritmo S-to-A Template
• Suposições:
– Arestas em G têm a propriedade FIFO
• Comentários:
– Existem algoritmos mais eficientes, mas é bastante utilizado
– É simples e ilustra técnicas de sincronização
UFMG/ICEx/DCC 38
Algoritmo A Compute Distances
. Variables:
dist ii = 0; {distância de i para i}
k
dist i = n ∀nk ∈ N | k 6= i; {menor distância de i para k}
first ki = nil ∀nk ∈ N | k 6= i; {nodo em Neig i no caminho mais curto para nk 6= ni}
set i = {id i}. {conjunto de identificações a serem enviadas para os vizinhos}
j
level i = −1 ∀nj ∈ Neig i; {indica que conjuntos de identificações ni recebeu de nj }
{level ji = d, 0 ≤ d < n, sse ni recebeu de nj , os conjun-
tos que estão a d arestas de nj }
statei = 0; {indica que conjuntos de identificações ni recebeu de seus vizinhos}
{statei = d, 0 ≤ d < n, sse ni recebeu a identificação de todos os
nodos que estão a d arestas de ni}
initiated i = false. {indica se ni ∈ N0 }
. Input:
msg i = nil.
Action if ni ∈ N0 : (1)
initiated i ← true;
Send set i to all nj ∈ Neig i.
UFMG/ICEx/DCC 39
Algoritmo A Compute Distances
. Input:
msg i = set j | origini(msg i) = (ni, nj ).
Action: (2)
if not initiated i
then begin
initiated i ← true; Send set i to all nj ∈ Neig i.
end;
if statei < n − 1 {se statei = n − 1 então ni já recebeu todas as identificações em N }
then begin
level ji ← level ji + 1; {ni está recebendo mais um conjunto de nj }
for all id k ∈ set j do
if dist ki > level ki + 1 {descobre o caminho mais curto de ni para nk }
then begin
dist ki ← level ki + 1; first ki ← nj ;
end;
if statei ≤ level ji ∀nj ∈ Neig i
then begin
statei ← statei + 1; set i ← {id k | nk ∈ N ∧ dist ki = statei};
Send set i to all nk ∈ Neig i.
end;
end;
UFMG/ICEx/DCC 40