Il problema, ribadito e generalizzato: dato un set finito dotato di un ordine parziale , trova catene massimizzano . La domanda riguarda il caso in cui e .S ≤C1,C2⊆S|C1∪C2|S⊆R2+(x,y)≤(z,w)⟺x≤z∧y≤w
Ingenuamente, si potrebbe provare a trovare la singola catena migliore in , dove la migliore è misurata da quanti valori distinti hanno i componenti della catena. Sfortunatamente, un componente può ripercorrere i passaggi dell'altro, ad esempio, quindi questa nozione di best non ha una sottostruttura ottimale.S2
((0,0),(0,0))<((1,0),(0,0))<((2,0),(0,0))<((2,0),(1,0)),
Invece, cerchiamo le catene nell'insieme . Richiedendo che i componenti siano uguali o incomparabili, evitiamo di rintracciarli, ma ora dobbiamo sostenere che alcune migliori catene sono conformi al nuovo requisito.T:={(x,y)∣(x,y)∈S2∧x≮y∧y≮x}
Lemma 1 (nessuna traccia). Lascia che sia una catena e definisci e . Per tutti , abbiamo se e solo se .C⊆TC1:={x∣(x,y)∈C}C2:={y∣(x,y)∈C}z∈Sz∈C1∩C2(z,z)∈C
Prova. La direzione if è banale. Nel solo se direzione, per tutti , esistono tale che . Poiché è una catena, . Supponiamo simmetricamente che , che implica che . Sappiamo dalla definizione di che , quindi , e .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
Lemma 2 (esistenza della migliore catena limitata). Per tutte le catene , esiste una catena tale che e .C1,C2⊆SC⊆TC1⊆{x∣(x,y)∈C}⊆C1∪C2C2⊆{y∣(x,y)∈C}⊆C1∪C2
Prova (rivista). Diamo un algoritmo per la costruzione di . Per comodità, definire sentinelle in modo tale che per tutti . Consenti a e .C⊥,⊤⊥<x<⊤x∈SC′1:=C1∪{⊤}C′2:=C2∪{⊤}
Inizializza e e . Un invariante è che .C:=∅x:=⊥y:=⊥x≮y∧y≮x
Sia l'elemento successivo di , ovvero . Sia l'elemento successivo di , ovvero .x′C1x′:=inf{z∣z∈C′1∧x<z}y′C2y′:=inf{w∣w∈C′2∧y<w}
Se , imposta e vai al passaggio 9.x′≮y′∧y′≮x′(x,y):=(x′,y′)
Se , imposta e vai al passaggio 9.y<x′<y′(x,y):=(x′,x′)
Se , imposta e vai al passaggio 9. Nota che implica che .y≮x′<y′x:=x′x<x′∧x≮yx′≮y
Se , imposta e vai al passaggio 9.x<y′<x′(x,y):=(y′,y′)
Se , imposta e vai al passaggio 9. Nota che implica che .x≮y′<x′y:=y′y<y′∧y≮xy′≮x
Questo passaggio non viene mai raggiunto, poiché le condizioni per i passaggi 3-7 sono esaustive.
Se (equivalentemente, ), imposta e vai al passaggio 2.x≠⊤y≠⊤C:=C∪{(x,y)}
Programma dinamico. Per tutti , calcola
dove se è vero e se è falso. Di Lemma 1, ne consegue che le espressioni parentesi contano correttamente il numero di nuovi elementi. Con Lemma 2, viene trovata la soluzione ottimale al problema originale.(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