Le problème, reformulé et généralisé: étant donné un ensemble fini équipé d'un ordre partiel , trouver les chaînes maximisant . La question concerne le cas où et .S ≤C1,C2⊆S|C1∪C2|S⊆R2+(x,y)≤(z,w)⟺x≤z∧y≤w
Naïvement, on pourrait essayer de trouver la meilleure chaîne unique dans , où la meilleure est mesurée par le nombre de valeurs distinctes des composants de la chaîne. Malheureusement, un composant peut retracer les étapes de l'autre, par exemple, donc cette notion de meilleur n'a pas de sous-structure optimale.S2
((0,0),(0,0))<((1,0),(0,0))<((2,0),(0,0))<((2,0),(1,0)),
Au lieu de cela, nous recherchons des chaînes dans l'ensemble . En exigeant que les composants soient égaux ou incomparables, nous empêchons le retracement mais devons maintenant affirmer que la meilleure chaîne est conforme à la nouvelle exigence.T:={(x,y)∣(x,y)∈S2∧x≮y∧y≮x}
Lemme 1 (pas de retracement). Soit une chaîne et définissez et . Pour tout , nous avons si et seulement si .C⊆TC1:={x∣(x,y)∈C}C2:={y∣(x,y)∈C}z∈Sz∈C1∩C2(z,z)∈C
Preuve. La direction if est triviale. Dans la direction seulement si, pour tout , il existe de telle sorte que . Puisque est une chaîne, . Supposons symétriquement que , ce qui implique que . On sait par la définition de que , de sorte , et .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
Lemme 2 (existence de la meilleure chaîne restreinte). Pour toutes les chaînes , il existe une chaîne telle que and .C1,C2⊆SC⊆TC1⊆{x∣(x,y)∈C}⊆C1∪C2C2⊆{y∣(x,y)∈C}⊆C1∪C2
Preuve (révisée). Nous donnons un algorithme pour construire . Pour plus de commodité, définir factionnaires tel que pour tous . Soit et .C⊥,⊤⊥<x<⊤x∈SC′1:=C1∪{⊤}C′2:=C2∪{⊤}
Initialisez et et . Un invariant est que .C:=∅x:=⊥y:=⊥x≮y∧y≮x
Soit le prochain élément de , c'est-à-dire . Soit l'élément suivant de , c'est-à-dire .x′C1x′:=inf{z∣z∈C′1∧x<z}y′C2y′:=inf{w∣w∈C′2∧y<w}
Si , définissez et passez à l'étape 9.x′≮y′∧y′≮x′(x,y):=(x′,y′)
Si , définissez et passez à l'étape 9.y<x′<y′(x,y):=(x′,x′)
Si , définissez et passez à l'étape 9. Notez que implique que .y≮x′<y′x:=x′x<x′∧x≮yx′≮y
Si , définissez et passez à l'étape 9.x<y′<x′(x,y):=(y′,y′)
Si , définissez et passez à l'étape 9. Notez que implique que .x≮y′<x′y:=y′y<y′∧y≮xy′≮x
Cette étape n'est jamais atteinte, car les conditions des étapes 3 à 7 sont exhaustives.
Si (de manière équivalente, ), définissez et passez à l'étape 2.x≠⊤y≠⊤C:=C∪{(x,y)}
Programme dynamique. Pour tout , calculez
où si est vrai et si est faux. Par le lemme 1, il s'ensuit que les expressions entre crochets comptent correctement le nombre de nouveaux éléments. Par le lemme 2, la solution optimale au problème d'origine est trouvée.(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