Convertendo um dígrafo em um gráfico não direcionado de maneira reversível

10

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: insira a descrição da imagem aqui


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 ...

Heterótico
fonte
11
Eu acho que essa pergunta é muito ampla. Quais são as suas restrições?
precisa saber é o seguinte
Eu realmente não consigo pensar em nenhuma restrição por enquanto. Eu acho que qualquer maneira de codificar as informações de um gráfico direcionado em um não direcionado seria suficiente, desde que seja reversível. Eu acho que o que eu tenho em mente é o tipo mais simples de gráficos não direcionados, então estou procurando uma solução que não use cores para os vértices ou as arestas.
Heterotic
Eu acho que você deve especificar na pergunta o que você quer dizer com "o mesmo gráfico". Você quer dizer que os vértices são rotulados ou que os vértices não são rotulados? Você quer dizer que é o mesmo para ambos, ou que os dois gráficos são isomórficos? Parece que você quer dizer o último. Tem certeza de que isso é um requisito no seu aplicativo? Se você puder reter etiquetas, o problema ficará mais fácil e a resposta de AdrianN funcionará (porque a borda ( 3 , 4 ) não é a mesma que a borda ( 1 , 2 ) ). (V,E)(3,4)(1 1,2)
DW
2
Por favor, incorporar as suas atualizações em questão. A qualquer momento, as postagens do SE devem ser lidas de cima para baixo sem se perguntar sobre o histórico; arquivado separadamente.
Raphael

Respostas:

6

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)v1 1e,,v5eexv1 1ev1 1ev2ev1 1ev3ev3ev4ev4ev5e.v3ey

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 ev5ee=(x,y)v4e é 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 1v4ev3ev3ev1 1ev2ev1 1etem 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 .v2ev1 1exv3ey(x,y)v1 1e,,v5e

David Richerby
fonte
7

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.

dígrafo a <-> b, c -> a, b -> c

(Eu teria postado isso como um comentário na resposta de David, mas não tenho os pontos de reputação necessários.)

William
fonte
11
A representação gráfica é uma grande melhoria em relação à resposta original. Obrigado por publicá-lo como resposta, não como comentário.
OrangeSherbet
11
Sempre me sinto sobrecarregado quando olho para uma explicação ou fórmula formal em um trabalho de matemática. Eu só tenho que superar essa ansiedade e olhar cada frase lentamente - olhando as coisas com as quais não estou familiarizado à medida que avança. Então, rabisco um exemplo como esse para ter certeza de que entendo. No final, eu sempre fico pasmo com a simplicidade de tudo isso, e meio que horrorizado com o esforço necessário para compreendê-lo. Parece que eu sou de um planeta diferente às vezes. Fico feliz que eu possa ajudá-lo a entender mais rápido. Depois de vê-lo, é fácil.
William
2

Para converter um gráfico direcionado em um gráfico não direcionado G, faça o seguinte:DG

  1. Numere os nós de D
  2. Crie dois gráficos não direcionados , G no mesmo vértice definido como DGGD
  3. Para cada aresta , v em D, adicione a aresta a G se u < v , caso contrário, adicione a aresta a G uvDGu<vG
  4. G é a união disjunta de e G GG

Ao fazer a união disjunta, é preciso ter cuidado para torná-la reversível.

Exemplo

adrianN
fonte
Esta é uma boa tentativa e está na linha que eu tinha em mente para obter uma resposta, mas não funciona porque o inverso não é único. Por exemplo, o gráfico O <-> OOO será convertido no gráfico OO OO OO OO, mas esse último também poderia ter vindo do gráfico direcionado O-> O O-> OOO, de modo que o processo não seja reversível.
Heterotic
Eu adicionei uma imagem para torná-la mais clara.
precisa saber é o seguinte
-1

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.

muede
fonte
G=(V,E)(V×{0,1},{(u,0,v,1)(u,v)E})GGGG
-1

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).

Aaron
fonte
xx
Por "vértice direcionado", quero dizer um vértice no gráfico direcionado (em oposição ao gráfico não direcionado equivalente). Você pode distinguir arestas "reais" de arestas de "codificação em graus" porque apenas os vértices "codificação em graus" têm uma única aresta. Essa foi a razão do "1 +" na minha descrição. Vou acreditar na sua "parte complicada". Eu não sei o que é exatamente equivalente a caça-minas, mas posso acreditar que eu talvez única chutou o balde na estrada :-)
Aaron
Além disso, não entendi muito bem sua solução quando a li pela primeira vez, mas vejo como ela funciona agora. Inteligente!
Aaron
xx
(x,y)(x0,x),(x,y),(y,y0)(y,y1)xy(x,y)