Processamento de Dados Massivos/Projeto e implementação de aplicações Big Data/Identificação de ciclos em grafos: diferenças entre revisões

[edição não verificada][edição não verificada]
Conteúdo apagado Conteúdo adicionado
Sem resumo de edição
Sem resumo de edição
Linha 3:
=== Detecção de Ciclos por Busca em Profundidade ===
 
Um método eficiênteeficiente para detectar ciclos em grafos direcionados é por meio do algoritmo de busca em profundidade.
 
==== Pseudo-Código ====
'''Entrada''': Um grafo ''G'' e um vértice ''v'' de G
 
1 '''procedimento''' DFS(''G'',''v''):
2 marcar ''v'' como explorada
3 '''para cada''' aresta e em G.arestasAdjacentes(v) '''fazer'''
4 '''se''' aresta ''e'' estiver não-explorada '''então'''
5 ''w'' ← G.vérticeAdjacente(''v'',''e'')
6 '''se''' vértice ''w'' estiver não-explorado '''então'''
7 marcar ''e'' como uma aresta de avanço
8 chamar recursivamente DFS(G,''w'')
9 '''senão'''
10 marcar ''e'' como aresta de retorno
11 todo o caminho de ''w'' até ''v'' representa um ciclo
 
[[Ficheiro:GraphDFS.png|commoldura|centro|Detecção de Ciclos por Busca em Profundidade]]
Linha 9 ⟶ 24:
=== Detecção de Ciclos no Contexto de Dados Massivos ===
 
No contexto de dados massivos, o grafo possivelmente terá bilhões ou até trilhões de vértices. Dessa maneira, a estrutura do grafo pode ser grande o suficiente para saturar facilmente o poder de processamento ou a capacidade de memória de uma única máquina, surgindo a necessidade de paralelizar o algoritmo de detecção de ciclos. Entretanto, principalmente devido à sua característica recursiva, uma desvantagem do algoritmo de busca em profundidade é o fato de ser dificilmente paralelizável, embora o algoritmo seja assintoticamente ótimo.
 
Portanto, é necessário um algoritmo que divida o problema de detecção de ciclos em subproblemas entre nós de computação, de modo que os nós busquem por cíclos de maneira paralela, garantindo que todos os ciclos serão encontrados. Propõe-se então, um algoritmo para detecção de ciclos de grafo por passagem de mensagens entre os vértices, baseado no modelo Pregel de processamento de grafos da Google. Esse modelo apresenta uma abordagem centrada nos vértices em que os vértices do grafo trabalham juntos para detectar ciclos.