Masalahnya, disajikan kembali dan digeneralisasi: diberi himpunan terbatas dilengkapi dengan perintah parsial , temukan rantai memaksimalkan . Pertanyaannya adalah tentang kasus di mana dan .SS ≤≤C1,C2⊆SC1,C2⊆S|C1∪C2||C1∪C2|S⊆R2+S⊆R2+(x,y)≤(z,w)⟺x≤z∧y≤w(x,y)≤(z,w)⟺x≤z∧y≤w
Secara naif, orang mungkin mencoba menemukan rantai tunggal terbaik di , di mana yang terbaik diukur dengan berapa banyak nilai yang berbeda dari komponen-komponen rantai itu. Sayangnya, satu komponen dapat menelusuri kembali langkah-langkah yang lain, misalnya, sehingga gagasan terbaik ini tidak memiliki substruktur yang optimal.S2S2((0,0),(0,0))<((1,0),(0,0))<((2,0),(0,0))<((2,0),(1,0)),
((0,0),(0,0))<((1,0),(0,0))<((2,0),(0,0))<((2,0),(1,0)),
Sebagai gantinya, kami mencari rantai di himpunan . Dengan mensyaratkan bahwa komponennya sama atau tidak ada bandingannya, kita mencegah penelusuran ulang tetapi sekarang perlu berargumen bahwa beberapa rantai terbaik sesuai dengan persyaratan baru.T:={(x,y)∣(x,y)∈S2∧x≮y∧y≮x}T:={(x,y)∣(x,y)∈S2∧x≮y∧y≮x}
Lemma 1 (tanpa retacing). Biarkan menjadi sebuah rantai dan tentukan dan . Untuk semua , kita memiliki jika dan hanya jika .C⊆TC⊆TC1:={x∣(x,y)∈C}C1:={x∣(x,y)∈C}C2:={y∣(x,y)∈C}C2:={y∣(x,y)∈C}z∈Sz∈Sz∈C1∩C2z∈C1∩C2(z,z)∈C(z,z)∈C
Bukti. Arah jika sepele. Dalam hanya jika arah, untuk semua , terdapat sehingga . Karena adalah suatu rantai, . Asumsikan secara simetris bahwa , yang menyiratkan bahwa . Kita tahu dengan definisi yang , sehingga , dan .z∈C1∩C2z∈C1∩C2x,y∈Sx,y∈S(x,z),(z,y)∈C(x,z),(z,y)∈CCC(x,z)≤(z,y)∨(z,y)≤(x,z)(x,z)≤(z,y)∨(z,y)≤(x,z)(x,z)≤(z,y)(x,z)≤(z,y)x≤z≤yx≤z≤yTTx≮z∧z≮yx≮z∧z≮yx=z=yx=z=y(z,z)∈C(z,z)∈C
Lemma 2 (keberadaan rantai terbaik terbatas). Untuk semua rantai , terdapat rantai sehingga dan .C1,C2⊆SC1,C2⊆SC⊆TC⊆TC1⊆{x∣(x,y)∈C}⊆C1∪C2C1⊆{x∣(x,y)∈C}⊆C1∪C2C2⊆{y∣(x,y)∈C}⊆C1∪C2C2⊆{y∣(x,y)∈C}⊆C1∪C2
Bukti (direvisi). Kami memberikan algoritma untuk membangun . Untuk kenyamanan, mendefinisikan penjaga sehingga untuk semua . Biarkan dan .CC⊥,⊤⊥,⊤⊥<x<⊤⊥<x<⊤x∈Sx∈SC′1:=C1∪{⊤}C′1:=C1∪{⊤}C′2:=C2∪{⊤}C′2:=C2∪{⊤}
Inisialisasi dan dan . Yang invarian adalah bahwa .C:=∅C:=∅x:=⊥x:=⊥y:=⊥y:=⊥x≮y∧y≮xx≮y∧y≮x
Biarkan menjadi elemen selanjutnya dari , yaitu, . Mari menjadi elemen berikutnya dari , yaitu, .x′x′C1C1x′:=inf{z∣z∈C′1∧x<z}x′:=inf{z∣z∈C′1∧x<z}y′y′C2C2y′:=inf{w∣w∈C′2∧y<w}y′:=inf{w∣w∈C′2∧y<w}
Jika , set dan lanjutkan ke langkah 9.x′≮y′∧y′≮x′x′≮y′∧y′≮x′(x,y):=(x′,y′)(x,y):=(x′,y′)
Jika , atur dan lanjutkan ke langkah 9.y<x′<y′y<x′<y′(x,y):=(x′,x′)(x,y):=(x′,x′)
Jika , atur dan lanjutkan ke langkah 9. Perhatikan bahwa menyiratkan bahwa .y≮x′<y′y≮x′<y′x:=x′x:=x′x<x′∧x≮yx<x′∧x≮yx′≮yx′≮y
Jika , atur dan lanjutkan ke langkah 9.x<y′<x′x<y′<x′(x,y):=(y′,y′)(x,y):=(y′,y′)
Jika , atur dan lanjutkan ke langkah 9. Perhatikan bahwa menyiratkan bahwa .x≮y′<x′x≮y′<x′y:=y′y:=y′y<y′∧y≮xy<y′∧y≮xy′≮xy′≮x
Langkah ini tidak pernah tercapai, karena kondisi untuk langkah 3–7 lengkap.
Jika (ekuivalen, ), atur dan lanjutkan ke langkah 2.x≠⊤x≠⊤y≠⊤y≠⊤C:=C∪{(x,y)}C:=C∪{(x,y)}
Program Dinamis. Untuk semua , hitung
mana jika benar dan jika salah. Oleh Lemma 1, berarti ekspresi kurung menghitung dengan benar jumlah elemen baru. Oleh Lemma 2, solusi optimal untuk masalah asli ditemukan.(x,y)∈T(x,y)∈TD[x,y]:=sup({D[z,w]+[x≠z]+[y≠w]−[x=y]|(z,w)∈T∧(z,w)<(x,y)}∪{2−[x=y]}),
D[x,y]:=sup({D[z,w]+[x≠z]+[y≠w]−[x=y]∣∣(z,w)∈T∧(z,w)<(x,y)}∪{2−[x=y]}),
[condition]=1[condition]=1conditioncondition[condition]=0[condition]=0conditioncondition