Enumere todos os gráficos não isomórficos de um determinado tamanho


30

Gostaria de enumerar todos os gráficos não direcionados de tamanho , mas preciso apenas de uma instância de cada classe de isomorfismo . Em outras palavras, quero enumerar todos os gráficos não isomórficos (não direcionados) em vértices. Como posso fazer isso?nn

Mais precisamente, eu quero um algoritmo que gere uma sequência de gráficos não direcionados G1,G2,,Gk , com a seguinte propriedade: para todo gráfico não direcionado G em n vértices, existe um índice i tal que G seja isomórfico para Gi . Eu gostaria que o algoritmo fosse o mais eficiente possível; em outras palavras, a métrica com a qual me preocupo é o tempo de execução para gerar e iterar nesta lista de gráficos. Um objetivo secundário é que seria bom se o algoritmo não fosse muito complexo para implementar.

Observe que eu preciso ter pelo menos um gráfico de cada classe de isomorfismo, mas tudo bem se o algoritmo produzir mais de uma instância. Em particular, não há problema se a sequência de saída incluir dois gráficos isomórficos, se isso facilitar a localização de um algoritmo ou permitir algoritmos mais eficientes, desde que abranja todos os gráficos possíveis.

Minha aplicação é a seguinte: Eu tenho um programa que quero testar em todos os gráficos de tamanho n . Sei que se dois gráficos são isomórficos, meu programa se comportará da mesma maneira em ambos (será correto em ambos ou incorreto em ambos), portanto, basta enumerar pelo menos um representante de cada classe de isomorfismo e testar o programa sobre essas entradas. Na minha aplicação, n é bastante pequeno.

Alguns algoritmos candidatos que considerei:

  • Eu poderia enumerar todas as matrizes de adjacência possíveis, ou seja, todas as matrizes simétricas n×n 0-ou-1 que possuem todos os 0 nas diagonais. No entanto, isso requer enumerar 2n(n1)/2 matrizes. Muitas dessas matrizes representam gráficos isomórficos, então isso parece estar desperdiçando muito esforço.

  • Eu poderia enumerar todas as matrizes de adjacência possíveis e, para cada uma delas, testar se é isomórfica para qualquer um dos gráficos que eu produzi anteriormente; se não for isomórfico para qualquer saída anterior, faça a saída. Isso reduziria muito a lista de saída, mas ainda requer pelo menos 2n(n1)/2 etapas de cálculo (mesmo se assumirmos que a verificação do isomorfismo do gráfico é super rápida), por isso não é muito melhor minha métrica.

  • É possível enumerar um subconjunto de matrizes de adjacência. Em particular, se é um gráfico nos vértices , sem perda de generalidade, posso assumir que os vértices estão organizados de modo que . Em outras palavras, todo gráfico é isomórfico para um onde os vértices são organizados em ordem de grau não decrescente. Portanto, basta enumerar apenas as matrizes de adjacência que possuem essa propriedade. Não sei exatamente quantas matrizes de adjacência existem, mas são muito menos que , e elas podem ser enumeradas com muito menos quen V = { v 1 , , v n } deg v 1deg v 2deg v n 2 n ( n - 1 ) / 2 2 n ( n - 1 ) / 2GnV={v1,,vn}degv1degv2degvn2n(n1)/22n(n1)/2etapas de computação. No entanto, isso ainda deixa muita redundância: muitas classes de isomorfismo ainda serão abordadas muitas vezes, então duvido que isso seja ótimo.

Podemos fazer melhor? Se bem entendi, existem aproximadamenteclasses de equivalência de gráficos não isomórficos. Podemos encontrar um algoritmo cujo tempo de execução seja melhor que os algoritmos acima? Quão perto podemos chegar alimite inferior? Preocupo-me principalmente com a rastreabilidade de pequeno (digamos, ou ou mais; pequeno o suficiente para que seja possível executar tal algoritmo até a conclusão), e não tanto com os assintóticos para grande .2n(n1)/2/n!2n(n1)/2/n!nn=5n=8n

