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=0vij1≤j≤di
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 iMMH1≤i≤ndivi1,...,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ω)