• Nenhum resultado encontrado

4.2 Arquitetura

4.2.3 Módulo de Expansão das Conexões Sociais

O Módulo de Expansão das Conexões Sociais possui como objetivo calcular os níveis de relacionamento diretos e indiretos entre todos os membros de uma Rede Social Móvel, uti- lizando as informações de contexto social (advindas do processamento prévio do Módulo Online) disponíveis na infraestrutura, e armazenar essas novas informações em um meca- nismo de armazenamento persistente para que elas sejam utilizadas pelos outros módulos da infraestrutura.

O desenvolvimento desse módulo teve como motivação os resultados obtidos em [54], os quais demonstraram que há uma maior probabilidade de um usuário vir a formar um novo vínculo de amizade com alguém próximo ao seu ciclo de amizades (e.g., com um amigo de um amigo em comum), do que com um usuário completamente desconhecido (e.g., usuário recomendado a partir de um algoritmo de casamento de perfis ou recomendação).

O módulo proposto modela os relacionamentos sociais dos usuários através de uma re- presentação de grafos [44]. Nesse modelo, os vértices representam os usuários e as arestas os relacionamentos existentes entre eles. Ainda, as arestas são não-direcionadas, uma vez que o relacionamento de amizade entre dois usuários é considerado mútuo ou bidirecional pela infraestrutura. Além disso, as arestas do grafo podem ser ponderadas com peso igual a 1, ou ainda, podem ser representadas sem a utilização de pesos.

4.2 Arquitetura 46 ritmo que soluciona um problema clássico da Teoria dos Grafos, denominado problema de

caminhos mais curtos de todos os pares, que consiste em determinar a menor distância en-

tre cada par de vértice de um grafo. De acordo com Cormen, em [16], dentre as possíveis soluções para este problema destacam-se: os algoritmos de Johnson, Floyd-Warshall e da

elevação ao quadrado repetida em matrizes, com complexidade de O(V2lgV + V E), Θ(V3)

eΘ(V3lgV ), respectivamente. Outra alternativa possível é aplicar um algoritmo que solu-

ciona o problema de caminhos mais curtos de única origem para todos os vértices do grafo. Algumas soluções para esse problema são os algoritmos de Bellman-Ford O(V2E) [16] e

Dijkstra O(V2lgV + V E) [16].

Entretanto, uma vez que na representação escolhida as arestas podem ser representadas sem peso, ou com peso igual a 1, o algoritmo Breadth-First Search (BFS) [16] para travessia em largura em grafos, com complexidade O(V + E), mostra-se uma boa alternativa para solucionar o problema. Essa solução apresenta uma complexidade assintoticamente melhor do que os algoritmos de Dijkstra e Bellman-Ford, que são utilizados em problemas onde os pesos podem ser positivos ou negativos entre as arestas do grafo. Além disso, diferentemente das outras soluções, esse algoritmo pode ser facilmente adaptado para que a travessia no grafo seja limitada pela quantidade de níveis a serem percorridos, conforme demonstrado através do Código Fonte 4.1.

Código Fonte 4.1: Algoritmo BFS limitado por nível

1 BFS ( G , s , max ) 2 p a r a c a d a v é r t i c e u ∈ V[G] − { s } 3 do c o r [ u ] ← BRANCA 4 d i s t a n c i a [ u ] ← ∞ 5 a n t e c e s s o r [ u ] ← NIL 6 c o r [ s ] ← CINZA 7 d i s t a n c i a [ s ] ← 0 8 a n t e c e s s o r [ s ] ← NIL 9 Q ← 0 10 ENQUEUE( Q , s ) 11 w h i l e Q ̸= 0 12 do u ← DEQUEUE(Q) 13 p a r a c a d a v é r t i c e v ← l i s t a A d j a c e n c i a [ u ] 14 do i f c o r [ v ] = BRANCA

4.2 Arquitetura 47 15 t h e n c o r [ v ] = CINZA 16 d i s t a n c i a [ v ] = d i s t a n c i a [ u ] + 1 17 a n t e c e s s o r [ v ] = u 18 do i f d i s t a n c i a [ v ] < max 19 t h e n ENQUEUE( Q , v ) 20 c o r [ u ] = PRETA

