Ich habe einen ungerichteten Graphen verbunden. Ich suche nach dem Weg, um den balancierten Spannbaum (T) eines Graphen zu konstruieren
Das Spezifische über den ausgeglichenen Spannbaum könnte ich wie folgt definieren:
Kann irgendjemand irgendeinen Algorithmus / Algorithmen zum Aufbau eines solchen "relativ" ausgeglichenen Spannbaums empfehlen?
Vielen Dank im Voraus.
Ich bin mir nicht sicher, ob dein Ausdruck "maximal gleichwertig" ist.
Dieses Problem hat vielleicht keine perfekte Lösung, also liegt es auf der Hand, wie viel besser wir machen können?
Dieses Problem scheint allgemein NP-vollständig zu sein. Einige gierige Ansätze können zu konstanten Annäherungsalgorithmen führen, wenn Sie Glück haben.
Das scheint trivial zu sein. Sei G dein Graph. Es ist verbunden, also gibt es eine Kante zwischen jedem Knotenpaar. Konstruieren Sie mit der Definition einen beliebigen ausgeglichenen Spannbaum G 'mit der gleichen Anzahl von Scheitelpunkten wie G. Ausgehend von r in G' und einem beliebig gewählten Knoten von G, ordnen Sie jeden Eckpunkt in G 'zu a zu Vertex in G. Löschen Sie alle Kanten in G, die in G 'keine entsprechende Kante haben.
Der resultierende Graph - nennen wir ihn U für "updated G" - hat nach Konstruktion die gleiche Anzahl von Scheitelpunkten wie G ', und nach Konstruktion existiert eine Kante in U, wenn die entsprechende Kante in G' existiert. Also ist U = G 'und es folgt, dass U ein balancierter Spannbaum ist.
Sie möchten Ihren Baum als AVL-Baum erstellen.
Sie finden zusätzliche Informationen und Code, der für die Implementierung verwendet wird, beginnend mit Seite 12 dieses PDF-Dokuments .
Dieses PowerPoint-Dokument enthält einige schöne Bilder, die erklären, was vor sich geht, und enthält außerdem ein Java-Implementierung des Datentyps AVL Tree.