O problema, reafirmado e generalizado: dado um conjunto finito SSequipado com uma ordem parcial ≤≤encontrar correntes C1,C2⊆SC1,C2⊆S maximizando |C1∪C2||C1∪C2|. A questão é sobre o caso em queS⊆R2+S⊆R2+ e (x,y)≤(z,W)⟺x≤z∧y≤W(x,y)≤(z,w)⟺x≤z∧y≤w.
Ingenuamente, pode-se tentar encontrar a melhor cadeia em S2S2, onde melhor é medido por quantos valores distintos os componentes da cadeia possuem. Infelizmente, um componente pode refazer as etapas do outro, por exemplo,((0 0,0 0),(0 0,0 0))<((1,0 0),(0 0,0 0))<((2,0 0),(0 0,0 0))<((2,0 0),(1,0 0)),
((0,0),(0,0))<((1,0),(0,0))<((2,0),(0,0))<((2,0),(1,0)),
então essa noção de melhor não tem uma subestrutura ideal.
Em vez disso, procuramos cadeias no conjunto T: ={(x,y)∣(x,y)∈S2∧x≮y∧y≮x}T:={(x,y)∣(x,y)∈S2∧x≮y∧y≮x}. Ao exigir que os componentes sejam iguais ou incomparáveis, evitamos retroceder, mas agora precisamos argumentar que alguma melhor cadeia está em conformidade com o novo requisito.
Lema 1 (sem refazer). DeixeiC⊆TC⊆T ser uma cadeia e definir C1: ={x∣(x,y)∈C}C1:={x∣(x,y)∈C} e C2: ={y∣(x,y)∈C}C2:={y∣(x,y)∈C}. Para todosz∈Sz∈S, temos z∈C1∩C2z∈C1∩C2 se e apenas se (z,z)∈C(z,z)∈C.
Prova. A direção if é trivial. Na única direção se, para todosz∈C1∩C2z∈C1∩C2existe x,y∈Sx,y∈S de tal modo que (x,z),(z,y)∈C(x,z),(z,y)∈C. Desde aCC é uma corrente (x,z)≤(z,y)∨(z,y)≤(x,z)(x,z)≤(z,y)∨(z,y)≤(x,z). Suponha simetricamente que(x,z)≤(z,y)(x,z)≤(z,y), o que implica que x≤z≤yx≤z≤y. Nós sabemos pela definição deTT aquele x≮z∧z≮yx≮z∧z≮y, tão x=z=yx=z=ye (z,z)∈C(z,z)∈C.
Lema 2 (existência de melhor cadeia restrita). Para todas as cadeiasC1,C2⊆SC1,C2⊆S, existe uma cadeia C⊆TC⊆T de tal modo que C1⊆{x∣(x,y)∈C}⊆C1∪C2C1⊆{x∣(x,y)∈C}⊆C1∪C2 e C2⊆{y∣(x,y)∈C}⊆C1∪C2C2⊆{y∣(x,y)∈C}⊆C1∪C2.
Prova (revisada). Damos um algoritmo para construirCC. Por conveniência, defina sentinelas⊥,⊤⊥,⊤ de tal modo que ⊥<x<⊤⊥<x<⊤ para todos x∈Sx∈S. DeixeiC′1: =C1∪{⊤}C′1:=C1∪{⊤} e C′2: =C2∪{⊤}C′2:=C2∪{⊤}.
Inicializar C: =∅C:=∅ e x: =⊥x:=⊥ e y: =⊥y:=⊥. Um invariante é quex≮y∧y≮xx≮y∧y≮x.
Deixei x′x′ be the next element of C1C1, that is, x′:=inf{z∣z∈C′1∧x<z}x′:=inf{z∣z∈C′1∧x<z}. Let y′y′ be the next element of C2C2, that is, y′:=inf{w∣w∈C′2∧y<w}y′:=inf{w∣w∈C′2∧y<w}.
If x′≮y′∧y′≮x′x′≮y′∧y′≮x′, set (x,y):=(x′,y′)(x,y):=(x′,y′) and go to step 9.
If y<x′<y′y<x′<y′, set (x,y):=(x′,x′)(x,y):=(x′,x′) and go to step 9.
If y≮x′<y′y≮x′<y′, set x:=x′x:=x′ and go to step 9. Note that x<x′∧x≮yx<x′∧x≮y implies that x′≮yx′≮y.
If x<y′<x′x<y′<x′, set (x,y):=(y′,y′)(x,y):=(y′,y′) and go to step 9.
If x≮y′<x′x≮y′<x′, set y:=y′y:=y′ and go to step 9. Note that y<y′∧y≮xy<y′∧y≮x implies that y′≮xy′≮x.
This step is never reached, as the conditions for steps 3–7 are exhaustive.
If x≠⊤x≠⊤ (equivalently, y≠⊤y≠⊤), set C:=C∪{(x,y)}C:=C∪{(x,y)} and go to step 2.
Dynamic Program. For all (x,y)∈T(x,y)∈T, compute D[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]}),
where
[condition]=1[condition]=1 if
conditioncondition is true and
[condition]=0[condition]=0 if
conditioncondition is false. By Lemma 1, it follows that the bracket expressions correctly count the number of new elements. By Lemma 2, the optimal solution to the original problem is found.