Minimaler Spanning Tree mit doppelten Gewichtungsparametern


12

Betrachte einen Graphen . Jede Kante hat zwei Gewichte und . Suchen Sie einen Spanning Tree, der das Produkt . Der Algorithmus sollte in Bezug auf in Polynomzeit ablaufen .e A e B e ( e T A e ) ( e T B e ) | V | , | E |G(V,E)eAeBe(eTAe)(eTBe)|V|,|E|

Ich finde es schwierig, einen der traditionellen Algorithmen auf Spanning Trees (Kruskal, Prim, Edge-Deletion) anzupassen. Wie man es löst? Irgendwelche Hinweise?


Vielleicht versuchen , ein neues Diagramm zu konstruieren, in dem das Gewicht einer Kante ist . max ( A e , B e )emax(Ae,Be)
utdiscant

3
Ist das ein Hausaufgabenproblem / Übung? Wenn ja, ist es aus einem Lehrbuch? Der Grund, den ich frage, ist, dass der Kontext dazu beitragen kann, das Problem rückgängig zu machen. Es ist nicht sofort klar, dass ein gieriger Algorithmus hier angebracht ist, aber wenn er aus dem Kapitel über gierige Algorithmen stammt ...
Joe

1
@utdiscant, das wird nicht funktionieren. Negative Kanten können nützlich sein.
Nicholas Mancuso

Selbst für positive Flanken ist dies nicht sinnvoll, z. B. ist Paar (10,10) in den meisten Fällen nicht besser als Paar (11,1).

Antworten:


1

Ich gehe davon aus, dass Sie keine negativ gewichteten Kanten erhalten, da dies bei negativen Gewichten möglicherweise nicht funktioniert.

Algorithmus

Beschriften Sie sie für jede Ihrer Kanten mit bisn1n

Es sei Gewicht A der Kantennummer iaii

Es sei Gewicht B der Kantennummer ibii

Stellen Sie diese Tabelle auf

   |a_1 a_2 a_3 a_4 .. a_n
---+-------------------------
b_1|.........................
b_2|.........................
 . |.........................
 . |.........................
b_n|...................a_n * b_n

Dabei ist jedes Tabellenelement das Produkt aus Zeile und Spalte.

Summieren Sie für jede Kante die entsprechende Tabellenzeile und -spalte (und denken Sie daran, das Element in der Schnittmenge zu entfernen, da es zweimal summiert wurde).

Suchen Sie die Kante mit der größten Summe, und löschen Sie diese Kante, wenn das Diagramm dadurch nicht getrennt wird. Markieren Sie die Kante als wesentlich, ansonsten. Wenn eine Kante gelöscht wurde, füllen Sie ihre Zeilen und Spalten mit 0.

Richtigkeit

Das Ergebnis ist offensichtlich ein Baum.

Das Ergebnis ist offensichtlich überspannend, da keine Eckpunkte getrennt werden.

Das Ergebnis ist minimal? Wenn es eine andere Kante gibt, deren Löschung am Ende des Algorithmus einen kleineren Spannbaum erzeugt, dann wäre diese Kante zuerst gelöscht und auf Null gesetzt worden. (Wenn mir jemand helfen könnte, dieses Beispiel etwas strenger und / oder gegnerischer zu gestalten, dann wäre das großartig.)

Laufzeit

Offensichtlich Polynom in.|V|

bearbeiten

(2,11),(11,2),(4,6) ist kein Gegenbeispiel.

a1=2,a2=11,a3=4

b1=11,b2=2,b3=6

Dann

   | 2     11     4
---+--------------------
11 | 22    121    44
 2 | 4     22     8
 6 | 12    66     24

(4,6)=44+8+24+66+12=154(2,11)=22+4+12+121+44=203(11,2)=121+22+66+4+8=221

(11,2) wird entfernt.

Beenden Sie mit(2,11),(4,6)=617=102

Andere Spannbäume sind

(11,2),(4,6)=1512=180

(2,11),(11,2)=1313=169


1
Es scheint mir, dass dies ein ziemlich gieriger Ansatz ist. Ihr "Beweis" für Minimalismus überzeugt mich nicht.
Nejc

1
@ SaeedAmiri Wie ist das ein Gegenbeispiel? Ich habe die Arbeit im bearbeiteten Bereich gepostet, der Algorithmus liefert das korrekte Ergebnis.
Herp Derpington

1
Sie haben herausgefunden, wie viel jeder zu e E a i beiträgt . e E b i , und Sie wählen die aus, die den größten Einfluss haben. Das ist gut, aber es ist nicht das, was erforderlich ist. Das ist eine knifflige Frage. Wenn Sie Ihre Antwort verbessern möchten, müssen Sie einen Beweis vorlegen. Ansonsten nützt es nichts. (ai,bi)eEai.eEbi
AJed

Es ist jedoch sehr unfair, für Ihre Bemühungen eine Gegenstimme zu erhalten.
AJed

@AJed Der Proof ist genauso wie beim Prim / Kush / Reverse Delete. Jetzt müssen wir nur noch beweisen, dass die Eigenschaft cut noch gültig ist.
Herp Derpington

1

Dies ist die Lösung von http://www.cnblogs.com/autsky-jadek/p/3959446.html .

Wir können jeden Spannbaum als einen Punkt in der Ansicht - Ebene, wobei x die Summe des Gewicht Σ e T A e , y ist die Summe des Gewicht Σ e T B e . Das Ziel ist es, x y zu minimieren .xyxeTAeeTBexy

  1. Finden der minimalen Spanning - Tree nach Gewicht und das Gewicht B . So haben wir zwei Punkte in der xy - Ebene A , B . In allen Spannbaumpunkten in der Ebene hat A das Minimum x , B das Minimum y .ABA,BAxBy

  2. Nun wollen wir einen Punkt im Dreieck O A B finden , der den maximalen Abstand zur Linie A B hat , so dass wir den x y -Wert für C für alle Punkte im Dreieck A B C minimieren können .COABABxyCABC

2SABC=|AB×AC|=(BxAx,ByAy)×(CxAx,CyAy)=(BxAx)Cy+(AyBy)CxAy(BxAx)+Ax(ByAy)

  1. Ay(BxAx)+Ax(ByAy(BxAx)Cy+(AyBy)CxG=(V,E)w(e)=Be(BxAx)+Cx(AyBy)GC

  2. OBC,OACBC,ACO

  3. xy

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.