Estou procurando um algoritmo para converter um dígrafo (gráfico direcionado) em um gráfico não direcionado de forma reversível, ou seja, o dígrafo deve ser reconstruído se recebermos o gráfico não direcionado. Entendo que isso custará o gráfico não direcionado ter mais vértices, mas não me importo.
Alguém sabe como fazer isso ou pode sugerir alguma referência? Desde já, obrigado.
Atualização: Em relação à resposta de AdrianN abaixo. Pode ser um bom ponto de partida, mas não acho que funcione na sua forma atual. Aqui está uma imagem do porque eu acho que não:
Atualização após o comentário do DW: considero os vértices dos gráficos sem rótulo. Se uma solução envolve rotular os vértices (como o de AdrianN), deve fornecer o mesmo gráfico não-direcionado (isomórfico), não importa como a rotulagem seja feita. Minha definição de "isomórfica" para gráficos com vértices rotulados é que existe uma permutação da rotulagem que relaciona os dois gráficos, mas não tenho certeza da definição exata para gráficos não rotulados ...
fonte
Respostas:
Para cada aresta direcionada , adicione novos vértices v e 1 , … , v e 5 e substitua e pelas arestas x v e 1 , v e 1 v e 2 , v e 1 v e 3 , v e 3 v e 4 , v e 4 v e 5 , v ee=(x,y) ve1 1, … , Ve5 e x ve1 1 ve1 1ve2 ve1 1ve3 ve3ve4 ve4ve5 .ve3y
Para decodificar, toda folha (vértice grau 1) cujo vizinho possui grau 2 deve ser para alguma aresta e = ( x , y ) ; seu vizinho é v e 4 e o outro vizinho de v eve5 e = ( x , y) ve4 é v e 3 . v e 3 tem um vizinho único que possui o grau 3 e é adjacente a uma folha: o vizinho é v e 1 e sua folha é v e 2 (sev e 1ve4 ve3 ve3 ve1 1 ve2 ve1 1 tem dois vizinhos de folha, escolha um arbitrariamente para ser ). O outro vizinho da v e 1 é x e o outro vizinho da v e 3 é y . Restaure a aresta direcionada ( x , y ) e exclua os vértices v e 1 , … , v e 5 .ve2 ve1 1 x ve3 y ( x , y) ve1 1, … , Ve5
fonte
A resposta de David Richerby (que foi aceita) é boa.
Eu segui as instruções dele em um exemplo simples de digrafo e espero que ajude alguém.
(Eu teria postado isso como um comentário na resposta de David, mas não tenho os pontos de reputação necessários.)
fonte
Para converter um gráfico direcionado em um gráfico não direcionado G, faça o seguinte:D G
Ao fazer a união disjunta, é preciso ter cuidado para torná-la reversível.
fonte
E a função de identidade? Ou seja, todo dígrafo pode ser visto como um gráfico bipartido não direcionado com partições de tamanho igual e vice-versa.
fonte
Aqui está uma facada nisso:
Substitua as informações de direção por vértices adicionais no gráfico não direcionado. Em outras palavras, use os vértices adicionais no gráfico não direcionado para "codificar" as informações de direção. Por exemplo, para cada vértice direcionado com pelo menos uma aresta, adicione um número de vértices não direcionados igual a 1 + o número de arestas "de entrada". Vértices com arestas zero permanecem inalterados.
Para executar a direção reversa, crie um vértice direcionado para cada vértice que tenha 0 ou mais de 1 aresta. (Vértices com exatamente uma aresta são os vértices de "codificação da direção"). Cada aresta que conecta outro vértice com várias arestas é uma conexão no gráfico direcionado. Agora é a parte complicada para a qual não posso explicar um algoritmo (mas acho que existe): você deve deduzir a direção das setas, considerando apenas o número de setas recebidas para cada vértice.
Eu acho que a parte complicada é como jogar um caça-minas :-) Descobrir onde as bombas (arestas de entrada) recebem o número de bombas adjacentes para cada quadrado (vértice).
fonte