Existe um algoritmo de força não bruta para eulerização de gráficos?


7

Dado um gráfico não direcionado, não ponderado, conectado e com arestas potencialmente paralelas G, um circuito de Euler pode ser construído se todo vértice G tem um grau par.

Em gráficos com dois ou mais vértices de grau ímpar (pode haver apenas múltiplos de dois), é necessário "Eulerizar" o gráfico, conectando os vértices ímpares com arestas adicionais a outros vértices, se necessário.

O caso ideal para a eulerização é a construção de apenas n/2 bordas, onde n é o número de vértices de graus ímpares, mas isso só pode ser o caso se cada vértice ímpar tiver um parceiro adjacente, permitindo assim conectar os dois vértices com uma aresta e torná-los pares.

Dito isto, a maioria dos gráficos exigirá mais do que n/2arestas. Como seres humanos, tendemos a Eulerizar gráficos sempre escolhendo cada par de vértices ímpares que são adjacentes um ao outro e, em seguida, usando tentativa e erro para o resto. No entanto, isso nem sempre funciona.

Por exemplo, no gráfico a seguir, escolhendo adicionar uma aresta entre o par de vértices ímpares adjacentes, 12 e usando 5 arestas para conectar 34 resulta em uma eulerização que custa 6arestas. No entanto, optando por conectar14 e 23 produz uma eulerização que custa 5 arestas, mesmo que não tenha usado os vértices ímpares adjacentes a seu favor.

Gráfico gerado pelo MMA

Sei com certeza que esse problema é solucionável, pelo menos por força bruta, porque o número de pares de vértices ímpares que devem ser conectados a um certo número de arestas é finito; especificamente, existem2n/2Γ(n+12)/π( Mathematica disse isso ) possíveis conjuntos de pares de vértices ímpares para conectar. É possível percorrer cada um deles, vinculando cada vértice ao seu parceiro (encontrar o caminho mais curto entre os dois vértices em um gráfico não direcionado é provavelmente um desafio em si, para o qual a Wikipedia não fornece uma complexidade de tempo ).

No final, todo o negócio provavelmente é executado em tempos polinomiais, tempos exponenciais, tempo fatorial, o que é bastante desagradável. Eu fiz algumas pesquisas básicas sobre se existem algoritmos que Eulerize caminhos, mas que parecem não encontrar nenhum.

Código do Mathematica para gráficos:

