ciclos de gráfico de localização - explicação simples

9

alguns poderiam me ajudar a entender como encontrar ciclos em gráficos em termos laymans?

Li outras perguntas, como Esta e também algumas das páginas da Wikipedia, mas elas parecem descer rapidamente para o jargão matemático.

Eu tenho um modelo de gráfico em java, nós de modelagem e arestas 'dentro' e 'fora' - e o modelo conhece nós apenas conectados em uma direção, isso permite que eu encontre os nós das folhas como ponto de partida, meu plano era para voltar ao gráfico de cada um desses nós de folha, para cada "caminhada", mantendo uma lista de todos os outros nós que encontrei na minha rota. Se eu vir algo na lista a qualquer momento, saberei que encontrei um ciclo no gráfico. No entanto, isso parece um pouco simplista.

Tenho certeza de que este é um problema resolvido, seria bom se pudesse ser explicado em termos simples.

-ás

phatmanace
fonte

Respostas:

6

A maneira mais simples em que posso pensar para explicar os ciclos dos gráficos de detecção em termos leigos é algo como isto:

  • Primeiro, suponho que você saiba o básico sobre o que é um gráfico e o que são nós e arestas. Este exemplo supõe que você tenha um gráfico no qual todas as arestas são unidirecionais.
  • Crie seu gráfico e selecione um nó como ponto de partida.
  • Crie um objeto de contêiner de algum tipo (uma lista ou hash funcionaria melhor). Chame de "Visitado".
  • Crie um segundo objeto de contêiner (uma fila seria ideal aqui) e chame-o de "Abrir".
  • Adicione o nó inicial à lista Abrir.
  • Repita enquanto a lista Abrir não estiver vazia:
    • Remova o primeiro item do Open e chame-o Current
    • Se Atual existir em Visitado, você terá um ciclo.
    • Caso contrário, adicione Atual a Visitado e adicione todos os nós que o Current pode alcançar de suas bordas de saída para Abrir.
  • Se o Open acabar vazio e nenhum ciclo tiver sido detectado, você não terá nenhum ciclo. (Pelo menos não no conjunto acessível originário do ponto de partida, que não é necessariamente a totalidade do seu gráfico, se você possui ilhas no gráfico.)
Mason Wheeler
fonte
0

Basicamente, você faz uma primeira pesquisa abrangente no gráfico e monitora quais nós você visitou usando um mapa de hash.

A qualquer momento, se você encontrar um nó que já foi visitado (presente no mapa de hash), saberá que há um ciclo no gráfico.

agent13
fonte