Maximale Anzahl von Punkten, die zwei Pfade erreichen können


8

Angenommen, wir erhalten eine Liste von Punkten, deren und y- Koordinaten alle nicht negativ sind. Angenommen, es gibt keine doppelten Punkte. Wir können nur von Punkt (x_i, y_i) zu Punkt (x_j, y_j) gehen, wenn x_i \ le x_j und y_i \ le y_j . Die Frage ist: Angesichts dieser n Punkte, wie viele Punkte können wir maximal erreichen, wenn wir nach der obigen Regel zwei Pfade zeichnen dürfen, die Punkte verbinden? Pfade müssen vom Ursprung ausgehen und können wiederholte Punkte enthalten. (0, 0) ist natürlich nicht in den erreichten Punkten enthalten.nxy(xi,yi)(xj,yj)xixjyiyjn(0,0)

Ein Beispiel: gegeben (2,0),(2,1),(1,2),(0,3),(1,3),(2,3),(3,3),(2,4),(1,5),(1,6) lautet die Antwort 8 da wir (0,0)(2,0)(2,1)(2,3)(2,4) und (0,0)(1,2)(1,3)(1,5)(1,6) .

Wenn wir nur einen Pfad zeichnen dürfen, kann ich die Frage leicht durch dynamische Programmierung lösen, die in O(n2) . Ich sortiere zuerst die Punkte, indem ich x_i + y_i verkleinere xi+yi. Sei D[i] die maximale Anzahl von Münzen, die man von den Münzen 1 bis i in der sortierten Liste aufnehmen kann. Dann ist D[1]=1 und D[i]=max1j<i,xjxi,yjyiD[j]+1 . Die Antwort lautet dann nur max1inD[i]+1 .

Aber ich kann keine Wiederholungsrelation für zwei Pfade finden. Wenn jemand eine Vorstellung von einer solchen Wiederholungsbeziehung hat, würde ich mich freuen zu hören, was sie sind.


Ich würde die Punkte lexikographisch sortieren, aber ich denke, es spielt keine Rolle. Sie sollten auf jeden Fall in verankern ; Der beste Weg verwendet möglicherweise nicht die erste Münze. Die Art und Weise, wie Sie das Ergebnis auswählen, legt nahe, dass der beste Pfad den letzten Punkt verwenden muss. Darüber hinaus scheint dieses Problem aufgrund der unangenehmen Struktur für DP ungeeignet zu sein. Es wäre viel sinnvoller, die längsten Pfade in der DAG zu finden, die durch die Punkte impliziert werden. D[0]
Raphael

Nun, für einen Pfad muss der letzte Punkt nicht enthalten sein. Wenn es für einen Punkt keinen Punkt rechts und darüber gibt, dann wäre einfach . Ich denke, ich hätte das klarer machen sollen. D [ i ] 1iD[i]1
Aden Dong

Könnten Sie den Algorithmus nicht einfach zweimal ausführen, sondern im zweiten Durchgang alle im ersten Pfad berührten Punkte entfernen? Oder ist eine einzelne Wiederholungsbeziehung erforderlich?
edA-qa mort-ora-y

Antworten:


4

Das Problem, angepasst und verallgemeinerte: Bei einem gegebenen endlicher Satz , ausgestattet mit einer Teilordnung , Ketten finden Maximizing . Die Frage bezieht sich auf den Fall, in dem und .S C 1 , C 2S | C 1C 2 | S R 2 + ( x , y ) ( z , w ) x z y wC1,C2S|C1C2|SR+2(x,y)(z,w)xzyw

Naiv könnte man versuchen, die beste Kette in , wobei die beste daran gemessen wird, wie viele unterschiedliche Werte die Komponenten der Kette haben. Leider kann eine Komponente die Schritte der anderen zurückverfolgen, z. B. daher hat dieser Begriff des Besten keine optimale Unterstruktur.( ( 0 , 0 ) , ( 0 , 0 ) ) < ( ( 1 , 0 ) , ( 0 , 0 ) ) < ( ( 2 , 0 ) , ( 0 , 0 ) ) < ( ( 2 , 0 )) , ( 1 , 0 ) ) ,S2

