El problema, reformulado y generalizado: dado un conjunto finito equipado con un orden parcial , encuentre las cadenas maximizando . La pregunta es sobre el caso donde y .S ≤C1,C2⊆S|C1∪C2|S⊆R2+(x,y)≤(z,w)⟺x≤z∧y≤w
Ingenuamente, uno podría tratar de encontrar la mejor cadena individual en , donde la mejor se mide por cuántos valores distintos tienen los componentes de la cadena. Desafortunadamente, un componente puede volver sobre los pasos del otro, por ejemplo, por lo que esta noción de mejor no tiene una subestructura óptima.S2
((0,0),(0,0))<((1,0),(0,0))<((2,0),(0,0))<((2,0),(1,0)),
En cambio, buscamos cadenas en el conjunto . Al exigir que los componentes sean iguales o incomparables, evitamos el retroceso, pero ahora debemos argumentar que la mejor cadena se ajusta al nuevo requisito.T:={(x,y)∣(x,y)∈S2∧x≮y∧y≮x}
Lema 1 (sin retroceso). Deje que sea una cadena y defina y . Para todos , tenemos si y sólo si .C⊆TC1:={x∣(x,y)∈C}C2:={y∣(x,y)∈C}z∈Sz∈C1∩C2(z,z)∈C
Prueba. La dirección if es trivial. En el único caso de dirección, para todos , existen tal que . Como es una cadena, . Suponga simétricamente que , lo que implica que . Sabemos por la definición de que , por lo que , y .z∈C1∩C2x,y∈S(x,z),(z,y)∈CC(x,z)≤(z,y)∨(z,y)≤(x,z)(x,z)≤(z,y)x≤z≤yTx≮z∧z≮yx=z=y(z,z)∈C
Lema 2 (existencia de la mejor cadena restringida). Para todas las cadenas , existe una cadena tal que y .C1,C2⊆SC⊆TC1⊆{x∣(x,y)∈C}⊆C1∪C2C2⊆{y∣(x,y)∈C}⊆C1∪C2
Prueba (revisada). Damos un algoritmo para construir . Por conveniencia, definir centinelas de tal manera que para todos . Deje y .C⊥,⊤⊥<x<⊤x∈SC′1:=C1∪{⊤}C′2:=C2∪{⊤}
Inicialice y e . Una invariante es que .C:=∅x:=⊥y:=⊥x≮y∧y≮x
Dejemos que sea el siguiente elemento de , es decir, . Sea el siguiente elemento de , es decir, .x′C1x′:=inf{z∣z∈C′1∧x<z}y′C2y′:=inf{w∣w∈C′2∧y<w}
Si , establezca y vaya al paso 9.x′≮y′∧y′≮x′(x,y):=(x′,y′)
Si , establezca y vaya al paso 9.y<x′<y′(x,y):=(x′,x′)
Si , establezca y vaya al paso 9. Tenga en cuenta que implica que .y≮x′<y′x:=x′x<x′∧x≮yx′≮y
Si , establezca y vaya al paso 9.x<y′<x′(x,y):=(y′,y′)
Si , establezca y vaya al paso 9. Tenga en cuenta que implica que .x≮y′<x′y:=y′y<y′∧y≮xy′≮x
Este paso nunca se alcanza, ya que las condiciones para los pasos 3–7 son exhaustivas.
Si (equivalentemente, ), configure y vaya al paso 2.x≠⊤y≠⊤C:=C∪{(x,y)}
Programa Dinámico. Para todos , calcule
donde si es verdadero y si es falso. Por el Lema 1, se deduce que las expresiones de paréntesis cuentan correctamente el número de elementos nuevos. En Lemma 2, se encuentra la solución óptima para el problema original.(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