GraphPlot[
  {1 -> 2, 2 -> 5, 5 -> 3, 3 -> 6, 6 -> 3, 6 -> 7, 7 -> 6, 2 -> 7, 7 -> 8, 8 -> 9, 9 -> 10, 10 -> 4, 4 -> 11, 11 -> 4, 11 -> 12, 12 -> 1, 1 -> 12}, 
  VertexRenderingFunction -> 
    (If[#2 < 5, 
        Text[Style[#2, Large], #1, Background -> Yellow], Null] &)]

Acho que se houver 2k vértices ímpares, o número de pares possíveis seria (2k)!(k!)22!.
Par Par

@Paresh se deixarmos existir n vértices ímpares, existem n1 escolhas para o primeiro par, então n3 próximo etc. k=1n/22k1=o que o MMA disse.
VF1 24/01

Hmm ... parece bom. Meu erro.
Paresh

Respostas:


5

Considere o problema do carteiro chinês em gráficos não direcionados: Dado um gráfico não direcionadoG, encontre o menor circuito do gráfico que percorre todas as margens pelo menos uma vez. Agora seGé euleriano, o circuito de Euler é o mais curto desse tipo. Caso contrário, algumas arestas serão percorridas mais de uma vez. Em outras palavras, algumas arestas serão duplicadas e o circuito será euleriano no gráfico com essas arestas extras.

Agora, para obter o menor circuito, a duplicação de arestas deve ser minimizada. É o mesmo que seu problema. Você precisa encontrar um novo gráficoH que tem todas as arestas de Ge algumas arestas paralelas extras - o mínimo possível de arestas extras - para que Hé euleriano. Cada aresta extraH corresponde ao fato de que sua borda paralela correspondente G é visitado novamente em um curto circuito completo de G. Em outras palavras, a "eulerização" ótima (mínima) é equivalente ao problema do carteiro chinês. Para uma explicação melhor expressa disso, consulte a Seção 4 (Problema do carteiro chinês) e a Definição 11 (Eulerização, Eulerização mínima) dessas notas. Felizmente, isso é solucionável em tempo polinomial para gráficos não direcionados.

Para o problema do carteiro chinês , a Wikipedia tem uma solução. Descrevo outro algoritmo do The Algorithm Design Manual de Steven Skiena [1]:

  1. Encontre os caminhos mais curtos entre cada par de vértices de grau ímpar em G: O(n3).
  2. Localizando o melhor conjunto de caminhos mais curtos para adicionar G reduz a identificação da correspondência perfeita de peso mínimo em um gráfico especial G=(V,E). Os vérticesV do G correspondem aos vértices de grau ímpar de G, com o peso da borda (Eu,j)E definido como o comprimento do caminho mais curto entre Eu para j no G. Observe que uma correspondência é um conjunto de arestas não adjacentes aos pares. Assim, cada aresta na correspondência conecta dois vértices e nenhum vértice faz parte de duas correspondências (um vértice correspondido é correspondido exatamente com outro vértice). Uma correspondência perfeita é uma correspondência em que cada vértice foi correspondido. Agora, para cada aresta correspondente obtida, você pode considerar os dois vértices finais emparelhados. A restrição de "peso mínimo" ao obter a correspondência garante que o peso total de cada aresta na correspondência seja o menor possível. Como o peso de cada aresta é a distância entre seus pontos finaisG, que por sua vez é o número de arestas que precisam ser duplicadas quando os pontos finais são emparelhados - essa condição garante que, globalmente, o número total de duplicação de arestas seja minimizado. A obtenção dessa correspondência é descrita em [2] e baseia-se no algoritmo Blossom . Uma implementação eficiente é descrita por Kolmogorov [3] ( cópia pré-impressa ) com uma implementação aqui . A implementação é uma melhoria em relação às idéias e análises apresentadas por Cook e Rohe em [4]. Isto pode ser feitoO(n3).
  3. Uma vez obtida a correspondência, cada vértice ímpar é emparelhado com outro vértice ímpar. Este é o emparelhamento que você deseja.

Assim, você pode obter a "Eulerização" ideal no polinômio no tempo (cúbico) no número de vértices ímpares. Isto é baseado em um artigo de Edmonds e Johnson [2] que resolve o problema do carteiro chinês.

Referências:

  1. Steven S. Skiena. O Manual de Design de Algoritmos. ISBN: 978-1-84800-069-8 e-ISBN: 978-1-84800-070-4 e DOI: 10.1007 / 978-1-84800-070-4
  2. J. Edmonds e E. Johnson. Correspondência, passeios de Euler e o carteiro chinês. Mathematics Programming, 5: 88–124, 1973.
  3. Vladimir Kolmogorov. Blossom V: Uma nova implementação de um algoritmo de correspondência perfeita de custo mínimo. In Computational Programming Computation (MPC), julho de 2009, 1 (1): 43-67.
  4. W. Cook e A. Rohe. Computando combinações perfeitas de peso mínimo. INFORMS Journal on Computing, 11 (2): 138-148, fevereiro de 1999.

Para o seu O(n3)algoritmo de caminho mais curto na etapa (1), você está se referindo a Floyd-Warshall?
VF1 24/01

11
@ VF1 Sim. Embora algo como um BFS de cada nó também funcione, já que o gráfico não é ponderado.
Par Paresh

Obrigado pela resposta. Tudo faz sentido no algoritmo descrito, exceto o que você faz depois de obter o gráfico completo não direcionado ponderadoG do G. Como você escolhe cada par?
VF1 25/01

@ VF1 Você encontra uma correspondência perfeita de peso mínimo no G. O que isto significa é que uma correspondência é obtida, de modo que todos os vértices são 'correspondidos' com algum outro vértice (correspondência perfeita). Esse é o emparelhamento - todos os vértices são correspondidos exatamente a outro vértice através da aresta correspondente. O que "peso mínimo" implica é que o peso total das arestas das combinações é minimizado. Isso basicamente significa que a soma das distâncias entre cada par de vértices correspondentes é minimizada. Vou atualizar minha resposta com mais detalhes.
Paresh

Obrigado. Eu entendi que a combinação perfeita de peso mínimo deGera necessário, mas eu queria descobrir exatamente como isso é feito.
VF1 25/01
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.