Rekonstruktion von Graphen aus der Gradverteilung

12

Wie schnell können wir bei einer gegebenen Gradverteilung ein Diagramm erstellen, das der gegebenen Gradverteilung folgt? Eine Link- oder Algorithmus-Skizze wäre gut. Der Algorithmus sollte ein "Nein" melden, wenn kein Diagramm erstellt werden kann, und ein beliebiges Beispiel, wenn mehrere Diagramme erstellt werden können.

singhsumit
quelle
Herzlich willkommen! Wie ist die "Gradverteilung" angegeben? Als stochastische Verteilung, als Gradliste, ...?
Raphael
1
Siehe Übung 2.6 hier . Ein Algorithmus zum Erzeugen eines Graphen aus einer gegebenen Gradfolge ist gegeben.
utdiscant
2
Raffaels Kommentar zu klären, wenn ich lese Gradverteilung , denke ich an einer Wahrscheinlichkeitsverteilung auf Grad. Wie nicht anders erwähnt, ist die Gradfolge wahrscheinlich genau das, was Sie wollen. Wenn Sie den probabilistischen Sinn meinen, suchen Sie wahrscheinlich nach einem zufälligen Konstruktionsalgorithmus, der versucht, die Verteilung zu "approximieren". Es macht für mich keinen großen Sinn, in dieser Einstellung ein "Nein" zu melden, weil ich denke, dass die meisten Grafiken eine Art Ausreißer sein werden?
Lucas Cook
Und wenn Sie tatsächlich ein Diagramm mit einer bestimmten Gradverteilung erstellen möchten, scheint dieses Papier den Trick zu haben. Es scheint, dass der in meinem vorherigen Kommentar beschriebene Algorithmus tatsächlich der Havel-Hakimi-Algorithmus in der Antwort von Wu Yin ist.
utdiscant

Antworten:

9

Wenn Sie damit meinen, wie man einen so einfachen Graphen konstruiert (keine Selbstschleifen und keine parallelen Kanten), ist Havel-Hakimi-Theorem vielleicht das, wonach Sie suchen. Sie können es selbst googeln und die Wikipedia-Seite Grad (Graphentheorie) ist ebenfalls hilfreich.

Wu Yin
quelle
Vielen Dank. ja Wiki-Seite ist in diesem Fall hilfreich ..
singhsumit
11

Wenn der Grad Verteilung als eine Liste von Grad gegeben ist, dann können Sie folgendes tun, da Knoten mit Grad d 1 , . . . , d n :nd1,...,dn

Erstellen Sie einen vollständigen Graphen auf n -Vertizes. Für jeden Scheitelpunkt v i in K n , spaltete es in d i Kopien. Teilen bedeutet hier, dass eine Anzahl von Kopien mit Kanten zu jedem Scheitelpunkt erstellt wird, zu dem v i eine Kante hat, aber keine Kanten zu anderen Kopien von v i . Wenn d i = 0KnnviKndivividi=0 dann entfernen Sie einfach den Scheitel. Nennen Sie in der neuen Grafik diese Eckpunkte für 1 j d i .vij1jdi

Sobald Sie fertig sind, haben Sie einen sehr dichten Graphen für Ecken; nennen dieses Graphen H . Wählen Sie Ihren Lieblingsalgorithmus für maximale Übereinstimmung (da der Graph so dicht ist, sollten Sie wahrscheinlich einen der schnellen Algorithmen auf der Basis der Matrixmultiplikation verwenden) und führen Sie ihn auf H aus . Dies gibt ein passendes M zurück . Wenn die Übereinstimmung nicht perfekt ist (dh nicht alle Scheitelpunkte abdeckt), war Ihre Gradverteilung unmöglich. so kehre nicht zurück .N=d1+...+dnHHM

Wenn Sie eine perfekte Abstimmung haben , entfernen dann alle Kanten nicht in M aus H , und dann für jedes 1 i n fusionieren die d i vielen Eckpunkten v i 1 , . . . , v i d i in einen Eckpunkt u i . Beim Zusammenführen zweier Scheitelpunkte werden diese zu einem zusammengefasst, sodass der resultierende Scheitelpunkt Kanten zu jedem Scheitelpunkt aufweist, zu dem mindestens einer der ursprünglichen Scheitelpunkte eine Kante hatte. Nenne den resultierenden Graphen G ; es hat die gewünschte gradverteilung.MMH1indivi1,...,vidiuiG

Die resultierende Laufzeit ist mit ωO(Nω)ω die Konstante für die schnellste Matrix-Multiplikationsalgorithmus (der zum Zeitpunkt des Schreibens ist etwa ). In Bezug auf die Anzahl der Scheitelpunkte im resultierenden Graphen haben wir im schlimmsten Fall, wenn die Gradverteilung dicht ist, O ( n 2 & ohgr; ) .2.373O(n2ω)

Artem Kaznatcheev
quelle
Aus Ihrer (ziemlich klaren) Erklärung ist überhaupt nicht klar, warum die Matrixmultiplikation in die Gleichung eingeht.
Raphael
2
O(|V||E|)O(N2.5)H