O procedimento BFS limitado por nível funciona da seguinte forma. Nas linhas 2 e 3 é atribuído para todos os vértices do Grafo G a cor branca (i.e. vértice não descoberto), em seguida são definidos a distância para todo vértice u como sendo infinita (linha 4) e o antecessor de todo vértice como sendo NIL (i.e. desconhecido - linha 5). Na linha 6 é redefinida a cor do vértice s (vértice de origem) como sendo cinza, pois apesar do vértice ter sido descoberto as suas arestas ainda precisam ser exploradas. Na linha 7 é atribuído NIL como valor do antecessor do vértice s (i.e. o vértice de origem não possui antecessor). Nas linhas 8 e 9, a Fila Q é inicializada e o vértice s é inserido na posição inicial, respectivamente. No escopo do Loop while, linhas 11 a 20, é verificado se a Fila Q não está vazia (linha 11), iniciando cada nova iteração com a remoção do próximo vértice u (sempre de cor cinza) da Fila Q (linha 12). Ainda, para cada vértice contido na lista de adjacência do vértice u (linha 13), são realizados os seguintes procedimentos: verificação da cor do vértice (linha 14), caso esteja atribuída a cor branca, será atribuída a cor cinza (linha 15), atribuição do valor da distância para o vértice descoberto como sendo igual a distância do vértice u mais 1 (linha 16), finalizando com a atribuição do vértice u como antecessor do vértice v (linha 17). Em seguida, na linha 18 é verificado se a distância do vértice v é menor do que o valor contido na variável max (i.e. o nível máximo a ser descoberto), em caso afirmativo, os vértices adjacentes ao vértice v serão inseridos ao final da Fila Q (linha 19). Quando todos os vértices contidos na lista de adjacência do vértice u forem explorados, a cor do vértice u é modificada para preta (linha 20).

O módulo proposto executa a versão modificada do algoritmo BFS para todos os vértices do grafo, objetivando determinar no máximo seis níveis de amizade para cada vértice. De acordo com [16], o tempo de execução do algoritmo BFS para resolução do problema de

caminhos mais curtos de todos os pares possui complexidade O(V2 + V E), ou O(V E),

4.2 Arquitetura 48 A escolha de processar no máximo seis níveis foi realizada com base na Teoria dos

Seis Graus de Separação [37, 45], que afirma que são necessários em média seis laços de

amizade para que duas pessoas quaisquer no mundo estejam conectadas entre si. Ainda, alguns estudos como aqueles realizados em [38] e [40] demonstraram que essa teoria pode ser aplicada para as Redes Sociais Online5.

O resultado obtido como saída da execução do algoritmo, pode ser utilizado para indicar a menor distância no grafo entre dois pares de vértices. Ou ainda, na modelagem utilizada, o nível de relacionamento existente entre dois usuários. Dessa forma, o nível 1 (i.e. distância igual a 1 entre dois pares de vértices) indica que os usuários são amigos diretos e os demais níveis (i.e. distâncias maiores ou iguais a 2 entre dois pares de vértices) indicam que os usuários estão relacionados indiretamente (e.g., através de amigos em comum na passagem de um nível para outro).

Por fim, as informações calculadas pelo módulo são persistidas na base de dados da infraestrutura para que possam ser reutilizadas, posteriormente, por outras aplicações.

O Módulo de Expansão das Conexões Sociais foi implementado através de uma arquite- tura Cliente/Servidor ou Produtor/Consumidor, sendo executado em um conjunto de compu- tadores organizados em cluster. A comunicação entre o servidor e o(s) cliente(s) é realizada através de Java RMI (Remote Method Invocation).

A modelagem do módulo está disponível na Seção A.1.3. No Capítulo 6 é realizada uma avaliação de escalabilidade utilizando simulação sobre a implementação realizada do Módulo de Expansão das Conexões Sociais.

Documentos relacionados