Reconstruindo gráficos da distribuição de graus

12

Dada uma distribuição de graus, com que rapidez podemos construir um gráfico que segue a distribuição de graus dada? Um esboço de link ou algoritmo seria bom. O algoritmo deve relatar um "não" caso nenhum gráfico possa ser construído e qualquer exemplo, se vários gráficos puderem ser construídos.

singhsumit
fonte
Bem-vinda! Como é dada a "distribuição de graus"? Como distribuição estocástica, como lista de graus, ...?
Raphael
1
Veja o Exercício 2.6 aqui . É fornecido um algoritmo para criar um gráfico a partir de uma sequência de graus.
Utdiscant 17/05
2
Para esclarecer o comentário de Raphael, quando leio a distribuição de graus , penso em uma distribuição probabilística em graus. Como menciona utdiscant, a sequência de graus é provavelmente o que você deseja. Se você quer dizer o sentido probabilístico, provavelmente está procurando algum algoritmo de construção aleatório que tente "aproximar" a distribuição. Não faz muito sentido para mim "denunciar um não" nessa configuração, porém, porque acho que a maioria dos gráficos será algum tipo de discrepância?
Lucas Cook
E se você realmente deseja gerar um gráfico com uma determinada distribuição de graus, este artigo parece ter o truque. Parece que o algoritmo descrito no meu comentário anterior, na verdade é o algoritmo Havel-Hakimi na resposta de Wu Yin.
Utdiscant

Respostas:

9

Se você quer dizer como construir um gráfico tão simples (sem auto-loops e sem arestas paralelas), talvez o teorema de Havel-Hakimi seja o que você está procurando. Você mesmo pode pesquisar no Google e a página da Wikipedia Degree (teoria dos grafos) também é útil.

Wu Yin
fonte
obrigado. Sim página wiki é útil neste caso ..
singhsumit
11

Se o grau de distribuição é dado como uma lista de grau, então você pode fazer o seguinte, dado nós com graus de d 1 , . . . ,n :d1,...,dn

Crie um gráfico completo em n- vertices. Para cada vértice v i em K n , divida-o em d i cópias. Dividir aqui significa criar um número de cópias com arestas para cada vértice v i com aresta, mas sem arestas para outras cópias de v i . Se d i = 0 , em seguida, simplesmente remover o vértice. No novo gráfico, chame esses vértices de v i j para 1 j d i .KnnviKndivividi=0vij1jdi

Quando terminar, você terá um gráfico muito denso em vértices; chamar este gráfico H . Escolha o seu algoritmo de favorito para o máximo de correspondência (desde o gráfico é tão densa, você provavelmente deve usar um dos algoritmos baseados rápido matriz de multiplicação) e executá-lo em H . Isso retornará uma correspondênciaN=d1+...+dnHH. Se a correspondência não for perfeita (ou seja, se ela não cobrir todos os vértices), sua distribuição de graus será impossível; então retornenão.M

Se você tem uma correspondência perfeita , em seguida, remover todas as bordas não em M de H , e, em seguida, para cada 1 i n mesclar a d i muitos vértices v i 1 , . . . , v i d i em um vértice u iMMH1indivi1,...,vidiui . Mesclar dois vértices significa combiná-los em um, de modo que o vértice resultante tenha arestas em todos os vértices em que pelo menos um dos originais tenha arestas. Chame o gráfico resultante ; tem a distribuição de graus desejada.G

O(Nω)ω2.373O(n2ω)

Artem Kaznatcheev
fonte
De sua explicação (bastante clara), não está absolutamente claro por que a multiplicação de matrizes entra na equação.
Raphael
2
A multiplicação da matriz @Raphael é uma das maneiras de resolver a correspondência máxima e é o método preferido para gráficos densos, já que a melhor versão do algoritmo de correspondência de Edmonds é executada emO(|V||E|) o que daria O(N2.5) para esse problema, já que Hé bem denso. Portanto, se você tiver acesso a uma boa multiplicação rápida de matrizes (ou trabalhando com uma linguagem orientada a matrizes como o Matlab), usaria a abordagem matricial de Mucha e Sankowski para a correspondência.
Artem Kaznatcheev 17/05/12