((0,0),(0,0))<((1,0),(0,0))<((2,0),(0,0))<((2,0),(1,0)),

Stattdessen suchen wir nach Ketten in der Menge . Indem wir verlangen, dass die Komponenten gleich oder unvergleichlich sind, verhindern wir das Zurückverfolgen, müssen aber jetzt argumentieren, dass eine der besten Ketten der neuen Anforderung entspricht.T:={(x,y)(x,y)S2xyyx}

Lemma 1 (keine Rückverfolgung). Sei eine Kette und definiere und . Für alle , haben wir , wenn und nur wenn .C 1 : = { x ( x , yCTC 2 : = { y ( x , y ) C } z S z C 1C 2 ( z , z ) C.C1:={x(x,y)C}C2:={y(x,y)C}zSzC1C2(z,z)C

Beweis. Die if-Richtung ist trivial. In der einzigen Richtung , wenn, für alle existieren derart , daß . Da eine Kette ist, ist . Nehmen Sie symmetrisch an, dass , was impliziert, dass . Wir wissen von der Definition von , die , also , und . x , y S ( x , z ) , ( zzC1C2x,ySC ( x , z ) ( z , y ) ( z , y ) ( x , z ) ( x , z ) ( z , y ) x(x,z),(z,y)CC(x,z)(z,y)(z,y)(x,z)(x,z)(z,y)T x z z y x = z = y ( z , z ) CxzyTxzzyx=z=y(z,z)C

Lemma 2 (Existenz einer eingeschränkten besten Kette). Für alle Ketten existiert eine Kette so dass und .C T C 1{ x ( x , y ) C } C 1C 2 C 2{ y ( x , y ) C } C 1C 2C1,C2SCTC1{x(x,y)C}C1C2C2{y(x,y)C}C1C2

Beweis (überarbeitet). Wir geben einen Algorithmus zu konstruieren . Definieren Sie der Einfachheit Sentinels so, dass für alle . Sei und ., x < x < x S C 1 : = C 1{ } C 2 : = C 2{ }C,<x<xSC1:=C1{}C2:=C2{}

  1. Initialisieren Sie und und . Eine Invariante ist, dass .x : = y : = x y y xC:=x:=y:=xyyx

  2. Sei das nächste Element von , . Sei das nächste Element von , .C 1 x ' : = inf { z z C ' 1x < z } y ' C 2 y ' : = inf { w w C ' 2y < w }xC1x:=inf{zzC1x<z}yC2y:=inf{wwC2y<w}

  3. Wenn , setze und gehe zu Schritt 9.xyyx(x,y):=(x,y)

  4. Wenn , setzen Sie und fahren Sie mit Schritt 9 fort.y<x<y(x,y):=(x,x)

  5. Wenn , setzen Sie und fahren Sie mit Schritt 9 fort. Beachten Sie, dass impliziert, dass .yx<yx:=xx<xxyxy

  6. Wenn , setzen Sie und fahren Sie mit Schritt 9 fort.x<y<x(x,y):=(y,y)

  7. Wenn , setzen Sie und fahren Sie mit Schritt 9 fort. Beachten Sie, dass impliziert, dass .xy<xy:=yy<yyxyx

  8. Dieser Schritt wird nie erreicht, da die Bedingungen für die Schritte 3 bis 7 vollständig sind.

  9. Wenn (äquivalent ), setzen Sie und fahren Sie mit Schritt 2 fort.xyC:=C{(x,y)}

Dynamisches Programm. Berechnen Sie für alle wobei wenn wahr ist, und wenn falsch ist. Aus Lemma 1 folgt, dass die Klammerausdrücke die Anzahl der neuen Elemente korrekt zählen. Mit Lemma 2 wird die optimale Lösung für das ursprüngliche Problem gefunden.(x,y)T

D[x,y]:=sup({D[z,w]+[xz]+[yw][x=y]|(z,w)T(z,w)<(x,y)}{2[x=y]}),
[condition]=1condition[condition]=0condition

Nett. Ich habe jedoch nicht jedes Detail überprüft. Willkommen bei cs.SE!
Raphael

0

Lassen Sie zur sortierten Liste von Punkten.P=p1pn


Nach Ihrer Wiederholung für einen Pfad müssen Sie zunächst feststellen, welche Punkte von den Pfaden besucht wurden. Andernfalls können Sie nicht richtig zählen. Die zweite Sache ist, dass Sie jetzt vier Möglichkeiten für jeden Punkt haben: Keiner der Pfade darf ihn verwenden, einer von ihnen oder beide. Wir müssen also für alle drei Fälle maximale Kombinationen finden.

Formal sei mit dem Paar von (Sätzen von) besuchten Knoten der beiden Pfade, die die Anzahl der besuchten Punkte von der Eingabe bis zur ten maximieren, wobei die erste Komponente das maximierende , für das die erste , die zweite Komponente für den zweiten Pfad ähnlich ist und die dritte Komponente mit beiden Pfade mit . ist durch die Wiederholung gegebend:[0n](2[n]×2[n])3d(i)ipipid

d(0)=((,),(,),(,))d(i)=( argmax(L,R)(L×R)i|LR|,=( argmax(L,R)(L×R)i|LR|,=( argmax(L,R)(L×R)i|LR| )

mit

(L×R)i={(L{i},R)(L,R)j=0i1d(j),ximaxjLxj,yimaxjLyj} ,

(L×R)i ähnlich mit erstrecken und ähnlich mit beiden erstreckenden und .R(L×R)iLR

Das ist natürlich nicht sehr schön. Dies liegt daran, dass sich das Problem nicht sehr gut für die dynamische Programmierung eignet: Sie können nicht viele Teillösungen kombinieren, da es keine schöne Gesamtreihenfolge für die Punkte gibt und Sie Zwischenergebnisse aus demselben Grund nicht verwerfen können.


Eine schönere Sicht auf das Problem besteht darin, die Menge der Punkte als gewichteten gerichteten azyklischen Graphen mit zu modellierenG=(V,E,w)

  • V={(0,0),p1,,pn,(X,Y)} mit , undX=maxxiY=maxyi
  • E={((x1,y1),(x2,y2))V2xixj,yiyj} und
  • w(v1,v2)={0,v2=(X,Y)1, else .

Beachten Sie, dass Sie das Diagramm kleiner halten können, wenn Sie redundante Kanten entfernen entfernen wenn ein Pfad vorhanden ist , da die Verwendung solcher "Verknüpfungen" niemals besser vorteilhaft ist.(v1,v2)(v1,,v2)

Für einen Pfad ist die Lösung eindeutig die Länge des längsten Pfades von bis . Wenn wir nun so ändern , dass alle Kanten, die zu Punkten auf auch das Gewicht und den längsten Pfad in diesem modifizierten Graphen berechnen, erhalten wir einen Pfad so dass und zusammen as abdecken viele Punkte wie zwei Pfade können. Dies lässt uns eine Laufzeit in (siehe hier ).P(0,0)(X,Y)wP0P+PP+O(|V|+|E|)O(n2)


Ich habe vielleicht falsch verstanden, was Sie geschrieben haben, aber bedeutet das für den gewichteten gerichteten azyklischen Graphen, dass wir einfach zuerst den längsten Pfad finden, dann alle Kanten im längsten Pfad löschen und den längsten Pfad im verbleibenden Graphen finden können?
Aden Dong

@AdenDong: Nein, nicht löschen; Der zweite Pfad darf Kanten wiederverwenden, die der erste Pfad genommen hat. Wir weisen ihnen das Gewicht damit ihre Zielknoten nicht erneut gezählt werden . Schließlich soll der zweite Pfad eine neue Route einschlagen, wenn er rentabel ist. 0
Raphael
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.