Relacionado: Construindo matrizes binárias desigual (embora, infelizmente, não pareça ter recebido uma resposta válida).


11
Afaik, mesmo o número de gráficos de tamanho até o isomorfismo é desconhecido, então acho improvável que exista um algoritmo (sem força bruta). Em relação aos algoritmos candidatos, lembre-se de que não conhecemos um algoritmo de tempo polinomial para verificar o isomorfismo do gráfico (afaik); portanto, qualquer algoritmo que deve ser executado em deve evitar ter que verifique se há isomorfismo (geralmente / mudo). (Além disso, .)nO(|output|)|output|=Ω(n|classes|)
Raphael

@Raphael, (1) Eu sei que não sabemos o número exato de gráficos de tamanho até o isomorfismo, mas esse problema não exige necessariamente que se saiba disso (por exemplo, devido ao fato de eu estar bem com repetições). Não sei por que isso implicaria que é improvável que exista um algoritmo melhor do que o que eu dei. (2) Sim, eu sei que não há algoritmo de tempo polinomial conhecido para isomorfismo de gráfico, mas falaremos sobre valores de como aqui, portanto os algoritmos existentes provavelmente serão rápidos - e, de qualquer forma, apenas mencionei esse algoritmo candidato a rejeitá-lo, então é discutível de qualquer maneira. nnn=6
DW

Para no máximo 6, acredito que, depois de ter escolhido o número de vértices e o número de arestas, e ordenado os rótulos dos vértices de forma não decrescente por grau, como você sugere, haverá muito poucas classes possíveis de isomorfismo. Nesse ponto, pode ser possível classificar os casos restantes por um teste de isomorfismo de força bruta usando, por exemplo, NAUTY ou BLISS. n
Simon

Respostas:


19

Provavelmente, a maneira mais fácil de enumerar todos os gráficos não isomórficos para pequenas contagens de vértices é baixá-los da coleção de Brendan McKay . O algoritmo de enumeração é descrito no artigo de McKay [1] e funciona estendendo não-isomorfos do tamanho n-1 de todas as maneiras possíveis e verificando se o novo vértice era canônico. É implementado como gengno verificador de isomorfismo gráfico de McKay nauty.

[1]: BD McKay, Aplicações de uma técnica para enumeração rotulada , Congressus Numerantium, 40 (1983) 207-221.


Eu tenho um problema. Estou pegando um gráfico de tamanho n-1e estendendo-o por um vértice de todas as maneiras possíveis, como você disse. Então eu verifico se o vértice possui etiqueta canônica, digamos 1(vértice canônico ?!). No entanto, e se o gráfico for apenas isomórfico para a forma canônica e o vértice tiver um rótulo diferente? Eu tentei verificar os automorfismos para ver se o vértice com rótulo 1está na mesma órbita, mas então acabo com o gráfico duas vezes na minha lista. O jornal realmente não me ajuda. Além disso, o código fonte do geng é ilegível devido a todas essas otimizações binárias e quase nenhum comentário.
Alex

11
@Alex Você definitivamente quer a versão da verificação que determina se o novo vértice está na mesma órbita de 1. Você poderia dar um exemplo em que isso produz dois gráficos isomórficos? Talvez isso fosse melhor como uma nova pergunta.
David Eisenstat

Ok, muito obrigado! Eu acho que nesse caso "estendendo-se de todas as maneiras possíveis" precisa de alguma forma considerar automorfismos do gráfico com n-1vértices? por exemplo, n = 3 e meu gráfico anterior era P2. Os dois casos em que uno o terceiro vértice a um dos vértices anteriores resultarão, é claro, no mesmo gráfico P3. Você poderia explicar rapidamente como "estender de todas as maneiras possíveis" ou devo fazer isso como outra pergunta? (Além disso, às vezes eu estou confuso sobre o que acontece, como meu programa precisa encontrar não-isomorfismos de um tipo especial de gráfico, o que torna as coisas um pouco mais complicado)
Alex

