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 2 ⊆ S | C 1 ∪ C 2 | S ⊆ R 2 + ( x , y ) ≤ ( z , w ) ⟺ x ≤ z ∧ y ≤ w≤C1,C2⊆S|C1∪C2|S⊆R2+(x,y)≤(z,w)⟺x≤z∧y≤w
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)∈S2∧x≮y∧y≮x}
Lemma 1 (keine Rückverfolgung). Sei eine Kette und definiere und . Für alle , haben wir , wenn und nur wenn .C 1 : = { x ∣ ( x , yC⊆TC 2 : = { y ∣ ( x , y ) ∈ C } z ∈ S z ∈ C 1 ∩ C 2 ( z , z ) ∈ C.C1:={x∣(x,y)∈C}C2:={y∣(x,y)∈C}z∈Sz∈C1∩C2(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 ) , ( zz∈C1∩C2x,y∈SC ( 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 ) ∈ Cx≤z≤yTx≮z∧z≮yx=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 1 ∪ C 2 C 2 ⊆ { y ∣ ( x , y ) ∈ C } ⊆ C 1 ∪ C 2C1,C2⊆SC⊆TC1⊆{x∣(x,y)∈C}⊆C1∪C2C2⊆{y∣(x,y)∈C}⊆C1∪C2
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<⊤x∈SC′1:=C1∪{⊤}C′2:=C2∪{⊤}
Initialisieren Sie und und . Eine Invariante ist, dass .x : = ⊥ y : = ⊥ x ≮ y ∧ y ≮ xC:=∅x:=⊥y:=⊥x≮y∧y≮x
Sei das nächste Element von , . Sei das nächste Element von , .C 1 x ' : = inf { z ≤ z ≤ C ' 1 ≤ x < z } y ' C 2 y ' : = inf { w ≤ w ≤ C ' 2 ≤ y < w }x′C1x′:=inf{z∣z∈C′1∧x<z}y′C2y′:=inf{w∣w∈C′2∧y<w}
Wenn , setze und gehe zu Schritt 9.x′≮y′∧y′≮x′(x,y):=(x′,y′)
Wenn , setzen Sie und fahren Sie mit Schritt 9 fort.y<x′<y′(x,y):=(x′,x′)
Wenn , setzen Sie und fahren Sie mit Schritt 9 fort. Beachten Sie, dass impliziert, dass .y≮x′<y′x:=x′x<x′∧x≮yx′≮y
Wenn , setzen Sie und fahren Sie mit Schritt 9 fort.x<y′<x′(x,y):=(y′,y′)
Wenn , setzen Sie und fahren Sie mit Schritt 9 fort. Beachten Sie, dass impliziert, dass .x≮y′<x′y:=y′y<y′∧y≮xy′≮x
Dieser Schritt wird nie erreicht, da die Bedingungen für die Schritte 3 bis 7 vollständig sind.
Wenn (äquivalent ), setzen Sie und fahren Sie mit Schritt 2 fort.x≠⊤y≠⊤C:=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]+[x≠z]+[y≠w]−[x=y]∣∣(z,w)∈T∧(z,w)<(x,y)}∪{2−[x=y]}),
[condition]=1condition[condition]=0condition