Ausgewogene Gewichtung der Kanten im Kaktusgraphen


7

Bei einem Kaktus wollen wir seine Kanten so gewichten, dass

  1. Für jeden Scheitelpunkt beträgt die Summe der Gewichte der auf den Scheitelpunkt einfallenden Kanten nicht mehr als 1.
  2. Die Summe aller Kantengewichte wird maximiert.

Die Antwort ist eindeutig nicht mehr als n2 zum n Eckpunkte (dich=2D. wo dich ist die Summe für einen Scheitelpunkt und D.ist die Summe über jede Kante). Diese Grenze ist für Zyklusgraphen erreichbar, indem jede Kante 1/2 gewichtet wird.

Ich habe einen gierigen Algorithmus für Bäume gefunden. Weisen Sie den auf Blätter einfallenden Kanten einfach 1 zu und entfernen Sie sie und ihre Nachbarn in wiederholten Durchgängen aus dem Diagramm. Dadurch wird der Kaktus auf eine Reihe miteinander verbundener Zyklen reduziert. Zu diesem Zeitpunkt nahm ich an, dass die verbleibenden Zyklen nicht miteinander verbunden und jede Kante 1/2 gewichtet waren. Dies hat 9/10 Testfälle, ist aber natürlich unvollständig.

Wie können wir dieses Problem für Kakteen im Allgemeinen lösen? Ich würde Hinweise vollständigen Lösungen vorziehen, aber beides ist in Ordnung.

Diese Frage betrifft ein Problem aus einem InterviewStreet CompanySprint . Ich bin bereits angetreten, möchte aber einige Gedanken zu einem Problem haben (Lösungen werden nicht veröffentlicht, und ich habe meinen Kopf wegen dieses Problems gegen die Wand geschlagen).


Es scheint, dass dies mit einem maximalen Durchfluss bei Kapazitätsbeschränkungen von 1 für Scheitelpunkte gelöst werden kann. Sie (ich) müssen nur herausfinden, wie Sie eine Quelle und eine Senke richtig hinzufügen.
Nicholas Mancuso

Ich dachte darüber nach, konnte aber kein funktionierendes Netzwerk finden. Wie sxu bemerkt, beinhaltet eine gute Lösung mit ziemlicher Sicherheit die Struktur von Kaktusgraphen. Es fällt mir schwer zu sehen, wie ich damit das Netzwerk aufbauen kann. Und die Tatsache, dass ich eine Lösung für Bäume gefunden habe (zumindest glaube ich das; ich habe nur einen Beweis für die Gier entworfen, die ich hier nicht aufgenommen habe), führte mich von der LP-Route weg.
Dysonsfrog

Hoppla. Gehirnfurz. Ich verstehe jetzt, was du meinst. Das klingt vielversprechend.
Dysonsfrog

Meine nächste Vermutung wäre, zuzuweisen 1/.dich wo vichist ein Artikulationsscheitelpunkt (nimmt an mindestens 2 getrennten Zyklen teil). Entfernenvichund seine Ränder, dann spülen und wiederholen. Dies sollte schließlich zu völlig unzusammenhängenden Komponenten führen.
Nicholas Mancuso

Ja. Das Schöne ist, dass Sie bei Zyklen ungerader Länge die Gewichte wechseln können1/.dich, 1- -1/.dich, ... und um das Gleiche herumkommen n2gebunden. Das fühlt sich intuitiv gut an, ist aber immer noch keine vollständige Lösung.
Dysonsfrog

Antworten:


5

Diese Frage hat mich also gestört: Warum ein Kaktus, wenn es bereits einen linearen Zeitalgorithmus für eine allgemeinere Klasse gibt?

Das ursprüngliche Problem ist als fraktionelles Matching-Problem bekannt und wurde, was nicht überraschend ist, ebenfalls untersucht. Balinski (dessen Ergebnis mir durch Schrijvers Buch Combinatorial Optimization bekannt gemacht wurde) charakterisierte die Extrempunkte des fraktionierten Matching-Polytops als bestehend aus einem Integer-Matching plus der Hälfte einer Sammlung ungerader Zyklen. Die relativ niedrigen Eingangsgrenzen gegeben, vermute ich , dass die beabsichtigte Lösung des Problems Poser Edmonds das zu ändern war Blüte Algorithmus in einer Weise , dass, denn jetzt werde ich gehen für Sie zu entdecken. Die Struktur der Zyklen in einem Kaktus macht diesen Algorithmus so einfach, dass er für einen Wettbewerb geeignet ist.


Wie sxu hervorhebt, ist dieses Problem für die lineare Programmierung zugänglich. Wenn Sie nur den Zielwert benötigen, hat die Dual-LP den gleichen Zielwert und ist das Problem der gebrochenen Scheitelpunktabdeckung. Das Schöne an der Scheitelpunktabdeckung ist, dass sie ein halbintegrales Optimum hat. In linearer Zeit können Sie die Tiefensuche verwenden, um eine Baumzerlegung des Kaktus der Breite O (1) zu berechnen und die duale LP mit einem dynamischen Programm zu lösen, das variable Werte in {0, 1/2, 1} versucht.

Wenn Sie tatsächlich eine Lösung für das Ursprüngliche benötigen, kann eine komplementäre Schlaffheit hilfreich sein, aber ich kann nicht anders, als zu vermuten, dass die Beschränkung auf Kakteen eine elementarere Lösung ermöglichen soll.


1

Sie können immer die lineare Programmierung verwenden : Erstellen Sie einfach eine Variable für jede Kante und eine Einschränkung für jeden Scheitelpunkt. Es muss jedoch eine bessere Lösung geben, da dies nicht die Tatsache nutzt, dass wir einen Kaktusgraphen haben. Ich schlage auch vor, LP-Algorithmen an einigen Beispielen auszuführen und zu versuchen, festzustellen, ob auf Kaktusgraphen etwas Interessantes passiert, aber nicht auf allgemeinen Graphen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.