@ Alex Sim, parece que a extensão em si precisa ser canônica. Provavelmente vale uma nova pergunta, já que não me lembro de como isso funciona no topo da minha cabeça.
David Eisenstat

11
Nauty home page
Guy Coder

4

Proponho uma melhoria em sua terceira ideia: preencha a matriz de adjacência linha por linha, mantendo o controle de vértices equivalentes em relação ao seu grau e adjacência aos vértices preenchidos anteriormente. Portanto, inicialmente as classes de equivalência consistirão em todos os nós com o mesmo grau.
Quando um vértice recém-preenchido é adjacente a apenas alguns dos nós equivalentes, qualquer opção leva a representantes das mesmas classes de isomorfismo. Portanto, consideramos apenas a atribuição, onde o vértice atualmente preenchido é adjacente aos vértices equivalentes com o número mais alto (e dividimos a classe de equivalência em duas para o processo restante).

n<6
(1,2)(3,4)n=6

Uma implementação ingênua desse algoritmo terá becos sem saída, onde acontece que a matriz de adjacência não pode ser preenchida de acordo com o conjunto de graus e atribuições anteriores. Pode valer a pena algum esforço para detectar / filtrar essas informações mais cedo. Algumas ideias:

  • Se a soma dos graus for ímpar, eles nunca formarão um gráfico
  • Preencha as entradas dos vértices que precisam ser conectados a todos / nenhum dos vértices restantes imediatamente.

3

Esses documentos podem ser interessantes.

"Sobre a representação sucinta de gráficos", Gyorgy Turan, Matemática Aplicada Discreta, Volume 8, Edição 3, Julho de 1984, pp. 289-294 http://www.sciencedirect.com/science/article/pii/0166218X84901264

"Representação sucinta de gráficos gerais não identificados", Moni Naor, Matemática Aplicada Discreta, Volume 28, Edição 3, setembro de 1990, pp. 303-307 http://www.sciencedirect.com/science/article/pii/0166218X9090011Z

Eles apresentam funções de codificação e decodificação para codificar um gráfico marcado com vértice, de modo que dois desses gráficos sejam mapeados para a mesma palavra de código se e somente se um resultar da permeação dos rótulos de vértice do outro.

Além disso, está provado que as funções de codificação e decodificação são eficientes.

O primeiro artigo trata de gráficos planares. No segundo artigo, a restrição de planaridade é removida.

EDIT: Este documento também pode ser relevante:

Isomorfismo gráfico em tempo quase polinomial, Laszlo Babai, Universidade de Chicago, pré-impressão em arXiv, 9 de dezembro de 2015 http://arxiv.org/pdf/1512.03547v1.pdf

O anúncio de seu resultado por Babai foi notícia: https://www.sciencenews.org/article/new-algorithm-cracks-graph-problem

Mas talvez eu esteja enganado em confundir a questão dos POs com esses três documentos? O PO deseja enumerar gráficos não isomórficos, mas ainda pode ser útil ter métodos eficientes para determinar quando dois gráficos SÃO isomórficos?


Aprecio o pensamento, mas receio não estar perguntando como determinar se dois gráficos são isomórficos. Eu realmente estou perguntando como enumerar gráficos não isomórficos. Descrever algoritmos para testar se dois gráficos são isomórficos não me ajuda muito, temo - obrigado por tentar!
DW

Turan e Naor (nos artigos mencionados acima) constroem funções do tipo que você descreve, ou seja, que mapeiam um gráfico em um representante canônico da classe de equivalência à qual esse gráfico pertence. Se você pudesse enumerar esses representantes canônicos, parece que isso resolveria seu problema.
Simon


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.